在决定从v3切换到v4后,我需要帮助我的ANTLR 4语法。我对ANTLR不是很有经验,所以如果我的问题很愚蠢,我真的很抱歉;)
在v3中,我使用以下代码来检测Java风格的注释:
COMMENT
: '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
| '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
;
在v4中,没有特定于规则的选项。动作(移至隐藏频道)也无效。
有人可以在ANTLR v4中给我一个提示吗?
答案 0 :(得分:38)
v4等价物看起来像:
COMMENT
: ( '//' ~[\r\n]* '\r'? '\n'
| '/*' .*? '*/'
) -> channel(HIDDEN)
;
会将所有单行和多行评论放在HIDDEN
频道上。但是,如果您对这些HIDDEN
- 令牌没有做任何事情,您还可以skip
这些令牌,如下所示:
COMMENT
: ( '//' ~[\r\n]* '\r'? '\n'
| '/*' .*? '*/'
) -> skip
;
请注意,要告诉词法分析器或解析器不匹配,您不再使用options {greedy=false;}
,而是追加?
,类似于许多正则表达式实现。