编译ANTLRWorks生成的类文件

时间:2008-11-21 13:55:36

标签: java parsing antlr grammar antlrworks

我正在使用ANTLRWorks创建ANTLR语法。我有一个有效的语法,也生成了解析器和词法分析器源文件。我也尝试调试生成的代码,输出在调试器输出中是预期的。

但是当我尝试调用调试器生成的__Test__类时,控制台中没有任何内容。我已经正确设置了类路径,因为我可以使用相同的类路径成功编译__Test__.java。

会出现什么问题?是否有使用antlr和antlrworks编写和编译示例解析器的明确教程?

2 个答案:

答案 0 :(得分:1)

您对控制台的期望是什么?

看看this project。 ANTLRWorks生成的解析器是here。正如您在POM中的依赖关系中所看到的,您需要确保antlr在类路径中。然后使用this class中显示的解析器。

final DriftLexer lexer = new DriftLexer(new ANTLRInputStream(inputStream));
final CommonTokenStream tokens = new CommonTokenStream(lexer);        
final DriftParser parser = new DriftParser(tokens);
parser.file();

这应该足以使你的东西也能运作。

答案 1 :(得分:1)

ANTLRWorks生成的测试类可以创建回到ANTLRWorks的套接字连接,因此无法从控制台使用它们。您可以编辑生成的测试类以不使用调试端口(套接字连接)选项。

要编辑的行是:

FormalSpecParser g = new FormalSpecParser(tokens, 49100, null);

您可以将其更改为:

FormalSpecParser g = new FormalSpecParser(tokens, null);

使用调试侦听器对象而不是端口,“null”表示您没有给它调试侦听器,因此忽略调试输出。您可以编写自己的调试侦听器以将消息打印到控制台。

有关详细信息,请参阅ANTLR文档:http://www.antlr.org/api/Java/namespaces.html