ANTLR 4 $信道= HIDDEN和选项(ANTLR 4 $channel = HIDDEN a

2019-07-19 15:23发布

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

在V3我用下面的代码来检测Java风格的评论:

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

在V4中没有具体的规则的选项。 该行动(移动到隐藏的通道)也无效。

可能有人请给我一个提示如何做到这一点的ANTLR V4?

Answer 1:

V4的相当于将如下所示:

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

这将对所有的单和多行注释上的HIDDEN通道。 但是,如果你没有做这些事情HIDDEN -tokens,你也可以skip这些标记,这将是这样的:

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

请注意,告诉词法分析器或解析器匹配ungreedy,您不使用options {greedy=false;}了,但附加一个? ,类似于许多regex实现。



文章来源: ANTLR 4 $channel = HIDDEN and options