2017-07-26 30 views
1

有在SQL两条逃生类型:?\”和‘’ 一个输入可能会喜欢:如何解析SQL字符串包含ESCAPE在ANTLR4

SELECT '\'', ''''; 

我分析字符串与此语法:

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

但ANTLR解析输入错误,树是这样的: error parsed tree

我也尝试过其他类型的STRING_LITERAL语法的贪婪: “?”:

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

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

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

回答

0

您并未排除(...)*中的\。试试这个:

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

其中~['\\]除了'\任何字符相匹配。您可能需要在其中包含换行符字符:~[\r\n'\\]