【问题标题】:ANTLR3 Exception to Comment Lexer ruleANTLR3 例外评论 Lexer 规则
【发布时间】:2017-01-11 20:37:59
【问题描述】:

我正在修改一个已经存在的 ANTLR 语法文件,以允许解析特定的注释。目前存在一个 Lexer 规则来将所有 cmets 过滤到隐藏通道。规则如下:

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

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

【问题讨论】:

    标签: antlr antlr3


    【解决方案1】:

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

    所以你可以这样做:

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

    【讨论】:

    • 感谢您的解释。完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2014-07-03
    相关资源
    最近更新 更多