ANTLR 4 $ channel = HIDDEN和选项

时间:2013-02-08 17:58:30

标签: java migration antlr antlr4

在决定从v3切换到v4后,我需要帮助我的ANTLR 4语法。我对ANTLR不是很有经验,所以如果我的问题很愚蠢,我真的很抱歉;)

在v3中,我使用以下代码来检测Java风格的注释:

COMMENT
    :   '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
    |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
    ;

在v4中,没有特定于规则的选项。动作(移至隐藏频道)也无效。

有人可以在ANTLR v4中给我一个提示吗?

1 个答案:

答案 0 :(得分:38)

v4等价物看起来像:

COMMENT
    :   ( '//' ~[\r\n]* '\r'? '\n'
        | '/*' .*? '*/'
        ) -> channel(HIDDEN)
    ;

会将所有单行和多行评论放在HIDDEN频道上。但是,如果您对这些HIDDEN - 令牌没有做任何事情,您还可以skip这些令牌,如下所示:

COMMENT
    :   ( '//' ~[\r\n]* '\r'? '\n'
        | '/*' .*? '*/'
        ) -> skip
    ;

请注意,要告诉词法分析器或解析器不匹配,您不再使用options {greedy=false;},而是追加?,类似于许多正则表达式实现。