From 7bf3b8741128e2b708ec5af7a0f90bde6c46bb2c Mon Sep 17 00:00:00 2001 From: Peinthor Rene Date: Thu, 13 Jun 2013 06:52:46 +0200 Subject: [PATCH] Fix incorrect single line comment syntax Did never check if this syntax was correct, now it should be fine see: http://www.sqlite.org/lang_comment.html --- src/grammar/Sqlite3Lexer.cpp | 38 +++++++++++++++++++----------------- src/grammar/sqlite3.g | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/grammar/Sqlite3Lexer.cpp b/src/grammar/Sqlite3Lexer.cpp index 4cc14519..ba4e9556 100644 --- a/src/grammar/Sqlite3Lexer.cpp +++ b/src/grammar/Sqlite3Lexer.cpp @@ -157,18 +157,6 @@ ANTLR_USE_NAMESPACE(antlr)RefToken Sqlite3Lexer::nextToken() theRetToken=_returnToken; break; } - case 0x2d /* '-' */ : - { - mMINUS(true); - theRetToken=_returnToken; - break; - } - case 0x2f /* '/' */ : - { - mCOMMENT(true); - theRetToken=_returnToken; - break; - } case 0x9 /* '\t' */ : case 0xa /* '\n' */ : case 0xc /* '\14' */ : @@ -234,7 +222,11 @@ ANTLR_USE_NAMESPACE(antlr)RefToken Sqlite3Lexer::nextToken() break; } default: - if ((LA(1) == 0x7c /* '|' */ ) && (LA(2) == 0x7c /* '|' */ )) { + if ((LA(1) == 0x2d /* '-' */ || LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2a /* '*' */ || LA(2) == 0x2d /* '-' */ )) { + mCOMMENT(true); + theRetToken=_returnToken; + } + else if ((LA(1) == 0x7c /* '|' */ ) && (LA(2) == 0x7c /* '|' */ )) { mOROP(true); theRetToken=_returnToken; } @@ -262,6 +254,10 @@ ANTLR_USE_NAMESPACE(antlr)RefToken Sqlite3Lexer::nextToken() mBITWISERIGHT(true); theRetToken=_returnToken; } + else if ((LA(1) == 0x2d /* '-' */ ) && (true)) { + mMINUS(true); + theRetToken=_returnToken; + } else if ((LA(1) == 0x7c /* '|' */ ) && (true)) { mBITOR(true); theRetToken=_returnToken; @@ -737,8 +733,10 @@ void Sqlite3Lexer::mCOMMENT(bool _createToken) { ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex; { - if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2f /* '/' */ )) { - match("//"); + switch ( LA(1)) { + case 0x2d /* '-' */ : + { + match("--"); { // ( ... )* for (;;) { if ((_tokenSet_3.member(LA(1)))) { @@ -755,8 +753,10 @@ void Sqlite3Lexer::mCOMMENT(bool _createToken) { } // ( ... )* mNL(false); newline(); + break; } - else if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2a /* '*' */ )) { + case 0x2f /* '/' */ : + { match("/*"); { // ( ... )* for (;;) { @@ -779,11 +779,13 @@ void Sqlite3Lexer::mCOMMENT(bool _createToken) { _loop39:; } // ( ... )* match("*/"); + break; } - else { + default: + { throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn()); } - + } } _ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) { diff --git a/src/grammar/sqlite3.g b/src/grammar/sqlite3.g index 88f749c2..a120b96f 100644 --- a/src/grammar/sqlite3.g +++ b/src/grammar/sqlite3.g @@ -107,7 +107,7 @@ NL : ); COMMENT : - ( "//" (~('\n'|'\r'))* NL {newline();} // single line comment + ( "--" (~('\n'|'\r'))* NL {newline();} // single line comment | "/*" ( options{greedy=false;} : NL {newline();} | ~('\n'|'\r') )* "*/" // multi-line comment ) { $setType(ANTLR_USE_NAMESPACE(antlr)Token::SKIP); };