簡體   English   中英

使用Java在ANTLR4中繪制解析樹

[英]Drawing parse tree in ANTLR4 using Java

我是ANTLR4的新手,當我第一次在命令行中嘗試使用gui參數的grun時。 現在,我正在開發Java應用程序,我想在執行Java程序時顯示相同的對話框。

我成功地生成了ParseTree,並且可以瀏覽它。 但我也想展示它。 我認為它與TreeViewer類有關,但我不知道如何使用它。

謝謝

TreeViewer是一個Swing組件,因此您應該能夠將其添加到任何其他SwingComponent中,例如JPanel。

要實例化TreeViewer(List<String> rules, Tree tree)您將必須提供:

  • 規則名稱的完整列表,您可以在此處使用null ,但是使用Parser.getRuleNames()的結果會產生更好的結果
  • 一棵樹,這是您解析的結果(類似於XXXContext )。

從另一篇文章中復制

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM