我正在使用ANTLRWorks 1.4.3和ANTLR 3.4从语法文件生成基于Java的解析器和词法分析器。生成的.java
- 文件包含类似
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中控制它。至少只使用相对路径?
答案 0 :(得分:2)
最后,我找到了解决自己问题的方法。
路径似乎取决于您调用ANTLR的位置和方式。我无法通过ANTLRWorks实现这一目标,但使用命令行ANTLR可以执行此操作。您可以执行以下操作(示例适用于Windows,但也应在其他操作系统上可重现):
Download 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文件只包含语法文件的名称,不再包含路径。
答案 1 :(得分:0)
有没有办法在ANTLRWorks或ANTLR中控制它。至少只使用相对路径?
没有
这是特定于目标的,但是,AFAIK,没有目标允许您指定路径的类型(绝对或相对)。
“no”可能是因为getGrammarFileName()
仅在调试生成的词法分析器/解析器时使用。并且应该不将生成的源文件签入源代码控制中,因此没有人会看到您在生成的源文件中看到的路径。一个人应该检查语法,让开发人员从中生成自己的词法分析器/解析器。
同样,这是我的所有猜测。