java - ANTLR 4 $channel = HIDDEN 和选项

标签 java migration antlr antlr4

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

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

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

在 v4 中没有特定于规则的选项。 Action (移动到隐藏 channel )也无效。

谁能给我一个提示如何在 ANTLR v4 中做到这一点?

最佳答案

v4 等效项如下所示:

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

这会将所有单行和多行注释放在 HIDDEN channel 上。但是,如果您不使用这些 HIDDEN-tokens 做任何事情,您也可以 skip 这些 token ,如下所示:

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

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

关于java - ANTLR 4 $channel = HIDDEN 和选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778570/

相关文章:

spring-boot - AMQP ConvertSendAndReceive 无法从 Spring Boot 1.5 迁移到 2

php - Yii 迁移更新

java - 在 antlr 中,有没有办法在 AST 模式下获取 CommonTree 的解析文本?

escaping - ANTLR 词法分析器排除字符串

java - 为什么键盘给出的循环迭代范围将自身算作一次迭代?

java - GeoTIFF-jai 库的文档在哪里

java - Tomcat 和 spring-boot-starter

java - 比较两个相同列表时 assertEquals 失败

c# - Cookie 身份验证和 Asp Net Core 2.0 迁移

parsing - Antlr 解析器运算符优先级