2017-02-11 105 views
0
grammar Poly; 
options  
    { 
    output=AST; 
    ASTLabelType=CommonTree; 
    } 
poly 
: 
    term(TLK^ term)* 
; 
term 
: 
    a=ID b=INT -> ^($a $b)* 
; 
INT:'0'..'9'; 
ID:'a'..'z'; 
TLK:('PUSH'|'POP'); 
Semi : ';' {skip();}; 
Space : ' ' {skip();}; 

這是我的語法文件......我的輸入是ANTLR的語法和AST

PUSH t 6;POP t 7;PUSH t 8; 

但它給輸出

(PUSH (POP (t 6) (t 7)) (t 8)) 

...和離開命令

1:0無關輸入'PUSH'預計ID

爲什麼我的第一個PUSH不包含在樹中?

回答

0

假設你在poly規則開始,它的第一個元素的右側是term,這是一個ID,然後INT,不PUSH

poly 
: 
    term(TLK^ term)* 
; 

要匹配你給的輸入,你會可能想要這樣:

poly 
: 
    (TLK^ term)* 
;