考虑以下模式,
expression returns [String value]
: StringLiteral
{ $value = $StringLiteral.text; }
| IntegerLiteral
{ $value = $IntegerLiteral.text; }
;
现在我想将String
和Integer
规则合并为一个规则,
expression returns [String value]
: (StringLiteral | IntegerLiteral)
{
}
;
检查是否$XXLiteral.text == null
然后从其中任何一个获取价值是非常愚蠢的。
有更好的方法吗?
答案 0 :(得分:2)
试试这个:
expression returns [String value]
: t=(StringLiteral | IntegerLiteral)
{ $value = $t.text; }
;
或:
expression returns [String value]
: (t=StringLiteral | t=IntegerLiteral)
{ $value = $t.text; }
;