如何定义可以在ANTLR4中以多种词法模式出现的标记



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

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

WS : [ t]+;
mode Mode1;
    Mode1_WS : WS -> type(WS);
mode Mode2;
    Mode2_WS : WS -> type(WS);

即使Mode1_WSMode2_WS不是fragment规则,代码生成器也会看到type命令并知道您重新分配了它们的类型,因此它不会为它们定义令牌。

相关内容

  • 没有找到相关文章

最新更新