2015-05-08 59 views
1

我是ANTLR4的新手,當我第一次嘗試使用命令行時,我使用grungui參數。現在我正在開發一個Java應用程序,並且希望在執行我的Java程序時顯示相同的對話框。使用Java在ANTLR4中繪製分析樹

我成功生成了ParseTree,我可以通過它進行導航。但我也想顯示它。我認爲這與TreeViewer類有關,但我無法弄清楚如何使用它。

感謝

回答

1

的TreeViewer是一個Swing組件,所以你應該能夠將其添加到任何其他SwingComponent,e.g一個JPanel。

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

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

從另一個帖子複製

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