我正在修改现有的ANTLR语法文件,以便能够解析特定的注释。目前存在Lexer规则,用于过滤隐藏通道的所有注释。规则如下:
COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;};
如果是//@key
,我想修改此规则以允许评论。我尝试使用否定语句尝试阻止//@key
语句通过使用似乎有用的//~('@')
进行匹配,但还有其他//@
个标记我想继续过滤到此声明允许的隐藏频道。
答案 0 :(得分:2)
在词法分析器中,如果输入可以匹配多个规则,则使用最顶层的规则(按语法文件的顺序)。
所以你可以这样做:
SPECIAL_COMMENT : '//@key' .* ('\n' | '\r');
COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;};