ANTLR toStringTree()无法识别

时间:2012-02-16 18:03:22

标签: 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 {
        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);
    }
}

我的问题是它没有识别toStringTree()命令,我想知道是否有人能看出原因?

我发现了这个: http://www.antlr.org/api/Java/interfaceorg_1_1antlr_1_1runtime_1_1tree_1_1_tree.html

声称该功能包含在BaseTree中。

我还编辑了我的代码以使用org.antlr.runtime导入所有antlr文件。*但这仍然无法修复此问题。我只是不明白为什么它无法识别它。

1 个答案:

答案 0 :(得分:4)

首先添加导入:

import org.antlr.runtime.tree.CommonTree;

然后试试这个:

CommonTree tree = (CommonTree)parser.program().getTree();
System.out.println(tree.toStringTree());

请注意,只有在解析器语法中包含以下选项时,这才有效:

options {
  output=AST;
}