绘制解析树在ANTLR4使用Java(Drawing parse tree in ANTLR4 us

2019-10-23 01:45发布

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

我生成分析树成功了,我可以通过它导航。 但我想,以显示它。 我认为这是与TreeViewer类,但我无法弄清楚如何使用它。

谢谢

Answer 1:

TreeViewer中是一个Swing组件,所以你应该能够将其添加到任何其他SwingComponent,比如一个JPanel。

实例化一个TreeViewer(List<String> rules, Tree tree) ,你必须提供:

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


Answer 2:

从另一篇文章复制

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);
    }
}


文章来源: Drawing parse tree in ANTLR4 using Java