区分语法中的多个标记

differentiating among multiple tokens in a grammar

我的语法如下所示:

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

如何判断给定的 expr 是紧接在 TYPE1 还是 TYPE2 之后?所有 exprContext 个对象被组合到一个列表中。

这条规则有点奇怪。它不能匹配任何东西,因为一切都是可选的。

但是,stmt 上下文的子列表包含被识别的子上下文。而其他上下文(TYPE1TYPE2)只有在匹配时才有值(顺便说一句,这些便利访问器最终也适用于子列表)。所以通过测试 stmtContext.TYPE1() 你可以确定第一部分是否匹配。第二部分同样通过 TYPE2.