有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

删除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中是否有控制这种情况的方法。至少只使用相对路径


共 (2) 个答案

  1. # 1 楼答案

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

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

    1. DownloadAntlr用于命令行,并将其复制到

      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文件将只包含语法文件的名称,不再包含路径

  2. # 2 楼答案

    Is there a way to control this in ANTLRWorks or ANTLR s.th. at least only relative paths are used?

    简短回答

    没有

    长(呃)回答(包含高度主观的观点!自行承担风险)

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

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

    再说一遍,这都是我的猜测