Parsing ANTLR4如何分离Lexer子规则

Parsing ANTLR4如何分离Lexer子规则,parsing,antlr,antlr4,lex,Parsing,Antlr,Antlr4,Lex,假设我有这样的Lexer规则: EMPTY_LITERAL: '\'' '\''; LITERAL: '\'' (ESCAPED_SEQ|.)*? '\'' ; fragment ESCAPED_SEQ: '\\\'' | '\\\\' literal: EMPTY_LITERAL #EmptyLiteral | LITERAL #LiteralWithContent; 还有这样一个解析器规则: EMPTY_LITERAL: '\'' '\''; LITERAL: '\'' (ESCAPE

假设我有这样的Lexer规则:

EMPTY_LITERAL: '\'' '\'';
LITERAL: '\'' (ESCAPED_SEQ|.)*? '\'' ;
fragment ESCAPED_SEQ: '\\\'' | '\\\\'
literal:  EMPTY_LITERAL #EmptyLiteral | LITERAL #LiteralWithContent;
还有这样一个解析器规则:

EMPTY_LITERAL: '\'' '\'';
LITERAL: '\'' (ESCAPED_SEQ|.)*? '\'' ;
fragment ESCAPED_SEQ: '\\\'' | '\\\\'
literal:  EMPTY_LITERAL #EmptyLiteral | LITERAL #LiteralWithContent;
我想在解析器中获得不带引号的LITERAL的内容。当然,我可以去掉引号,但是我对不带引号的字符串很感兴趣

如果我移动文本中的内部规则,则该规则将无法正确匹配(将仅匹配1个字符)。如果我将文本作为解析器规则移动,我可以匹配转义的SEQ,但这不是我想要的。有没有办法在lexer中命名内部规则

有没有办法在lexer中命名内部规则

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

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

有没有办法在lexer中命名内部规则

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

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