fix all warnings in the grammar and some bugs

literals were case sensitive so lower keywords broke parsing
This commit is contained in:
Peinthor Rene
2013-03-22 15:50:04 +01:00
parent aa21dbdc39
commit ba6d51edf2
6 changed files with 1843 additions and 1456 deletions

View File

@@ -28,42 +28,44 @@ Sqlite3Lexer::Sqlite3Lexer(const ANTLR_USE_NAMESPACE(antlr)LexerSharedInputState
void Sqlite3Lexer::initLiterals()
{
literals["DEFAULT"] = 16;
literals["IF"] = 25;
literals["CURRENT_DATE"] = 14;
literals["LIKE"] = 23;
literals["DEFAULT"] = 18;
literals["IF"] = 27;
literals["CURRENT_DATE"] = 16;
literals["LIKE"] = 25;
literals["AS"] = 5;
literals["TEMPORARY"] = 35;
literals["UNIQUE"] = 38;
literals["CHECK"] = 8;
literals["COLLATE"] = 10;
literals["NOT"] = 27;
literals["ELSE"] = 18;
literals["REFERENCES"] = 33;
literals["CREATE"] = 9;
literals["THEN"] = 37;
literals["EXISTS"] = 30;
literals["CASE"] = 7;
literals["REGEXP"] = 34;
literals["ON"] = 31;
literals["CURRENT_TIME"] = 13;
literals["GLOB"] = 21;
literals["CURRENT_TIMESTAMP"] = 15;
literals["TEMPORARY"] = 37;
literals["UNIQUE"] = 40;
literals["CHECK"] = 10;
literals["COLLATE"] = 12;
literals["NOT"] = 29;
literals["ELSE"] = 20;
literals["REFERENCES"] = 35;
literals["THEN"] = 39;
literals["CREATE"] = 11;
literals["EXISTS"] = 32;
literals["CASE"] = 9;
literals["REGEXP"] = 36;
literals["ON"] = 33;
literals["CURRENT_TIME"] = 15;
literals["GLOB"] = 23;
literals["CURRENT_TIMESTAMP"] = 17;
literals["AND"] = 7;
literals["ASC"] = 6;
literals["ESCAPE"] = 20;
literals["DESC"] = 17;
literals["TABLE"] = 24;
literals["TEMP"] = 36;
literals["END"] = 19;
literals["KEY"] = 22;
literals["WHEN"] = 39;
literals["CONSTRAINT"] = 12;
literals["MATCH"] = 29;
literals["ESCAPE"] = 22;
literals["DESC"] = 19;
literals["TABLE"] = 26;
literals["TEMP"] = 38;
literals["END"] = 21;
literals["KEY"] = 24;
literals["WHEN"] = 41;
literals["CONSTRAINT"] = 14;
literals["MATCH"] = 31;
literals["OR"] = 8;
literals["AUTOINCREMENT"] = 4;
literals["IS"] = 26;
literals["NULL"] = 28;
literals["CONFLICT"] = 11;
literals["PRIMARY"] = 32;
literals["IS"] = 28;
literals["NULL"] = 30;
literals["CONFLICT"] = 13;
literals["PRIMARY"] = 34;
}
ANTLR_USE_NAMESPACE(antlr)RefToken Sqlite3Lexer::nextToken()
@@ -143,8 +145,15 @@ ANTLR_USE_NAMESPACE(antlr)RefToken Sqlite3Lexer::nextToken()
theRetToken=_returnToken;
break;
}
case 0x2f /* '/' */ :
{
mCOMMENT(true);
theRetToken=_returnToken;
break;
}
case 0x9 /* '\t' */ :
case 0xa /* '\n' */ :
case 0xc /* '\14' */ :
case 0xd /* '\r' */ :
case 0x20 /* ' ' */ :
{
@@ -154,7 +163,7 @@ ANTLR_USE_NAMESPACE(antlr)RefToken Sqlite3Lexer::nextToken()
}
case 0x27 /* '\'' */ :
{
mSTRING(true);
mSTRINGLITERAL(true);
theRetToken=_returnToken;
break;
}
@@ -207,15 +216,7 @@ ANTLR_USE_NAMESPACE(antlr)RefToken Sqlite3Lexer::nextToken()
break;
}
default:
if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2f /* '/' */ )) {
mSL_COMMENT(true);
theRetToken=_returnToken;
}
else if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2a /* '*' */ )) {
mML_COMMENT(true);
theRetToken=_returnToken;
}
else if ((LA(1) == 0x7c /* '|' */ ) && (LA(2) == 0x7c /* '|' */ )) {
if ((LA(1) == 0x7c /* '|' */ ) && (LA(2) == 0x7c /* '|' */ )) {
mOROP(true);
theRetToken=_returnToken;
}
@@ -680,26 +681,30 @@ void Sqlite3Lexer::mMINUS(bool _createToken) {
_saveIndex=0;
}
void Sqlite3Lexer::mSL_COMMENT(bool _createToken) {
void Sqlite3Lexer::mNL(bool _createToken) {
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
_ttype = SL_COMMENT;
_ttype = NL;
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
match("//");
{ // ( ... )*
for (;;) {
if ((_tokenSet_3.member(LA(1)))) {
matchNot('\n' /* charlit */ );
}
else {
goto _loop32;
}
{
switch ( LA(1)) {
case 0xd /* '\r' */ :
{
match('\r' /* charlit */ );
break;
}
case 0xa /* '\n' */ :
{
match('\n' /* charlit */ );
newline();
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
}
}
}
_loop32:;
} // ( ... )*
match('\n' /* charlit */ );
_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; newline();
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
_token = makeToken(_ttype);
_token->setText(text.substr(_begin, text.length()-_begin));
@@ -708,165 +713,60 @@ void Sqlite3Lexer::mSL_COMMENT(bool _createToken) {
_saveIndex=0;
}
void Sqlite3Lexer::mML_COMMENT(bool _createToken) {
void Sqlite3Lexer::mCOMMENT(bool _createToken) {
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
_ttype = ML_COMMENT;
_ttype = COMMENT;
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
match("/*");
{ // ( ... )*
for (;;) {
switch ( LA(1)) {
case 0xa /* '\n' */ :
{
match('\n' /* charlit */ );
newline();
break;
}
case 0x0 /* '\0' */ :
case 0x1 /* '\1' */ :
case 0x2 /* '\2' */ :
case 0x3 /* '\3' */ :
case 0x4 /* '\4' */ :
case 0x5 /* '\5' */ :
case 0x6 /* '\6' */ :
case 0x7 /* '\7' */ :
case 0x8 /* '\10' */ :
case 0x9 /* '\t' */ :
case 0xb /* '\13' */ :
case 0xc /* '\14' */ :
case 0xd /* '\r' */ :
case 0xe /* '\16' */ :
case 0xf /* '\17' */ :
case 0x10 /* '\20' */ :
case 0x11 /* '\21' */ :
case 0x12 /* '\22' */ :
case 0x13 /* '\23' */ :
case 0x14 /* '\24' */ :
case 0x15 /* '\25' */ :
case 0x16 /* '\26' */ :
case 0x17 /* '\27' */ :
case 0x18 /* '\30' */ :
case 0x19 /* '\31' */ :
case 0x1a /* '\32' */ :
case 0x1b /* '\33' */ :
case 0x1c /* '\34' */ :
case 0x1d /* '\35' */ :
case 0x1e /* '\36' */ :
case 0x1f /* '\37' */ :
case 0x20 /* ' ' */ :
case 0x21 /* '!' */ :
case 0x22 /* '\"' */ :
case 0x23 /* '#' */ :
case 0x24 /* '$' */ :
case 0x25 /* '%' */ :
case 0x26 /* '&' */ :
case 0x27 /* '\'' */ :
case 0x28 /* '(' */ :
case 0x29 /* ')' */ :
case 0x2b /* '+' */ :
case 0x2c /* ',' */ :
case 0x2d /* '-' */ :
case 0x2e /* '.' */ :
case 0x2f /* '/' */ :
case 0x30 /* '0' */ :
case 0x31 /* '1' */ :
case 0x32 /* '2' */ :
case 0x33 /* '3' */ :
case 0x34 /* '4' */ :
case 0x35 /* '5' */ :
case 0x36 /* '6' */ :
case 0x37 /* '7' */ :
case 0x38 /* '8' */ :
case 0x39 /* '9' */ :
case 0x3a /* ':' */ :
case 0x3b /* ';' */ :
case 0x3c /* '<' */ :
case 0x3d /* '=' */ :
case 0x3e /* '>' */ :
case 0x3f /* '?' */ :
case 0x40 /* '@' */ :
case 0x41 /* 'A' */ :
case 0x42 /* 'B' */ :
case 0x43 /* 'C' */ :
case 0x44 /* 'D' */ :
case 0x45 /* 'E' */ :
case 0x46 /* 'F' */ :
case 0x47 /* 'G' */ :
case 0x48 /* 'H' */ :
case 0x49 /* 'I' */ :
case 0x4a /* 'J' */ :
case 0x4b /* 'K' */ :
case 0x4c /* 'L' */ :
case 0x4d /* 'M' */ :
case 0x4e /* 'N' */ :
case 0x4f /* 'O' */ :
case 0x50 /* 'P' */ :
case 0x51 /* 'Q' */ :
case 0x52 /* 'R' */ :
case 0x53 /* 'S' */ :
case 0x54 /* 'T' */ :
case 0x55 /* 'U' */ :
case 0x56 /* 'V' */ :
case 0x57 /* 'W' */ :
case 0x58 /* 'X' */ :
case 0x59 /* 'Y' */ :
case 0x5a /* 'Z' */ :
case 0x5b /* '[' */ :
case 0x5c /* '\\' */ :
case 0x5d /* ']' */ :
case 0x5e /* '^' */ :
case 0x5f /* '_' */ :
case 0x60 /* '`' */ :
case 0x61 /* 'a' */ :
case 0x62 /* 'b' */ :
case 0x63 /* 'c' */ :
case 0x64 /* 'd' */ :
case 0x65 /* 'e' */ :
case 0x66 /* 'f' */ :
case 0x67 /* 'g' */ :
case 0x68 /* 'h' */ :
case 0x69 /* 'i' */ :
case 0x6a /* 'j' */ :
case 0x6b /* 'k' */ :
case 0x6c /* 'l' */ :
case 0x6d /* 'm' */ :
case 0x6e /* 'n' */ :
case 0x6f /* 'o' */ :
case 0x70 /* 'p' */ :
case 0x71 /* 'q' */ :
case 0x72 /* 'r' */ :
case 0x73 /* 's' */ :
case 0x74 /* 't' */ :
case 0x75 /* 'u' */ :
case 0x76 /* 'v' */ :
case 0x77 /* 'w' */ :
case 0x78 /* 'x' */ :
case 0x79 /* 'y' */ :
case 0x7a /* 'z' */ :
case 0x7b /* '{' */ :
case 0x7c /* '|' */ :
case 0x7d /* '}' */ :
case 0x7e /* '~' */ :
case 0x7f:
{
{
match(_tokenSet_4);
{
if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2f /* '/' */ )) {
match("//");
{ // ( ... )*
for (;;) {
if ((_tokenSet_3.member(LA(1)))) {
{
match(_tokenSet_3);
}
}
break;
}
default:
if (((LA(1) == 0x2a /* '*' */ ) && ((LA(2) >= 0x0 /* '\0' */ && LA(2) <= 0x7f)))&&( LA(2)!='/' )) {
match('*' /* charlit */ );
else {
goto _loop36;
}
else {
goto _loop36;
}
}
_loop36:;
} // ( ... )*
mNL(false);
newline();
}
else if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2a /* '*' */ )) {
match("/*");
{ // ( ... )*
for (;;) {
// nongreedy exit test
if ((LA(1) == 0x2a /* '*' */ ) && (LA(2) == 0x2f /* '/' */ )) goto _loop39;
if ((_tokenSet_3.member(LA(1))) && ((LA(2) >= 0x0 /* '\0' */ && LA(2) <= 0x7f))) {
{
match(_tokenSet_3);
}
}
else if ((LA(1) == 0xa /* '\n' */ || LA(1) == 0xd /* '\r' */ )) {
mNL(false);
newline();
}
else {
goto _loop39;
}
}
_loop39:;
} // ( ... )*
match("*/");
}
else {
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());
}
}
_loop36:;
} // ( ... )*
match("*/");
_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP;
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
_token = makeToken(_ttype);
@@ -893,15 +793,15 @@ void Sqlite3Lexer::mWS(bool _createToken) {
match('\t' /* charlit */ );
break;
}
case 0xd /* '\r' */ :
case 0xc /* '\14' */ :
{
match('\r' /* charlit */ );
match('\14' /* charlit */ );
break;
}
case 0xa /* '\n' */ :
case 0xd /* '\r' */ :
{
match('\n' /* charlit */ );
newline();
mNL(false);
break;
}
default:
@@ -919,25 +819,25 @@ void Sqlite3Lexer::mWS(bool _createToken) {
_saveIndex=0;
}
void Sqlite3Lexer::mSTRING(bool _createToken) {
void Sqlite3Lexer::mSTRINGLITERAL(bool _createToken) {
int _ttype; ANTLR_USE_NAMESPACE(antlr)RefToken _token; ANTLR_USE_NAMESPACE(std)string::size_type _begin = text.length();
_ttype = STRING;
_ttype = STRINGLITERAL;
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
match('\'' /* charlit */ );
{ // ( ... )*
for (;;) {
if ((_tokenSet_5.member(LA(1)))) {
if ((_tokenSet_4.member(LA(1)))) {
{
match(_tokenSet_5);
match(_tokenSet_4);
}
}
else {
goto _loop42;
goto _loop45;
}
}
_loop42:;
_loop45:;
} // ( ... )*
match('\'' /* charlit */ );
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@@ -1236,25 +1136,18 @@ const unsigned long Sqlite3Lexer::_tokenSet_2_data_[] = { 4294967295UL, 42949672
// @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ `
// a b c d
const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Lexer::_tokenSet_2(_tokenSet_2_data_,8);
const unsigned long Sqlite3Lexer::_tokenSet_3_data_[] = { 4294966271UL, 4294967295UL, 4294967295UL, 4294967295UL, 0UL, 0UL, 0UL, 0UL };
// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xd 0xe 0xf 0x10 0x11
// 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f
// ! \" # $ % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a
// b c d
const unsigned long Sqlite3Lexer::_tokenSet_3_data_[] = { 4294958079UL, 4294967295UL, 4294967295UL, 4294967295UL, 0UL, 0UL, 0UL, 0UL };
// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xe 0xf 0x10 0x11 0x12
// 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f !
// \" # $ % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B
// C D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c
// d
const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Lexer::_tokenSet_3(_tokenSet_3_data_,8);
const unsigned long Sqlite3Lexer::_tokenSet_4_data_[] = { 4294966271UL, 4294966271UL, 4294967295UL, 4294967295UL, 0UL, 0UL, 0UL, 0UL };
// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xd 0xe 0xf 0x10 0x11
// 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f
// ! \" # $ % & \' ( ) + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A
// B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b
// c d
const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Lexer::_tokenSet_4(_tokenSet_4_data_,8);
const unsigned long Sqlite3Lexer::_tokenSet_5_data_[] = { 4294967295UL, 4294967167UL, 4294967295UL, 4294967295UL, 0UL, 0UL, 0UL, 0UL };
const unsigned long Sqlite3Lexer::_tokenSet_4_data_[] = { 4294967295UL, 4294967167UL, 4294967295UL, 4294967295UL, 0UL, 0UL, 0UL, 0UL };
// 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10
// 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e
// 0x1f ! \" # $ % & ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
// @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ `
// a b c d
const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Lexer::_tokenSet_5(_tokenSet_5_data_,8);
const ANTLR_USE_NAMESPACE(antlr)BitSet Sqlite3Lexer::_tokenSet_4(_tokenSet_4_data_,8);

View File

@@ -15,7 +15,7 @@ private:
public:
bool getCaseSensitiveLiterals() const
{
return true;
return false;
}
public:
Sqlite3Lexer(ANTLR_USE_NAMESPACE(std)istream& in);
@@ -29,10 +29,10 @@ public:
public: void mNUMERIC(bool _createToken);
public: void mPLUS(bool _createToken);
public: void mMINUS(bool _createToken);
public: void mSL_COMMENT(bool _createToken);
public: void mML_COMMENT(bool _createToken);
protected: void mNL(bool _createToken);
public: void mCOMMENT(bool _createToken);
public: void mWS(bool _createToken);
public: void mSTRING(bool _createToken);
public: void mSTRINGLITERAL(bool _createToken);
public: void mLPAREN(bool _createToken);
public: void mRPAREN(bool _createToken);
public: void mCOMMA(bool _createToken);
@@ -64,8 +64,6 @@ private:
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_3;
static const unsigned long _tokenSet_4_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_4;
static const unsigned long _tokenSet_5_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_5;
};
#endif /*INC_Sqlite3Lexer_hpp_*/

File diff suppressed because it is too large Load Diff

View File

@@ -58,8 +58,9 @@ public:
public: void functionname();
public: void subexpr();
public: void binaryoperator();
public: void unaryoperator();
public: void literalvalue();
public: void castexpr();
public: void caseexpr();
public: void raisefunction();
public: void suffixexpr();
public:
@@ -124,14 +125,6 @@ private:
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_20;
static const unsigned long _tokenSet_21_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_21;
static const unsigned long _tokenSet_22_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_22;
static const unsigned long _tokenSet_23_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_23;
static const unsigned long _tokenSet_24_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_24;
static const unsigned long _tokenSet_25_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_25;
};
#endif /*INC_Sqlite3Parser_hpp_*/

View File

@@ -8,12 +8,15 @@ options {
k=2;
exportVocab=sqlite3;
caseSensitive=false;
caseSensitiveLiterals=false;
}
tokens {
AUTOINCREMENT="AUTOINCREMENT";
AS="AS";
ASC="ASC";
AND="AND";
OR="OR";
CASE_T="CASE";
CHECK="CHECK";
CREATE="CREATE";
@@ -79,31 +82,25 @@ NUMERIC
( 'e' (PLUS|MINUS)? (DIGIT)+ )?
;
SL_COMMENT
:
"//" (~'\n')* '\n' { _ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; newline(); }
;
protected
NL :
( '\r'
| '\n' {newline();}
);
ML_COMMENT
: "/*"
( { LA(2)!='/' }? '*'
| '\n' { newline(); }
| ~('*'|'\n')
)*
"*/"
{$setType(ANTLR_USE_NAMESPACE(antlr)Token::SKIP);}
;
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); };
WS
:
( ' '
| '\t'
| '\r'
| '\n' {newline();}
) { _ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; }
;
WS :
( ' '
| '\t'
| '\f'
| NL
) { $setType(ANTLR_USE_NAMESPACE(antlr)Token::SKIP); };
STRING
STRINGLITERAL
:
// '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
'\'' ( ~('\'') )* '\''
@@ -224,7 +221,7 @@ columnconstraint
| NOT NULL_T (conflictclause)?
| UNIQUE (conflictclause)?
| CHECK LPAREN expr RPAREN
| DEFAULT (signednumber | STRING | LPAREN expr RPAREN)
| DEFAULT (signednumber | STRINGLITERAL | LPAREN expr RPAREN)
| COLLATE collationname
| foreignkeyclause)
{#columnconstraint = #([COLUMNCONSTRAINT, "COLUMNCONSTRAINT"], #columnconstraint);}
@@ -267,7 +264,8 @@ foreignkeyclause
)
| MATCH name
)*
( (NOT)? DEFERRABLE (INITIALLY (DEFERRED | IMMEDIATE))? )?
( (NOT DEFERRABLE) => NOT DEFERRABLE (INITIALLY (DEFERRED | IMMEDIATE))?
| DEFERRABLE (INITIALLY (DEFERRED | IMMEDIATE) ) )?
;
selectstmt
@@ -279,39 +277,50 @@ functionname
expr
:
subexpr ( ( binaryoperator | AND | OR) subexpr )*
// {#expr = #([EXPR, "EXPR"],#expr);}
( subexpr (binaryoperator | AND | OR) ) => subexpr ( ( binaryoperator | AND | OR) subexpr )*
| subexpr
;
subexpr
:
(unaryoperator)?
( MINUS | PLUS | TILDE | NOT)?
( literalvalue
// | bindparameter TODO
| ((databasename DOT)? tablename)? columnname
| functionname LPAREN (expr (COMMA expr)* )? RPAREN //TODO
| CAST LPAREN expr AS type_name RPAREN
| LPAREN expr RPAREN
| ( (NOT)? EXISTS)? LPAREN selectstmt RPAREN
| CASE_T (expr)? (WHEN expr THEN expr)+ (ELSE expr)? END
| castexpr
| (EXISTS)? LPAREN (expr | selectstmt) RPAREN
| caseexpr
| raisefunction
)
(suffixexpr)?
;
castexpr
:
CAST LPAREN expr AS type_name RPAREN
;
caseexpr
:
CASE_T (expr)? (WHEN expr THEN expr)+ (ELSE expr)? END
;
suffixexpr
:
( COLLATE collationname
| (NOT)?
( (LIKE | GLOB | REGEXP | MATCH) expr (ESCAPE expr)?
| IN ( LPAREN (selectstmt | expr (COMMA expr)* )? RPAREN | tablename)
)
)
COLLATE collationname
// | (NOT)?
// ( (LIKE | GLOB | REGEXP | MATCH)
// ( (expr ESCAPE) => ESCAPE expr | expr)
// | IN ( LPAREN (selectstmt | expr (COMMA expr)* )? RPAREN | tablename)
// )
;
literalvalue
: signednumber
| STRING
:
NUMERIC
| STRINGLITERAL
// | blob-literal
| NULL_T
| CURRENT_TIME
@@ -320,9 +329,8 @@ literalvalue
;
raisefunction
: RAISE LPAREN ( IGNORE | (ROLLBACK | ABORT | FAIL) COMMA STRING ) RPAREN ;
: RAISE LPAREN ( IGNORE | (ROLLBACK | ABORT | FAIL) COMMA STRINGLITERAL ) RPAREN ;
// TODO operators missing
binaryoperator
:
OROP
@@ -331,9 +339,6 @@ binaryoperator
| BITWISELEFT | BITWISERIGHT | AMPERSAND | BITOR
| LOWER | LOWEREQUAL | GREATER | GREATEREQUAL
| EQUAL | EQUAL2 | UNEQUAL | UNEQUAL2
| IS (NOT)? | IN | LIKE | GLOB | MATCH | REGEXP
| IS | IN | LIKE | GLOB | MATCH | REGEXP
;
unaryoperator
: MINUS | PLUS | TILDE | NOT ;

View File

@@ -15,100 +15,100 @@ struct CUSTOM_API sqlite3TokenTypes {
AUTOINCREMENT = 4,
AS = 5,
ASC = 6,
CASE_T = 7,
CHECK = 8,
CREATE = 9,
COLLATE = 10,
CONFLICT = 11,
CONSTRAINT = 12,
CURRENT_TIME = 13,
CURRENT_DATE = 14,
CURRENT_TIMESTAMP = 15,
DEFAULT = 16,
DESC = 17,
ELSE_T = 18,
END = 19,
ESCAPE = 20,
GLOB = 21,
KEY = 22,
LIKE = 23,
TABLE = 24,
IF_T = 25,
IS = 26,
NOT = 27,
NULL_T = 28,
MATCH = 29,
EXISTS = 30,
ON = 31,
PRIMARY = 32,
REFERENCES = 33,
REGEXP = 34,
TEMPORARY = 35,
TEMP = 36,
THEN = 37,
UNIQUE = 38,
WHEN = 39,
TYPE_NAME = 40,
COLUMNDEF = 41,
COLUMNCONSTRAINT = 42,
TABLECONSTRAINT = 43,
CREATETABLE = 44,
DIGIT = 45,
DOT = 46,
ID = 47,
QUOTEDID = 48,
NUMERIC = 49,
SL_COMMENT = 50,
ML_COMMENT = 51,
WS = 52,
STRING = 53,
LPAREN = 54,
RPAREN = 55,
COMMA = 56,
SEMI = 57,
PLUS = 58,
MINUS = 59,
STAR = 60,
TILDE = 61,
AMPERSAND = 62,
BITOR = 63,
OROP = 64,
EQUAL = 65,
EQUAL2 = 66,
GREATER = 67,
GREATEREQUAL = 68,
LOWER = 69,
LOWEREQUAL = 70,
UNEQUAL = 71,
UNEQUAL2 = 72,
BITWISELEFT = 73,
BITWISERIGHT = 74,
FOREIGN = 75,
ROLLBACK = 76,
ABORT = 77,
FAIL = 78,
IGNORE = 79,
REPLACE = 80,
DELETE = 81,
UPDATE = 82,
SET = 83,
CASCADE = 84,
RESTRICT = 85,
NO = 86,
ACTION = 87,
DEFERRABLE = 88,
INITIALLY = 89,
DEFERRED = 90,
IMMEDIATE = 91,
SELECT = 92,
AND = 93,
OR = 94,
AND = 7,
OR = 8,
CASE_T = 9,
CHECK = 10,
CREATE = 11,
COLLATE = 12,
CONFLICT = 13,
CONSTRAINT = 14,
CURRENT_TIME = 15,
CURRENT_DATE = 16,
CURRENT_TIMESTAMP = 17,
DEFAULT = 18,
DESC = 19,
ELSE_T = 20,
END = 21,
ESCAPE = 22,
GLOB = 23,
KEY = 24,
LIKE = 25,
TABLE = 26,
IF_T = 27,
IS = 28,
NOT = 29,
NULL_T = 30,
MATCH = 31,
EXISTS = 32,
ON = 33,
PRIMARY = 34,
REFERENCES = 35,
REGEXP = 36,
TEMPORARY = 37,
TEMP = 38,
THEN = 39,
UNIQUE = 40,
WHEN = 41,
TYPE_NAME = 42,
COLUMNDEF = 43,
COLUMNCONSTRAINT = 44,
TABLECONSTRAINT = 45,
CREATETABLE = 46,
DIGIT = 47,
DOT = 48,
ID = 49,
QUOTEDID = 50,
NUMERIC = 51,
NL = 52,
COMMENT = 53,
WS = 54,
STRINGLITERAL = 55,
LPAREN = 56,
RPAREN = 57,
COMMA = 58,
SEMI = 59,
PLUS = 60,
MINUS = 61,
STAR = 62,
TILDE = 63,
AMPERSAND = 64,
BITOR = 65,
OROP = 66,
EQUAL = 67,
EQUAL2 = 68,
GREATER = 69,
GREATEREQUAL = 70,
LOWER = 71,
LOWEREQUAL = 72,
UNEQUAL = 73,
UNEQUAL2 = 74,
BITWISELEFT = 75,
BITWISERIGHT = 76,
FOREIGN = 77,
ROLLBACK = 78,
ABORT = 79,
FAIL = 80,
IGNORE = 81,
REPLACE = 82,
DELETE = 83,
UPDATE = 84,
SET = 85,
CASCADE = 86,
RESTRICT = 87,
NO = 88,
ACTION = 89,
DEFERRABLE = 90,
INITIALLY = 91,
DEFERRED = 92,
IMMEDIATE = 93,
SELECT = 94,
CAST = 95,
ELSE = 96,
IN = 97,
RAISE = 98,
SLASH = 99,
PERCENT = 100,
RAISE = 97,
SLASH = 98,
PERCENT = 99,
IN = 100,
NULL_TREE_LOOKAHEAD = 3
};
#ifdef __cplusplus