删除ANTLR生成的java类中的(绝对)路径:

时间:2012-09-12 10:05:58

标签: java antlr antlrworks

我正在使用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中控制它。至少只使用相对路径?

2 个答案:

答案 0 :(得分:2)

最后,我找到了解决自己问题的方法。

路径似乎取决于您调用ANTLR的位置和方式。我无法通过ANTLRWorks实现这一目标,但使用命令行ANTLR可以执行此操作。您可以执行以下操作(示例适用于Windows,但也应在其他操作系统上可重现):

  1. Download Antlr用于命令行并将其复制到例如。

    C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar

  2. 打开Windows命令行(cmd.exe)并切换到语法文件所在的目录:

    cd C:\Users[path to the eclipse project]\src\some\package\name

  3. 调用

    java -jar "C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar" MyGrammar.g
    

    来自命令行。

  4. 生成的java文件只包含语法文件的名称,不再包含路径。

答案 1 :(得分:0)

  

有没有办法在ANTLRWorks或ANTLR中控制它。至少只使用相对路径?

简短回答

没有

长(呃)回答(含有高度主观意见!自担风险)

这是特定于目标的,但是,AFAIK,没有目标允许您指定路径的类型(绝对或相对)。

“no”可能是因为getGrammarFileName()仅在调试生成的词法分析器/解析器时使用。并且应该将生成的源文件签入源代码控制中,因此没有人会看到您在生成的源文件中看到的路径。一个人应该检查语法,让开发人员从中生成自己的词法分析器/解析器。

同样,这是我的所有猜测。