0

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

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

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

4

2 回答 2

1

您期望控制台上出现什么?

看看这个项目。ANTLRWorks 生成的解析器在这里。从POM中的依赖项可以看出,您需要确保 antlr 在类路径中。然后使用该类中所示的解析器。

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

这应该足以让你的东西也能正常工作。

于 2008-12-02T22:03:21.457 回答
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

于 2010-04-30T21:58:24.427 回答