我正在使用 ANTLR3(C 运行时)来解析文本文件:问题是我通常想识别换行符,但在语法中的某些点我想忽略它们。
我的第一种方法是从语法中动态设置一个布尔值,该值在词法分析器规则中用于 NEWLINE 以将其通道设置为 HIDDEN 或 DEFAULT。
这不起作用,因为 ANTLR3 首先对所有标记进行词法分析并构建标记流,然后语法遍历流。
现在我想知道是否可以动态地(使用解析器语法谓词)告诉令牌流开始/停止侦听特定令牌通道,除了像这样的默认通道:
NEWLINE: ('\r'? '\n')+ {$channel=CH_WSPACE;}
expr
@init {
INPUT.disableChannel(CH_WSPACE);
}
@after {
INPUT.enableChannel(CH_WSPACE);
} :
...rhs of the rule....
;
我需要编写自己的 TokenStream 吗?有没有更好的方法来解决我的问题?
提前非常感谢!