当前位置: 首页 > 知识库问答 >
问题:

如何在ANTLR4中定义可以以多种词法模式出现的令牌?

田巴英
2023-03-14

我正在学习ANTLR4,并试图玩词汇模式。我怎样才能让同一个令牌出现在多种词汇模式中?作为一个非常简单的例子,假设我的语法有两种模式,我想在这两种模式中匹配空白和行尾,我如何做到这一点而不以WS_MODE1和WS_MODE2结尾。是否有一种方法可以在两种情况下重用相同的定义?我希望在输出流中为所有空白获得WS标记,而不管模式如何。这同样适用于EOL和其他可以在两种模式下出现的关键字。

共有1个答案

扶杜吟
2023-03-14

规则必须具有不同的名称,但是可以使用->type(...)lexer命令为它们提供相同的类型。

WS : [ \t]+;

mode Mode1;

    Mode1_WS : WS -> type(WS);

mode Mode2;

    Mode2_WS : WS -> type(WS);

尽管mode1_wsmode2_ws不是fragment规则,但代码生成器将看到type命令并知道您重新分配了它们的类型,因此不会为它们定义标记。

 类似资料:
  • 本文向大家介绍Vue 中可以定义组件模版的几种方式,包括了Vue 中可以定义组件模版的几种方式的使用技巧和注意事项,需要的朋友参考一下 前端组件化开发已经是一个老生常谈的话题了,组件化让我们的开发效率以及维护成本带来了质的提升。 当然因为现在的系统越来越复杂庞大,所以开发与维护成本就变得必须要考虑的问题,因此滋生出了目前的三大前端框架 Vue、Angular、React。 那今天我们就来看看 Vu

  • 如果我对“令牌”不感兴趣,因为规则已经建立了我要匹配的对象,而且我无论如何都要跳过它,那么用和令牌声明替换它有意义吗?(然后,代币的数量将会增加。)为什么在ANTLRWorks中这是一个警告?

  • 本文向大家介绍写出多种定义组件模板的方法相关面试题,主要包含被问及写出多种定义组件模板的方法时的应答技巧和注意事项,需要的朋友参考一下 https://blog.csdn.net/alphapersonality/article/details/80248005

  • 问题内容: 我发现很多以下形式的html输入模式,这是电话号码: 我想创建一个自定义指令,无论该指令适用于哪里,它都会告诉Angular应用所有这三个规则,例如: 然后,我指令中的代码将找到并调用一个名为的函数,在该函数中我将看到类似以下内容的内容: 清单1: 我宁愿使用上述方法而不是为这些规则重写代码,例如: 清单2: 我不想取消所有基于属性的指令,但最好创建一个“宏”指令,该指令将调用我的清单