我刚开始使用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.任何想法一样运行?请考虑我的初学者身份。
答案 0 :(得分:3)
在ANTLR 4中,使用ANTLRInputStream
代替ANTLR 3中的旧ANTLRStringStream
。
如果在名为eval()
的语法中有解析器规则,则存在eval
方法。为语法中的每个规则创建一个这样的方法。如果您不打算在规则eval
开始解析,那么您应该将该调用替换为特定语法的起始规则的名称。