我正在尝试使用Antlr 4.0版解析逻辑表达式并生成树来评估表达式。
我运行antlr工具并生成了解析器和词法分析器,但是当我将生成的文件放在项目中时,出现以下错误:“未定义构造函数LogicLexer(ANTLRStringStream)”和“未定义构造函数CommonTokenStream(LogicLexer)”。
代码如下:
LogicLexer lexer = new LogicLexer(new ANTLRStringStream(expression));
LogicParser parser = new LogicParser(new CommonTokenStream(lexer));
CommonTree tree = (CommonTree)parser.parse().getTree();
最佳答案
看来您正在使用v3语法和v4工具来生成lexer和parser类。 ANTLR 4不像v3那样支持树重写运算符。
API也已更改(ANTLRStringStream
不再存在),因此它应如下所示:
LogicLexer lexer = new LogicLexer(new ANTLRInputStream(expression));
LogicParser parser = new LogicParser(new CommonTokenStream(lexer));
ParseTree tree = parser.parse();
有关如何遍历生成的解析树的完整演示,请参见:ANTLR 4 tree inject/rewrite operator
关于java - 在Eclipse中未定义构造函数Logic Lexer(ANTLR StringStream),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15257856/