【问题标题】:antlr 4.2 difficulty using Parserantlr 4.2 使用 Parser 的难度
【发布时间】:2014-08-19 20:45:31
【问题描述】:

我刚开始使用 antlr,我使用的是 4.2。简单的猜测说它在基础上会像 antlr3。所以我遵循this问题的公认答案。 (但不是Exp,我换成了Java,意思是我要解析Java)一切都很好,直到我想编译ANTLRDemo.java的例子。

当我编译它时,我得到 4 个错误:

    ANTLRStringStream in = new ANTLRStringStream("some random text");
    JavaLexer lexer = new JavaLexer(in);
  • 第一个错误:类 JavaLexer 中的构造函数 JavaLexer 无法应用于 给定类型; JavaLexer 词法分析器 = 新的 JavaLexer(in);必需的: CharStream 发现:ANTLRStringStream 原因:实际参数 ANTLRStringStream 无法通过方法转换为 CharStream 调用转换(我知道这个错误是什么;-)

    CommonTokenStream tokens = new CommonTokenStream( lexer);
    JavaParser parser = new JavaParser(tokens);
    System.out.println(parser.eval());
    

简而言之,假设每一行都有自己类似的错误。例如,“parser”没有“eval()”方法。

我错过了什么?我猜 antlr4 不像 3 那样运行。有什么想法吗?请考虑我的初学者状态。

【问题讨论】:

    标签: antlr antlr4


    【解决方案1】:

    在 ANTLR 4 中,使用 ANTLRInputStream 而不是 ANTLR 3 中的旧 ANTLRStringStream

    eval() 方法存在于语法中名为 eval 的解析器规则中。为语法中的每个规则创建一个这样的方法。如果您不打算从规则 eval 开始解析,则应将该调用替换为特定语法的开始规则的名称。

    【讨论】:

    • 感谢 eval() 问题已解决。但是“lexer”构造函数仍然需要 CharStream,而我没有。同样的情况:'tokens' 构造函数需要 TokenSource,而 JavaParser 构造函数将 TokenStream 作为参数。
    • 我在导入org.antlr.runtime.*时出错了,我的IDE使用了它。所以它解决了:)再次感谢。
    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多