【问题标题】:Compiling ANTLRWorks generated class files编译 ANTLRWorks 生成的类文件
【发布时间】:2008-11-21 13:55:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: java parsing antlr grammar antlrworks


    【解决方案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();
    

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-27
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        相关资源
        最近更新 更多