我使用ANTLRWorks 1.4.3连同ANTLR 3.4生成语法文件的基于Java的解析器和词法分析器。 所生成.java
-files包含像串
C:\\Users\\[path to the eclipse project]\\src\\some\\package\\name\\MyGrammar.g
这绝对路径作为
- 返回字符串例如在方法
getGrammarFileName()
词法分析器和分析器,并 - 在整个这两个文件不同时间的注释。
我看到以下缺点:
- 如果别人在他的开发环境不同的路径将重新生成这些文件,一个很大的变化会即使在语法文件中没有变化做了介绍。
- 没有人,尤其是一个开源项目,需要知道我究竟存放我的语法文件。 比如,怎么样
C:\\Users\\simon\\customerA\\crap_software\\[rest of the path to grammar file]
有没有办法在ANTLRWorks或ANTLR某事物来控制这 至少仅相对路径使用?
最后,我找到了一种方法来解决我自己的问题。
路径似乎从你调用ANTLR在哪里以及如何依赖。 我无法用ANTLRWorks实现这一点,但使用命令行ANTLR您能够执行此操作。 你可以做以下(例如适用于Windows,但应该对其他操作系统可重复的,太):
下载 ANTLR的命令行并将其复制到如
C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar
。
打开Windows命令行( cmd.exe
),并切换到你的语法文件所在的目录:
cd C:\Users[path to the eclipse project]\src\some\package\name
调用
java -jar "C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar" MyGrammar.g
从命令行。
生成的Java文件将只包含你的语法文件,没有路径的名字了。
有没有办法在ANTLRWorks或ANTLR某事物来控制这 至少仅相对路径使用?
简答
没有。
龙(ER)的答案(含非常主观的看法!继续在自己的风险)
这就是目标具体,但是,据我所知,没有目标,您可以指定类型的路径(绝对或相对)。
“否”可能是因为getGrammarFileName()
只在调试时产生的词法分析器/解析器使用。 和一个可能不应该在生成的源文件到源代码控制检查,所以没有人会看到你在生成的源文件中看到的路径。 一个人应该在语法检查,并让开发者从它生成自己的词法分析器/解析器。
再次,这是对我而言都是猜测。