ANTLR 4 $channel = 隐藏和选项

2022-09-01 09:50:54

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

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

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

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

有人可以给我一个提示,如何在ANTLR v4中做到这一点吗?


答案 1

v4 等效项如下所示:

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

这会将所有单行和多行注释放在频道上。但是,如果您没有对这些 -tokens 执行任何操作,则也可以使用这些令牌,如下所示:HIDDENHIDDENskip

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

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


答案 2

推荐