我正在使用 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\\[语法文件路径的其余部分]
有没有办法在 ANTLRWorks 或 ANTLR s.th 中控制它?至少只使用相对路径?
最佳答案
最后我找到了解决我自己问题的方法。
路径似乎取决于调用 ANTLR 的位置和方式。我无法使用 ANTLRWorks 实现此目的,但使用命令行 ANTLR 可以执行此操作。您可以执行以下操作(示例适用于 Windows,但也应该可以在其他操作系统上重现):
Download用于命令行的 Antlr 并将其复制到例如
C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar
。打开 Windows 命令行 (
cmd.exe
) 并切换到语法文件所在的目录:cd C:\Users[eclipse 项目路径]\src\some\package\name
调用
java -jar "C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar" MyGrammar.g
从命令行。
生成的 java 文件将只包含语法文件的名称,不再包含路径。
关于java - 删除 ANTLR 生成的 java 类中的(绝对)路径 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12385765/