在语法中区分多个标记

时间:2018-07-07 04:54:03

标签: antlr

我有一个语法如下:

stmt
 : ( TYPE1 expr )? ( TYPE2 expr ( ',' expr )* )?
 ;

如何判断给定的expr是在TYPE1还是TYPE2之后出现的?所有Context的{​​{1}}对象被分组到一个列表中。

1 个答案:

答案 0 :(得分:1)

那条规则有点奇怪。它什么也不能匹配,因为一切都是可选的。

但是,stmt上下文的子列表包含被识别的子上下文。并且其他上下文(TYPE1TYPE2)只有在已被匹配时才具有值(顺便说一下,这些便捷访问器最终也可以与子列表一起使用)。因此,通过测试stmtContext.TYPE1(),您可以确定第一部分是否匹配。对于第二部分,同样通过TYPE2