antlr 4.2使用Parser的难度

时间:2014-08-19 20:45:31

标签: antlr antlr4

我刚开始使用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 lexer = new JavaLexer(in);需要: CharStream发现:ANTLRStringStream原因:实际参数 ANTLRStringStream无法通过方法转换为CharStream 调用转换(我知道这个错误是什么; - )

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

要简短,让我们说每一行都有自己类似的错误。例如,"解析器"没有" eval()"方法

我错过了什么?我猜antlr4不会像3.任何想法一样运行?请考虑我的初学者身份。

1 个答案:

答案 0 :(得分:3)

在ANTLR 4中,使用ANTLRInputStream代替ANTLR 3中的旧ANTLRStringStream

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