注释 Lexer 规则的 ANTLR3 例外

ANTLR3 Exception to Comment Lexer rule

我正在修改一个已经存在的 ANTLR 语法文件以允许能够解析特定注释。目前存在一个 Lexer 规则来过滤对隐藏频道的所有评论。规则如下:

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

我想修改此规则以允许评论通过 //@key。我尝试使用否定语句来尝试通过使用似乎有效的 //~('@') 来阻止 //@key 语句匹配,但还有其他 //@ 标签我想继续过滤到此语句允许通过的隐藏通道。

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

所以你可以这样做:

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

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