区分语法中的多个标记
differentiating among multiple tokens in a grammar
我的语法如下所示:
stmt
: ( TYPE1 expr )? ( TYPE2 expr ( ',' expr )* )?
;
如何判断给定的 expr
是紧接在 TYPE1
还是 TYPE2
之后?所有 expr
的 Context
个对象被组合到一个列表中。
这条规则有点奇怪。它不能匹配任何东西,因为一切都是可选的。
但是,stmt 上下文的子列表包含被识别的子上下文。而其他上下文(TYPE1
和 TYPE2
)只有在匹配时才有值(顺便说一句,这些便利访问器最终也适用于子列表)。所以通过测试 stmtContext.TYPE1()
你可以确定第一部分是否匹配。第二部分同样通过 TYPE2
.
我的语法如下所示:
stmt
: ( TYPE1 expr )? ( TYPE2 expr ( ',' expr )* )?
;
如何判断给定的 expr
是紧接在 TYPE1
还是 TYPE2
之后?所有 expr
的 Context
个对象被组合到一个列表中。
这条规则有点奇怪。它不能匹配任何东西,因为一切都是可选的。
但是,stmt 上下文的子列表包含被识别的子上下文。而其他上下文(TYPE1
和 TYPE2
)只有在匹配时才有值(顺便说一句,这些便利访问器最终也适用于子列表)。所以通过测试 stmtContext.TYPE1()
你可以确定第一部分是否匹配。第二部分同样通过 TYPE2
.