评论Lexer规则的ANTLR3异常

时间:2017-01-11 20:38:00

标签: antlr antlr3

我正在修改现有的ANTLR语法文件,以便能够解析特定的注释。目前存在Lexer规则,用于过滤隐藏通道的所有注释。规则如下:

 COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;};

如果是//@key,我想修改此规则以允许评论。我尝试使用否定语句尝试阻止//@key语句通过使用似乎有用的//~('@')进行匹配,但还有其他//@个标记我想继续过滤到此声明允许的隐藏频道。

1 个答案:

答案 0 :(得分:2)

在词法分析器中,如果输入可以匹配多个规则,则使用最顶层的规则(按语法文件的顺序)。

所以你可以这样做:

SPECIAL_COMMENT : '//@key' .*  ('\n' | '\r');

COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;};