2016-02-20 82 views
0

我在IntelliJ中使用Antlr4爲算術表達式創建了一個小型編譯器。 我想打印樹並使用此代碼片段來執行此操作。更改Antlr4打印樹的方式

JFrame frame = new JFrame("Tree"); 
    JPanel panel = new JPanel(); 
    TreeViewer viewr = new TreeViewer(Arrays.asList(
    parser.getRuleNames()),tree); 
    viewr.setScale(2);//scale a little 
    panel.add(viewr); 
    frame.add(panel); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400,400); 
    frame.setVisible(true); 

這讓樹看起來像這樣,對於輸入3*5\n

enter image description here

是否有辦法來調整這個所以從上讀取到下

    Statement 

       Expression   /n 
     INT  *  INT 
      3    5 

代替? 我的語法定義爲:

grammar Expression; 

statement: expression ENDSTATEMENT   # printExpr 
     | ID '=' expression ENDSTATEMENT  # assign 
     | ENDSTATEMENT      # blank 
     ; 

expression: expression MULTDIV expression  # MulDiv 
      | expression ADDSUB expression  # AddSub 
      | INT        # int 
      | FLOAT        # float 
      | ID         # id 
      | '(' expression ')'     # parens 
      ; 

ID : [a-zA-Z]+ ;  // match identifiers 
INT : [0-9]+ ;   // match integers 
MULTDIV : ('*' | '/'); //match multiply or divide 
ADDSUB : ('+' | '-'); //match add or subtract 
FLOAT: INT '.' INT;  //match a floating point number 
ENDSTATEMENT:'\r'? '\n' ;  // return newlines to parser (is end-statement signal) 
WHITESPACE : [ \t]+ -> skip ; // ignore whitespace 

回答

0

不,如果不改變樹查看自己的來源。