ANTLR4 如何分离词法器子规则



假设我有这样的律法分析器规则:

EMPTY_LITERAL: ''' ''';
LITERAL: ''' (ESCAPED_SEQ|.)*? ''' ;
fragment ESCAPED_SEQ: '\'' | '\\'

以及这样的解析器规则:

literal:  EMPTY_LITERAL #EmptyLiteral | LITERAL #LiteralWithContent;

我想在解析器中获取不带引号的 LITERAL 内容。当然,我可以去掉引号,但我对获得没有引号的字符串很有趣。

如果我在 LITERAL 中移动内部规则,则规则将无法正确匹配(仅匹配 1 个字符(。如果我将 LITERAL 作为解析器规则移动,我可以匹配ESCAPED_SEQ但这不是我想要的。有没有办法在词法分析器中命名内部规则?

有没有办法在词法分析器中命名内部规则?

不,没有。在 ANTLR 4 中无法命名或访问令牌的特定部分,也没有一种明智的方法可以将LITERAL转换为解析器规则。

因此,自己从令牌的文本中删除引号是您唯一的选择。

最新更新