ANTLR4如何分离Lexer子规则

问题描述 投票:0回答:1

假设我有Lexer规则:

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

和这样的解析器规则:

literal:  EMPTY_LITERAL #EmptyLiteral | LITERAL #LiteralWithContent;

我想在解析器中没有引号的情况下获得LITERAL的内容。当然,我可以删除引号,但我很有兴趣在没有引号的情况下获取该字符串。

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

parsing antlr antlr4 lex
1个回答
2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.