grammar: cleanup expr and fix between suffix expression

This commit is contained in:
Peinthor Rene
2014-06-25 19:20:40 +02:00
parent d85672511c
commit dd85b16660
6 changed files with 737 additions and 610 deletions

File diff suppressed because one or more lines are too long

View File

@@ -2,7 +2,7 @@
#define INC_Sqlite3Lexer_hpp_
#include <antlr/config.hpp>
/* $ANTLR 2.7.7 (20130425): "sqlite3.g" -> "Sqlite3Lexer.hpp"$ */
/* $ANTLR 2.7.7 (20140222): "sqlite3.g" -> "Sqlite3Lexer.hpp"$ */
#include <antlr/CommonToken.hpp>
#include <antlr/InputBuffer.hpp>
#include <antlr/BitSet.hpp>

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
#define INC_Sqlite3Parser_hpp_
#include <antlr/config.hpp>
/* $ANTLR 2.7.7 (20130425): "sqlite3.g" -> "Sqlite3Parser.hpp"$ */
/* $ANTLR 2.7.7 (20140222): "sqlite3.g" -> "Sqlite3Parser.hpp"$ */
#include <antlr/TokenStream.hpp>
#include <antlr/TokenBuffer.hpp>
#include "sqlite3TokenTypes.hpp"
@@ -65,6 +65,8 @@ public:
public: void caseexpr();
public: void raisefunction();
public: void suffixexpr();
public: void like_operator();
public: void between_subexpr();
public:
ANTLR_USE_NAMESPACE(antlr)RefAST getAST()
{
@@ -76,10 +78,10 @@ protected:
private:
static const char* tokenNames[];
#ifndef NO_STATIC_CONSTS
static const int NUM_TOKENS = 105;
static const int NUM_TOKENS = 106;
#else
enum {
NUM_TOKENS = 105
NUM_TOKENS = 106
};
#endif
@@ -139,8 +141,6 @@ private:
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_26;
static const unsigned long _tokenSet_27_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_27;
static const unsigned long _tokenSet_28_data_[];
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_28;
};
#endif /*INC_Sqlite3Parser_hpp_*/

View File

@@ -20,6 +20,7 @@ tokens {
ASC="ASC";
AND="AND";
OR="OR";
BETWEEN="BETWEEN";
CASCADE="CASCADE";
CASE_T="CASE";
CAST="CAST";
@@ -396,8 +397,7 @@ functionname
expr
:
( subexpr (binaryoperator | AND | OR) ) => subexpr ( ( binaryoperator | AND | OR) subexpr )*
| subexpr
subexpr ((binaryoperator | AND | OR) subexpr )*
;
subexpr
@@ -425,15 +425,27 @@ caseexpr
CASE_T (expr)? (WHEN expr THEN expr)+ (ELSE_T expr)? END
;
like_operator
:
LIKE
| GLOB
| REGEXP
| MATCH
;
between_subexpr
:
subexpr (AND subexpr)+
;
suffixexpr
:
COLLATE collationname
// | (NOT)?
// ( (LIKE | GLOB | REGEXP | MATCH)
// ( (expr ESCAPE) => ESCAPE expr | expr)
| IN ( LPAREN (selectstmt | expr (COMMA expr)* )? RPAREN | tablename)
// )
COLLATE collationname
| (NOT)?
( BETWEEN subexpr ((binaryoperator | OR) subexpr )* AND expr
| IN ( LPAREN (selectstmt | expr (COMMA expr)* )? RPAREN | tablename)
| like_operator subexpr (ESCAPE subexpr)?
)
;
literalvalue
@@ -458,6 +470,6 @@ binaryoperator
| BITWISELEFT | BITWISERIGHT | AMPERSAND | BITOR
| LOWER | LOWEREQUAL | GREATER | GREATEREQUAL
| EQUAL | EQUAL2 | UNEQUAL | UNEQUAL2
| IS | ((NOT)? (LIKE | GLOB | MATCH | REGEXP | IN))
| IS | like_operator
;

View File

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