2015-04-02 16 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; } 
    ; 
相关问题