2012-03-01 126 views
0

我做了ANTLR規範。在我的AST我需要做的這一個:重寫規則ANTLR

characters ('*'^|'+'^|'?'^)? 

我需要的,而不是+ PLUS,而是做一個重寫規則,將呈現AST代替星號*,? QMARK節點?

我知道,如果我們有這樣的事情:

characters '*' 

可以rewrited爲

^(ASTERISK characters) 

但我不知道怎麼處理|運營商?

回答

2

試試這個:

grammar T; 

// options ... 

tokens { 
    ASTERISK; 
    PLUS; 
    QMARK; 
} 

// @header and/or @members ... 

rule 
: (characters -> characters) ('*' -> ^(ASTERISK characters) 
           | '+' -> ^(PLUS characters) 
           | '?' -> ^(QMARK characters) 
          )? 
; 

的關鍵在這裏的是,如果可選*+?目前,characters只會被重寫規則留characters(characters -> characters)