删除ANTLR生成的java类中的(绝对)路径:
我正在使用ANTLRWorks 1.4.3和ANTLR 3.4从语法文件生成一个基于Java的解析器和词法分析器。生成的.java
-文件包含如下字符串
C:\\Users\\[path to the eclipse project]\\src\\some\\package\\name\\MyGrammar.g
此绝对路径用作
- 返回字符串,例如在lexer和parser的方法
getGrammarFileName()
中,以及 - 在整个过程中,这两个文件多次作为注释李>
我看到以下缺点:
- 如果在开发环境中具有不同路径的其他人将重新生成这些文件,那么即使没有对语法文件进行任何更改,也会引入大量更改李>
- 没有人,特别是在开源项目中,需要知道我到底把语法文件存储在哪里。例如,那
C:\\Users\\simon\\customerA\\crap_software\\[rest of the path to grammar file]
呢
在ANTLRWorks或ANTLR s.th中是否有控制这种情况的方法。至少只使用相对路径
# 1 楼答案
最后我找到了解决自己问题的方法
路径似乎取决于调用ANTLR的位置和方式。我无法用AntlWorks实现这一点,但使用命令行ANTLR可以执行这一点。您可以执行以下操作(示例适用于Windows,但也应可在其他操作系统上复制):
DownloadAntlr用于命令行,并将其复制到
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文件将只包含语法文件的名称,不再包含路径
# 2 楼答案
简短回答
没有
长(呃)回答(包含高度主观的观点!自行承担风险)
这是特定于目标的,但是,恕我直言,没有目标允许您指定路径的类型(绝对或相对)
“否”可能是因为
getGrammarFileName()
仅在调试生成的词法分析器/解析器时使用。人们可能应该而不是将生成的源文件签入到源代码管理中,这样就不会有人看到您在生成的源文件中看到的路径。我们应该检查语法,让开发人员从中生成自己的词法分析器再说一遍,这都是我的猜测