grammar: Simplify code

This commit is contained in:
Martin Kleusberg
2017-02-17 13:41:43 +01:00
parent eddeb78e27
commit bef6dc045f
5 changed files with 637 additions and 720 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -52,7 +52,7 @@ public:
public: void selectstmt();
public: void name();
public: void expr();
public: void indexcolumn();
public: void indexedcolumn();
public: void keywordascolumnname();
public: void columnname();
public: void type_name();
@@ -60,7 +60,6 @@ public:
public: void conflictclause();
public: void literalvalue();
public: void foreignkeyclause();
public: void indexedcolumn();
public: void functionname();
public: void subexpr();
public: void binaryoperator();

View File

@@ -88,7 +88,7 @@ tokens {
TABLECONSTRAINT;
CREATETABLE;
CREATEINDEX;
INDEXCOLUMN;
INDEXEDCOLUMN;
KEYWORDASTABLENAME;
KEYWORDASCOLUMNNAME;
}
@@ -281,20 +281,10 @@ createtable
createindex
:
CREATE (UNIQUE)? INDEX (IF_T NOT EXISTS)? (tablename | keywordastablename) ON (tablename | keywordastablename)
( LPAREN indexcolumn (COMMA indexcolumn)* RPAREN (WHERE expr)? )
( LPAREN indexedcolumn (COMMA indexedcolumn)* RPAREN (WHERE expr)? )
{#createindex = #([CREATEINDEX, "CREATEINDEX"], #createindex);}
;
indexcolumn
:
//((columnname | keywordascolumnname)
// | expr)
expr
(COLLATE collationname)?
(ASC | DESC)?
{#indexcolumn = #([INDEXCOLUMN, "INDEXCOLUMN"], #indexcolumn);}
;
keywordascolumnname
:
( ABORT
@@ -402,7 +392,8 @@ tableconstraint
indexedcolumn
:
columnname (COLLATE collationname)? (ASC|DESC)? (AUTOINCREMENT)?
expr (COLLATE collationname)? (ASC|DESC)? (AUTOINCREMENT)?
{#indexedcolumn = #([INDEXEDCOLUMN, "INDEXEDCOLUMN"], #indexedcolumn);}
;
conflictclause

View File

@@ -84,7 +84,7 @@ struct CUSTOM_API sqlite3TokenTypes {
TABLECONSTRAINT = 73,
CREATETABLE = 74,
CREATEINDEX = 75,
INDEXCOLUMN = 76,
INDEXEDCOLUMN = 76,
KEYWORDASTABLENAME = 77,
KEYWORDASCOLUMNNAME = 78,
DIGIT = 79,

View File

@@ -574,6 +574,8 @@ QString columnname(const antlr::RefAST& n)
{
if(n->getType() == sqlite3TokenTypes::KEYWORDASCOLUMNNAME)
return concatTextAST(n->getFirstChild());
else if(n->getType() == sqlite3TokenTypes::INDEXEDCOLUMN)
return columnname(n->getFirstChild());
else
return identifier(n);
}
@@ -1135,7 +1137,7 @@ IndexPtr CreateIndexWalker::index()
s = s->getNextSibling(); // first column name
antlr::RefAST column = s;
// loop columndefs
while(column != antlr::nullAST && column->getType() == sqlite3TokenTypes::INDEXCOLUMN)
while(column != antlr::nullAST && column->getType() == sqlite3TokenTypes::INDEXEDCOLUMN)
{
parsecolumn(index, column->getFirstChild());
column = column->getNextSibling(); // COMMA or RPAREN