ANTLR:'动态'测试钻机成语?

时间:2012-12-27 16:09:37

标签: maven antlr

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

我正在努力解决的问题:

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

是否有Maven方式指定:首先构建'生成源'的东西(即Antlr生成)那么我的'手动'来源?

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

是否有一个'通用'(动态?)机制来构建一个实际上不存在Parser / Lexer类的ANTLR测试装备类? ('ClassForName'JDBC样式机制?)

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

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

好的 - 在下面的建议之后并仔细检查生成的java - 实际上我没有注意到我的Grammar文件(虽然在java包结构中布局)没有包含@header指令来指定目标java项目生成的类生存。

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

另一个StackOverFlow案例对我来说是最后的关键:

How to specify a target package for ANTLR?

1 个答案:

答案 0 :(得分: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 my own in a small project you might take a look as an example。您还可以看到example of a unit test which uses the generated parser