2017-07-26 11 views
1

がSQLで2つのESCAPEタイプです:?\は」AND '' 入力が好きなことがあります。ANTLR4にESCAPEを含ま

SELECT '\'', ''''; 

を、私はこの文法で文字列を解析:

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

しかしANTLR入力エラーを解析し、このようなツリー:私もGREEDYとSTRING_LITERAL文法の別のタイプを試みerror parsed tree

。 「?」:

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

それはまた、私にこのようなエラー解析resule与える:文字列が空の文字列が含まれてではなく、2通り error parsed tree in another grammar を「」「」解析されなければなりません。

問題を修正するには、どのように文法を修正する必要がありますか?

答えて

0

(...)*\を除外しませんでした。これを試してみてください:

~['\\]'\を除く任意の文字に一致し
STRING_LITERAL 
: '\'' ('\\\'' | '\'\'' | ~['\\])* '\'' 
; 

。その中に改行文字を含めることができます:~[\r\n'\\]