antlr 词法分析器和解析器的转义字符
Escape characters for an antlr lexer and parser
我是 antlr 的新手,希望构建一个解析器,其中一部分需要我匹配字符串,但我希望保留转义字符的含义
[=10=], \b, \t, \n, \f, \r, \", \', \
其中一些符号在我的语言位置的语法中以各种方式使用,因此我希望通过以下方式定义 ESCAPE_CHAR 标记:
SINGLE_QUOTE: '\'' ;
DOUBLE_QUOTE: '"' ;
ESCAPE_ZERO : '[=11=]' ;
ESCAPE_BACKSPACE : '\b' ;
ESCAPE_TAB : '\t' ;
ESCAPE_NEWLINE : '\n' ;
ESCAPE_FORMFEED : '\f' ;
ESCAPE_CARRIAGERETURN : '\r' ;
ESCAPE_BACKSLASH : '\' ;
ESCAPE_CHAR: ESCAPE_ZERO | ESCAPE_BACKSPACE | ESCAPE_TAB | ESCAPE_NEWLINE | ESCAPE_FORMFEED | ESCAPE_CARRIAGERETURN | DOUBLE_QUOTE | SINGLE_QUOTE | ESCAPE_BACKSLASH ;
但是,ESCAPE_ZERO 给我警告
non-fragment lexer rule ESCAPE_CHAR can match the empty string
并且在制作 ESCAPE_ZERO 片段时,我看到了警告
invalid escape sequence [=13=]
我是 antlr 的新手,所以我真的不知道我需要做哪些改变,任何帮助将不胜感激
您还需要在 ANTLR 的文字中转义 \
。如果不这样做,词法分析器规则 ESCAPE_ZERO : '[=12=]' ;
匹配空字符而不是反斜杠后跟零数字。并且这个空字符没有“宽度”,导致 ANTLR 产生错误 [...] can match the empty string.
而不是所有单独的规则,尝试这样的事情:
STRING
: '"' ( ~[\"\r\n] | ESCAPE_CHAR )* '"'
;
fragment ESCAPE_CHAR
: '\' [0btnfr"'\]
;
我是 antlr 的新手,希望构建一个解析器,其中一部分需要我匹配字符串,但我希望保留转义字符的含义
[=10=], \b, \t, \n, \f, \r, \", \', \
其中一些符号在我的语言位置的语法中以各种方式使用,因此我希望通过以下方式定义 ESCAPE_CHAR 标记:
SINGLE_QUOTE: '\'' ;
DOUBLE_QUOTE: '"' ;
ESCAPE_ZERO : '[=11=]' ;
ESCAPE_BACKSPACE : '\b' ;
ESCAPE_TAB : '\t' ;
ESCAPE_NEWLINE : '\n' ;
ESCAPE_FORMFEED : '\f' ;
ESCAPE_CARRIAGERETURN : '\r' ;
ESCAPE_BACKSLASH : '\' ;
ESCAPE_CHAR: ESCAPE_ZERO | ESCAPE_BACKSPACE | ESCAPE_TAB | ESCAPE_NEWLINE | ESCAPE_FORMFEED | ESCAPE_CARRIAGERETURN | DOUBLE_QUOTE | SINGLE_QUOTE | ESCAPE_BACKSLASH ;
但是,ESCAPE_ZERO 给我警告
non-fragment lexer rule ESCAPE_CHAR can match the empty string
并且在制作 ESCAPE_ZERO 片段时,我看到了警告
invalid escape sequence [=13=]
我是 antlr 的新手,所以我真的不知道我需要做哪些改变,任何帮助将不胜感激
您还需要在 ANTLR 的文字中转义 \
。如果不这样做,词法分析器规则 ESCAPE_ZERO : '[=12=]' ;
匹配空字符而不是反斜杠后跟零数字。并且这个空字符没有“宽度”,导致 ANTLR 产生错误 [...] can match the empty string.
而不是所有单独的规则,尝试这样的事情:
STRING
: '"' ( ~[\"\r\n] | ESCAPE_CHAR )* '"'
;
fragment ESCAPE_CHAR
: '\' [0btnfr"'\]
;