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