diff --git a/SQLPGrammar.output b/SQLPGrammar.output index 09351ed31526fce1a71d1f2c50ecd0ff682ef226..619c9fde95d4046ddcdcc22979636a909c6234bf 100644 --- a/SQLPGrammar.output +++ b/SQLPGrammar.output @@ -93,44 +93,46 @@ Grammar 11 | Union_Query UNION Select_Query 12 Select_List: STAR - 13 | AttrPath - 14 | AttrPath ',' Select_List + 13 | Col + 14 | Col ',' Select_List - 15 AttrPath: Identifier - 16 | Identifier '.' AttrPath + 15 Col: Identifier '.' AttrPath - 17 Operator: EQ - 18 | NE - 19 | LE - 20 | GE - 21 | LT - 22 | GT + 16 AttrPath: Identifier + 17 | Identifier '.' AttrPath - 23 Bool: AttrPath Operator AttrPath - 24 | AttrPath Operator CONSTANT + 18 Operator: EQ + 19 | NE + 20 | LE + 21 | GE + 22 | LT + 23 | GT - 25 Pred: Bool AND Pred - 26 | NOT Pred - 27 | EXIST '(' Query ')' + 24 Bool: Col Operator Col + 25 | Col Operator CONSTANT + + 26 Pred: Bool AND Pred + 27 | NOT Pred + 28 | EXIST '(' Query ')' Terminals, with rules where they appear $end (0) 0 -'(' (40) 27 -')' (41) 27 +'(' (40) 28 +')' (41) 28 ',' (44) 9 14 -'.' (46) 16 +'.' (46) 15 17 error (256) IMPLIES (258) OR (259) -AND (260) 25 -NOT (261) 26 -LE (262) 19 -GE (263) 20 -LT (264) 21 -GT (265) 22 -NE (266) 18 +AND (260) 26 +NOT (261) 27 +LE (262) 20 +GE (263) 21 +LT (264) 22 +GT (265) 23 +NE (266) 19 HAS (267) MAX (268) MIN (269) @@ -139,7 +141,7 @@ ASC (271) DESC (272) MOD (273) ASSIGN (274) -EQ (275) 17 +EQ (275) 18 STAR (276) 12 COMMA (277) DOT (278) @@ -151,7 +153,7 @@ UNIT (283) TIME (284) SPACE (285) IDENTIFIER (286) 2 -CONSTANT (287) 24 +CONSTANT (287) 25 STRING_LITERAL (288) SIZEOF (289) STORE (290) @@ -186,7 +188,7 @@ WHERE (318) 6 7 ORDER (319) PRECOMPUTED (320) ONE (321) -EXIST (322) 27 +EXIST (322) 28 FOR (323) ALL (324) TRANSACTION (325) @@ -215,9 +217,9 @@ $accept (91) SQLPProgram (92) on left: 1, on right: 0 Identifier (93) - on left: 2, on right: 8 9 15 16 + on left: 2, on right: 8 9 15 16 17 Query (94) - on left: 3, on right: 1 27 + on left: 3, on right: 1 28 Select_Query (95) on left: 4, on right: 10 11 Body (96) @@ -228,14 +230,16 @@ Union_Query (98) on left: 10 11, on right: 3 11 Select_List (99) on left: 12 13 14, on right: 4 14 -AttrPath (100) - on left: 15 16, on right: 13 14 16 23 24 -Operator (101) - on left: 17 18 19 20 21 22, on right: 23 24 -Bool (102) - on left: 23 24, on right: 6 25 -Pred (103) - on left: 25 26 27, on right: 7 25 26 +Col (100) + on left: 15, on right: 13 14 24 25 +AttrPath (101) + on left: 16 17, on right: 15 17 +Operator (102) + on left: 18 19 20 21 22 23, on right: 24 25 +Bool (103) + on left: 24 25, on right: 6 26 +Pred (104) + on left: 26 27 28, on right: 7 26 27 State 0 @@ -259,7 +263,7 @@ State 1 Identifier go to state 8 Select_List go to state 9 - AttrPath go to state 10 + Col go to state 10 State 2 @@ -309,13 +313,10 @@ State 7 State 8 - 15 AttrPath: Identifier . - 16 | Identifier . '.' AttrPath + 15 Col: Identifier . '.' AttrPath '.' shift, and go to state 13 - $default reduce using rule 15 (AttrPath) - State 9 @@ -328,8 +329,8 @@ State 9 State 10 - 13 Select_List: AttrPath . - 14 | AttrPath . ',' Select_List + 13 Select_List: Col . + 14 | Col . ',' Select_List ',' shift, and go to state 16 @@ -354,12 +355,12 @@ State 12 State 13 - 16 AttrPath: Identifier '.' . AttrPath + 15 Col: Identifier '.' . AttrPath IDENTIFIER shift, and go to state 7 - Identifier go to state 8 - AttrPath go to state 18 + Identifier go to state 18 + AttrPath go to state 19 State 14 @@ -370,8 +371,8 @@ State 14 IDENTIFIER shift, and go to state 7 - Identifier go to state 19 - TablePath go to state 20 + Identifier go to state 20 + TablePath go to state 21 State 15 @@ -383,14 +384,14 @@ State 15 State 16 - 14 Select_List: AttrPath ',' . Select_List + 14 Select_List: Col ',' . Select_List STAR shift, and go to state 6 IDENTIFIER shift, and go to state 7 Identifier go to state 8 - Select_List go to state 21 - AttrPath go to state 10 + Select_List go to state 22 + Col go to state 10 State 17 @@ -402,257 +403,284 @@ State 17 State 18 - 16 AttrPath: Identifier '.' AttrPath . + 16 AttrPath: Identifier . + 17 | Identifier . '.' AttrPath + + '.' shift, and go to state 23 $default reduce using rule 16 (AttrPath) State 19 + 15 Col: Identifier '.' AttrPath . + + $default reduce using rule 15 (Col) + + +State 20 + 8 TablePath: Identifier . Identifier 9 | Identifier . Identifier ',' TablePath IDENTIFIER shift, and go to state 7 - Identifier go to state 22 + Identifier go to state 24 -State 20 +State 21 5 Body: FROM TablePath . 6 | FROM TablePath . WHERE Bool 7 | FROM TablePath . WHERE Pred - WHERE shift, and go to state 23 + WHERE shift, and go to state 25 $default reduce using rule 5 (Body) -State 21 +State 22 - 14 Select_List: AttrPath ',' Select_List . + 14 Select_List: Col ',' Select_List . $default reduce using rule 14 (Select_List) -State 22 +State 23 + + 17 AttrPath: Identifier '.' . AttrPath + + IDENTIFIER shift, and go to state 7 + + Identifier go to state 18 + AttrPath go to state 26 + + +State 24 8 TablePath: Identifier Identifier . 9 | Identifier Identifier . ',' TablePath - ',' shift, and go to state 24 + ',' shift, and go to state 27 $default reduce using rule 8 (TablePath) -State 23 +State 25 6 Body: FROM TablePath WHERE . Bool 7 | FROM TablePath WHERE . Pred - NOT shift, and go to state 25 + NOT shift, and go to state 28 IDENTIFIER shift, and go to state 7 - EXIST shift, and go to state 26 + EXIST shift, and go to state 29 Identifier go to state 8 - AttrPath go to state 27 - Bool go to state 28 - Pred go to state 29 + Col go to state 30 + Bool go to state 31 + Pred go to state 32 -State 24 +State 26 + + 17 AttrPath: Identifier '.' AttrPath . + + $default reduce using rule 17 (AttrPath) + + +State 27 9 TablePath: Identifier Identifier ',' . TablePath IDENTIFIER shift, and go to state 7 - Identifier go to state 19 - TablePath go to state 30 + Identifier go to state 20 + TablePath go to state 33 -State 25 +State 28 - 26 Pred: NOT . Pred + 27 Pred: NOT . Pred - NOT shift, and go to state 25 + NOT shift, and go to state 28 IDENTIFIER shift, and go to state 7 - EXIST shift, and go to state 26 + EXIST shift, and go to state 29 Identifier go to state 8 - AttrPath go to state 27 - Bool go to state 31 - Pred go to state 32 + Col go to state 30 + Bool go to state 34 + Pred go to state 35 -State 26 +State 29 - 27 Pred: EXIST . '(' Query ')' + 28 Pred: EXIST . '(' Query ')' - '(' shift, and go to state 33 + '(' shift, and go to state 36 -State 27 +State 30 - 23 Bool: AttrPath . Operator AttrPath - 24 | AttrPath . Operator CONSTANT + 24 Bool: Col . Operator Col + 25 | Col . Operator CONSTANT - LE shift, and go to state 34 - GE shift, and go to state 35 - LT shift, and go to state 36 - GT shift, and go to state 37 - NE shift, and go to state 38 - EQ shift, and go to state 39 + LE shift, and go to state 37 + GE shift, and go to state 38 + LT shift, and go to state 39 + GT shift, and go to state 40 + NE shift, and go to state 41 + EQ shift, and go to state 42 - Operator go to state 40 + Operator go to state 43 -State 28 +State 31 6 Body: FROM TablePath WHERE Bool . - 25 Pred: Bool . AND Pred + 26 Pred: Bool . AND Pred - AND shift, and go to state 41 + AND shift, and go to state 44 $default reduce using rule 6 (Body) -State 29 +State 32 7 Body: FROM TablePath WHERE Pred . $default reduce using rule 7 (Body) -State 30 +State 33 9 TablePath: Identifier Identifier ',' TablePath . $default reduce using rule 9 (TablePath) -State 31 +State 34 - 25 Pred: Bool . AND Pred + 26 Pred: Bool . AND Pred - AND shift, and go to state 41 + AND shift, and go to state 44 -State 32 +State 35 - 26 Pred: NOT Pred . + 27 Pred: NOT Pred . - $default reduce using rule 26 (Pred) + $default reduce using rule 27 (Pred) -State 33 +State 36 - 27 Pred: EXIST '(' . Query ')' + 28 Pred: EXIST '(' . Query ')' SELECT shift, and go to state 1 - Query go to state 42 + Query go to state 45 Select_Query go to state 4 Union_Query go to state 5 -State 34 +State 37 - 19 Operator: LE . + 20 Operator: LE . - $default reduce using rule 19 (Operator) + $default reduce using rule 20 (Operator) -State 35 +State 38 - 20 Operator: GE . + 21 Operator: GE . - $default reduce using rule 20 (Operator) + $default reduce using rule 21 (Operator) -State 36 +State 39 - 21 Operator: LT . + 22 Operator: LT . - $default reduce using rule 21 (Operator) + $default reduce using rule 22 (Operator) -State 37 +State 40 - 22 Operator: GT . + 23 Operator: GT . - $default reduce using rule 22 (Operator) + $default reduce using rule 23 (Operator) -State 38 +State 41 - 18 Operator: NE . + 19 Operator: NE . - $default reduce using rule 18 (Operator) + $default reduce using rule 19 (Operator) -State 39 +State 42 - 17 Operator: EQ . + 18 Operator: EQ . - $default reduce using rule 17 (Operator) + $default reduce using rule 18 (Operator) -State 40 +State 43 - 23 Bool: AttrPath Operator . AttrPath - 24 | AttrPath Operator . CONSTANT + 24 Bool: Col Operator . Col + 25 | Col Operator . CONSTANT IDENTIFIER shift, and go to state 7 - CONSTANT shift, and go to state 43 + CONSTANT shift, and go to state 46 Identifier go to state 8 - AttrPath go to state 44 + Col go to state 47 -State 41 +State 44 - 25 Pred: Bool AND . Pred + 26 Pred: Bool AND . Pred - NOT shift, and go to state 25 + NOT shift, and go to state 28 IDENTIFIER shift, and go to state 7 - EXIST shift, and go to state 26 + EXIST shift, and go to state 29 Identifier go to state 8 - AttrPath go to state 27 - Bool go to state 31 - Pred go to state 45 + Col go to state 30 + Bool go to state 34 + Pred go to state 48 -State 42 +State 45 - 27 Pred: EXIST '(' Query . ')' + 28 Pred: EXIST '(' Query . ')' - ')' shift, and go to state 46 + ')' shift, and go to state 49 -State 43 +State 46 - 24 Bool: AttrPath Operator CONSTANT . + 25 Bool: Col Operator CONSTANT . - $default reduce using rule 24 (Bool) + $default reduce using rule 25 (Bool) -State 44 +State 47 - 23 Bool: AttrPath Operator AttrPath . + 24 Bool: Col Operator Col . - $default reduce using rule 23 (Bool) + $default reduce using rule 24 (Bool) -State 45 +State 48 - 25 Pred: Bool AND Pred . + 26 Pred: Bool AND Pred . - $default reduce using rule 25 (Pred) + $default reduce using rule 26 (Pred) -State 46 +State 49 - 27 Pred: EXIST '(' Query ')' . + 28 Pred: EXIST '(' Query ')' . - $default reduce using rule 27 (Pred) + $default reduce using rule 28 (Pred) diff --git a/SQLPGrammar.y b/SQLPGrammar.y index 1588df77b90eb8f9e0f5163fafec7fd52bbaa420..c8cf1f4e1a07817fb43099927b72797884b067b1 100644 --- a/SQLPGrammar.y +++ b/SQLPGrammar.y @@ -28,95 +28,68 @@ SQLPProgram : Query { printf("Input Query\n"); - struct node *n = new_node(1, SQLPProgram); - n->children[0] = $1; + cons_cell *n = $1; printf("Printing Tree\n"); - print_tree(n, 0); - struct linked_node *linked_tree = malloc(sizeof(struct linked_node)); - translate(linked_tree, n); - print_linked_tree(linked_tree, 0); + print_cons_tree(n, 0); } ; Identifier : IDENTIFIER { printf("|%s| ", yytext); - $$ = new_node(1, Identifier); - $$->children[0] = new_node(0, IDENTIFIER); + $$ = yytext; } ; Query : Union_Query { printf("Union Query\n"); - $$ = new_node(1, Query); - $$->children[0] = $1; + $$ = $1; } ; Select_Query : SELECT Select_List Body { printf("SQLP Query\n"); - $$ = new_node(3, Select_Query); - $$->children[0] = new_node(0, SELECT); - $$->children[1] = $2; - $$->children[2] = $3; + $$ = create_proj_operator($1, $2); } ; Body : FROM TablePath { printf("Body 1\n"); - $$ = new_node(2, Body); - $$->children[0] = new_node(0, FROM); - $$->children[1] = $2;} + $$ = $2; + } | FROM TablePath WHERE Bool { printf("Body 2\n"); - $$ = new_node(4, Body); - $$->children[0] = new_node(0, FROM); - $$->children[1] = $2; - $$->children[2] = new_node(0, WHERE); - $$->children[3] = $4; + $$ = create_eval_operator($4, $2); } | FROM TablePath WHERE Pred { printf("Body 3\n"); - $$ = new_node(4, Body); - $$->children[0] = new_node(0, FROM); - $$->children[1] = $2; - $$->children[2] = new_node(0, WHERE); - $$->children[3] = $4; + $$ = create_eval_operator($4, $2); } ; + TablePath : Identifier Identifier - { printf("table path1\n"); - $$ = new_node(2, TablePath); - $$->children[0] = $1; - $$->children[1] = $2; - } + { printf("last table path\n"); + $$ = create_atom_operator($1, $2); + } | Identifier Identifier ',' TablePath { printf("table path2\n"); - $$ = new_node(4, TablePath); - $$->children[0] = $1; - $$->children[1] = $2; - $$->children[2] = new_node(0, COMMA); - $$->children[3] = $4; + $$ = create_cross_operator(create_atom_operator($1, $2), $4); } ; Union_Query : Select_Query { printf("union query 1\n"); - $$ = new_node(1, Union_Query); - $$->children[0] = $1; + $$ = $1; } | Union_Query UNION Select_Query { printf("union query 2\n"); - $$ = new_node(3, Union_Query); - $$->children[0] = $1; - $$->children[1] = new_node(0, UNION); - $$->children[2] = $3; + $$ = create_union_all_operator($1, $3); } ; @@ -126,34 +99,34 @@ Select_List $$ = new_node(1, Select_List); $$->children[0] = new_node(0, STAR); } - | AttrPath + | Col { printf("select list attr path\n"); - $$ = new_node(1, Select_List); - $$->children[0] = $1; + $$ = create_assign_operator($1, $1, NULL); } - | AttrPath ',' Select_List + | Col ',' Select_List { printf("Select list\n"); - $$ = new_node(3, Select_List); - $$->children[0] = $1; - $$->children[1] = new_node(0, COMMA); - $$->children[2] = $3; + $$ = create_assign_operator($1, $1, $2); } ; +Col + : Identifier '.' AttrPath + { + printf("col\n"); + $$ = create_spcol($1, $3); + } + AttrPath : Identifier { printf("path id\n"); - $$ = new_node(1, AttrPath); - $$->children[0] = $1; + $$ = create_pf(create_attr($1), NULL); } | Identifier '.' AttrPath { printf("Path Function\n"); - $$ = new_node(3, AttrPath); - $$->children[0] = $1; - $$->children[1] = new_node(0, DOT); - $$->children[2] = $3; + $$ = create_pf(create_attr($1), $3); } ; + Operator : EQ | NE @@ -164,42 +137,31 @@ Operator ; Bool - : AttrPath Operator AttrPath - { printf("AttrPath op AttrPath\n"); - $$ = new_node(3, Bool); - $$->children[0] = $1; - $$->children[1] = $2; - $$->children[2] = $3; + : Col Operator Col + { printf("Col op Col\n"); + $$ = create_comp_operator($2, $1, $3, NULL); } - | AttrPath Operator CONSTANT - { printf("AttrPath op Constant\n"); - $$ = new_node(3, Bool); - $$->children[0] = $1; - $$->children[1] = $2; - $$->children[2] = new_node(0, CONSTANT); + | Col Operator CONSTANT + { printf("Col op Constant\n"); + cons_cell* a = create_cons_cell_w_atom(CONSTANT, NULL); + $$ = create_comp_operator($2, $1, a, NULL); } ; Pred : Bool AND Pred { printf("pred and pred\n"); - $$ = new_node(3, Pred); - $$->children[0] = $1; - $$->children[1] = new_node(0, AND); - $$->children[2] = $3; - + $$ = $1; + $$->cdr->cdr->cdr->cdr->car = $3; } | NOT Pred { printf("Not Pred\n"); - $$ = new_node(2, Pred); - $$->children[0] = new_node(0, NOT); - $$->children[1] = $2; - + $$ = create_not_operator($1, NULL); } | EXIST '(' Query ')' { printf("Exist query\n"); - $$ = new_node(2, Pred); - $$->children[0] = new_node(0, EXIST); - $$->children[1] = $3; + $$ = create_atom("INPROG"); + //$$->children[0] = new_node(0, EXIST); + //$$->children[1] = $3; } - ; \ No newline at end of file + ; diff --git a/SQLPGrammer2.y b/SQLPGrammer2.y deleted file mode 100644 index 8e32d8cafeb3787907c7a044c00d67ae33c01e60..0000000000000000000000000000000000000000 --- a/SQLPGrammer2.y +++ /dev/null @@ -1,166 +0,0 @@ -%{ - #include "util.h" -%} - -// %union { -// struct node *n; -//} - -%define api.value.type {struct node *} -%token IMPLIES OR AND NOT LE GE LT GT NE HAS MAX MIN AS ASC DESC MOD ASSIGN EQ STAR COMMA DOT - -%token SIZE SELECTIVITY OVERLAP -%token FREQUENCY UNIT TIME SPACE - -%token IDENTIFIER CONSTANT STRING_LITERAL SIZEOF - -%token STORE STORING DYNAMIC STATIC OF TYPE ORDERED BY -%token INDEX LIST ARRAY BINARY TREE DISTRIBUTED POINTER - -%token SCHEMA CLASS ISA PROPERTIES CONSTRAINTS PROPERTY -%token ON DETERMINED COVER QUERY GIVEN FROM SELECT WHERE ORDER -%token PRECOMPUTED ONE EXIST FOR ALL TRANSACTION INTCLASS STRCLASS -%token INTEGER REAL DOUBLEREAL STRING MAXLEN RANGE TO -%token INSERT END CHANGE DELETE DECLARE RETURN UNION - -%start SQLPProgram -%% -SQLPProgram - : Query - { printf("Input Query\n"); - cons_cell *n = $1; - printf("Printing Tree\n"); - print_cons_tree(n, 0); - } - ; - -Identifier - : IDENTIFIER - { printf("|%s| ", yytext); - $$ = yytext; - } - ; - -Query - : Union_Query - { printf("Union Query\n"); - $$ = $1; - } - ; - -Select_Query - : SELECT Select_List Body - { printf("SQLP Query\n"); - $$ = create_proj_operator($1, $2); - } - ; - -Body - : FROM TablePath - { printf("Body 1\n"); - $$ = create_cons_cell($2,NULL); - | FROM TablePath WHERE Bool - { printf("Body 2\n"); - $$ = create_eval_operator($4, $2); - } - | FROM TablePath WHERE Pred - { printf("Body 3\n"); - $$ = create_eval_operator($4, $2); - } - ; - - -TablePath - : Identifier Identifier - { printf("last table path\n"); - $$ = create_atom_operator($1, $2); - } - | Identifier Identifier ',' TablePath - { printf("table path2\n"); - $$ = create_cross_operator(create_atom_operator($1, $2), $4); - } - ; - -Union_Query - : Select_Query - { printf("union query 1\n"); - $$ = $1; - } - | Union_Query UNION Select_Query - { printf("union query 2\n"); - $$ = create_union_all_operator($1, $3); - } - ; - -Select_List - : STAR - { printf("star\n"); - $$ = new_node(1, Select_List); - $$->children[0] = new_node(0, STAR); - } - | Col - { printf("select list attr path\n"); - $$ = create_assign_operator($1, $1, NULL); - } - | Col ',' Select_List - { printf("Select list\n"); - $$ = create_assign_operator($1, $1, $2); - } - ; - -Col - : Identifier '.' AttrPath - { - printf("col\n"); - $$ = create_spcol($1, $3); - } - -AttrPath - : Identifier - { printf("path id\n"); - $$ = create_pf(create_attr($1), NULL); - } - | Identifier '.' AttrPath - { printf("Path Function\n"); - $$ = create_pf(create_attr($1), $3); - } - ; - -Operator - : EQ - | NE - | LE - | GE - | LT - | GT - ; - -Bool - : Col Operator Col - { printf("Col op Col\n"); - $$ = create_comp_operator($2, $1, $3, NULL); - } - | Col Operator CONSTANT - { printf("Col op Constant\n"); - cons_cell* a = create_cons_cell_w_atom(CONSTANT, NULL); - $$ = create_comp_operator($2, $1, a, NULL); - } - ; - -Pred - : Bool AND Pred - { printf("pred and pred\n"); - $$ = $1; - $$->cdr->cdr->cdr->cdr->car = $3; - } - | NOT Pred - { printf("Not Pred\n"); - $$ = create_not_operator($1, NULL); - } - | EXIST '(' Query ')' - { printf("Exist query\n"); - $$ = new_node(2, Pred); - $$->children[0] = new_node(0, EXIST); - $$->children[1] = $3; - } - ; diff --git a/SQLPParser b/SQLPParser deleted file mode 100755 index f92482a2d0b0e828ca5c8723c0ddeab9d963ae30..0000000000000000000000000000000000000000 Binary files a/SQLPParser and /dev/null differ diff --git a/SQLPParser.c b/SQLPParser.c index 5421d36cc4a28a84d530216615b8603fc84084ba..53f170b19ed4d0ced3808995281a6d29d45d0583 100644 --- a/SQLPParser.c +++ b/SQLPParser.c @@ -18,7 +18,7 @@ */ #include <stdio.h> -#include <util.h> +#include "util.h" #include "lex.yy.c" #include "SQLPGrammar.tab.c" @@ -34,4 +34,4 @@ int main() fprintf(stderr, "checking semantics.\n"); printf(")\n"); return (Result); -} \ No newline at end of file +} diff --git a/old b/old new file mode 100644 index 0000000000000000000000000000000000000000..1588df77b90eb8f9e0f5163fafec7fd52bbaa420 --- /dev/null +++ b/old @@ -0,0 +1,205 @@ +%{ + #include "util.h" +%} + +// %union { +// struct node *n; +//} + +%define api.value.type {struct node *} +%token IMPLIES OR AND NOT LE GE LT GT NE HAS MAX MIN AS ASC DESC MOD ASSIGN EQ STAR COMMA DOT + +%token SIZE SELECTIVITY OVERLAP +%token FREQUENCY UNIT TIME SPACE + +%token IDENTIFIER CONSTANT STRING_LITERAL SIZEOF + +%token STORE STORING DYNAMIC STATIC OF TYPE ORDERED BY +%token INDEX LIST ARRAY BINARY TREE DISTRIBUTED POINTER + +%token SCHEMA CLASS ISA PROPERTIES CONSTRAINTS PROPERTY +%token ON DETERMINED COVER QUERY GIVEN FROM SELECT WHERE ORDER +%token PRECOMPUTED ONE EXIST FOR ALL TRANSACTION INTCLASS STRCLASS +%token INTEGER REAL DOUBLEREAL STRING MAXLEN RANGE TO +%token INSERT END CHANGE DELETE DECLARE RETURN UNION + +%start SQLPProgram +%% +SQLPProgram + : Query + { printf("Input Query\n"); + struct node *n = new_node(1, SQLPProgram); + n->children[0] = $1; + printf("Printing Tree\n"); + print_tree(n, 0); + struct linked_node *linked_tree = malloc(sizeof(struct linked_node)); + translate(linked_tree, n); + print_linked_tree(linked_tree, 0); + } + ; + +Identifier + : IDENTIFIER + { printf("|%s| ", yytext); + $$ = new_node(1, Identifier); + $$->children[0] = new_node(0, IDENTIFIER); + } + ; + +Query + : Union_Query + { printf("Union Query\n"); + $$ = new_node(1, Query); + $$->children[0] = $1; + } + ; + +Select_Query + : SELECT Select_List Body + { printf("SQLP Query\n"); + $$ = new_node(3, Select_Query); + $$->children[0] = new_node(0, SELECT); + $$->children[1] = $2; + $$->children[2] = $3; + } + ; + +Body + : FROM TablePath + { printf("Body 1\n"); + $$ = new_node(2, Body); + $$->children[0] = new_node(0, FROM); + $$->children[1] = $2;} + | FROM TablePath WHERE Bool + { printf("Body 2\n"); + $$ = new_node(4, Body); + $$->children[0] = new_node(0, FROM); + $$->children[1] = $2; + $$->children[2] = new_node(0, WHERE); + $$->children[3] = $4; + } + | FROM TablePath WHERE Pred + { printf("Body 3\n"); + $$ = new_node(4, Body); + $$->children[0] = new_node(0, FROM); + $$->children[1] = $2; + $$->children[2] = new_node(0, WHERE); + $$->children[3] = $4; + } + ; + +TablePath + : Identifier Identifier + { printf("table path1\n"); + $$ = new_node(2, TablePath); + $$->children[0] = $1; + $$->children[1] = $2; + } + | Identifier Identifier ',' TablePath + { printf("table path2\n"); + $$ = new_node(4, TablePath); + $$->children[0] = $1; + $$->children[1] = $2; + $$->children[2] = new_node(0, COMMA); + $$->children[3] = $4; + } + ; + +Union_Query + : Select_Query + { printf("union query 1\n"); + $$ = new_node(1, Union_Query); + $$->children[0] = $1; + } + | Union_Query UNION Select_Query + { printf("union query 2\n"); + $$ = new_node(3, Union_Query); + $$->children[0] = $1; + $$->children[1] = new_node(0, UNION); + $$->children[2] = $3; + } + ; + +Select_List + : STAR + { printf("star\n"); + $$ = new_node(1, Select_List); + $$->children[0] = new_node(0, STAR); + } + | AttrPath + { printf("select list attr path\n"); + $$ = new_node(1, Select_List); + $$->children[0] = $1; + } + | AttrPath ',' Select_List + { printf("Select list\n"); + $$ = new_node(3, Select_List); + $$->children[0] = $1; + $$->children[1] = new_node(0, COMMA); + $$->children[2] = $3; + } + ; + +AttrPath + : Identifier + { printf("path id\n"); + $$ = new_node(1, AttrPath); + $$->children[0] = $1; + } + | Identifier '.' AttrPath + { printf("Path Function\n"); + $$ = new_node(3, AttrPath); + $$->children[0] = $1; + $$->children[1] = new_node(0, DOT); + $$->children[2] = $3; + } + ; +Operator + : EQ + | NE + | LE + | GE + | LT + | GT + ; + +Bool + : AttrPath Operator AttrPath + { printf("AttrPath op AttrPath\n"); + $$ = new_node(3, Bool); + $$->children[0] = $1; + $$->children[1] = $2; + $$->children[2] = $3; + } + | AttrPath Operator CONSTANT + { printf("AttrPath op Constant\n"); + $$ = new_node(3, Bool); + $$->children[0] = $1; + $$->children[1] = $2; + $$->children[2] = new_node(0, CONSTANT); + } + ; + +Pred + : Bool AND Pred + { printf("pred and pred\n"); + $$ = new_node(3, Pred); + $$->children[0] = $1; + $$->children[1] = new_node(0, AND); + $$->children[2] = $3; + + } + | NOT Pred + { printf("Not Pred\n"); + $$ = new_node(2, Pred); + $$->children[0] = new_node(0, NOT); + $$->children[1] = $2; + + } + | EXIST '(' Query ')' + { printf("Exist query\n"); + $$ = new_node(2, Pred); + $$->children[0] = new_node(0, EXIST); + $$->children[1] = $3; + } + ; \ No newline at end of file diff --git a/util.o b/util.o index fd762f882987928d49f5d269f7ae50b59c1cf7e0..299f3d32f01f38c5a425487f4f916fec59286b47 100644 Binary files a/util.o and b/util.o differ