当前位置: 首页 > 面试题库 >

ANTLR 4 $ channel =隐藏和选项

樊腾
2023-03-14
问题内容

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

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

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

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

有人可以给我提示如何在ANTLR v4中做到吗?


问题答案:

相当于v4的样子:

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

这会将所有单行和多行注释添加到HIDDEN频道上。但是,如果您不对这些HIDDEN-token
做任何事情,那么您也可以选择skip这些令牌,如下所示:

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

注意,要告诉词法分析器或解析器匹配不贪心,您不再使用options {greedy=false;},而是?像许多regex实现一样附加一个。



 类似资料:
  • 在下面的片段中,我有两种方法来选择一个项:用datalist输入和传统的用Options选择。

  • 我们想隐藏“有优惠券吗?添加一张…”在WooCommerce结账时,如果已添加优惠券或客户在结账页面上添加优惠券。 目前,我们在下面有此代码,当客户在购物车页面输入优惠券,然后导航到结帐页面时,此代码有效。在这种情况下,“拥有优惠券?添加一张…”消息不可见。如果购物车页面上未添加优惠券,则消息可见。 这很好用!但是,当客户在结账页面上添加优惠券时,它不起作用。 1.)我们收到消息“优惠券已添加”,

  • 我正在尝试创建一个目前仅限使用的简单整数算术表达式解析器。目前我有: 规则ExpressionList似乎会导致一些问题。如果我删除所有包含ExpressionList的内容,一切都会编译并且似乎运行良好。但像上面一样,我收到了以下错误: 我正在使用Eclipse和Antlr4插件。我试图根据antlr4书中给出的cymbol语法来确定自己的方向。 有人能告诉我我的小语法出了什么问题吗?

  • 问题内容: 这是我的代码。为什么不起作用? 问题答案: 您正在加载DOM之前运行代码。 尝试这个: 现场示例:

  • 问题:如果距离为空/null,我试图隐藏一个值。 我尝试了以下操作,但该值仍在显示: 和 什么是实现我所期待的正确方法。 以下是我在coldfusion中定义距离的方式: 当我做以下建议时: ng-show="e.distance===未定义" 当我执行其他建议时,例如ng hide=“e.distance”, 以下是提供商包含的内容:

  • 我有两个<代码> 当用户从第一个选择框中选择一个值时,我希望第二个选择框只显示连接的值。 我的代码: 因此,当用户从第一个选择框M中选择“test1”时,他在第二个选择框上只会看到“test2”、“test3”和“test4”;第一个框中的“test2”将在第二个框中显示“test6”、“test7”和“test8”。 如何使用JavaScript解决此问题?