Java 无法识别ANTLR toStringTree()

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

我正在使用antlr编写语法,我有一个主函数来测试语法所接受的程序。主要功能是:

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返回相同的对象。啊,酷。我选择了你作为正确的答案。谢谢