2015-04-02 58 views
1

考慮下面的模式,從這種模式中獲得.text的正確方法是什麼?

expression returns [String value] 
    : StringLiteral 
    { $value = $StringLiteral.text; } 

    | IntegerLiteral 
    { $value = $IntegerLiteral.text; } 
    ; 

現在我想給StringInteger規則合併成一個單一的一個,

expression returns [String value] 
    : (StringLiteral | IntegerLiteral) 
    { 
    } 
    ; 

這是相當愚蠢的,以檢查是否$XXLiteral.text == null然後從獲得價值無論是其中。

有沒有更好的方法來做到這一點?

回答

2

試試這個:

expression returns [String value] 
    : t=(StringLiteral | IntegerLiteral) 
     { $value = $t.text; } 
    ; 

或:

expression returns [String value] 
    : (t=StringLiteral | t=IntegerLiteral) 
     { $value = $t.text; } 
    ; 
相關問題