我刚开始使用鹿角,我使用4.2。很容易猜出它的基本结构类似于antlr3。所以我遵循了这个问题的公认答案。(但不是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());
为简洁起见,假设每一行都有类似的错误。例如,"parser"没有"eval()"方法。
我错过了什么?我猜antlr4跑起来不像3。什么好主意吗?
在ANTLR 4中,使用ANTLRInputStream
代替ANTLR 3中的旧ANTLRStringStream
。
当语法中有一个名为eval
的解析器规则时,存在eval()
方法。为语法中的每个规则创建一个这样的方法。如果您不打算在规则eval
处开始解析,那么您应该用特定语法的开始规则的名称替换该调用。