我有一个语法如下:
stmt
: ( TYPE1 expr )? ( TYPE2 expr ( ',' expr )* )?
;
如何判断给定的expr
是在TYPE1
还是TYPE2
之后出现的?所有Context
的{{1}}对象被分组到一个列表中。
答案 0 :(得分:1)
那条规则有点奇怪。它什么也不能匹配,因为一切都是可选的。
但是,stmt上下文的子列表包含被识别的子上下文。并且其他上下文(TYPE1
和TYPE2
)只有在已被匹配时才具有值(顺便说一下,这些便捷访问器最终也可以与子列表一起使用)。因此,通过测试stmtContext.TYPE1()
,您可以确定第一部分是否匹配。对于第二部分,同样通过TYPE2
。