假设我有这样的律法分析器规则:
EMPTY_LITERAL: ''' ''';
LITERAL: ''' (ESCAPED_SEQ|.)*? ''' ;
fragment ESCAPED_SEQ: '\'' | '\\'
以及这样的解析器规则:
literal: EMPTY_LITERAL #EmptyLiteral | LITERAL #LiteralWithContent;
我想在解析器中获取不带引号的 LITERAL 内容。当然,我可以去掉引号,但我对获得没有引号的字符串很有趣。
如果我在 LITERAL 中移动内部规则,则规则将无法正确匹配(仅匹配 1 个字符(。如果我将 LITERAL 作为解析器规则移动,我可以匹配ESCAPED_SEQ但这不是我想要的。有没有办法在词法分析器中命名内部规则?
有没有办法在词法分析器中命名内部规则?
不,没有。在 ANTLR 4 中无法命名或访问令牌的特定部分,也没有一种明智的方法可以将LITERAL
转换为解析器规则。
因此,自己从令牌的文本中删除引号是您唯一的选择。