注释 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;};
我正在修改一个已经存在的 ANTLR 语法文件以允许能够解析特定注释。目前存在一个 Lexer 规则来过滤对隐藏频道的所有评论。规则如下:
COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;};
我想修改此规则以允许评论通过 //@key
。我尝试使用否定语句来尝试通过使用似乎有效的 //~('@')
来阻止 //@key
语句匹配,但还有其他 //@
标签我想继续过滤到此语句允许通过的隐藏通道。
在词法分析器中,如果一个输入可以匹配多个规则,则使用最上面的规则(按照语法文件的顺序)。
所以你可以这样做:
SPECIAL_COMMENT : '//@key' .* ('\n' | '\r');
COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;};