3

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

4

2 回答 2

2

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

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

  1. 为命令行下载Antlr 并将其复制到 eg

    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
    

    从命令行。

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

于 2012-09-12T12:33:26.083 回答
0

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

简短的回答

不。

长(呃)答案(包含高度主观的观点!风险自负)

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

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

同样,这都是我的猜测。

于 2012-09-12T11:31:45.843 回答