Java Antlr构造函数LogicLexer(AntlStringStream)在eclispe中未定义

Java Antlr构造函数LogicLexer(AntlStringStream)在eclispe中未定义,java,antlr,Java,Antlr,我正在尝试使用Antlr版本4.0解析一个逻辑表达式,并生成树来计算表达式 我运行了antlr工具并生成了解析器和lexer,但是当我将生成的文件放入项目中时,我得到了以下错误:“构造函数LogicLexer(AntlStringStream)未定义”和“构造函数CommonTokenStream(LogicLexer)未定义” 代码如下: LogicLexer lexer = new LogicLexer(new ANTLRStringStream(expression)); LogicPar

我正在尝试使用Antlr版本4.0解析一个逻辑表达式,并生成树来计算表达式

我运行了antlr工具并生成了解析器和lexer,但是当我将生成的文件放入项目中时,我得到了以下错误:“构造函数LogicLexer(AntlStringStream)未定义”和“构造函数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类。Antlr4不支持树重写操作符,就像v3一样

API也发生了变化(
ANTLRStringStream
不再存在),因此它应该如下所示:

LogicLexer lexer = new LogicLexer(new ANTLRInputStream(expression));
LogicParser parser = new LogicParser(new CommonTokenStream(lexer));
ParseTree tree = parser.parse();

有关如何遍历生成的解析树的完整演示,请参见:

看起来您正在使用v3语法和v4工具来生成lexer和parser类。Antlr4不支持树重写操作符,就像v3一样

API也发生了变化(
ANTLRStringStream
不再存在),因此它应该如下所示:

LogicLexer lexer = new LogicLexer(new ANTLRInputStream(expression));
LogicParser parser = new LogicParser(new CommonTokenStream(lexer));
ParseTree tree = parser.parse();

有关如何遍历生成的解析树的完整演示,请参阅:

我猜antl JAR不在您的类路径上。我没有使用过这个版本的Antlr,但根据新的api参考,这些类都不是Antlr 4的一部分。您所引用的代码应该适用于Antlr 3。也许您的工具是为不同版本的Antlr设计的。文档应该会告诉你。我猜antl JAR不在你的类路径上。我没有使用这个版本的Antlr,但根据新的api参考,这些类都不是Antlr 4的一部分。您所引用的代码应该适用于Antlr 3。也许您的工具是为不同版本的Antlr设计的。医生应该告诉我们。