如何在ANTLR4中解析包含ESCAPE的SQL字符串?

时间:2017-07-26 08:25:46

标签: sql parsing antlr grammar antlr4

SQL中有两种ESCAPE类型:\'AND'' 输入可能会像:

 SELECT '\'', '''';

我用这个语法解析字符串:

STRING_LITERAL
 : '\'' ( '\\\'' | '\'\'' | ~'\'' )* '\''
 ;

但ANTLR解析输入错误,树如下: error parsed tree

我还尝试了另一种带GREEDY的STRING_LITERAL语法:“?”:

STRING_LITERAL
 : '\'' ( '\\\'' | '\'\'' | ~'\'' )*? '\''
;

但它也给我一个错误解析resule像这样: error parsed tree in another grammar ''''应解析为包含但不包含两个空字符串的字符串。

我应该如何修改语法来解决问题?

1 个答案:

答案 0 :(得分:0)

您没有排除\中的( ... )*。试试这个:

STRING_LITERAL
 : '\'' ( '\\\'' | '\'\'' | ~['\\] )* '\''
 ;

其中~['\\]匹配除'\之外的任何字符。您可能希望在其中包含换行符:~[\r\n'\\]