我正在使用 ANTLRWorks 创建 ANTLR 语法。我有一个有效的语法,并且也生成了解析器和词法分析器源文件。我还尝试调试生成的代码,并且输出与调试器输出中的预期一致。
但是当我尝试调用调试器生成的 __Test__ 类时,控制台中没有任何内容。我已经正确设置了类路径,因为我可以使用相同的类路径成功编译 __Test__.java。
会有什么问题?是否有使用 antlr 和 antlrworks 编写和编译示例解析器的清晰教程?
我正在使用 ANTLRWorks 创建 ANTLR 语法。我有一个有效的语法,并且也生成了解析器和词法分析器源文件。我还尝试调试生成的代码,并且输出与调试器输出中的预期一致。
但是当我尝试调用调试器生成的 __Test__ 类时,控制台中没有任何内容。我已经正确设置了类路径,因为我可以使用相同的类路径成功编译 __Test__.java。
会有什么问题?是否有使用 antlr 和 antlrworks 编写和编译示例解析器的清晰教程?
您期望控制台上出现什么?
看看这个项目。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();
这应该足以让你的东西也能正常工作。
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