我正在使用带有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案例对我来说是最后的关键:
答案 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。