Java 无法识别ANTLR toStringTree()
我正在使用antlr编写语法,我有一个主函数来测试语法所接受的程序。主要功能是:Java 无法识别ANTLR toStringTree(),java,antlr,Java,Antlr,我正在使用antlr编写语法,我有一个主函数来测试语法所接受的程序。主要功能是: package compiler; import org.antlr.runtime.ANTLRInputStream; import org.antlr.runtime.CommonTokenStream; public class runner { public static void main(String[] args) throws Exception { ANTLRInputS
package compiler;
import org.antlr.runtime.ANTLRInputStream;
import org.antlr.runtime.CommonTokenStream;
public class runner {
public static void main(String[] args) throws Exception {
ANTLRInputStream input = new ANTLRInputStream(System.in);
SmallCLexer lexer = new SmallCLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
SmallCParser parser = new SmallCParser(tokens);
SmallCParser.program_return result = parser.program();
String tree = result.tree.toStringTree();
System.out.println(tree);
}
}
我的问题是它无法识别toString树命令,我想知道是否有人能理解为什么
我发现:
它声明函数包含在BaseTree中
我还编辑了代码,用org.antlr.runtime.*导入了所有的antlr文件,但这仍然不能解决这个问题。我只是不明白为什么它不能识别它。首先添加导入:
import org.antlr.runtime.tree.CommonTree;
然后试试这个:
CommonTree tree = (CommonTree)parser.program().getTree();
System.out.println(tree.toStringTree());
请注意,只有在解析器语法中具有以下选项时,这才有效:
options {
output=AST;
}
首先添加导入:
import org.antlr.runtime.tree.CommonTree;
然后试试这个:
CommonTree tree = (CommonTree)parser.program().getTree();
System.out.println(tree.toStringTree());
请注意,只有在解析器语法中具有以下选项时,这才有效:
options {
output=AST;
}
为什么在main方法中出现抛出异常?老实说,这是从我用来学习如何编写这个的一些示例代码中获得的,我不确定为什么会出现抛出异常,但我没有看到将其保留在其中有什么害处。我刚试过不用它,但它并没有改变它您试图解析的信息在哪里?现在,它只是我在控制台中键入的任何内容,虽然我也尝试通过键入预定义字符串来完成,但问题是它甚至没有达到这一点,它只是因为某些原因没有导入函数。为什么在主方法中出现抛出异常?老实说,这是从我用来学习如何编写此函数的一些示例代码中获得的,我不确定为什么会出现此函数,但我没有看到将其保留在主方法中有任何危害。我刚试过不用它,但它并没有改变它你试图解析的信息在哪里?现在我只是在控制台中键入任何内容,虽然我也尝试通过键入预定义字符串来完成,但问题是它甚至没有达到这个目的,只是出于某种原因没有导入函数。嘿,实际上我只是设法让它工作。我更改的代码是:stringtree=Treeresult.tree.toStringTree;System.out.printlntree;我不确定你的方法是否更好,你知道为什么我的方法有效吗?@Incredidave,几乎是一样的:一棵普通的树延伸一棵树。和.tree和.getTree返回相同的对象。啊,酷。我选择了你作为正确的答案。谢谢嘿,实际上我刚刚设法让它工作起来。我更改的代码是:stringtree=Treeresult.tree.toStringTree;System.out.printlntree;我不确定你的方法是否更好,你知道为什么我的方法有效吗?@Incredidave,几乎是一样的:一棵普通的树延伸一棵树。和.tree和.getTree返回相同的对象。啊,酷。我选择了你作为正确的答案。谢谢