令牌流可以在运行时更改吗?

Can token stream be changed at runtime?

我需要在 ANTLR 3 中解析 SQL 服务器 if 语句。 SQL 服务器 if 语句如下:

IF expression BEGIN? statements END?

因为 BEGINEND 是可选的。如果未指定,我只需要在运行时在 ANTLR 令牌流中添加 BEGINEND 令牌在令牌流中。

通过添加谓词解决了问题:

IF expression {input.LA(1) == BEGIN}? => BEGIN statements_list END | statements_list