1

我正在使用 Netbeans 7.1.1 和带有 ANTLR Maven 插件的 Maven 项目来生成 Lexer+Parser Java 类 - 这很有效。

我正在努力解决的问题:

如何在同一个项目中构建测试平台,以便在开发时找到 Lexer 和 Parser 类?

是否有一种 Maven 方式来指定:首先构建“生成的源代码”(即 Antlr 生成的)然后是我的“手动”源代码?

我应该建立一个依赖于第一个项目的辅助 Maven 项目吗?

是否存在用于构建 ANTLR 测试平台类的“通用”(动态?)机制,而 Parser/Lexer 类中并不存在?('ClassForName' JDBC 风格的机制?)

澄清问题;这是我的 Test Rig 类的一个片段,它是不可编译的(由于 Lexer / Parsers 尚未构建......):

...
    myLexer lexer = new myLexer(input);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    myParser parser = new myParser(tokens);
    parser.file();
...

好的 - 在下面的建议和仔细检查生成的 java 之后 - 事实上我没有注意到我的语法文件(虽然布局在 java 包结构中)不包含 @header 指令来指定生成的目标 java 项目住的班级。

这就是我的测试(或者实际上是我的主程序)无法看到 Lexer/Parser 类的原因。(我只是试图访问与我想象的不同包结构的java类)。

另一个 StackOverFlow 案例对我来说是最后的决定:

如何为 ANTLR 指定目标包?

4

1 回答 1

2

最重要的是像这样正确配置 antlr3-maven-plugin:

  <plugin>
    <groupId>org.antlr</groupId>
    <artifactId>antlr3-maven-plugin</artifactId>
    <version>3.4</version>
    <executions>
      <execution>
        <goals>
          <goal>antlr</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

此外,将语法放入正确的位置src/main/antlr3加上包名。通过使用它,语法将从它生成 java 代码,并且还将确保编译源代码。我在一个小项目中使用了我自己的 ANTLR,你可以看看这个例子。您还可以看到使用生成的 parser 的单元测试示例

于 2012-12-27T17:05:54.503 回答