如何解析SQL字符串包含ESCAPE在ANTLR4
问题描述:
有在SQL两条逃生类型:?\”和‘’ 一个输入可能会喜欢:如何解析SQL字符串包含ESCAPE在ANTLR4
SELECT '\'', '''';
我分析字符串与此语法:
STRING_LITERAL
: '\'' ('\\\'' | '\'\'' | ~'\'')* '\''
;
但ANTLR解析输入错误,树是这样的: error parsed tree
我也尝试过其他类型的STRING_LITERAL语法的贪婪: “?”:
STRING_LITERAL
: '\'' ('\\\'' | '\'\'' | ~'\'')*? '\''
;
,但它也给我一个错误解析resule这样的: error parsed tree in another grammar 的“”“”应该解析为一个字符串包含但不是两个空字符串。
我该如何修改语法来解决问题?
答
您并未排除(...)*
中的\
。试试这个:
STRING_LITERAL
: '\'' ('\\\'' | '\'\'' | ~['\\])* '\''
;
其中~['\\]
除了'
和\
任何字符相匹配。您可能需要在其中包含换行符字符:~[\r\n'\\]
。