使用 Java 在 ANTLR4 中绘制解析树

Drawing parse tree in ANTLR4 using Java

我是 ANTLR4 的新手,当我第一次在命令行中尝试它时,我使用的是 grungui 参数。现在我正在开发一个 Java 应用程序,我想在执行我的 Java 程序时显示相同的对话框。

我成功生成了 ParseTree,并且可以在其中导航。但我也想展示它。我认为它与 TreeViewer class 有关,但我不知道如何使用它。

谢谢

TreeViewer 是一个 Swing 组件,因此您应该能够将它添加到任何其他 SwingComponent,例如 JPanel。

要实例化 TreeViewer(List<String> rules, Tree tree),您必须提供:

  • 一个完整的规则名称列表,你可以在这里使用null,但是使用Parser.getRuleNames()的结果会产生更好的结果
  • 一棵树,这是您解析的结果(类似于 XXXContext)。

从另一个post

复制
import java.util.Arrays;
import javax.swing.JFrame;
import javax.swing.JPanel;

import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.gui.TreeViewer;

/**
 * A simple demo to show AST GUI with ANTLR
 * @see http://www.antlr.org/api/Java/org/antlr/v4/runtime/tree/gui/TreeViewer.html
 * 
 * @author wangdq
 * 2014-5-24
 *
 */
public class HelloTestDrive {
    public static void main(String[] args) {
        //prepare token stream
        CharStream stream = new ANTLRInputStream("hello antlr");
        HelloLexer lexer  = new HelloLexer(stream);   
        TokenStream tokenStream = new CommonTokenStream(lexer);
        HelloParser parser = new HelloParser(tokenStream);
        ParseTree tree = parser.r(); 

        //show AST in console
        System.out.println(tree.toStringTree(parser));

        //show AST in GUI
        JFrame frame = new JFrame("Antlr AST");
        JPanel panel = new JPanel();
        TreeViewer viewr = new TreeViewer(Arrays.asList(
                parser.getRuleNames()),tree);
        viewr.setScale(1.5);//scale a little
        panel.add(viewr);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200,200);
        frame.setVisible(true);
    }
}