From 4090241331bd2499dafc49705a69bf16f2c1c300 Mon Sep 17 00:00:00 2001 From: w328li <w328li@student.cs.uwaterloo.ca> Date: Wed, 17 Jul 2019 17:03:50 -0400 Subject: [PATCH] fix compile error todo: fix conflict rule --- Makefile | 8 +- Parser | Bin 18064 -> 18240 bytes SQLPGrammar_new.output | 1111 +++++++++ SQLPGrammar.tab.c => SQLPGrammar_new.tab.c | 651 ++++-- SQLPGrammar.tab.h => SQLPGrammar_new.tab.h | 12 +- SQLPGrammar_new.y | 64 +- SQLPParser | Bin 41952 -> 42128 bytes SQLPParser_new | Bin 41992 -> 46224 bytes SQLPParser_new.c | 37 + SQLPScanner_new.l | 2 + lex.yy.c | 2466 -------------------- util.c | 14 +- util.h | 4 +- 13 files changed, 1610 insertions(+), 2759 deletions(-) create mode 100644 SQLPGrammar_new.output rename SQLPGrammar.tab.c => SQLPGrammar_new.tab.c (76%) rename SQLPGrammar.tab.h => SQLPGrammar_new.tab.h (93%) create mode 100644 SQLPParser_new.c delete mode 100644 lex.yy.c diff --git a/Makefile b/Makefile index 576ae49..9086e8f 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: all clean #CFLAGS = `pkg-config --cflags glib-2.0` #LDLIBS = `pkg-config --libs glib-2.0` -all: SQLPParser Parser +all: SQLPParser Parser SQLPParser_new SQLPParser: SQLPParser.c SQLPGrammar.y SQLPScanner.l util.o bison --verbose -d SQLPGrammar.y @@ -9,11 +9,11 @@ SQLPParser: SQLPParser.c SQLPGrammar.y SQLPScanner.l util.o gcc -w SQLPParser.c util.o -o SQLPParser rm -f lex.yy.c SQLPGrammar.tab.c SQLPGrammar.tab.h -SQLPParser_new: SQLPParser.c SQLPGrammar_new.y SQLPScanner.l util.o +SQLPParser_new: SQLPParser_new.c SQLPGrammar_new.y SQLPScanner_new.l util.o bison --verbose -d SQLPGrammar_new.y flex SQLPScanner_new.l - gcc -w SQLPParser.c util.o -o SQLPParser_new - # rm -f lex.yy.c SQLPGrammar.tab.c SQLPGrammar.tab.h + gcc -w SQLPParser_new.c util.o -o SQLPParser_new + rm -f lex.yy.c SQLPGrammar.tab.c SQLPGrammar.tab.h util.o: util.c util.h gcc -c util.c diff --git a/Parser b/Parser index d08a5bc5815a000df2b40de1a41b7e0b41b11a1a..7eed2d088fe61ab0a79b6117bee3437bc36e8153 100755 GIT binary patch delta 4244 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 delta 3870 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 J(HeK|{{WQ=fS~{Y diff --git a/SQLPGrammar_new.output b/SQLPGrammar_new.output new file mode 100644 index 0000000..70785f3 --- /dev/null +++ b/SQLPGrammar_new.output @@ -0,0 +1,1111 @@ +Terminals unused in grammar + + IMPLIES + HAS + MAX + MIN + ASC + DESC + MOD + ASSIGN + STAR + COMMA + DOT + SIZE + SELECTIVITY + OVERLAP + FREQUENCY + UNIT + TIME + SPACE + CONSTANT + STRING_LITERAL + SIZEOF + STORE + STORING + DYNAMIC + STATIC + OF + TYPE + ORDERED + BY + INDEX + LIST + ARRAY + BINARY + TREE + DISTRIBUTED + POINTER + SCHEMA + CLASS + ISA + PROPERTIES + CONSTRAINTS + PROPERTY + ON + DETERMINED + COVER + QUERY + GIVEN + ORDER + PRECOMPUTED + ONE + FOR + ALL + TRANSACTION + INTCLASS + STRCLASS + DOUBLEREAL + MAXLEN + RANGE + TO + INSERT + END + CHANGE + DELETE + DECLARE + RETURN + + +State 5 conflicts: 1 shift/reduce, 1 reduce/reduce + + +Grammar + + 0 $accept: SQLPProgram $end + + 1 SQLPProgram: Query + + 2 Query: UnionQuery + 3 | UnionQuery LIMIT INTEGER + 4 | SelectQuery + 5 | SelectQuery LIMIT INTEGER + + 6 SelectQuery: SELECT SelectList Body + 7 | SELECT ELIM SelectList Body + + 8 BodyContent: TableList + 9 | TableList WHERE Pred + 10 | '(' TableList ')' NJOIN BodyContent + 11 | '(' TableList WHERE Pred ')' NJOIN BodyContent + + 12 Body: FROM BodyContent + + 13 TableList: TableIdentifier VarIdentifier + 14 | TableIdentifier VarIdentifier ',' TableList + + 15 UnionQuery: '(' SelectQuery ')' UNION UnionQuery + 16 | '(' SelectQuery ')' UNIONALL UnionQuery + 17 | SelectQuery + + 18 SelectList: Col + 19 | Col AS AttrIdentifier + 20 | Col ',' SelectList + 21 | Col AS AttrIdentifier ',' SelectList + + 22 Col: VarIdentifier '.' AttrPath + + 23 AttrPath: AttrIdentifier + 24 | AttrIdentifier '.' AttrPath + + 25 VarIdentifier: IDENTIFIER + + 26 TableIdentifier: IDENTIFIER + + 27 AttrIdentifier: IDENTIFIER + + 28 CompOperator: EQ + 29 | NE + 30 | LE + 31 | GE + 32 | LT + 33 | GT + + 34 Pred: Conj + 35 | Pred OR Conj + + 36 Conj: BasicPred + 37 | BasicPred AND Conj + + 38 BasicPred: Term CompOperator Term + 39 | EXIST '(' Body ')' + 40 | NOT BasicPred + 41 | '(' Pred ')' + + 42 Term: Constant + 43 | Col + + 44 Constant: INTEGER + 45 | REAL + 46 | STRING + + +Terminals, with rules where they appear + +$end (0) 0 +'(' (40) 10 11 15 16 39 41 +')' (41) 10 11 15 16 39 41 +',' (44) 14 20 21 +'.' (46) 22 24 +error (256) +IMPLIES (258) +OR (259) 35 +AND (260) 37 +NOT (261) 40 +LE (262) 30 +GE (263) 31 +LT (264) 32 +GT (265) 33 +NE (266) 29 +HAS (267) +MAX (268) +MIN (269) +AS (270) 19 21 +ASC (271) +DESC (272) +MOD (273) +ASSIGN (274) +EQ (275) 28 +STAR (276) +COMMA (277) +DOT (278) +SIZE (279) +SELECTIVITY (280) +OVERLAP (281) +FREQUENCY (282) +UNIT (283) +TIME (284) +SPACE (285) +IDENTIFIER (286) 25 26 27 +CONSTANT (287) +STRING_LITERAL (288) +SIZEOF (289) +STORE (290) +STORING (291) +DYNAMIC (292) +STATIC (293) +OF (294) +TYPE (295) +ORDERED (296) +BY (297) +INDEX (298) +LIST (299) +ARRAY (300) +BINARY (301) +TREE (302) +DISTRIBUTED (303) +POINTER (304) +SCHEMA (305) +CLASS (306) +ISA (307) +PROPERTIES (308) +CONSTRAINTS (309) +PROPERTY (310) +ON (311) +DETERMINED (312) +COVER (313) +QUERY (314) +GIVEN (315) +FROM (316) 12 +SELECT (317) 6 7 +WHERE (318) 9 11 +ORDER (319) +PRECOMPUTED (320) +ONE (321) +EXIST (322) 39 +FOR (323) +ALL (324) +TRANSACTION (325) +INTCLASS (326) +STRCLASS (327) +INTEGER (328) 3 5 44 +REAL (329) 45 +DOUBLEREAL (330) +STRING (331) 46 +MAXLEN (332) +RANGE (333) +TO (334) +INSERT (335) +END (336) +CHANGE (337) +DELETE (338) +DECLARE (339) +RETURN (340) +UNION (341) 15 +UNIONALL (342) 16 +ELIM (343) 7 +LIMIT (344) 3 5 +NJOIN (345) 10 11 + + +Nonterminals, with rules where they appear + +$accept (95) + on left: 0 +SQLPProgram (96) + on left: 1, on right: 0 +Query (97) + on left: 2 3 4 5, on right: 1 +SelectQuery (98) + on left: 6 7, on right: 4 5 15 16 17 +BodyContent (99) + on left: 8 9 10 11, on right: 10 11 12 +Body (100) + on left: 12, on right: 6 7 39 +TableList (101) + on left: 13 14, on right: 8 9 10 11 14 +UnionQuery (102) + on left: 15 16 17, on right: 2 3 15 16 +SelectList (103) + on left: 18 19 20 21, on right: 6 7 20 21 +Col (104) + on left: 22, on right: 18 19 20 21 43 +AttrPath (105) + on left: 23 24, on right: 22 24 +VarIdentifier (106) + on left: 25, on right: 13 14 22 +TableIdentifier (107) + on left: 26, on right: 13 14 +AttrIdentifier (108) + on left: 27, on right: 19 21 23 24 +CompOperator (109) + on left: 28 29 30 31 32 33, on right: 38 +Pred (110) + on left: 34 35, on right: 9 11 35 41 +Conj (111) + on left: 36 37, on right: 34 35 37 +BasicPred (112) + on left: 38 39 40 41, on right: 36 37 40 +Term (113) + on left: 42 43, on right: 38 +Constant (114) + on left: 44 45 46, on right: 42 + + +State 0 + + 0 $accept: . SQLPProgram $end + + SELECT shift, and go to state 1 + '(' shift, and go to state 2 + + SQLPProgram go to state 3 + Query go to state 4 + SelectQuery go to state 5 + UnionQuery go to state 6 + + +State 1 + + 6 SelectQuery: SELECT . SelectList Body + 7 | SELECT . ELIM SelectList Body + + IDENTIFIER shift, and go to state 7 + ELIM shift, and go to state 8 + + SelectList go to state 9 + Col go to state 10 + VarIdentifier go to state 11 + + +State 2 + + 15 UnionQuery: '(' . SelectQuery ')' UNION UnionQuery + 16 | '(' . SelectQuery ')' UNIONALL UnionQuery + + SELECT shift, and go to state 1 + + SelectQuery go to state 12 + + +State 3 + + 0 $accept: SQLPProgram . $end + + $end shift, and go to state 13 + + +State 4 + + 1 SQLPProgram: Query . + + $default reduce using rule 1 (SQLPProgram) + + +State 5 + + 4 Query: SelectQuery . + 5 | SelectQuery . LIMIT INTEGER + 17 UnionQuery: SelectQuery . + + LIMIT shift, and go to state 14 + + $end reduce using rule 4 (Query) + $end [reduce using rule 17 (UnionQuery)] + LIMIT [reduce using rule 17 (UnionQuery)] + $default reduce using rule 4 (Query) + + +State 6 + + 2 Query: UnionQuery . + 3 | UnionQuery . LIMIT INTEGER + + LIMIT shift, and go to state 15 + + $default reduce using rule 2 (Query) + + +State 7 + + 25 VarIdentifier: IDENTIFIER . + + $default reduce using rule 25 (VarIdentifier) + + +State 8 + + 7 SelectQuery: SELECT ELIM . SelectList Body + + IDENTIFIER shift, and go to state 7 + + SelectList go to state 16 + Col go to state 10 + VarIdentifier go to state 11 + + +State 9 + + 6 SelectQuery: SELECT SelectList . Body + + FROM shift, and go to state 17 + + Body go to state 18 + + +State 10 + + 18 SelectList: Col . + 19 | Col . AS AttrIdentifier + 20 | Col . ',' SelectList + 21 | Col . AS AttrIdentifier ',' SelectList + + AS shift, and go to state 19 + ',' shift, and go to state 20 + + $default reduce using rule 18 (SelectList) + + +State 11 + + 22 Col: VarIdentifier . '.' AttrPath + + '.' shift, and go to state 21 + + +State 12 + + 15 UnionQuery: '(' SelectQuery . ')' UNION UnionQuery + 16 | '(' SelectQuery . ')' UNIONALL UnionQuery + + ')' shift, and go to state 22 + + +State 13 + + 0 $accept: SQLPProgram $end . + + $default accept + + +State 14 + + 5 Query: SelectQuery LIMIT . INTEGER + + INTEGER shift, and go to state 23 + + +State 15 + + 3 Query: UnionQuery LIMIT . INTEGER + + INTEGER shift, and go to state 24 + + +State 16 + + 7 SelectQuery: SELECT ELIM SelectList . Body + + FROM shift, and go to state 17 + + Body go to state 25 + + +State 17 + + 12 Body: FROM . BodyContent + + IDENTIFIER shift, and go to state 26 + '(' shift, and go to state 27 + + BodyContent go to state 28 + TableList go to state 29 + TableIdentifier go to state 30 + + +State 18 + + 6 SelectQuery: SELECT SelectList Body . + + $default reduce using rule 6 (SelectQuery) + + +State 19 + + 19 SelectList: Col AS . AttrIdentifier + 21 | Col AS . AttrIdentifier ',' SelectList + + IDENTIFIER shift, and go to state 31 + + AttrIdentifier go to state 32 + + +State 20 + + 20 SelectList: Col ',' . SelectList + + IDENTIFIER shift, and go to state 7 + + SelectList go to state 33 + Col go to state 10 + VarIdentifier go to state 11 + + +State 21 + + 22 Col: VarIdentifier '.' . AttrPath + + IDENTIFIER shift, and go to state 31 + + AttrPath go to state 34 + AttrIdentifier go to state 35 + + +State 22 + + 15 UnionQuery: '(' SelectQuery ')' . UNION UnionQuery + 16 | '(' SelectQuery ')' . UNIONALL UnionQuery + + UNION shift, and go to state 36 + UNIONALL shift, and go to state 37 + + +State 23 + + 5 Query: SelectQuery LIMIT INTEGER . + + $default reduce using rule 5 (Query) + + +State 24 + + 3 Query: UnionQuery LIMIT INTEGER . + + $default reduce using rule 3 (Query) + + +State 25 + + 7 SelectQuery: SELECT ELIM SelectList Body . + + $default reduce using rule 7 (SelectQuery) + + +State 26 + + 26 TableIdentifier: IDENTIFIER . + + $default reduce using rule 26 (TableIdentifier) + + +State 27 + + 10 BodyContent: '(' . TableList ')' NJOIN BodyContent + 11 | '(' . TableList WHERE Pred ')' NJOIN BodyContent + + IDENTIFIER shift, and go to state 26 + + TableList go to state 38 + TableIdentifier go to state 30 + + +State 28 + + 12 Body: FROM BodyContent . + + $default reduce using rule 12 (Body) + + +State 29 + + 8 BodyContent: TableList . + 9 | TableList . WHERE Pred + + WHERE shift, and go to state 39 + + $default reduce using rule 8 (BodyContent) + + +State 30 + + 13 TableList: TableIdentifier . VarIdentifier + 14 | TableIdentifier . VarIdentifier ',' TableList + + IDENTIFIER shift, and go to state 7 + + VarIdentifier go to state 40 + + +State 31 + + 27 AttrIdentifier: IDENTIFIER . + + $default reduce using rule 27 (AttrIdentifier) + + +State 32 + + 19 SelectList: Col AS AttrIdentifier . + 21 | Col AS AttrIdentifier . ',' SelectList + + ',' shift, and go to state 41 + + $default reduce using rule 19 (SelectList) + + +State 33 + + 20 SelectList: Col ',' SelectList . + + $default reduce using rule 20 (SelectList) + + +State 34 + + 22 Col: VarIdentifier '.' AttrPath . + + $default reduce using rule 22 (Col) + + +State 35 + + 23 AttrPath: AttrIdentifier . + 24 | AttrIdentifier . '.' AttrPath + + '.' shift, and go to state 42 + + $default reduce using rule 23 (AttrPath) + + +State 36 + + 15 UnionQuery: '(' SelectQuery ')' UNION . UnionQuery + + SELECT shift, and go to state 1 + '(' shift, and go to state 2 + + SelectQuery go to state 43 + UnionQuery go to state 44 + + +State 37 + + 16 UnionQuery: '(' SelectQuery ')' UNIONALL . UnionQuery + + SELECT shift, and go to state 1 + '(' shift, and go to state 2 + + SelectQuery go to state 43 + UnionQuery go to state 45 + + +State 38 + + 10 BodyContent: '(' TableList . ')' NJOIN BodyContent + 11 | '(' TableList . WHERE Pred ')' NJOIN BodyContent + + WHERE shift, and go to state 46 + ')' shift, and go to state 47 + + +State 39 + + 9 BodyContent: TableList WHERE . Pred + + NOT shift, and go to state 48 + IDENTIFIER shift, and go to state 7 + EXIST shift, and go to state 49 + INTEGER shift, and go to state 50 + REAL shift, and go to state 51 + STRING shift, and go to state 52 + '(' shift, and go to state 53 + + Col go to state 54 + VarIdentifier go to state 11 + Pred go to state 55 + Conj go to state 56 + BasicPred go to state 57 + Term go to state 58 + Constant go to state 59 + + +State 40 + + 13 TableList: TableIdentifier VarIdentifier . + 14 | TableIdentifier VarIdentifier . ',' TableList + + ',' shift, and go to state 60 + + $default reduce using rule 13 (TableList) + + +State 41 + + 21 SelectList: Col AS AttrIdentifier ',' . SelectList + + IDENTIFIER shift, and go to state 7 + + SelectList go to state 61 + Col go to state 10 + VarIdentifier go to state 11 + + +State 42 + + 24 AttrPath: AttrIdentifier '.' . AttrPath + + IDENTIFIER shift, and go to state 31 + + AttrPath go to state 62 + AttrIdentifier go to state 35 + + +State 43 + + 17 UnionQuery: SelectQuery . + + $default reduce using rule 17 (UnionQuery) + + +State 44 + + 15 UnionQuery: '(' SelectQuery ')' UNION UnionQuery . + + $default reduce using rule 15 (UnionQuery) + + +State 45 + + 16 UnionQuery: '(' SelectQuery ')' UNIONALL UnionQuery . + + $default reduce using rule 16 (UnionQuery) + + +State 46 + + 11 BodyContent: '(' TableList WHERE . Pred ')' NJOIN BodyContent + + NOT shift, and go to state 48 + IDENTIFIER shift, and go to state 7 + EXIST shift, and go to state 49 + INTEGER shift, and go to state 50 + REAL shift, and go to state 51 + STRING shift, and go to state 52 + '(' shift, and go to state 53 + + Col go to state 54 + VarIdentifier go to state 11 + Pred go to state 63 + Conj go to state 56 + BasicPred go to state 57 + Term go to state 58 + Constant go to state 59 + + +State 47 + + 10 BodyContent: '(' TableList ')' . NJOIN BodyContent + + NJOIN shift, and go to state 64 + + +State 48 + + 40 BasicPred: NOT . BasicPred + + NOT shift, and go to state 48 + IDENTIFIER shift, and go to state 7 + EXIST shift, and go to state 49 + INTEGER shift, and go to state 50 + REAL shift, and go to state 51 + STRING shift, and go to state 52 + '(' shift, and go to state 53 + + Col go to state 54 + VarIdentifier go to state 11 + BasicPred go to state 65 + Term go to state 58 + Constant go to state 59 + + +State 49 + + 39 BasicPred: EXIST . '(' Body ')' + + '(' shift, and go to state 66 + + +State 50 + + 44 Constant: INTEGER . + + $default reduce using rule 44 (Constant) + + +State 51 + + 45 Constant: REAL . + + $default reduce using rule 45 (Constant) + + +State 52 + + 46 Constant: STRING . + + $default reduce using rule 46 (Constant) + + +State 53 + + 41 BasicPred: '(' . Pred ')' + + NOT shift, and go to state 48 + IDENTIFIER shift, and go to state 7 + EXIST shift, and go to state 49 + INTEGER shift, and go to state 50 + REAL shift, and go to state 51 + STRING shift, and go to state 52 + '(' shift, and go to state 53 + + Col go to state 54 + VarIdentifier go to state 11 + Pred go to state 67 + Conj go to state 56 + BasicPred go to state 57 + Term go to state 58 + Constant go to state 59 + + +State 54 + + 43 Term: Col . + + $default reduce using rule 43 (Term) + + +State 55 + + 9 BodyContent: TableList WHERE Pred . + 35 Pred: Pred . OR Conj + + OR shift, and go to state 68 + + $default reduce using rule 9 (BodyContent) + + +State 56 + + 34 Pred: Conj . + + $default reduce using rule 34 (Pred) + + +State 57 + + 36 Conj: BasicPred . + 37 | BasicPred . AND Conj + + AND shift, and go to state 69 + + $default reduce using rule 36 (Conj) + + +State 58 + + 38 BasicPred: Term . CompOperator Term + + LE shift, and go to state 70 + GE shift, and go to state 71 + LT shift, and go to state 72 + GT shift, and go to state 73 + NE shift, and go to state 74 + EQ shift, and go to state 75 + + CompOperator go to state 76 + + +State 59 + + 42 Term: Constant . + + $default reduce using rule 42 (Term) + + +State 60 + + 14 TableList: TableIdentifier VarIdentifier ',' . TableList + + IDENTIFIER shift, and go to state 26 + + TableList go to state 77 + TableIdentifier go to state 30 + + +State 61 + + 21 SelectList: Col AS AttrIdentifier ',' SelectList . + + $default reduce using rule 21 (SelectList) + + +State 62 + + 24 AttrPath: AttrIdentifier '.' AttrPath . + + $default reduce using rule 24 (AttrPath) + + +State 63 + + 11 BodyContent: '(' TableList WHERE Pred . ')' NJOIN BodyContent + 35 Pred: Pred . OR Conj + + OR shift, and go to state 68 + ')' shift, and go to state 78 + + +State 64 + + 10 BodyContent: '(' TableList ')' NJOIN . BodyContent + + IDENTIFIER shift, and go to state 26 + '(' shift, and go to state 27 + + BodyContent go to state 79 + TableList go to state 29 + TableIdentifier go to state 30 + + +State 65 + + 40 BasicPred: NOT BasicPred . + + $default reduce using rule 40 (BasicPred) + + +State 66 + + 39 BasicPred: EXIST '(' . Body ')' + + FROM shift, and go to state 17 + + Body go to state 80 + + +State 67 + + 35 Pred: Pred . OR Conj + 41 BasicPred: '(' Pred . ')' + + OR shift, and go to state 68 + ')' shift, and go to state 81 + + +State 68 + + 35 Pred: Pred OR . Conj + + NOT shift, and go to state 48 + IDENTIFIER shift, and go to state 7 + EXIST shift, and go to state 49 + INTEGER shift, and go to state 50 + REAL shift, and go to state 51 + STRING shift, and go to state 52 + '(' shift, and go to state 53 + + Col go to state 54 + VarIdentifier go to state 11 + Conj go to state 82 + BasicPred go to state 57 + Term go to state 58 + Constant go to state 59 + + +State 69 + + 37 Conj: BasicPred AND . Conj + + NOT shift, and go to state 48 + IDENTIFIER shift, and go to state 7 + EXIST shift, and go to state 49 + INTEGER shift, and go to state 50 + REAL shift, and go to state 51 + STRING shift, and go to state 52 + '(' shift, and go to state 53 + + Col go to state 54 + VarIdentifier go to state 11 + Conj go to state 83 + BasicPred go to state 57 + Term go to state 58 + Constant go to state 59 + + +State 70 + + 30 CompOperator: LE . + + $default reduce using rule 30 (CompOperator) + + +State 71 + + 31 CompOperator: GE . + + $default reduce using rule 31 (CompOperator) + + +State 72 + + 32 CompOperator: LT . + + $default reduce using rule 32 (CompOperator) + + +State 73 + + 33 CompOperator: GT . + + $default reduce using rule 33 (CompOperator) + + +State 74 + + 29 CompOperator: NE . + + $default reduce using rule 29 (CompOperator) + + +State 75 + + 28 CompOperator: EQ . + + $default reduce using rule 28 (CompOperator) + + +State 76 + + 38 BasicPred: Term CompOperator . Term + + IDENTIFIER shift, and go to state 7 + INTEGER shift, and go to state 50 + REAL shift, and go to state 51 + STRING shift, and go to state 52 + + Col go to state 54 + VarIdentifier go to state 11 + Term go to state 84 + Constant go to state 59 + + +State 77 + + 14 TableList: TableIdentifier VarIdentifier ',' TableList . + + $default reduce using rule 14 (TableList) + + +State 78 + + 11 BodyContent: '(' TableList WHERE Pred ')' . NJOIN BodyContent + + NJOIN shift, and go to state 85 + + +State 79 + + 10 BodyContent: '(' TableList ')' NJOIN BodyContent . + + $default reduce using rule 10 (BodyContent) + + +State 80 + + 39 BasicPred: EXIST '(' Body . ')' + + ')' shift, and go to state 86 + + +State 81 + + 41 BasicPred: '(' Pred ')' . + + $default reduce using rule 41 (BasicPred) + + +State 82 + + 35 Pred: Pred OR Conj . + + $default reduce using rule 35 (Pred) + + +State 83 + + 37 Conj: BasicPred AND Conj . + + $default reduce using rule 37 (Conj) + + +State 84 + + 38 BasicPred: Term CompOperator Term . + + $default reduce using rule 38 (BasicPred) + + +State 85 + + 11 BodyContent: '(' TableList WHERE Pred ')' NJOIN . BodyContent + + IDENTIFIER shift, and go to state 26 + '(' shift, and go to state 27 + + BodyContent go to state 87 + TableList go to state 29 + TableIdentifier go to state 30 + + +State 86 + + 39 BasicPred: EXIST '(' Body ')' . + + $default reduce using rule 39 (BasicPred) + + +State 87 + + 11 BodyContent: '(' TableList WHERE Pred ')' NJOIN BodyContent . + + $default reduce using rule 11 (BodyContent) diff --git a/SQLPGrammar.tab.c b/SQLPGrammar_new.tab.c similarity index 76% rename from SQLPGrammar.tab.c rename to SQLPGrammar_new.tab.c index 40e1ad3..0b397a7 100644 --- a/SQLPGrammar.tab.c +++ b/SQLPGrammar_new.tab.c @@ -62,11 +62,11 @@ /* Copy the first part of user declarations. */ -#line 1 "SQLPGrammar.y" /* yacc.c:339 */ +#line 1 "SQLPGrammar_new.y" /* yacc.c:339 */ #include "util.h" -#line 70 "SQLPGrammar.tab.c" /* yacc.c:339 */ +#line 70 "SQLPGrammar_new.tab.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -85,9 +85,9 @@ #endif /* In a future release of Bison, this section will be replaced - by #include "SQLPGrammar.tab.h". */ -#ifndef YY_YY_SQLPGRAMMAR_TAB_H_INCLUDED -# define YY_YY_SQLPGRAMMAR_TAB_H_INCLUDED + by #include "SQLPGrammar_new.tab.h". */ +#ifndef YY_YY_SQLPGRAMMAR_NEW_TAB_H_INCLUDED +# define YY_YY_SQLPGRAMMAR_NEW_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -184,7 +184,11 @@ extern int yydebug; DELETE = 338, DECLARE = 339, RETURN = 340, - UNION = 341 + UNION = 341, + UNIONALL = 342, + ELIM = 343, + LIMIT = 344, + NJOIN = 345 }; #endif @@ -200,11 +204,11 @@ extern YYSTYPE yylval; int yyparse (void); -#endif /* !YY_YY_SQLPGRAMMAR_TAB_H_INCLUDED */ +#endif /* !YY_YY_SQLPGRAMMAR_NEW_TAB_H_INCLUDED */ /* Copy the second part of user declarations. */ -#line 208 "SQLPGrammar.tab.c" /* yacc.c:358 */ +#line 212 "SQLPGrammar_new.tab.c" /* yacc.c:358 */ #ifdef short # undef short @@ -444,23 +448,23 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 11 +#define YYFINAL 13 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 61 +#define YYLAST 90 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 91 +#define YYNTOKENS 95 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 17 +#define YYNNTS 20 /* YYNRULES -- Number of rules. */ -#define YYNRULES 34 +#define YYNRULES 47 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 55 +#define YYNSTATES 88 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 341 +#define YYMAXUTOK 345 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -473,7 +477,7 @@ static const yytype_uint8 yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 89, 90, 2, 2, 87, 2, 88, 2, 2, 2, + 91, 92, 2, 2, 93, 2, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -503,17 +507,18 @@ static const yytype_uint8 yytranslate[] = 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86 + 85, 86, 87, 88, 89, 90 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint8 yyrline[] = +static const yytype_uint16 yyrline[] = { - 0, 25, 25, 34, 41, 48, 52, 56, 63, 67, - 74, 78, 85, 90, 94, 101, 108, 112, 119, 126, - 133, 140, 144, 148, 152, 156, 160, 167, 173, 181, - 186, 190, 199, 203, 207 + 0, 26, 26, 36, 41, 46, 51, 59, 64, 75, + 80, 85, 90, 98, 106, 111, 120, 125, 130, 138, + 143, 144, 149, 153, 160, 165, 172, 180, 187, 194, + 199, 204, 209, 214, 219, 227, 232, 240, 245, 252, + 259, 264, 269, 276, 281, 291, 296, 301 }; #endif @@ -533,11 +538,12 @@ static const char *const yytname[] = "FROM", "SELECT", "WHERE", "ORDER", "PRECOMPUTED", "ONE", "EXIST", "FOR", "ALL", "TRANSACTION", "INTCLASS", "STRCLASS", "INTEGER", "REAL", "DOUBLEREAL", "STRING", "MAXLEN", "RANGE", "TO", "INSERT", "END", - "CHANGE", "DELETE", "DECLARE", "RETURN", "UNION", "','", "'.'", "'('", - "')'", "$accept", "SQLPProgram", "Query", "Select_Query", "Body", - "TablePath", "Union_Query", "Select_List", "Col", "AttrPath", - "VarIdentifier", "TableIdentifier", "AttrIdentifier", "Operator", "Bool", - "Pred", "Constant", YY_NULLPTR + "CHANGE", "DELETE", "DECLARE", "RETURN", "UNION", "UNIONALL", "ELIM", + "LIMIT", "NJOIN", "'('", "')'", "','", "'.'", "$accept", "SQLPProgram", + "Query", "SelectQuery", "BodyContent", "Body", "TableList", "UnionQuery", + "SelectList", "Col", "AttrPath", "VarIdentifier", "TableIdentifier", + "AttrIdentifier", "CompOperator", "Pred", "Conj", "BasicPred", "Term", + "Constant", YY_NULLPTR }; #endif @@ -554,15 +560,15 @@ static const yytype_uint16 yytoknum[] = 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 44, 46, 40, - 41 + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 40, 41, 44, 46 }; # endif -#define YYPACT_NINF -75 +#define YYPACT_NINF -59 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-75))) + (!!((Yystate) == (-59))) #define YYTABLE_NINF -1 @@ -573,12 +579,15 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int8 yypact[] = { - -52, -12, 11, -75, -75, -74, -75, -75, -48, -73, - -70, -75, -52, -16, -75, -12, -10, -75, -75, -41, - -8, -75, -75, -75, -64, -6, -61, -10, -6, -62, - -3, 23, -75, -16, -75, 23, -75, -52, -75, -75, - -75, -75, -75, -75, -30, -6, -75, -60, -75, -75, - -75, -75, -75, -75, -75 + -51, -27, -48, 18, -59, -55, -50, -59, 10, -23, + -13, -43, -46, -59, -29, -26, -23, -28, -59, 22, + 10, 22, -58, -59, -59, -59, -59, 23, -59, -8, + 10, -59, -36, -59, -59, -35, -51, -51, -47, -1, + -31, 10, 22, -59, -59, -59, -1, -30, -1, -22, + -59, -59, -59, -1, -59, 54, -59, 59, 15, -59, + 23, -59, -59, -4, -28, -59, -23, -3, -1, -1, + -59, -59, -59, -59, -59, -59, -24, -59, -25, -59, + -21, -59, -59, -59, -59, -28, -59, -59 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -586,26 +595,29 @@ static const yytype_int8 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 0, 0, 2, 10, 3, 12, 18, 0, 13, - 0, 1, 0, 0, 4, 0, 0, 11, 19, 5, - 0, 14, 20, 15, 16, 0, 8, 0, 0, 0, - 0, 6, 7, 0, 17, 0, 30, 0, 23, 24, - 25, 26, 22, 21, 0, 0, 9, 0, 32, 33, - 34, 27, 28, 29, 31 + 0, 0, 0, 0, 2, 5, 3, 26, 0, 0, + 19, 0, 0, 1, 0, 0, 0, 0, 7, 0, + 0, 0, 0, 6, 4, 8, 27, 0, 13, 9, + 0, 28, 20, 21, 23, 24, 0, 0, 0, 0, + 14, 0, 0, 18, 16, 17, 0, 0, 0, 0, + 45, 46, 47, 0, 44, 10, 35, 37, 0, 43, + 0, 22, 25, 0, 0, 41, 0, 0, 0, 0, + 31, 32, 33, 34, 30, 29, 0, 15, 0, 11, + 0, 42, 36, 38, 39, 0, 40, 12 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -75, -75, -5, 17, -75, -2, -75, 18, 1, 7, - 15, -75, -75, -75, 12, -25, -75 + -59, -59, -59, 17, -52, -10, -17, -5, 1, 7, + 25, 38, -59, 51, -59, -33, -32, 26, 0, -59 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 2, 3, 4, 14, 19, 5, 8, 30, 23, - 10, 20, 24, 44, 35, 32, 52 + -1, 3, 4, 43, 28, 18, 29, 6, 9, 54, + 34, 11, 30, 35, 76, 55, 56, 57, 58, 59 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -613,54 +625,65 @@ static const yytype_int8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint8 yytable[] = { - 28, 7, 9, 36, 38, 39, 40, 41, 42, 6, - 1, 11, 12, 13, 15, 18, 9, 43, 16, 7, - 53, 22, 25, 7, 27, 7, 33, 37, 45, 17, - 54, 46, 47, 21, 34, 26, 0, 31, 0, 0, - 0, 0, 0, 48, 49, 51, 50, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 29 + 68, 68, 19, 26, 7, 48, 25, 7, 10, 16, + 38, 1, 79, 63, 1, 10, 46, 5, 13, 12, + 67, 33, 70, 71, 72, 73, 74, 10, 36, 37, + 7, 44, 45, 87, 14, 75, 82, 83, 17, 15, + 2, 7, 61, 77, 23, 47, 22, 24, 10, 50, + 51, 21, 52, 31, 26, 39, 80, 41, 68, 42, + 64, 8, 60, 27, 69, 85, 49, 62, 40, 66, + 32, 86, 50, 51, 65, 52, 84, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 0, 0, 78, 81, + 53 }; static const yytype_int8 yycheck[] = { - 6, 31, 1, 28, 7, 8, 9, 10, 11, 21, - 62, 0, 86, 61, 87, 31, 15, 20, 88, 31, - 45, 31, 63, 31, 88, 31, 87, 89, 5, 12, - 90, 33, 37, 15, 27, 20, -1, 25, -1, -1, - -1, -1, -1, 73, 74, 44, 76, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 67 + 4, 4, 15, 31, 31, 6, 16, 31, 1, 8, + 27, 62, 64, 46, 62, 8, 63, 0, 0, 2, + 53, 20, 7, 8, 9, 10, 11, 20, 86, 87, + 31, 36, 37, 85, 89, 20, 68, 69, 61, 89, + 91, 31, 41, 60, 73, 92, 92, 73, 41, 73, + 74, 94, 76, 31, 31, 63, 66, 93, 4, 94, + 90, 88, 93, 91, 5, 90, 67, 42, 30, 91, + 19, 92, 73, 74, 48, 76, 76, -1, -1, -1, + 93, -1, -1, -1, -1, -1, -1, -1, 92, 92, + 91 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 62, 92, 93, 94, 97, 21, 31, 98, 99, - 101, 0, 86, 61, 95, 87, 88, 94, 31, 96, - 102, 98, 31, 100, 103, 63, 101, 88, 6, 67, - 99, 105, 106, 87, 100, 105, 106, 89, 7, 8, - 9, 10, 11, 20, 104, 5, 96, 93, 73, 74, - 76, 99, 107, 106, 90 + 0, 62, 91, 96, 97, 98, 102, 31, 88, 103, + 104, 106, 98, 0, 89, 89, 103, 61, 100, 15, + 93, 94, 92, 73, 73, 100, 31, 91, 99, 101, + 107, 31, 108, 103, 105, 108, 86, 87, 101, 63, + 106, 93, 94, 98, 102, 102, 63, 92, 6, 67, + 73, 74, 76, 91, 104, 110, 111, 112, 113, 114, + 93, 103, 105, 110, 90, 112, 91, 110, 4, 5, + 7, 8, 9, 10, 11, 20, 109, 101, 92, 99, + 100, 92, 111, 111, 113, 90, 92, 99 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 91, 92, 93, 94, 95, 95, 95, 96, 96, - 97, 97, 98, 98, 98, 99, 100, 100, 101, 102, - 103, 104, 104, 104, 104, 104, 104, 105, 105, 106, - 106, 106, 107, 107, 107 + 0, 95, 96, 97, 97, 97, 97, 98, 98, 99, + 99, 99, 99, 100, 101, 101, 102, 102, 102, 103, + 103, 103, 103, 104, 105, 105, 106, 107, 108, 109, + 109, 109, 109, 109, 109, 110, 110, 111, 111, 112, + 112, 112, 112, 113, 113, 114, 114, 114 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { - 0, 2, 1, 1, 3, 2, 4, 4, 2, 4, - 1, 3, 1, 1, 3, 3, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, - 2, 4, 1, 1, 1 + 0, 2, 1, 1, 3, 1, 3, 3, 4, 1, + 3, 5, 7, 2, 2, 4, 5, 5, 1, 1, + 3, 3, 5, 3, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 3, 3, + 4, 2, 3, 1, 1, 1, 1, 1 }; @@ -1337,284 +1360,408 @@ yyreduce: switch (yyn) { case 2: -#line 26 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Input Query\n"); - cons_cell *n = (yyvsp[0]); - printf("Printing Tree\n"); - print_cons_tree(n); - } -#line 1347 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 27 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Input Query\n"); + cons_cell *n = (yyvsp[0]); + printf("Printing Tree\n"); + print_cons_tree(n); + } +#line 1371 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 3: -#line 35 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Union Query\n"); - (yyval) = (yyvsp[0]); - } -#line 1355 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 37 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Query 1\n"); + (yyval) = (yyvsp[0]); + } +#line 1380 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 4: -#line 42 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("SQLP Query\n"); - (yyval) = create_proj_operator((yyvsp[-1]), (yyvsp[0])); - } -#line 1363 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 42 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Query 2\n"); + (yyval) = create_limit_operator((yyvsp[-2]), (yyvsp[0])); + } +#line 1389 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 5: -#line 49 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Body 1\n"); - (yyval) = (yyvsp[0]); - } -#line 1371 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 47 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Query 3\n"); + (yyval) = (yyvsp[0]); + } +#line 1398 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 6: -#line 53 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Body 2\n"); - (yyval) = create_eval_operator((yyvsp[0]), (yyvsp[-2])); - } -#line 1379 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 52 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Query 4\n"); + (yyval) = create_limit_operator((yyvsp[-2]), (yyvsp[0])); + } +#line 1407 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 7: -#line 57 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Body 3\n"); - (yyval) = create_eval_operator((yyvsp[0]), (yyvsp[-2])); - } -#line 1387 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 60 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("SelectQuery 1\n"); + (yyval) = create_proj_operator((yyvsp[-1]), (yyvsp[0])); + } +#line 1416 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 8: -#line 64 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("last table path\n"); - (yyval) = create_rename_operator((yyvsp[-1]), (yyvsp[0])); - } -#line 1395 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 65 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("SelectQuery 2\n"); + // todo: add ELIM + (yyval) = create_proj_operator((yyvsp[-1]), (yyvsp[0])); + } +#line 1426 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 9: -#line 68 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("table path2\n"); - (yyval) = create_cross_operator(create_rename_operator((yyvsp[-3]), (yyvsp[-2])), (yyvsp[0])); - } -#line 1403 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 76 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BodyContent 1\n"); + (yyval) = (yyvsp[0]); + } +#line 1435 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 10: -#line 75 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("union query 1\n"); - (yyval) = (yyvsp[0]); - } -#line 1411 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 81 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BodyContent 2\n"); + (yyval) = create_eval_operator((yyvsp[0]), (yyvsp[-2])); + } +#line 1444 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 11: -#line 79 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("union query 2\n"); - (yyval) = create_union_all_operator((yyvsp[-2]), (yyvsp[0])); - } -#line 1419 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 86 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BodyContent 3\n"); + (yyval) = create_njoin_operator((yyvsp[-4]), (yyvsp[-2])); + } +#line 1453 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 12: -#line 86 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("star\n"); - //$$ = new_node(1, Select_List); - //$$->children[0] = new_node(0, STAR); - } -#line 1428 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 91 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BodyContent 3\n"); + (yyval) = create_njoin_operator(create_eval_operator((yyvsp[-3]), (yyvsp[-5])), (yyvsp[-1])); + } +#line 1462 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 13: -#line 91 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("select list attr path\n"); - (yyval) = create_rename_operator((yyvsp[0]), NULL); - } -#line 1436 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 99 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Body \n"); + (yyval) = (yyvsp[0]); + } +#line 1471 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 14: -#line 95 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Select list\n"); - (yyval) = create_rename_operator((yyvsp[-2]), (yyvsp[-1])); - } -#line 1444 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 107 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("TableList 1\n"); + (yyval) = create_rename_operator((yyvsp[-1]), (yyvsp[0])); + } +#line 1480 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 15: -#line 102 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 112 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - printf("col\n"); - (yyval) = create_spcol((yyvsp[-2]), (yyvsp[0])); - } -#line 1453 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("TableList 2\n"); + (yyval) = create_cross_operator(create_rename_operator((yyvsp[-3]), (yyvsp[-2])), (yyvsp[0])); + } +#line 1489 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 16: -#line 109 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("path id\n"); - (yyval) = create_pf((yyvsp[0]), NULL); - } -#line 1461 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 121 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("UnionQuery 1\n"); + (yyval) = create_union_all_operator((yyvsp[-3]), (yyvsp[0])); + } +#line 1498 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 17: -#line 113 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Path Function\n"); - (yyval) = create_pf((yyvsp[-2]), (yyvsp[0])); - } -#line 1469 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 126 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("UnionQuery 2\n"); + (yyval) = create_union_all_operator((yyvsp[-3]), (yyvsp[0])); + } +#line 1507 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 18: -#line 120 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 131 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - printf("|%s| ", yytext); - (yyval) = create_var(yytext); - } -#line 1478 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("UnionQuery 3\n"); + (yyval) = (yyvsp[0]); + } +#line 1516 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 19: -#line 127 "SQLPGrammar.y" /* yacc.c:1646 */ - { - printf("|%s| ", yytext); - (yyval) = create_table(yytext); - } -#line 1487 "SQLPGrammar.tab.c" /* yacc.c:1646 */ - break; - - case 20: -#line 134 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 139 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - printf("|%s| ", yytext); - (yyval) = create_attr(yytext); - } -#line 1496 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("SelectList 2\n"); + (yyval) = create_rename_operator((yyvsp[0]), NULL); + } +#line 1525 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 21: -#line 141 "SQLPGrammar.y" /* yacc.c:1646 */ - { - (yyval) = create_op(yytext); - } -#line 1504 "SQLPGrammar.tab.c" /* yacc.c:1646 */ - break; - - case 22: -#line 145 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 145 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - (yyval) = create_op(yytext); - } -#line 1512 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("SelectList 4\n"); + (yyval) = create_rename_operator((yyvsp[-2]), (yyvsp[-1])); + } +#line 1534 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 23: -#line 149 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 154 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - (yyval) = create_op(yytext); - } -#line 1520 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("col\n"); + (yyval) = create_spcol((yyvsp[-2]), (yyvsp[0])); + } +#line 1543 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 24: -#line 153 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 161 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - (yyval) = create_op(yytext); - } -#line 1528 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("AttrPath 1\n"); + (yyval) = create_pf((yyvsp[0]), NULL); + } +#line 1552 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 25: -#line 157 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 166 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - (yyval) = create_op(yytext); - } -#line 1536 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("AttrPath 2\n"); + (yyval) = create_pf((yyvsp[-2]), (yyvsp[0])); + } +#line 1561 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 26: -#line 161 "SQLPGrammar.y" /* yacc.c:1646 */ +#line 173 "SQLPGrammar_new.y" /* yacc.c:1646 */ { - (yyval) = create_op(yytext); - } -#line 1544 "SQLPGrammar.tab.c" /* yacc.c:1646 */ + printf("VarIdentifier is |%s| ", yytext); + (yyval) = create_var(yytext); + } +#line 1570 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 27: -#line 168 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Col op Col\n"); - cons_cell* first_term = create_term((yyvsp[-2])); - cons_cell* second_term = create_term((yyvsp[0])); - (yyval) = create_comp_operator((yyvsp[-1]), first_term, second_term, NULL); - } -#line 1554 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 181 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("TableIdentifier is |%s| ", yytext); + (yyval) = create_var(yytext); + } +#line 1579 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 28: -#line 174 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Col op Constant\n"); - cons_cell* first_term = create_term((yyvsp[-2])); - (yyval) = create_comp_operator((yyvsp[-1]), first_term, (yyvsp[0]), NULL); - } -#line 1563 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 188 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("AttrIdentifier is |%s| ", yytext); + (yyval) = create_var(yytext); + } +#line 1588 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 29: -#line 182 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("pred and pred\n"); - (yyval) = (yyvsp[-2]); - (yyval)->cdr->cdr->cdr->cdr->car = (yyvsp[0]); - } -#line 1572 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 195 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("CompOperator EQ\n"); + (yyval) = create_op(yytext); + } +#line 1597 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 30: -#line 187 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Not Pred\n"); - (yyval) = create_not_operator((yyvsp[-1]), NULL); - } -#line 1580 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 200 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("CompOperator NE\n"); + (yyval) = create_op(yytext); + } +#line 1606 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 31: -#line 191 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("Exist query\n"); - (yyval) = create_atom("INPROG"); - //$$->children[0] = new_node(0, EXIST); - //$$->children[1] = $3; - } -#line 1590 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 205 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("CompOperator LE\n"); + (yyval) = create_op(yytext); + } +#line 1615 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 32: -#line 200 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("|%s|", yytext); - (yyval) = create_constant(yytext); - } -#line 1598 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 210 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("CompOperator GE\n"); + (yyval) = create_op(yytext); + } +#line 1624 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 33: -#line 204 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("|%s|", yytext); - (yyval) = create_constant(yytext); - } -#line 1606 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 215 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("CompOperator LT\n"); + (yyval) = create_op(yytext); + } +#line 1633 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; case 34: -#line 208 "SQLPGrammar.y" /* yacc.c:1646 */ - { printf("|%s|", yytext); - (yyval) = create_constant(yytext); - } -#line 1614 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 220 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("CompOperator GT\n"); + (yyval) = create_op(yytext); + } +#line 1642 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 35: +#line 228 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Pred 1\n"); + (yyval) = (yyvsp[0]); + } +#line 1651 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 36: +#line 233 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Pred 2 \n"); + (yyval) = create_or_operator((yyvsp[-2]), (yyvsp[0])); + } +#line 1660 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 37: +#line 241 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Conj 1 \n"); + (yyval) = (yyvsp[0]); + } +#line 1669 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 38: +#line 246 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Conj 2 \n"); + (yyval) = create_and_operator((yyvsp[-2]), (yyvsp[0])); + } +#line 1678 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 39: +#line 253 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BasicPred 1\n"); + cons_cell* first_term = create_term((yyvsp[-2])); + cons_cell* second_term = create_term((yyvsp[0])); + (yyval) = create_comp_operator((yyvsp[-1]), first_term, second_term, NULL); + } +#line 1689 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 40: +#line 260 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BasicPred 2\n"); + (yyval) = create_exist_operator((yyvsp[-2])); + } +#line 1698 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 41: +#line 265 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BasicPred 3 \n"); + (yyval) = create_not_operator((yyvsp[0]), NULL); + } +#line 1707 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 42: +#line 270 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("BasicPred 4\n"); + (yyval) = (yyvsp[-2]); + } +#line 1716 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 43: +#line 277 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Term 1\n"); + (yyval) = create_constant((yyvsp[0])); + } +#line 1725 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 44: +#line 282 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("Term 2\n"); + (yyval) = create_col((yyvsp[0])); + } +#line 1734 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 45: +#line 292 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("INTEGER is |%s|", yytext); + (yyval) = create_constant(yytext); + } +#line 1743 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 46: +#line 297 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("REAL is |%s|", yytext); + (yyval) = create_constant(yytext); + } +#line 1752 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ + break; + + case 47: +#line 302 "SQLPGrammar_new.y" /* yacc.c:1646 */ + { + printf("STRING is |%s|", yytext); + (yyval) = create_constant(yytext); + } +#line 1761 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ break; -#line 1618 "SQLPGrammar.tab.c" /* yacc.c:1646 */ +#line 1765 "SQLPGrammar_new.tab.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/SQLPGrammar.tab.h b/SQLPGrammar_new.tab.h similarity index 93% rename from SQLPGrammar.tab.h rename to SQLPGrammar_new.tab.h index 3a74b1b..7b20212 100644 --- a/SQLPGrammar.tab.h +++ b/SQLPGrammar_new.tab.h @@ -30,8 +30,8 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -#ifndef YY_YY_SQLPGRAMMAR_TAB_H_INCLUDED -# define YY_YY_SQLPGRAMMAR_TAB_H_INCLUDED +#ifndef YY_YY_SQLPGRAMMAR_NEW_TAB_H_INCLUDED +# define YY_YY_SQLPGRAMMAR_NEW_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -128,7 +128,11 @@ extern int yydebug; DELETE = 338, DECLARE = 339, RETURN = 340, - UNION = 341 + UNION = 341, + UNIONALL = 342, + ELIM = 343, + LIMIT = 344, + NJOIN = 345 }; #endif @@ -144,4 +148,4 @@ extern YYSTYPE yylval; int yyparse (void); -#endif /* !YY_YY_SQLPGRAMMAR_TAB_H_INCLUDED */ +#endif /* !YY_YY_SQLPGRAMMAR_NEW_TAB_H_INCLUDED */ diff --git a/SQLPGrammar_new.y b/SQLPGrammar_new.y index 041eb6d..c36c62f 100644 --- a/SQLPGrammar_new.y +++ b/SQLPGrammar_new.y @@ -17,7 +17,8 @@ %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 +%token INSERT END CHANGE DELETE DECLARE RETURN UNION UNIONALL +%token ELIM LIMIT NJOIN %start SQLPProgram %% @@ -34,34 +35,47 @@ SQLPProgram Query : UnionQuery { - printf("Union Query\n"); + printf("Query 1\n"); $$ = $1; } - | UnionQuery LIMIT Constant // todo: how to represent Constant in parse tree + | UnionQuery LIMIT INTEGER + { + printf("Query 2\n"); + $$ = create_limit_operator($1, $3); + } | SelectQuery { - printf("Select Query\n"); + printf("Query 3\n"); $$ = $1; } - | SelectQuery LIMIT Constant + | SelectQuery LIMIT INTEGER + { + printf("Query 4\n"); + $$ = create_limit_operator($1, $3); + } ; SelectQuery : SELECT SelectList Body { - printf("SQLP Query\n"); + printf("SelectQuery 1\n"); $$ = create_proj_operator($2, $3); } - | SELECT ELIM SelectList Body // todo: how to represent ELIM in parse tree + | SELECT ELIM SelectList Body + { + printf("SelectQuery 2\n"); + // todo: add ELIM + $$ = create_proj_operator($3, $4); + } ; -BodyContent // todo: create BodyContent since njoin does not apply to FROM +BodyContent // create BodyContent since njoin does not apply to FROM : TableList { printf("BodyContent 1\n"); - $$ = $1 + $$ = $1; } | TableList WHERE Pred { @@ -71,20 +85,20 @@ BodyContent // todo: create BodyContent since njoin does not apply to FROM | '(' TableList ')' NJOIN BodyContent { printf("BodyContent 3\n"); - $$ = create_njoin_operator($1, $3) + $$ = create_njoin_operator($1, $3); } | '(' TableList WHERE Pred ')' NJOIN BodyContent { printf("BodyContent 3\n"); - $$ = create_njoin_operator(create_eval_operator($4, $2), $6) + $$ = create_njoin_operator(create_eval_operator($4, $2), $6); } Body : FROM BodyContent { - printf("Body \n") - $$ = $2 + printf("Body \n"); + $$ = $2; } ; @@ -92,7 +106,7 @@ TableList : TableIdentifier VarIdentifier { printf("TableList 1\n"); - $$ = create_rename_operator($1, $2);s + $$ = create_rename_operator($1, $2); } | TableIdentifier VarIdentifier ',' TableList // keep right-recursive { @@ -113,10 +127,10 @@ UnionQuery printf("UnionQuery 2\n"); $$ = create_union_all_operator($2, $5); } - : SelectQuery + | SelectQuery { printf("UnionQuery 3\n"); - $$ = $1 + $$ = $1; } ; @@ -126,13 +140,13 @@ SelectList printf("SelectList 2\n"); $$ = create_rename_operator($1, NULL); } - | Col as AttrIdentifier // todo: create_as_operator + | Col AS AttrIdentifier // todo: create_as_operator | Col ',' SelectList { printf("SelectList 4\n"); $$ = create_rename_operator($1, $2); } - | Col as AttrIdentifier ',' SelectList + | Col AS AttrIdentifier ',' SelectList ; Col @@ -213,12 +227,12 @@ Pred : Conj { printf("Pred 1\n"); - $$ = $1 + $$ = $1; } | Pred OR Conj { printf("Pred 2 \n"); - $$ = create_or_operator($1, $3) + $$ = create_or_operator($1, $3); } @@ -226,7 +240,7 @@ Conj : BasicPred { printf("Conj 1 \n"); - $$ = $1 + $$ = $1; } | BasicPred AND Conj { @@ -250,24 +264,24 @@ BasicPred | NOT BasicPred { printf("BasicPred 3 \n"); - $$ = create_not_operator($2); + $$ = create_not_operator($2, NULL); } | '(' Pred ')' { printf("BasicPred 4\n"); - $$ = $1 + $$ = $1; } Term : Constant { printf("Term 1\n"); - $$ = create_constant($1) + $$ = create_constant($1); } | Col { printf("Term 2\n"); - $$ = create_col($1) + $$ = create_col($1); } diff --git a/SQLPParser b/SQLPParser index e79b528f7c87ae959e2a7fa20abeeaf511c66863..a4d2f770e38db4efe0f1f921965421492ccf52e2 100755 GIT binary patch delta 7472 zcmaJ`3wTY}wqA2dh=@Fpy_1N%n#3zl2|*I<$WHc7BZ3G;>lKO$5fnueuaZP6F}$jr zL%E8&irq$N#N$$Wyy8?_oR-j5(>BNTNLo~_`_HxJ-g)%6>-)y~=NkV%#vF6bwdPvc zsXi;0d?A-~k<+)9cH8CXw@6YCzeS}tD*e0UXjjc~jI8;`&=GdN!@b$lcG@o=_OUYc zVYGMaUQ7Rbey@d=P4XYD9n6wsDsDT>Y<b_Qp0N}vb=I+D+U*?1(&!s!ANDdl?((dc z$>8GQ{mn2*aye`#Z|Y;Ln!BOMSY_H|D(-*;_VHZc$<k@Gi#KBCyZ9i>MwdvIL|?d! zcg~cgB0JeMu?o_ZOiOQ9CnsjM7`?a3kbUp7jF~L2`#xkW$ui16nK2`M5YU4eEnfv3 zW-O7410VZFq31F?`B(dLhJmdzJ}NTS*?NB(K|6!OVq!#f1;)B1i|b4fzU}T(W_+ae zn;Na9Xcjv+n&N{!y#Ezv8(JM7T0?RJ7kIKhG$Po<!f9J@80$rsgMC;O-3!*?jBxo@ zEctf!6c=ywwhZfhnz8;CkFH<0V6pVSAqEy}i45&$$6_caav#o}dhAA;&wJFfo>URF z6zBfYQLLwBc66-FqAVZxa%8Lr9gXP+-;<cDGK-)~eP^&RDoOIDS7JkPy)xDZ=UuUL zQI&UGH?))EMtJpTG}S)1FtIA7+Eg6BHiF9Iy!|62sV3`^qL_+SI6MXvoUIA;kffhq zX~}Pd_?Zz@ALrkas{$_3wtl(<2UC$`D)^cUPjrB$V8w~w73Jq=_Nu-sSN?QS&36EP zRjes)XbR^DniC)FuIL(K|E@7N!s+AqV6W4Sm@JLi6^^WfFY^BV8udS=eM63}nsQ+{ z1@(*e^HrIfyvXJ48bn{&sYOPG(}I5fn5Fmo1rHzV(!kHx_=jQWZsG-u>UGU=mpg{S zfmsrxs^pIo&p)qG{@$AWVi@WAck}Aqh<VaN?Rhg#^uu`!#Ge-S@4%O@znA-|)(s`B z(S&hfbi99X%*sYg24{-wFAVTQzn^1m?2)XTmr+x4o|k5SP^He++$Qe<onk_*>?n<0 zDA<jSa@Js1K;SrA&i6toXMjGYb(@BY4r!WhBD|szwNay71ht(i2YAK2(?~F06I}1l zYd%}^Mk6XoqbdcJPA_nwUeu3S(Ye<g(a89cq7JE#>sR_`h6BJi9)(kw$b3!&|X z_8mho7t6nBSf*t)uIdeVwq_+=HuP{m@7OS`-b_v3A%t`ZNvu1)n&9K_=GwsX1xEJ= zyCdhGbI8ftv?akG+R6mIcWo=1_Se@jhqvPW#JWuEP7f0F(MK8yq9NF46GR}Vws1K- zaglwgN}a8FhvEiKVO{CJ2KurtbY@^I&MYyQb*3(ffjAFJ?8|~^Rbn4#P9+*}wlj8R z!4zifhjX@3kMjy+ADmgTd#ew+pmg?-IwgBjopCI3WhBM2m#|}WMXsYsNyx>Lb!dAe zFYeeG;vN5^C^h5mD@uX!*|NpYq&e*|>fN2`Kyq+f&M!T!&cnLS^nLPV#HE-H(T77j z>&`ugzra{sWIsAsk_wCuT@Kq152go0+~stIZkxSW0OgybLI(*Q=(|CZG`YZ7?^0&} z9h$3*znhANV_!1Xi_PUKRhv7?yH1i@YKX2-3#=)!p9`_p!OS4)pW?0?%c-J4kF!is zPC*#4G{?TCj~dl|+MjA!h;mV*9-*_=w$5tM*(1@}BRZMVUcPuj?d+f}Y)_!IvmJrF zGxm<E8>j006K%SIs;&+r;7RL5(m*a|&&f44wEvxF)>7`i#B=ges?pNM-MEx;u531* zwLC}9H*Goc)f~<H%lr?K5j@h+K}2HS0}v|a-Lpym)_Je_<FEanqUzK>9zQ)*$8ZkA zgc)~>VOCM(Al<+t8hH&Q%vdhS4>ULKj41)uaZf<2VZE(O(ESg7qsV_Aqx|#;x!Y4R z3~>)>ZwtTWZw<eW)?dT7JXOPIsNqTPKT%7qLNzesIZ@4W&5Z)>ha(Ga*?X9hp=e@C zep5>?Hr^9r$EP%Su$TO8g<4SSC%hotL-ifW@AS)l)_da%KlM(3>xo)Hs-|D?nCk;3 z*z`%Np063d%dPiF{bTj<I7@lyk*tmmrt8AK<69gaCRBFD*S1&{Xf}-6x>#9ScrP`4 zA`jQ4itr-)J_yksl_+1e!mGcl74AC9N5sCQ0Yh}Uir=)}itG>gSmk?tRC%H%*BzxL z<{mKyn=nolK0tlF&=NOOD4GrRJrHwv{5SO2ksVQ|u(DoV(+}&dJ?`yfUDKUtHAGu) zi3lF;CCgfPxEdbdVGH+H!<*0ONA+sZ;&T2hyYH{Fc2?nS9bOsTAEFEGrRAv+3-VA@ z?91KF9=|7t)%t_$c>V4!wv>Ukls-JAys=L0dg@``b;#yN)~?GsTE}?+t-p@*B`vPL zj8F6cKP?WsR)Q@q&KB2rtJuSp&1zj%M$W@BohrPnub9X(${FUPTW@o;DpQo>co9l9 z*`LzRVJXorzKN1#7-7gX7kpzFZpcV24r<xiPa1A24&^w^Q1GX@;J4JSKbn@+I+#xW z*`ns-Pb|I}lU+@F6y-Lo9_G4NQ6gaJupC$k>;S9^b|2>Y5qMZSEC*HsI{>SK-M18H zMKSlHPZebs?4K|P6!{z|(V(ngOYG#eE%UA_$|4y5xD3PxYZ7b;YzOQn%=5CMWWaXA z{sFVEQWPD`2wM(24!Z~IdPPyj!q&si!|uY^KNZCr76Tg!%ZB{`Gk&Qkt6|4sj^E>? zLjmTil$pKK*^q`=8$48!(ozPS)97Zlx1DjMc^Lhk?Vrd0*h;|+pWBRj_-D)(3=}vL zI3GA+E8erfOZyeYsf8p3Vx$qk42(J*IN~rS2^e|=69t@g6q5z?`%F=;0^3(8N*(ZT zzz%kj6n#ulqJbxX8Fo^hw7gPL=D^{9Tv65mgH9;QCqTQCNC1pEg#^GTyzo2NOVX>r zXka*A@EO1?U=A<`SOQ!OJOC^NRslBv?*n%LUGbMf888BP0hr!0Pm=DSkpss)U<r_& zK?2|eU=^^<=STny0=nWuDFqk-oCHh<esmTC0G0vQ0dD|50gn1cQLX{c0v`h%uPKTL zJ`LXj_6A-Aj?6>DbRAO-JPq6gjJ%;J<-o1LYe2_;ApvkY&;wt@*MPl&eZNHl;BMf2 zVD@*22R;Lq1K+)gc%aWM!~=H#J@7O|S0f&H8u;2sG%{`@0q{C-6L88MBmn*!cnvt~ zdn5p|ACLf_y>o%Rfj<F90$crvc;GqUCSdQoic$@fBudK(kgvT*xjA97$0qt9C)g|J zJv=g;6Nevg3@mpu-GTV%N7QmwfLwc!y3O*DpB<tUz%2_+1FZj)3IRvTXfGs*hv^co z^yPF9u(X_<bA9B;<rD_UIznjxhodwDu;M7a3z+&D?FV$Jpi6+*V{{LouO#Q$KC*u$ zg#o^-q_o*ya&09|!_~D)Dg>OVq`iPcmGlq5-zw=BKv5+*&he4ouB2{&IhB+Gn1(n& zCgK2Q!~qHs2WWqsegU*SPL6YZ<aWoY8vs`+a|7h?6Ep)?UMJ{XfX@lqKQ|!nE$j^0 ze3A^#uJ6bL+qRUaIJLseVJDZS<Ay#9eqdw%ZIxE})!=^tpVOF^->}8+1K$@r41N@8 zlt0bJU$B=Fq-+QlHW9pO6VxKXIq-{`@bhfE6CRjAx-z$8PzYMHuyIXqqI}(^Oa*@o zO7A>09I=y4Xd-;oCR`0Z75s}5?E}B*|B1f<{s#CNP4Z8*<<F~ypbK`+Gff01Yyu}d z#23M@X~GxU_z>`M*mc)7;frm2D){~2OPcUSRz6Rf4uQ{Cin5}KAm1vGR)b##zO)Iy z+Q#n#UkCmL9Y`0zXMO!5K3S4#A-D>`iwbbU?bip}*$Za?{BCla-*HkZT5YkxEpJk4 zo~_jB;Aeq<QK_rJ-v&RYN&HM({66qK>EQg1#tUez#Lns0SUFl1s*ggg;42#Q@?lkw z2%i&n#xCTxV4y<=TItwxX-R&2%2{xm92WOsnU;jb^Xww<D`4}Zh2$#b|3|+Y60)W4 zcI~89xfXfpOgT@;*5XCVj~Ir{6yXD2(XMf!9`RQHDDAqJppC+xFZ`QCo<YLz_o^ne z`ZI+8#8}PWE)H*CevB4`G|?ijh+%otG<PQ4{OE_gysmL?XxI2vQay~qzpa@+P57&Y z-%aQ<g<n#iRY|h?#|gim@Q>;z0;ULJoFJ_J9O2(4{MLfz34gWlza;W3vUZS7?N+`f zdoQBgm2b*ja_E<p$t;t4tV&`zv|!a?HjE+*V!YP9ti_2e(j81wJIPt9HPh09#5T@S z(qK)ng02+!vUoaKpvMoz4+`|=iTEVpQijheeyEQGkpC{n{p$y*ZkxXtepg8^dF1<P zggCFGA%%L+Eh0+pt-14EG~7u`3jI*{(ZXPMOzr(T-7eIde}vvm@{rDnY`DkOqgLb@ zldfH>j~ALUwrgJ1AaO?pX|%MMZWrr4odo-Ni00lP*iLk%NFNy`*b*_)6@pC`{;nCC zLw!`y97EfS^q!Nz@(Ra^3Q?GP%;q^gSBlumXwBPJuxp8})_ZOiY_6yle^IE%c8XlB zAHQF)@2M{@NwSXdwD1R}X=-&FM)RidkL{uPpJ^cdTlj06%~cCNC*uR~GT<{-Z_?!I zixACl;g?c1{{)e(ukbG#qB&Lw{}A~3x=YR0{WbE(%x8(H(NUVbn~0iCLyGlm5wC=m z(vo7m{okSVqbsaE+fN4(`5CU=WWD6jEblpWMQ@6{hs69kiM&5^*8GgeqAKg|WnG&# z*#7yL&EcBdj%nx%KVQqLW@{NtSKifo_7zcM@GCAqR%;-=OxwYZ5$yfpntPI9r}J2r zubwv$TNBRqP~;kY<OorDz9_l7&>s+adWc8XI`5yU8LFssjo$NHp?M`m3z{xsYv?4{ zM}l3Nthv>1D>NU|gEe~dbHPqX)mZf_0Zj)yT6|9Sg=zk+8b}`S^EtUD=EV90`qIG? zy=Rn&+A5xnToGlWB_(<`glian1A%fL&x3VrzAr4J+hDhfJYR~9uZ_sFliW)6krjeH zFLo*Qy8w#I!hc50gLS00$WW^9`Kw^-#J!;tIqQYrT|8IIg})76ivj%3^X!ZkpNlf_ zgjt`w$+W#xZ;ltNi&$wt5kCliK2z0Vrp^ifNTIJ1Gk!++vx%+MdoC1gxX7lyzM)ua ziCi0EM|ta8IgOu@HFjpsq}=gyX6DkE4X52F=1v+vXVTai(`HVcVPh=58&9=pGc(ub zpzE7ETcwlcPn|u-##ofiH<_h+%lH<|ObOe<TW4w|Wo6P^+hSbBmG!ClkWOw3cl*mf rFNtjrcUvVE+=`nlhV2St<H)chruA;IGwq@!xJuiib@H6pR^R^vxuI-> delta 7110 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 diff --git a/SQLPParser_new b/SQLPParser_new index badc40efefbaa5aeb5ba720b5684a081042f2efa..4767e359ce42e7c7bd3ebf6e518d4f99084e647c 100755 GIT binary patch literal 46224 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�d`@&`mQ=b8 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 literal 41992 zcmeHw33OCdw)VLR7s8N%ArJ^c$)F4-%n=Af0u&UQK!gy{h((49iDV+FFbF6ZqLf86 zZ6jhwZJw>|h~fYaK?q0_9NG>Jhz8rV(%lszZCVgxgVg`+Gu*mWB($#gzxV!st#`9d z?Q{0G_dfGJ=bn30b*D9Hc95nqbp^9&j8YrA2~L6pjyxhGAPH<D>x|DUSbx?L=?<JH z@B~4CimO$cRy0KNgF#7eVvt}2(*9CTQB^{sy2RQd#kUKtqKsKMgY>AZA?tY()WRc* zMo@up?Vv*O%fdgYc%&C4^`fMnqAjvuimLjN849Vget~orFuD{aS-MjG>ddD2*+QPY zgwB%o6jgdRK#$7#bFT;~xIpIDUc0o){1lbdWux-*GULXN%Fm9;&nqlj9kY63Tuj{f z*wUidvAo`7pJeCETf}ps=9Q*6-V15s5kB<sTjRCPy?&@4l>SvgpH~*Yu<q!?gk6E4 z`i*H8wn2*sBHjQ5x`tn|rGL(%jEG6!xz#Wcfa$Xt@gAnMipI6W&uE9=9R;x{WfSe% zjy%b>mG8-R_(|>XpKpi1upR!;cKENf!|&4$|K@i1AGX7PxgCB?JMC7|j{IHi@E>c3 z?`nttPCNW*?eMGG;Zq+{2)v#Iqb>fFcIx{k<Oc;BL3%AhcNWDg8!Q}E{$sY}j}G8J zB>4#ee1`d$Mbj^il{!nZiq|m5>O3d2&z)~CE^}rve3UY~z0{eJwcMVSyWF0Wk(W>0 ztlW$eR^rIW&o9b?YIa^B%PY-rI@ge$d`BTGa1@j}V9D+%DJd+nLoCCYS5(Nd@*No^ z;E_^MnUmxw+X7{&1agFtNKPIs6|tOEC3#K<%RzS8ET_06uh5wT!&$2{>^XUb8Tom) zJ9vqgIZ$G|ovK77E^*omGElA@m@0y?5{HA$Nt!!jrhRPenDIu`7aJQp0d`W8?a17* zEU(n*C`nD8nO{`sNX^L1M;`WN1x1C@v|Wg{DM&tx{uC9dV98ZT2UA+{ge3W|VD7_| zzuo$)ZE({aSPN_tuUB4PD0#y3GF{d$uQTPQV;s??)+aSCHb9!L2(^BRBukL|kbrTa z(#P+#a7kJt)S5wzMiW1rONbATiQnDCZ!z(sP5f39-|URlxTZCme7CyPxF-Gp#ROI3 zn)m}ve2cW-2|U>}935ujtM!F|(I&oJ+PVBh6QA->SAvOeUPo;vKIN^h6cb<d4PlE- zd~~F7Ej97G7+l73O?+BQ)KzTa%dHrPR-5>;%Q=68i65qnfNnPN)fgnW%EUMOvF#>) zPm`S;CO)m*>U!G5k5o+1T_%2S6aRG+pVl6A)tdNGiV1qe#P4h3*PHnLOnh7UHz78+ z9$IE$wu)M3khk7eekkN^L&7_upVPv;L;K@1d|(1%l+Go*snLsTXb(!$5NoRE=`NI} zq19B&(?OJ`A=R{tr~g%oG)<|d9X$OVrD<q2Rq^yGO4E>P+Q8FaQJRKQQ!!6}PH7rK zO-p(DLrT-oX-eVgcPULnrYV7^4^o<jO4Debev{HPM4Bu-{W7I#Xf#Fe^s|(vA<@Km z`f*CrRBvjz2*%LgP@0BDQzK75KxvxtP4zr|FQt1>x|XN!qBISSrd>RJJEdtzH0|K& z5=uu>x{9Z7qcjbHrVWOEP8HJp8gqKC>*%dE*H^aklPxK!NtOD&HpXm~p*=a7dVVrv z-pDxEI2%5279mqJkXU4^)NcZ{O=`8d{_5<DF7HA~bb06!Z(~ku_`prv{*t$;mwjpI zUrB<M6Z&y8!!JVLcHm;L&DCN%;F)gI4%?1ibVkA8(Gp>>8yRfR-iE0f?69&?w(_Y@ zK>;O0dAix$Q=di36N(o0*zj>!{|sr3inD<VcIIuEM14qnNmC9aD7Fy8ccNSW0iqSP z;T11KuulIgDI(_9zvle1E_M1Rl80j6izw<{7KZq(6nE*Xh`9CDCS<%o90IvRAkHfw zRl-@3=|m2E6>QV$ZEkLGtf%W>Ms|h?iMgDFj^%=X3AR=C@3N02K*Ck$Sv!Deu*U-* z4~<xoaakL~_e4f>Eo<ZE2%Fp52&Tua6VGL>Z`P`a7ruvu@2RzA)uT@f<}xHY1Z}qd z$!)E-ZMRkSLSN~7W`q4&hoBtvZxR5P-nareaD)11h&IQW#XBVn@$JZD<NA6VTJMg? z@IBT)iA+MSYcrEE#6~9J`|C*-?Vz%MXo0jh$y#5w&79LuRNgjq2G5r|D1)us+Nhb; z4okJ1skvHs#W~E2Dl=SXHFQ5NU;i;Hy9RCgU9o6Ww|){aST$=rXwpElcx*2H6v?|6 zHS*-}gEkjh?JLgXO}<&*C=-X7YROgLAiu2ed)|h_a9ck{^H*TxQ5W=C1Wtz_(Slu& zz(Da*2Tzt}sDt%nN}%K2`gFul$fh9}+HU=sB3Q1~T>1_~npTi?{Xxasg2-Y01}Lzm zG(fNu!|fc#Y>h|Ev+cas`}!<&V^h4qLk&Ed@RfvjAUs;&r(x3OBK`A-dC~~KhVb+7 zjIjSl18*Qaj_@$T8w9@7z-tKaO?WurH3F|R@M^-({R=qV>NHggyuiTM5`K*E;e@Xh zc(Q?~6TXM=8wgJqc#MI^6TXe`v4qD9Jk-FW313P01j3^Qe!9@8KVqIV!Y2`a9xDaa z-@qFPk0X2`;SB=cY2Y=4_a=M+;WYxUH1KM|&;1BIg79jA7Z~_j!jBQYi14)nPd4y$ z!uJq9k??eZ#~64#;oArwMR>fxLk&Ed@RfuQAv{{(rwfewBj!mXd<Nm?v2s%V4ZMNy zIKpQV-XQRu23|vWZ^HW#UL){I1Ft6hTq|(8^=qmYc!7bhCHxrS@r17xc(Q?~6TXM= zu7sxxJjTG|3ExI|5aICx4>j;;!dDVLg79d8pUyYxkC-Qo@cD$F$4-LkZ{Q7t#}Pi8 z@CJeJH1Hb2dlNp6@EU<v8hAC~=Y9Y_lJIJQ7Z~_j!jBQ&jqtSsPd4y$!uJrKM0mQu zV+=f=@NI;L5*{z`Py>%9d?n#@MAH;4@YBnU`XlB^Bb;ujn$C9?^*8Va!s7_Pitq-3 z?=<il!g~{bE#Wl+uQc##!q1%po=AALzzYm~E#b!q4<>xAz>^I;o$x(`PbWNG;4uas zPxv;%hY=nx@K6JfCVVB~eF={i`03k>`XlB^BYZUB=dshI{x|Rj!s7@}AiP1~I}N;s z@ZN;S5ndzkN&~MZ{M`4z#}i&H@B#y0OZYLuClkI_;K>G_PWT?elL=23c#MI^6TXe` zRKnv09%|sxgs&ug4B^oNKb>dPA2ClF;Zq4ekDWKw-@qFPk0U&a@CJeJH1Hb2dlTM= z@EU<v8hAC~=gtDZg79jA7Z~_j!jBO?l<>6zPd4y$!uJq9i12iQ#~64#;oArwOnAJ& zLk&Ed@RfwmAv{{(r*n<^Bj!mXyg%XRaVJ9cH}D3+;|QNec!R)q8h8!iy$QDxUL){I z1Ft6h+!^4pgjWl^z`)lMevI&|312JlWCKqpd=KH#gr^HU#=zqV-$wW}!s7)VYT(g? zuOxf`;n4y=z09aTVxBa@X&cyd9(QI`e*<qIJdW_Wgf|F$r-9cH-rK-y1YT+2)r6n> zPU%+*yuiTM5`K*E>&gCFfhQYyI^lZ=??HIFz+((Np73picO*Ps;GqT{P54T}I}si& z@Y6X){Sot|5#ELH^SD!``Wtuy;c<k=W24v9An=_AUPE|q!q*aBBk)QCuO|H5KY_0& zyjtJ|2ELZ?V}xHr_*#J{8+bb5dkF8z>o4#a1CJ+s8{xx9KVIOW1|CiLO2UT|9xd?G z4x|2vdC~|^C;U9_+^PNs-avR9;Y$c_5cp05uOYlQ;jx6*2)xq3s|i2X0z8KBYJnFR z_*%k`5k8XewE|Bz@N~lW5Z;T|U*ItY9#8l-!bg#Qyud>ZJeu&8gij$nTHvR%jrt?z zNh5q3;pcIZLG?HA2EyZjH#G?8Wdo`uD4L*J0X<|uPZGocVTZlj#@Oqy%{)_Z64SJm z%SN8hvS5$Df;6&PkYhU6J^CgpiJf_!=j(4_m(EqVYEu^1!VRK3atuihuP^s#F6(jJ zV0;EkbgRd2Fb?rV<W3^S-KslbB5r^)k;{_;zApgo@6sRQh`vb(6!-}s(^<rD(Jf4- zkhtDYqAr1Ur_^#Y1$>PkY;&iCxb^YG+iueiLX6{+4wg7!dnx#C>v4kWabwmUNl$$z zMz=?}heKPO38BOZs7)XfxJNEue}XxOfpIbu4BR<E?=y<J^$&^AEtd5J-Cw;)o#58@ zN^aAu7^)s}_2sRavqyPrQ23_DQF7ckJDPq(q)vYnqI7va!hst2Bcc8lSJzj9xb=1T zq}D%p;M72^{%C7?ZI;XWano0@?AEgY(%HmgumHtwT(QoR+znlSFXu%TlNDcmuSC+* z*pb&48a=oM^|U@mL_JO4V=y57_YA6GWIYk1b4A-8C!TCT!aesJ1`iN~27!TdBI;>+ z0j*Ni+zq31<ZRTm0OwIn*_287p^52B-d1NVHt3X)jyp1)h$+*A5ZF8p{BfW8IYM;w zC8F-giNwqL&{lp>69Zr*F(w@>r7{%FK^dBGMh0`i#CJ!2vlPV0&YdtG19%MJv&47N z2pU0x{J!0Wt}N^FI{K6~{YuA-38L6Nh(YXaL*Yk?aRokgj?`ISg&b?XlAi)p&cGO= zMna`3ZHOmhZuQt4QEq(|M-#8cTaT>!6y~zYh&wWwh^crJF_6ke*XhKk3zCzC<Y0fv z$WchUQu;Ry4(3w5gw#)Ve|u3Qtw(q%_cry`xL`9$xFbLI6GVwU$m&aCQln4`9m6Z> zvc69YcY+0D7}JcRQCcnLMEUx9cIObzNx?xL2P$oyFlucF4zvc-{Iq&pDN)Vc6^KJ7 z!IF&fT7J+09?#Epj6Bu=3?fwuS4s#*7vXgYn7mX2DT{ujE`QaEE<e{p0dNl}t{lG+ zysG+-x1v_=$ghZ)n%dVi<?Hvd@cZagb|YdI9Ab5<v+@Yqq(*2z5uiN;wcPY)6sXQx zJA#u#_+-u3LS?g1S>dNb6?88;V#|8hz332)VC`MFDfgmU8XAW%G!DgE_pToR^(#pa z?a<WZ^}4LJ<?Cy`&W`x(QuaIkIT12LMHXQJS=dm0WYGd^l_{DF8KEg!Y}yf#4=j}p zg!cX=B8S&JUN1V8+Hw0VwBrli863(Xm;NCHnw~~|JlPPbqnfeiv7Q@|aKqts;3^JM zSql}<bVCTnGo|rUV4~R<BI&m7MM2!5MFhDgEGBZ`Z#V+|r_J5j=3WuvPDZKUu~kk9 zv$>9<@AqM>GS5U<aOtzjfS!O)ba@|SppiP-=f}TO>BB1=IQas*2eI9e=Wik7>U`B5 z*$HgS6Ssa504&TdUw?#^Mb%mPJcr)PqyTeg;OLr1flsp@{DZ`IM?U9g59<@b%@`nj zJ#|Mu1ssiD*)0e<_X(X<ema;glMaO6_agM%k*kHccF?UCAbPY_tB230BS4(X;#`j# z2#w<gaQ3Smp+jPti|)`d9GlROW3u)7+QghWg>JC9W<pHw!o?!bq@(yoJ8%<n${d}6 zwtYLCSMm#zaz`Ha6Lv59xcpQQCayd39RR2u3aRhoqWW_}W2>KrSUVme9?iYO-1bHx zd0T)ara@#0@st;r;tPa${3YTxmwq>xZtLq<RcvxqaqH8-b6L-##<`^8vbHw;#Cy)# zij(e5wa$L<6%;iNy;qOLaW4+Nn|0pzo2_Tu&{v1gZ(`qPI{QBB(ofzDyRd-*e1RyP zefz|_;>{Kk$JzJUjqA@EXWwVU$!)iBBCmi<CJ@^=$39~^`>u|c_9j`+(%H8!C#_wb zt0(%(fV1yb4UG{^g`R|p-}N0F8tjNw*tPx}fERBPEp^y>1|H`dqwf2#=Qh>-8<*}O zNm2K|AWC)jiHA=x^8IEb3}d$PbAMU)2-(iO?mn$a#BQ_hznv`YO|pJNb@%D$?dpuY z_L4G$Z>>dNqd&^mpJin_?4YMHB$#LdJo6dtT7SakDx;ZpW-)IH4>rDy6vev2H@@%j zMC7YP{HG5sR+Frr@NzofbL%fa0xXyHB&<CswC)JdN}&n4hGU_b98+@|P64e?CTXu~ zrJef?!p7uFY`BqySkkPm&3$a;1?cGVf)?~Pjc@Fwtu4Ih5yHTaH(pY7jE7Zq*q$I8 z4CmqWkb*4IQhEuG8s{*Xa7VuAX9-1i>92D{e^LnC=PwZX8>HcEVPTUHDDV^DUPv}0 z->|KmMsB_<!`8dNgAsYc#rF(U8$8W%>D)eg2D5mxK8c$|nO%AuqE+wk?In5@()ti^ z(3O!Oye)e1G~7UV#b?|r=-;LBIyDe6bu8Ubd`&#G2Qt?=KI!1faK!%vK73izL&8EW ziBSpla}?vv2)Bdu?<p<r9;y-bbig?l-52!3cFx%mOKf6u8pP&s19hIwu;+Ozl;0I} z;v=+qCGO#X!bMZY1Eipx1bbtBBlXA);8OpIv7nDZvI@e(L4})hSuY^n7ir;v!x59k z>OfJq{?j5ZyIKDR5x4b%XhV7&8f9~>$8gZ!13-^=>5=7rin}A9CgN){lyR(QF;+`R zlnIG#oP^%V1p^*g9>HwEBTEPu6AaUE%zCy^Oy(MDwU*NrgA$$0_kugI+Ir5T6{_I- zqonWWUG7@n>iI})&7(|qy9vABr<#kb?8alhY<gC7=GP>F!mL1HKBc%jver+Dz*K<m zf{T$=1HwnvvqJdS{=)9a$BE%ep}}~M5GnQ(aYwF0TFj0dAu!(%pka@7Cdh+j8Mls^ z0B8%;tf^7%*2fB+XhWwSTLX6jZn=kWMDH#H{<Y9tbxgSkOc-5=TqMk;Un^3Ll)@Sx zpg<Cja!CIGgwMUV5UDcUsD;LgtL)_d1eDQ}+L=KG#V=pq%J`;yKm55T19#q3EBB(4 z*h=tNLKIE@?X=q($dzQZ$xYHc!Zt_lQPz`%fzm=<f`uA`4-4K*d}uttS=LsQ8^D<0 zg>bG!Cj?Oy<Y+s$0C9KZmqd(#Y#J41<g$(mp*KxJV&^N$PPaekTv<+3p&B<NJdODM zi2FLL{2SgvSZNwPgTJ6XGoP8{y6QZSiE@+cZM4xzh}Bb<Kxg_erYBS8ve1d5JR?ly zaWh|`J<i@jm!7v$L11PyVwmyk8<`V#61WRRes`e&APpyIw|qw@elXOmzsV(`<VqRh zxf2*18~lMQNDVl8zelxa_@;7^MQdF`f2qj3i@O=wB5;33Qg$ex4OS=(lSM>yqR`i~ zZt&IgMvA*56Nt3gJt3YSF2D&Ivw?iRuW+Ye(o=^l(16{fS(?^Nm~Bcin^n{L47ixq zCqekM{)nX9k$e4x-I4DRLrm*kLgZmT5qIR1NQ-HGKOyM7QOLYp2<Q6=6W9Y_8ga#X zaXpvQQ-%0cL)`EPKjE2pot^@K8qwDVZrwt{bRT*I0IWs`8$Zqm+h|5E@RShvmJm6* zzNWZ4@_j#HHM%ffo<f7e=3XK8q)ALo3cZS$vPPRIj*|wPOJBoP^t&WVjj@umBJD)X zC3E)h4B*vU0Yp~M@G|5{rwSuwCAK<jZ+R^++zvG2H6je@4h&tR_vOa*9#WL<W((sm zA{w!FU=p<A<%&N*lUnE>^DJy1k3)U<=Tt-BF8u@WZFPDL2whFj;RE8Y5xX*l+TjU` zPC6KVPZdFR))q{7YQL?-#|BJn<1i`w^1Fjjv69(DVe`4X?jRz4-GK=x>^M=_7E@sp zxoGHEA_w@s(I|T1XGYO`0ybQrg)ic8JLChjm3W;6KA<w?BB%!?ge%`vTSjh!xKw$A z>+Hh!Ax%3`E#cPJ)4`ITTTh{a-pl8iwXxh2<l<vgI(M;XD^DKi04y*|?bK>hqX!Fv zSQYrxAty0J$@uw;@jk9}9n@pEUB{zhGHBFYcm&>`b)L}UaC)M6e6c|5`dVo;TIsl} zjPAPSdW3eMwt(4ts2^xQUcSCXEN1tj1fH$Xud|+{vNR8-{W#sN<Aje+aFBQxwZ{;6 zm)6Rla_dQKWlzRiKVJ6<-Pq#>Glll*G)CYdad#b{AQ!e4IZ{UBzRkbkM^h2HBX6p( zu^L`lcm3G)7RW5Zke|>GI;aruRnNRnz25!Q2A)HR(W$Ikza6r2uDSJ{=ET!R!mURo znWVf1;97ryRttRsIBH)&4w*N<Zf}!&gOBUhlP)ne*#~1PCLl!@qC<VrLB8lH8LiV} zjM&va`1o~({wFfZn?lsMnKpKR0bhATlEG}=N5pVYCU5vKA8q;zLhK=vm>AEVJiNIB zo0WvXCDQJBqY%E$B#g5hO!{(w*~G<oOA~dx0ZF<%KcVwY1yx&J(Xe%%KYZf#28?)D zSqmS1yy^L1uf0@APK%Wv<G5bvC#KS_-$GLX#d<ic=XGN2RKq@YNXR8#_H<&GP^r zOm4O|H=|yWD<B)b&)SUPiVA!Llb%umZ&=^l#n};`tc=dMZDiDScz+kF*mIDpvwp*! zd=$Wu60{I_AHZ^ebnBmW91eUZP>&7VxvoPHzMBizdE$sO{7{ms(KhMrm2a5sHP}RE zx01bS{`TCuRT}vIBXko~KY-C^qy{fuH)yy+ZzGmlzn_yuD9D5pqfJfG2|{!uVo6WD zMGPc<kR)dj#=ooVtj&d+7rqnjinsYX^I2$Zm2+gFZR0nqLm11pxjPIUhLYNF@II!t zuA&O#3rSX2u~o)wl@$?q8_4FW*v`kEAg+oXl&Y-Qfj6aqJuNU!Tot=0Rafyk$PsRA z17gDLCKc0TQ8~`j$0LT}=4}qKm2<m6?h4W%$H~(<v_0kKY+9{YM?^7jW-*CNgx~cE zUk@JS#c~UDI6q%FioG~JPpdcrleUd-QK`bOW-R=k#klje9et7*k{<#7%C55Llt8w; z+OCRvl5#)Dg>h<eppl=Lpg85VooE8R@*!|n#c>iVe~SnU-}ED%lEDPexw0Fg4{}@? z{nX}q7X#CCBk8(@uF=jsCuP5)k!LSRd1I?h6VirlxwBCAMMo(6KO8mN=a_6x+QIM& zRCq)NoR~6@y+4W9--$B;(GaNc%k|vo5z@P)SLFDR#iLv*Q{a`wIH8j!F-HDPr<VV| zE1qk<MPs3B_@*sLREd#6%U-3PG77zjbJXyCwXTZI5GsF*K6i(2qWd(r-e|?iSnI{I zuAVA1uuHE;8u!uotf;*+$~V~EeAv76T|k=0xb>$&r_$SttNOb2Y9vH<8)Ia4durj4 zX%%yEMWL>lO2EQ5{|8`EoT=gW)2i*}xUlq)ui%roiLx>?JW;_oL^NByGvtRyse;X= z<!|wM<m^<wlOkH3-ZD$fAz{bG=MQER%|zVPMt%Vp&Ce&ME23#DHq}+lnqO<qh&8I` zmuvW@+3*w)rK|(WPX#1L!QIbD9;I!D+UJV=(A`*XTottt6iqTX{GQKnZX-?l-Z}mj zPR@Ae_$%^w^v*Hd@IthRXX6Ka!0|e8gCXRXDyPmMFk66}g~9nmZ|t5|A`jrB37-|H zOr>c`6%zeOVvt#a{0+~j+=J#r>G^_|*b@dtMVk5w)l+CS&)@$TP%>`(2c2jCCzAMs zNut~X>qZ8K@jD}Z#`g-<YEr%T->c3tscsai%Sd&;N!6F5UzM7$ol{ksEmWtFYA>@Y z)=AYG=AxH-0I0Uv!43VHT%m5V`CSLz2xl>OJhkt))lBt5qLCyXGfNmv#2ZZI(>uaf z;0J~3E2NqQ)uv5?@f0x@m~Hv)wpva4i-h=nBtF<A&ReMM?B6h{_ZI5uq<-=}Q{CED z{dH$w$s6dVrgG{KQhmm(>MQ73llb#O{3pCp<+<G~-gZuJm{eDgs#||Q!Gac~7vvAa zh}ex+aZCD39IEs5q{T{(?s%cK&Csecv~Ct!Yo*pZro42awbanM+0Ysyw5(E#zt$}C z`V-yi;Qa>){R3`Z72{O_g-hro6ZEiv&Q7O#)p=ewL3aq~GYLIvg2Zb_`aTKWWrA!% z>vs}bW`be}s+{`3NHqWXcYGbK24<aSv}lD^a*=Yb(9Edw^br6fS7l5h?o!+j3g&K7 zdV_XCB!8<Z+dUf3_A1JDQ=8eo0nd!KYB6VP8WJL(-2@vM{Df_$YF=97P_Iu$AcMiC z49va)<{(e*PYfE~WH>tI?!1ZK;e&<$APavv5?IH5s#Xt$`7&*!npRF-MJg|lij2QR z-bb3<D`av==3bLoDvHSXHzeWKzn^LWi-z@d$chra!4>q+IaKG-L>rMyZe9kJgN8~s zL*;Iv@|0Bhpp#LQ=J8Ou-%$B%xXNXrP;p9?YLg1BtF$U&DWsjx54b(&?$h96yTqA0 zAY|HU8_TtDw(bY1%s84gFTE$QDdl?}wKou8xhGvL&3ms>d!l-bH_9OVHMSkk&H0W% z?4{W11tK!_&bj9O6qB}d!uOe!b0!@u8)O!HSY<&)*nk|GtY>l4B6cdO9H~l(_GVnj z0--9me*F}_DRai)T?#~vebzW6L>2lDF{;?yjqkIt-J<&gvE7n;pE8SE|27`B=)a8q zh6u($!Z6i4kK^4nAsAdX&8;5;jy+#E{2-5&jcA&Wkt=p?xZm6dE+0i*VS&G$Tc<w; z9_3n9S3!F$xHiaBO++a_Ql$*od^&F|=PjX$tqxl~M{Wb}oM!IFtwTj6r)XtYnfX&B zpB^BK7Ug?dc4v<4PFp;`BMIMB8Bn0Re44n=pv?=f(e>z5&q*|gt$ZgjagVi=hDDHR zc*q{Qf@*8pG(J5Utty?C8ii7HA#SwMFk4^<#lZV2w3`%Zv@2^KNNM!Q2@C@<D<klR zo)CaD#Ws8<jAL_-fA7;LB5I6-k(4Rl-gh758wZ!}x6x}M5ao5e2f26{y{`E4=UsE6 zsR2ZWbn++XmbnGzkoCvuwad0!Q1(dKi|ST+67L~?v$P!zL~gy}Z7Li!m(9JzlWiN< zpWk*nb<cSqwvC7AZrt=(@vuI2l7-QjUQW5+4I$4=6amj~%GY0D&YnOP8f{w#xY+_n zb?Zblp6kGyz0kz`-6e>{kpagc<N_y2@kvw`^~hD8z2MBTtZ{!7)I6uCK>Tqs4mkM} zP%HsF+KA^5SW>L5hZ7<&Fihuu7JlB#k1oj<e~zIjdOZfl_M>Xd^J|}3e!zL=AhO{% z=5?M`9OK8N;z<-TMh3>y*Ht8YX?}FRERRc_7`iBQi>SiYzPzXkIM8gX3jDnV;}9zW zRXBoHs5PI7w2rAo4z<QQ_AVR(vN;Z;1VEnO7rY|ajc)y)7(y=Vcj2$;&4}f=tmh!w zXsfh-Cq?5$K|Q?S?&MYsg>Gsnv>Y%Us`0~Nl&AiZ@+^XLMiE5T6J^%Oah=HV`|v$_ zDWaRLKghhlm$LhXY@2yIFUk9oe67cgb|{mU+<I4|!n&`*9#e&{Bhi40cKSt`E&7Q! zx(9E252n^Vg9`o@F;PLv>x``6pGh(xuj<;sM!j6c9x?Ko&hw(4oP?O{Npr<kw2@it zFUo9`k=bW(b^IMN4EajDawYmUyp0^*-~UUh^GAAk=CY#c*6|#u=~g0kY193VKW6hE zk4t}1UKvJSz1yr!VjDSJ-1kdr<HaL7stx+&^(%Rw&{%&FQD1%3SpSG*1BODCIk%;l z@2_Ki?ZQFn(|9|2$ECw!hcVtiq*HYl<~zMP>$XCk&-)s|#(d;+5~eu&3Be{Wfq>Tq z1-nwP;UzA@wTp4wikNSrs&P#JeoPf@%SpWVmZ`~pmeY##FOG6r7x~F8{p)raFAm;d z<eo~6zF!HoHVZNP7Z;*R<fht06=IE1i0=ogHu)B@OWP#qGR1jq?=Ni=P2{V3P8H`A zKj|j_t}jO^&<Fp(V9P~RIshESTmK>ZvsjiLy@Ykhf9eeV#U&~-vgU(Em1wbGqnG|V zfEtJ#(wB&}v9vS_(Kb8m!5UKw{miB13%+-u0kVQ;{ZC}QTx3o2E)!8-H~mvKO8R9A z5n(RG&l<Wniy{P$nwdt)zPv(>n$HmP6-Uja_l0DeZL;xAQ=9y(;=G4{i^Z4-EY7Qf zjfP6&#R;5Ab1qYe3vc|=Ld<Tv5TlGj9P6(JN<Ct243yV|Xq%0aZ!S;!1I4r#*n@Wr z(I}{WHqV&Wm|GFMv@@n(Cf~EKo7#crd#OM6?LTH1d7g`=%F@tmK@63pq4{@2ec7v_ zSu2#<tajNY+5h{k*IT%uMa4aMvz8ZvDqd>jY~Gj5rkn#jM6fx>2rNde@FT7JuvLcJ zsq+Mb`d)#u(Eb`Py5WJI2alD$CL!#6!}laa;05zFb=C`{*Bptx_nCfb@BPwi^f2=R z9%f#Mx1L=0wOCD{hzw|#{=Ol34<yCY(bIcSQv5fI0p$b2O9bN00W@7gh*-?Bu#auF zL$uNmO@ye-gWk2{OW_pS?p99CH-!2dLJ1*;RBs`bWJsMuF>nL<&f8UqHzuadb$yz+ zC=uTkG<5bb{#8IRL>DHyewyn#mo)sZxQ7X`9r!8O^X+crR&m;C8PlM?zbDD{uO!#G zS*~vry}eG@%HP&(lfEcBg=eQB=}QuCNnDb6Yoh(_D&O}7op~EgOZNP}MT%NiTp9~f z(aX?GwiI%9b}Q&owveT=o7qk52DX^p$kLe=ym{;vwty{Rv-sa4mL_8&eYwy1ECo5w z<+*EY4zs}?W7o0kSu#uVv(gc%&VHQs?Ouh$pW*GwPBRdEgD1~<Hs=K6yX9uFP6iri zzqdsCNjebpN;a4cVME!lcC`Yns61_LYDAd0QAXTi#Qd#YEBRAF6IdcXXCP1xB&YMw zuJ{b)F`*lYcwdD6oHxQi#;~z6J`r>>k9TJ?L8q_~)`h3T`KPdR1-=o|SDJBbJe$BK zan1mIhVfW0d`7d8>>3us)3aE-q)Ky?Dc#2u@4@4v`DZuQlf|+)Hl6pC--o6yd<$@} ziu-5>P1m%Jn${_#bC<5&Lc_w1E24Xkp1m|J5?618J`~|sl%#$8MQf2-|0@Ozv|Kr8 z@Q}#Jp;ui!Z1{+g*Tlq*8a-z0xbfNqUq1g+G3K8!8Ua@jE=edFc$vN~SvKV|Em!`H zVcABUcxebD*bVr+8s93Hg2S+QZ9JFg!+K!^4P~RWA>hr>u4I$6v246H1~VZ>n}B|v z%*JVPTy{Qm)3im1r@~`ovTUTqAHD@w8=;MY&8xL>8hypkIBl$UJ*2MGhJrUxOJn`C z{@MWTW;R0WtMx>DutxuCZqY2@_SKfK{z!*vy@7Sm`e}9+4m6Q<)xxzN+8yk6b{89@ zU5ONZfdIa(6rT~0yvTlHAzBayM<=Atv5wmJK+mxs*+tM+c7cDV<!N@7l=#)kzG2_8 zA6PT}>p1%w;am0(gfCemJH@^N_wQ^OYk-aKnG1SnfPBXO$UXwEo_)an#J*tf!P5Kq z{1dBVe?a^_;QQGj#6DmL!P|$=ci0}pYQR4X{@dV@kJ^pE7(Msc5A6@wULJp%f9?eL zd1$@Jb|EnKGQvv;zhh6c7Z7`%J;{EHG-Hn={u|Jz5gy~8jBO_X*YDYX;PVm4>|oni z73V#|e#P!%_p^I>irx+XH82Ja4n0{pK8Yu;ji~*dh;CpNz}B->_;%QPkiLs;M0^t{ zL(IuaSP{Do@luQghLvM6KGl`0{RSn7S4mJChAaNxSN_e_t~26_XQtO{^hX>K`}dzD zJC}#HEdP7`|D1%c?Eg7CzeM}LKF?p${=cN;|MRjm9_i0FKs#WS?T9@?2=*pjSXb5! zYi$?{$G78l$2TnZgqMtDy;&c8M{*Qa-F{dNJHT&Vfp3i+$Sl}B43hf?+OZ77o@Inw zEo0dzXpH81QH<8+@mO8wz^hKhcihj!YCj9Rrg-d>tZX)ROG(%{rLslXHN|5cPQear zF?MK6Sr&F?8PLtfj%^-xXb$Y%a<G$o5_51F_H@5z%kh2qxh$WpfJe-OZZSMy0cL3_ z@+(DtcVNyIV^(hlFP>Fmjz5lh{4jjn9BsB{)#5R;%i&e-gTHweR-R>}wVmuawv!!) zw|Rlh(i-3g8`w;&5+~Rg?Rhp1e{uLr)DpDm+B9vdHbslqCTo+liQ2VTGbUg?pmkuB z7OTZ**JvZLMhw@6VLiACtHKbh0OZjvSRDpvS71emhTre2MQMGo3PfTx=n2o?U5kLv z55vmPP3sEZ-&qTRr|*dUKnH9Tf>4qZSUj2L<(~du@cXUs?c}@3bAQMFDgFCtc>QMh z_a^S&|Hl5xPQv$p#r^`X|0Vk~eEJLcdk%k}vrpME_6hqK9{)pj6h5E)^dGsue-~c; z2)z1Xc>P20=?B>XRtrzQkG%y?Uc=smAAg;_1|Pngy~<vJ2Y-qCawppU8Tjd^*c0&1 zJK)71V~@f^R>NyQ1W)`R+X|2T0K9Y+eDW6f-FxA4?}i871P{Cp9{6^)hOLJGUCGMW zwHUoctPp-T9V_fY?AYgHznF-9)f9{YLW51d*5@bwYhq#!p$q<-{z5Px2Ovb^?+SLk zb_Hf&4}>f5M{{uib~8gkdtfdPLhNdMj=;{9=HxigtAP#2KK5#a;g~P62AzmlEN06` zpySYzAMq6JfGAv#&xx3yH$Y-CX6W^pWl5NmH?SF6BF6t@q$s@z{9??XVs^Dwg3l84 z`wDzc!;E<vGl}NN^T1ZHxmdBT!=IQjzWFlRZ^jJ6Y`K!pk^X#s^fAp0->jfH5rkQA z5%WOI0{<Cs8l&Gg_P^%io<{u%%;?WC!$09;z3q{%#<_2lw>8FJfTws4UgH^z^54TR zJpn)Rc))1?4g8H5@ifx!gBRL@k?w*|5@Wrb?=m*PH{Bt}{Te>v@fGgaZQxtr;q7wa z?{eV(vf&fyj+X9cmtZE)y)50yron&GoJhf}m<K<49sKJY_*N@C?MyyT;@}-e!!M77 zr@jhzeS_h@`@yUCfuE0n|NrltJvJ>bKi{z|Bi}+_fuE6uFNw#5%E@qolaudQZ7I#l zC@gf8Snw_NjuL!3y@h}Md`wJXkp<HD3VcgWQCVR&W9Ogsdar!W>z#m*f>4Z5g|G{u z9-##x;(4!kG(rkOF+vr>E`)l77KDhMz!6dqiV><1b|KUwv>-&h030C&p%|eGVHZL@ zLJLB~i@*_55Q-715OyKdBeWny>;jIEf>4Z5g|G{u9-##x;w9h+DG0>~RS3Hf>JeHH zB3=fLkb+Q*P=&Ayp&p?HA>tL_2q_4~2vrEX5b6<H5F%a$j*x;-j8KKJ3!xsN1t9`Q zHKP$y5Q-715OyKdBeWny-~?ziLJC4LLKVU;g!d5shR}n~kr1XKkYD^6{pcvnwiM-9 zGRt!C!vdCqywXw!ewBdtKksQvjA;nqmlBj@(Mm^2PJYoUmRCsJJd6YLaG@VofFXI| zmk}tF>@|fM1$kK({76Dk$r{pGv&N2}Ij|QxRy*yY2*dC$5%V)uTvnPJlZjt!uo!t> z&R!ONSHbBpTVw1p@{YpNvJxdOei?!nftUO;dUl!^{<&N>A1S}a=_rN$%#3W+kfIfY zHHi)_?ZUbYEoE%P2r=CzTZWd3c}9(f-<ok)hGxfh>7v?~1>T&ulfLQZpr9Lr7Po`` z|I5~bf;;FPjnf%^C==PcPZSPcjFXqZbC(Hm*G`-?IeyC2Y10!DXUv>soju1k_qywo zlIP7&xnaS=)J62qKk|D2Y}ehp_w3$X|Js|o-*4G{_T28>pSJGay}R~bZ=d_u!Jqo< zZrR;u_xoVr`s!c14~dw#*On%Nx&(LYfla-}e|e&7Po0JJ3Xi}Z0awRPth;3Zqw@B~ zOUs=ZPKr?Qfl?KB?Yqx+-+gg+53N%;On3XcpJhmSQU9=>ddPr2U3x`bGuSfT&=isW zojMQU$4(tJ9AAa^=sYr_(}doAJ4JW8a%fEVxY$vVgZg3fLf7aq<Hial^@*o99S3Ut zdFw__V`)=w92nkf@xYjY(+4gdc;iiax0|mV8Xn!t+ZX56_y?ftu1Vq%<6|ZaO}k~u ztr?L6GqW7fx8Jz<)`3fNG6!Zao9<ZLab{NDZ8v7;-F6etp;xZHbjjT7lCqZHcC#u0 zUIK!?-ELpHG$SK3GczkY+mW*@mtT2#x8Yj8e7R4!jTjy41$F2UM4NUkIM{T?7aR<L zj=N?#@*U2+!ewkOcW5`1IZD>B6#8`*FfFO{b1RDqX}uH3!W)uOWOPPR_8Q9=#>rSg z#<Bd2Qm4g9KeS>g&T!^3Uvw-h<91e14$w2F#^SePGH}m?vSc|i(P0C>LQ^74Ec9_% zRuO);26ioZ*(`<V?6N|>9J6&pOV?T0%%XftQLzQY7cGSCLfnLvII=AnaQhTt^NO67 z6pC0^Q*OLaZ0@|21@q^iDo`hTtaMGGGh?-IM$Ae-Kr`8rod>5?f}hG+rZ~k##l@7A z{@t-UH=_(cJCn_3;#YDC%Zkl9mi(fk<r%s38#o54^w}q$c)b(`|H<oJif|XgTL@nw z^sC4JNFr1roJ8n&)ay+|Sb(q*p%&ph!iW#OUI#)o!cl}yA9=ll5T+t5MkqzN58)XE z%g4|~cpKpyLO<j^1)&JxafD&;#C$azF@j~~I<l72kSKK&pgHrhN@KfVBQKYo3};aR zdFw80Vam+;N%$$V+4%Xh#2HC=9Fb~Wkj&W3`STX05&@W)n!13ov_yQ&$McJs^ONzJ zIBymq^C7!v-rV`~?1@Pbow;EC!i9`2u+B?NhAs5ZbvX5!4@*gNljnk1LGihG?!r{a zS<@1sWU(+TBSnP{=3G_8oVhfJv0bAr9@C<O;}e3!Q-llEUhfvf*FEa>(%a=*KyLxv z_L$fEK4{P`>_0#kV~^1*7>^OLzZehd#^btF&<s2@c7i^MXW3gpQ}Lkxb<jC@BjPyd zhoG&Xxp>zkssn!44Rj*t>-*6cpo{Q^&}z_|@Cwv+(201p?RC)QcxCN4=rX*h*9!V8 z&?ud;tUo{>bUSD&=o6q$(3e2Bg6;!-74%)uk3l~LJqvmYv{y$|{xHf9+8dPq+hq`_ z6LbRTR?uyruYyjmgFfg@pl3nv0PWR@v4=s&gMNwEofm_i0$mLnhS$ZngFbiM>)i_) z^_kau0yG`;0_c07{o(Qle2(!2`U2=Jpd%W*-gTf4fj$Bnd;<EQ#h@oZKLou1I_(SS zcgFAYfldJp`!n=GKLT9`y7)`zgZ>?KFX);^=!16t3-m$n1MQDp!xdjaAM|n1TR_Kt z4SmpOK_3AfeiHhi)u1OpYd|l6?)@wD@h<)~fAe~?L3>G8tKGhUX{#f&=x&`ts<ciK z#K*&KHVorxq?94jwmic<kdV)P*z4VZ6_SNT%npmXF1+iikPU2lzxWa3h73~rvk<BM z4PMzLhP*7Gw;&uue);%68<rRrad*(n(2myf;NZ;eC>7=c*c%YK;65S^ed#BY)RD_j znV&$I@(T9ZR1Re)c%()GgdajkdKIreoAIEFhW<(5qjr0}$IN)}QA582_<zMbn&pR2 z=ePyBL%{Ehc||AiM*gTr(33n1UIscj+zOd9W|^RW7-h%>zU&P=qxQq^Ht@~BKLk!^ z@J1d%zcTQrf!p4MPw>O<G4Lb6Uj<HW;nUx5;2z+MYrNh^{qXGu9s*zT32<r)pT5_? zhXH>BKIBV3{m%`Y{wrlQd<uOTzo8!-YqW7La5sF+1wZ{C4E@c(m%;apFyjsm^Y(oj z_zK`3n(?4NashfB_z3X9@L3bgIN~%uP6C?(teY8|<FnlXesCD@P&01x;X{B&UIw29 zJm@m^vw{BuWpB^^Cg2Ugdz$l~=ga>I;2!|T{|frr_68q*2>7AP;3t8<3B29<cfd2E z%j7=<_`|?6%=ri1!V5s{I}7;dz@PEMpD^%j;8|!Nyf)!0{~}-cHvwM)e5e^;>cgJ^ zo(UZ9toZcP1a1NAkkqFiiZI6BoGroS9fBv*0HiW{Aaf_yGPp>e%xqsCAy|uU13tuz z+kJTq16~OH(QuQ#4Zf@@oC{GNNs#$F_CEz?8$r1So)3IH_CYhv_#M77Yyo~F@M1F_ zwA|2t9{5whv6=AIAxI1q%Kv@fp9AMl_>`XvavS>J0KX3Vu62I;s|>sweDLpqw^#ma zfS&=L@29`a&`$zB9ecO-^z(sl0iNlnzr@hr0{jEu?b&}Gct7j~+tYs^_$|N-{p{x% z_P+uCEbu@0;k5?d4f}!l*jrZk;TsJ68sM)2r)Q+bI19Shz>|OvKIZj4;D=Wlcs}q4 zfw$K`TY&4Iwx9p=z;6TIUjFX`|LijQ-vFO>y#4&UVNHGk_-eoMmm1~226)HMyxu$g z@Y@YM3Ah6|-^?20ufV|bfxiaaV%AURF!$42Bu;nazV<!O1!jTuJn-$<pE*c>Mp(rC zK{LXl?hCetSt>is2phIVw}p+qyQ3{^VtJ?Ju!NGZiHTvO6T^nh2(v&A@-xChaGHy~ zF6`984wi-gz5cfa{-17v4SdtUjNehEsX>>bd`(BX9`^!tNpUu0kx2Iy#Q42dzJ`K_ zDZnqjCL^YPx0Tirx)lEXMQ;(Mx68?bC4^r`WCSi%q$Mtk!O~;_`FaZp+N05h!!*AO zTN8eT+-c!d&B<XhqV7-Ny7<*c(x+ts6@Q0}sB(wM{BeuLFO~lQnO1V=ail;jh;!CO znO-XGd3`w7Y?0{!68}-ARXwEn|7%43o_nCdj<R8UOL~>0agxrKG)>YRNmojGx1`%7 z{k^1nBt0zYF-iX>={ZR|%7NEg(yJtmlXSMEX_Dqh8d#5imk!xr;Ud(X6z0sFIoUF7 zQD#}8v&?dB?D*KxF=NVjYRnyDCdQ5)A3J8a;B&Rhe$X!<PgDcWBuT%coZ2Qom^s_z zcQEFM$qb$v>ioXM%%gZP-YZe_$BYHzZ4))F{P`hFjYofeXQsxzKfeo8^TVIt)$kMk z{BEp8O<WTY3~y50M!yB)J(vw`^1}_kV={yKMz93wkNo-F*;&3>GjpkZda#Kr{CSiL z#?x5!yVGVg7^fJ@fBEwxSzGfb81L;Uf8#F??;^*WKR=3D+T<(m>XW81+5!LK>*I(R zHCGVYZC60M;R^>iza@ZwrQ|0lhc3+ET@IQDQOqXGL;2A)8$oNM9cV93`Kon<Wa(Oi zptaGS+re+E{7-WED3&YpRsNISTcq+72k`$W`Ktr?Ur7E2$=8sk>l6an*(CY6UE|mH zlD|2?4urXURe(JCeX_GPfKP9S5`TLDKZf%o*itz@ACU8#epFAR-Qr?d5Txm%A8X_M zn?yQJ5N4J91j$$HWwPWqrVByEPnG-)w+j9gxqzfger<+7Ka=yL*drS(98m3ZyX5bX zeAO?%0-yT*nlZu-KbJxDDant&M)2K&u)UI>G*mG7SsS7sO8&a51fQR=A^NrCpOXtJ zKfeS2oaEm)UdT@ngz0EkD$ku)3kE-nLo`(K7Y!HuS<t7er{sHLMEZ~*Y>?y+mxePW ze=PXaFSWUXq4posB;RtI;M4q}%PRRx1NieKe~0AL(Is7J%6<TUspL0G{xl)Zf0>)g zV_7a3ieIeqm3&p6RVrV}A0q9nQ}zS+8^Ndc{IfKm<ms6~Tl1HiwJrXyx&0n2|8|+7 ziL@pEACO1yT;gwE=5{Xiw>45e&~Jah`Iq|tzi>O3`sW|O?}7T-Mv4ORb5=yVV%`wn zBIhqR3x2fZKRiOnzbFVB%K0*3BG*d!$L9(rKO;djQS#^81ix77B)4NH6a4P*GqoEm zTvE-`+uD)eEbTuj=ZkXp4}dQ$$P6WULE5)S`)a<YVk2(B`$|mmmDa&_@;xT=J$${8 z%$EvZN&bNA1cTNOy1s44j)n^M5F&n`k(?jK>XHS!LZZXlk)PTQKLvbh&(Q((&64)- zN)d+nnFyk*B|mANKfe<E2zpyLpnbMV`AX@?`57WqACdgW76?21%mdL^BtK}P;Pdl9 zL~FpOa;5~7Gm^L4rTd~<Zb#TKe}3E!zeVQTMfyFpUAQ3gJra;_Fz(N2UL?zUNw?1K zz&L5Eze1%ved`uo+XP_)IA11AWW1E`euH3ENX#brSIKr;E%{5p?~eA5kmW?N`IW=@ zQEX`d-^uMrArsjw?e7biFTa-jak9SZzP4KOOC(?2|2{7H?@2rS>>c^MDEZrDy{cs1 ze~|nJIj$a%{4XWnK2|U;Nd7-0zhJ&#C_5e6Y5&2TAI5q}|D)tbOa9m-VJB1Cr{5c; z{{2bXuaNu&;L|t{^aFPAX?!jY7$**CCw-hSAl)T%O8%c^`}CIf*K@v1n8*WCzCzmh zP+~j4x0vKq^hGJZMcP;6c`x|ggZi)#SxzPY4wqLcAN^9=c{#w&sdnUlBKv3|bw8rU zVK>~*Q+v)GC2V)l1hs%q?N%?#qvWsV^1gDY82t_|*||mTTee6bN%FhNb!4XGFOmFR zse<8<{DOAuZ)}JEkhGILS{UHZ=@6wK1c^ZTpWbK@fc$(G@>H*n1L{S;Q$poe_jhu+ zWiLtl*>b&5<B*=I_wchU5=X(Od;|UM7t)Sft}ppgw+Vdm54{4)b5_d#c8(BK>(P&r ze{ZPZ^JmP6dL@5rlHjY`%g$IRsb0^=3O;`hifCW(sU42XeARkt;qpS({5f9QxniN< zmPl}}<ZqYbP!@|VXva==JAC?nB^v*M?Y0Sgi@6{&{us9t#y*n!z^;=2q~!0n35F~# zdrR_v2w30$DEYnR`qER{`AqW9%6ch3@HO~@q>Py?<L!UxIRm{MK<$6OEQm!ah2wyZ z+P_h@{}IXW2R_LMB@4zMB!86T-z&@cjO0(1{1;V4H386%t&shMfd0kXLC#VqUa^hM zV%d%o$1=QX<tVW`3+!3>csr+*+3ndy_GS4+nHl-^Y-dqPsXe1?HD2;6D8@@^j_lZL z<0f6(wvat1uQ1P^QBsnz#_lL|;+?gel8gd}J-e)+U=37EDLW*cexmdeTS`VrsiOo1 z!@IcR6<qNatle2ud<m~0V|5^p(z!+X*>-w?oDzjRR!Y$<vS{aKC~soX`)xduotJIo zw<^z>m1{35v^$D&NGKyK%Tdgw9K2iw4rd1OGc!sZMDh9`k;2tnCM$P2rRa@2sfpLK zC?h8q4&Y}M7g5>Tc<+}RDa!B_OIe^-l<~6M%DkeoQlDM4wSC^AB)hXDqmb7&;7w*S z$6utj^H;}^ETcCI#S7B}^6n5#ZY0GRAamSozNkYnUbP1c)fSQBWkt>+!H_ZjdLcOc z?KIF*C$DA67{p7)a?w&}Ng2$PIrH+-+jjfx1$dLpZk;#FZb!;*Y-BV0tefzn+1#1_ zi0C}Kea^f^cB@TVu+3V)>~oUl&qz$N&!0Vep*7XcUwE@4S9_`GT4#~$YuL-r%gnN8 zm6q|5OT}{tvpIM>Eg@k}(%cy{?PFud#!gW0)D`Eb7`<J`(1tYB{6*KS!9OXK&_n_$ zEVAbpWo6KRCj?4SAK|TTW}lmyjA5jvVrueCnuw|Nz9wG5%!Y`+CK@lRc#S{Lc;(Mo zq6#Rw0VOQ;7sb2vcxTd|r_>9x?M20o64b4P<(1-f&wy;uE*aVWswiPzK-HwR;*z4< zeCAXZXf_|y?#RaL{b+bGETxQtUjHohNv&B^OpXC!d4*_^l6*%%hIZ*DF#9mf^YVQq z91kUG=WIu2*)qhPc)K42)yPM;AZC|&%CT>sJKs*7>a$?#{K6u1m}(wX*8DtEeb%g@ z7vc+PKG^9W2V}l@3ANM_(2Js6vOKCZH141aVGK=fNM?gv;4cF+=dbJ9q3lCwocsP8 zK#hg0lA=;mgUW%=$GW{Bqn-XMEv7enWdT;gp~`591OGbV@MVbw1D$AiQyS8$6zD8^ z30KqzotINgFEQu%x2_V-q<=ZUtXWn7?<>ki^Om|#HU@GkEwbn0g<(vMEWF5Df^idQ zjLSR3tG|BpWXyO>wfV4&0c$U#|1H75!asBvu3!3CzIf!|e?|(60&Sx|X%SQoL^eoP zQDLb)%aNaN_9%RjDc~LJZ-vT$G6oDW6s4#*up}tLGS%wT7joDJ*t2J%Z-w8I1;T<} zz>+Y4=9Lv>;=ib<i&0q&NM%i|r#bn)>Jz>)BcJ9M+?9V8(yRlxuiHh>z%Zt3fPBuX zl00XC1GU@X*p!PWkJqNZTeD_WNk*|MrO~kVRd()gO%2Z99~T2lO>UYt+@adDR%eh) z&&bcaJ)jtT0NS}>CrvhLr5XGmj(nLG6q{=)rZJkOXbs+1$ME%O+jAZH@CW3jFBym| zwscJad@!i9M9^Fn<Nv@`%wpkC9I=Tr=EgWPmdVtz!m`-Rvb_B47`#m%OR3z9(p(mc z|5t)NLE+;$f`5A|#k%5`umdY`<Y$nAj1}iQSu7upv53ZEm1eQr@5Iu64MIiS3CB8e z<qj=38%9)0sEVx`;~FY1|Ah)=A|D=$QOIJkO)S9HPwq|sGlb47Xe*1`IDV<;m5Qq8 z^%CZ?Do%7T0=DFazIv{ys0En$QunutM~@H8`s(?oqC=FRq=EXgz(0p)<f{DY`G=zN zb`?)b#f94hzl)Ar=$=OD(|ewDDT;@J{K9Q3ue;KZ5^VhMCp|Yb>C24N^H=qpK#E_| ze)M>T-T_egtLL+dCP+n9ekG^qa^Un%fl4o>#>Ay)0#D(+Dp2ZYRes6Fe|giny|4T` zq`so+JqMM)(pUB0B=u)VgX+1kqUt>h(x-d7K>ho`qjFLC=u+>QD2kINzbml+T|mwH z>N&Hb8wfOA5i+jmR;11P>Up%Hs=UgCN-IkD`DT4}uA%7THl-=3%2#oJ7oe}+t5FoU zmws1Z{hyKgs{hrwlcF#6^;2gS|0Msm7b?HfSI^58ouvS&7nuKk@Xh+_xw=6EDxlg; z72_R5!Vu&%GoHVPtQQi2@+z(9ClCua>8t1T5kFJ^FVLm2r}9_N^P{AG3snx68lNg( z)sNeOk%-b)&;3K>fqp9~n=YlV=qX@kedAnpgHTfQOqo!6D&2wz@l^hn4HgbXZQz7$ zmgN^I#w;o#>Gz-{GCF{-^hXBpl{qsF7$RK5wm~RH$-_HZXXxlem0#71hKDM<&=8+X d9}qM*VEm|jl`K6!ZA<@1wUD@|1SJjB|38LhNhkmS diff --git a/SQLPParser_new.c b/SQLPParser_new.c new file mode 100644 index 0000000..4ff4117 --- /dev/null +++ b/SQLPParser_new.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 1989, G. E. Weddell. + * + * This file is part of RDM. + * + * RDM is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RDM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RDM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdio.h> +#include "util.h" +#include "lex.yy.c" +#include "SQLPGrammar_new.tab.c" + +int main() +{ + int Result; + strcpy(LineBuffer, ""); + printf("(\n"); + Result = yyparse(); + if (Result) + printf("**error**"); + else + fprintf(stderr, "checking semantics.\n"); + printf(")\n"); + return (Result); +} diff --git a/SQLPScanner_new.l b/SQLPScanner_new.l index 1d6ae18..41a075c 100644 --- a/SQLPScanner_new.l +++ b/SQLPScanner_new.l @@ -51,6 +51,7 @@ E [Ee][+-]?{D}+ "delete" { strcat(LineBuffer, yytext); return(DELETE); } "desc" { strcat(LineBuffer, yytext); return(DESC); } "union" { strcat(LineBuffer, yytext); return(UNION); } +"unionall" { strcat(LineBuffer, yytext); return(UNIONALL); } "determined" { strcat(LineBuffer, yytext); return(DETERMINED); } "distributed" { strcat(LineBuffer, yytext); return(DISTRIBUTED); } "dynamic" { strcat(LineBuffer, yytext); return(DYNAMIC); } @@ -61,6 +62,7 @@ E [Ee][+-]?{D}+ "from" { strcat(LineBuffer, yytext); return(FROM); } "given" { strcat(LineBuffer, yytext); return(GIVEN); } "has" { strcat(LineBuffer, yytext); return(HAS); } +"njoin" { strcat(LineBuffer, yytext); return(NJOIN); } "implies" { strcat(LineBuffer, yytext); return(IMPLIES); } "index" { strcat(LineBuffer, yytext); return(INDEX); } "insert" { strcat(LineBuffer, yytext); return(INSERT); } diff --git a/lex.yy.c b/lex.yy.c deleted file mode 100644 index 958db55..0000000 --- a/lex.yy.c +++ /dev/null @@ -1,2466 +0,0 @@ - -#line 3 "lex.yy.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 4 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <stdlib.h> - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include <inttypes.h> -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#ifndef SIZE_MAX -#define SIZE_MAX (~(size_t)0) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -/* begin standard C++ headers. */ - -/* TODO: this is always defined, so inline it */ -#define yyconst const - -#if defined(__GNUC__) && __GNUC__ >= 3 -#define yynoreturn __attribute__((__noreturn__)) -#else -#define yynoreturn -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an - * integer in range [0..255] for use as an array index. - */ -#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (yy_start) = 1 + 2 * -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((yy_start) - 1) / 2) -#define YYSTATE YY_START -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin ) -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else -#define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -extern int yyleng; - -extern FILE *yyin, *yyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - #define YY_LINENO_REWIND_TO(ptr) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) -#define unput(c) yyunput( c, (yytext_ptr) ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - int yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = NULL; -static int yy_init = 0; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void yyrestart ( FILE *input_file ); -void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); -void yy_delete_buffer ( YY_BUFFER_STATE b ); -void yy_flush_buffer ( YY_BUFFER_STATE b ); -void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); -void yypop_buffer_state ( void ); - -static void yyensure_buffer_stack ( void ); -static void yy_load_buffer_state ( void ); -static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); -#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); -YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); - -void *yyalloc ( yy_size_t ); -void *yyrealloc ( void *, yy_size_t ); -void yyfree ( void * ); - -#define yy_new_buffer yy_create_buffer -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -/* Begin user sect3 */ -typedef flex_uint8_t YY_CHAR; - -FILE *yyin = NULL, *yyout = NULL; - -typedef int yy_state_type; - -extern int yylineno; -int yylineno = 1; - -extern char *yytext; -#ifdef yytext_ptr -#undef yytext_ptr -#endif -#define yytext_ptr yytext - -static yy_state_type yy_get_previous_state ( void ); -static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); -static int yy_get_next_buffer ( void ); -static void yynoreturn yy_fatal_error ( const char* msg ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ - (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 97 -#define YY_END_OF_BUFFER 98 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static const flex_int16_t yy_accept[329] = - { 0, - 0, 0, 98, 96, 2, 95, 94, 96, 96, 83, - 84, 90, 89, 81, 88, 87, 91, 69, 96, 78, - 92, 82, 93, 68, 68, 68, 85, 86, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 79, 80, - 0, 73, 0, 0, 1, 71, 72, 69, 0, 74, - 75, 77, 76, 68, 68, 68, 68, 68, 68, 6, - 68, 9, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 38, 39, 41, 68, 68, 68, 68, 68, 68, - - 68, 68, 68, 68, 68, 68, 62, 68, 68, 68, - 68, 0, 71, 0, 0, 70, 68, 68, 3, 4, - 68, 7, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 22, 68, 68, 68, 26, 68, - 68, 68, 31, 68, 33, 35, 36, 37, 40, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, - 71, 0, 0, 72, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 16, 68, 68, 68, 68, 68, - 24, 68, 68, 68, 68, 32, 68, 68, 68, 68, - - 68, 68, 68, 68, 68, 68, 68, 55, 68, 68, - 68, 61, 68, 64, 65, 68, 66, 68, 0, 71, - 68, 68, 5, 68, 68, 11, 68, 13, 68, 68, - 68, 68, 68, 21, 68, 25, 68, 28, 68, 68, - 42, 68, 68, 68, 68, 49, 50, 68, 68, 68, - 56, 68, 58, 68, 68, 17, 67, 68, 60, 8, - 10, 68, 68, 15, 68, 68, 68, 68, 68, 29, - 34, 68, 68, 68, 68, 68, 51, 52, 53, 57, - 68, 68, 30, 68, 14, 68, 68, 20, 68, 27, - 43, 44, 45, 68, 68, 68, 59, 68, 68, 68, - - 68, 68, 68, 68, 47, 68, 68, 68, 68, 68, - 23, 68, 68, 68, 68, 68, 18, 68, 68, 48, - 68, 68, 12, 19, 46, 54, 63, 0 - } ; - -static const YY_CHAR yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 1, 5, 1, 1, 6, 1, 1, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 16, 17, 18, - 19, 20, 1, 1, 21, 21, 21, 21, 22, 21, - 21, 21, 23, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 24, 21, 21, 21, 21, 21, 21, 21, - 25, 26, 27, 1, 21, 1, 28, 29, 30, 31, - - 32, 33, 34, 35, 36, 21, 21, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 1, 53, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static const YY_CHAR yy_meta[54] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1 - } ; - -static const flex_int16_t yy_base[332] = - { 0, - 0, 0, 359, 360, 360, 360, 360, 49, 356, 360, - 360, 360, 360, 360, 360, 342, 360, 42, 337, 360, - 39, 360, 336, 0, 315, 308, 360, 360, 23, 20, - 28, 37, 303, 36, 315, 322, 33, 313, 50, 308, - 49, 40, 301, 53, 59, 58, 307, 310, 360, 360, - 79, 360, 342, 341, 360, 84, 87, 98, 100, 360, - 360, 360, 360, 0, 297, 298, 303, 308, 295, 307, - 297, 0, 307, 306, 75, 87, 289, 293, 295, 287, - 86, 282, 284, 286, 90, 298, 281, 275, 284, 291, - 276, 0, 288, 288, 286, 281, 93, 284, 276, 269, - - 278, 275, 260, 282, 95, 271, 0, 65, 267, 271, - 274, 126, 122, 130, 290, 289, 271, 266, 0, 0, - 273, 0, 272, 260, 254, 253, 264, 258, 262, 263, - 260, 246, 262, 245, 0, 246, 249, 254, 0, 248, - 252, 251, 0, 237, 244, 0, 0, 0, 0, 248, - 236, 239, 247, 235, 232, 240, 227, 240, 239, 238, - 239, 223, 224, 234, 226, 232, 231, 103, 219, 246, - 245, 137, 244, 243, 223, 217, 205, 211, 219, 208, - 206, 207, 221, 203, 0, 204, 203, 207, 199, 197, - 0, 203, 205, 191, 196, 0, 206, 194, 199, 190, - - 194, 201, 182, 199, 187, 191, 198, 0, 195, 190, - 71, 0, 181, 0, 0, 185, 0, 191, 207, 206, - 188, 185, 0, 168, 185, 0, 173, 0, 172, 182, - 175, 176, 175, 0, 178, 0, 177, 0, 163, 168, - 174, 177, 172, 165, 159, 0, 0, 162, 172, 154, - 0, 168, 0, 158, 168, 0, 0, 152, 0, 0, - 0, 166, 161, 0, 156, 162, 160, 150, 144, 0, - 0, 156, 145, 142, 143, 138, 0, 0, 146, 0, - 147, 150, 0, 143, 0, 139, 131, 0, 146, 0, - 0, 0, 0, 129, 103, 127, 0, 128, 133, 139, - - 125, 119, 123, 135, 0, 130, 129, 119, 132, 130, - 0, 129, 116, 114, 111, 106, 0, 115, 98, 0, - 78, 88, 0, 0, 0, 0, 0, 360, 154, 156, - 59 - } ; - -static const flex_int16_t yy_def[332] = - { 0, - 328, 1, 328, 328, 328, 328, 328, 329, 330, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 331, 331, 331, 328, 328, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 328, 328, - 329, 328, 329, 330, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 328, 328, 328, 328, 328, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 328, - 328, 328, 328, 328, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 328, 328, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 0, 328, 328, - 328 - } ; - -static const flex_int16_t yy_nxt[414] = - { 0, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 24, 25, 26, 27, 4, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 24, 48, 24, 24, - 24, 49, 50, 52, 57, 71, 58, 61, 62, 67, - 64, 68, 73, 59, 74, 69, 70, 75, 76, 72, - 84, 85, 77, 59, 53, 80, 86, 88, 81, 96, - 99, 92, 97, 52, 100, 89, 78, 93, 101, 90, - 102, 94, 165, 106, 103, 95, 166, 107, 56, 104, - - 108, 113, 253, 105, 53, 112, 254, 109, 114, 115, - 57, 115, 58, 126, 116, 112, 128, 136, 114, 59, - 141, 127, 162, 129, 153, 137, 327, 326, 325, 59, - 130, 131, 154, 142, 163, 170, 113, 170, 304, 173, - 171, 173, 216, 172, 174, 324, 219, 217, 219, 323, - 322, 220, 305, 172, 51, 51, 54, 54, 321, 320, - 319, 318, 317, 316, 315, 314, 313, 312, 311, 310, - 309, 308, 307, 306, 303, 302, 301, 300, 299, 298, - 297, 296, 295, 294, 293, 292, 291, 290, 289, 288, - 287, 286, 285, 284, 283, 282, 281, 280, 279, 278, - - 277, 276, 275, 274, 273, 272, 271, 270, 269, 268, - 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, - 220, 220, 257, 256, 255, 252, 251, 250, 249, 248, - 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, - 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, - 227, 226, 225, 224, 223, 222, 221, 174, 174, 171, - 171, 218, 215, 214, 213, 212, 211, 210, 209, 208, - 207, 206, 205, 204, 203, 202, 201, 200, 199, 198, - 197, 196, 195, 194, 193, 192, 191, 190, 189, 188, - 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, - - 177, 176, 175, 116, 116, 169, 168, 167, 164, 161, - 160, 159, 158, 157, 156, 155, 152, 151, 150, 149, - 148, 147, 146, 145, 144, 143, 140, 139, 138, 135, - 134, 133, 132, 125, 124, 123, 122, 121, 120, 119, - 118, 117, 55, 328, 111, 110, 98, 91, 87, 83, - 82, 79, 66, 65, 63, 60, 56, 55, 328, 3, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328 - } ; - -static const flex_int16_t yy_chk[414] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 8, 18, 30, 18, 21, 21, 29, - 331, 29, 31, 18, 31, 29, 29, 31, 32, 30, - 37, 37, 32, 18, 8, 34, 37, 39, 34, 42, - 44, 41, 42, 51, 44, 39, 32, 41, 45, 39, - 45, 41, 108, 46, 45, 41, 108, 46, 56, 45, - - 46, 57, 211, 45, 51, 56, 211, 46, 57, 59, - 58, 59, 58, 75, 59, 56, 76, 81, 57, 58, - 85, 75, 105, 76, 97, 81, 322, 321, 319, 58, - 76, 76, 97, 85, 105, 112, 113, 112, 295, 114, - 112, 114, 168, 113, 114, 318, 172, 168, 172, 316, - 315, 172, 295, 113, 329, 329, 330, 330, 314, 313, - 312, 310, 309, 308, 307, 306, 304, 303, 302, 301, - 300, 299, 298, 296, 294, 289, 287, 286, 284, 282, - 281, 279, 276, 275, 274, 273, 272, 269, 268, 267, - 266, 265, 263, 262, 258, 255, 254, 252, 250, 249, - - 248, 245, 244, 243, 242, 241, 240, 239, 237, 235, - 233, 232, 231, 230, 229, 227, 225, 224, 222, 221, - 220, 219, 218, 216, 213, 210, 209, 207, 206, 205, - 204, 203, 202, 201, 200, 199, 198, 197, 195, 194, - 193, 192, 190, 189, 188, 187, 186, 184, 183, 182, - 181, 180, 179, 178, 177, 176, 175, 174, 173, 171, - 170, 169, 167, 166, 165, 164, 163, 162, 161, 160, - 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, - 145, 144, 142, 141, 140, 138, 137, 136, 134, 133, - 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, - - 121, 118, 117, 116, 115, 111, 110, 109, 106, 104, - 103, 102, 101, 100, 99, 98, 96, 95, 94, 93, - 91, 90, 89, 88, 87, 86, 84, 83, 82, 80, - 79, 78, 77, 74, 73, 71, 70, 69, 68, 67, - 66, 65, 54, 53, 48, 47, 43, 40, 38, 36, - 35, 33, 26, 25, 23, 19, 16, 9, 3, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - - 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -extern int yy_flex_debug; -int yy_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *yytext; -#line 1 "SQLPScanner.l" -#line 2 "SQLPScanner.l" -/* - * Copyright (C) 1989, G. E. Weddell. - * - * This file is part of RDM. - * - * RDM is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RDM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RDM. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "SQLPGrammar.tab.h" -#include <stdio.h> -#include <ctype.h> - -int LineNumber = 1; -char LineBuffer[200]; -#line 669 "lex.yy.c" -#line 670 "lex.yy.c" - -#define INITIAL 0 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include <unistd.h> -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int yy_init_globals ( void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy ( void ); - -int yyget_debug ( void ); - -void yyset_debug ( int debug_flag ); - -YY_EXTRA_TYPE yyget_extra ( void ); - -void yyset_extra ( YY_EXTRA_TYPE user_defined ); - -FILE *yyget_in ( void ); - -void yyset_in ( FILE * _in_str ); - -FILE *yyget_out ( void ); - -void yyset_out ( FILE * _out_str ); - - int yyget_leng ( void ); - -char *yyget_text ( void ); - -int yyget_lineno ( void ); - -void yyset_lineno ( int _line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap ( void ); -#else -extern int yywrap ( void ); -#endif -#endif - -#ifndef YY_NO_UNPUT - - static void yyunput ( int c, char *buf_ptr ); - -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy ( char *, const char *, int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen ( const char * ); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput ( void ); -#else -static int input ( void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else -#define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - int n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex (void); - -#define YY_DECL int yylex (void) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK /*LINTED*/break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - yy_state_type yy_current_state; - char *yy_cp, *yy_bp; - int yy_act; - - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE ); - } - - yy_load_buffer_state( ); - } - - { -#line 35 "SQLPScanner.l" - - -#line 890 "lex.yy.c" - - while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ - { - yy_cp = (yy_c_buf_p); - - /* Support of yytext. */ - *yy_cp = (yy_hold_char); - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = (yy_start); -yy_match: - do - { - YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 329 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 360 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = (yy_hold_char); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - -case 1: -/* rule 1 can match eol */ -YY_RULE_SETUP -#line 37 "SQLPScanner.l" -{ LineNumber++; } - YY_BREAK -case 2: -/* rule 2 can match eol */ -YY_RULE_SETUP -#line 38 "SQLPScanner.l" -{ LineNumber++; strcpy(LineBuffer, ""); } - YY_BREAK -case 3: -YY_RULE_SETUP -#line 39 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ALL); } - YY_BREAK -case 4: -YY_RULE_SETUP -#line 40 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(AND); } - YY_BREAK -case 5: -YY_RULE_SETUP -#line 41 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ARRAY); } - YY_BREAK -case 6: -YY_RULE_SETUP -#line 42 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(AS); } - YY_BREAK -case 7: -YY_RULE_SETUP -#line 43 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ASC); } - YY_BREAK -case 8: -YY_RULE_SETUP -#line 44 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(BINARY); } - YY_BREAK -case 9: -YY_RULE_SETUP -#line 45 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(BY); } - YY_BREAK -case 10: -YY_RULE_SETUP -#line 46 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(CHANGE); } - YY_BREAK -case 11: -YY_RULE_SETUP -#line 47 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(CLASS); } - YY_BREAK -case 12: -YY_RULE_SETUP -#line 48 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(CONSTRAINTS); } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 49 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(COVER); } - YY_BREAK -case 14: -YY_RULE_SETUP -#line 50 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(DECLARE); } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 51 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(DELETE); } - YY_BREAK -case 16: -YY_RULE_SETUP -#line 52 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(DESC); } - YY_BREAK -case 17: -YY_RULE_SETUP -#line 53 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(UNION); } - YY_BREAK -case 18: -YY_RULE_SETUP -#line 54 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(DETERMINED); } - YY_BREAK -case 19: -YY_RULE_SETUP -#line 55 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(DISTRIBUTED); } - YY_BREAK -case 20: -YY_RULE_SETUP -#line 56 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(DYNAMIC); } - YY_BREAK -case 21: -YY_RULE_SETUP -#line 57 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(EXIST); } - YY_BREAK -case 22: -YY_RULE_SETUP -#line 58 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(FOR); } - YY_BREAK -case 23: -YY_RULE_SETUP -#line 59 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(FREQUENCY); } - YY_BREAK -case 24: -YY_RULE_SETUP -#line 60 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(FROM); } - YY_BREAK -case 25: -YY_RULE_SETUP -#line 61 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(GIVEN); } - YY_BREAK -case 26: -YY_RULE_SETUP -#line 62 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(HAS); } - YY_BREAK -case 27: -YY_RULE_SETUP -#line 63 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(IMPLIES); } - YY_BREAK -case 28: -YY_RULE_SETUP -#line 64 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(INDEX); } - YY_BREAK -case 29: -YY_RULE_SETUP -#line 65 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(INSERT); } - YY_BREAK -case 30: -YY_RULE_SETUP -#line 66 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(INTCLASS); } - YY_BREAK -case 31: -YY_RULE_SETUP -#line 67 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ISA); } - YY_BREAK -case 32: -YY_RULE_SETUP -#line 68 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(LIST); } - YY_BREAK -case 33: -YY_RULE_SETUP -#line 69 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(MAX); } - YY_BREAK -case 34: -YY_RULE_SETUP -#line 70 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(MAXLEN); } - YY_BREAK -case 35: -YY_RULE_SETUP -#line 71 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(MIN); } - YY_BREAK -case 36: -YY_RULE_SETUP -#line 72 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(MOD); } - YY_BREAK -case 37: -YY_RULE_SETUP -#line 73 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(NOT); } - YY_BREAK -case 38: -YY_RULE_SETUP -#line 74 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(OF); } - YY_BREAK -case 39: -YY_RULE_SETUP -#line 75 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ON); } - YY_BREAK -case 40: -YY_RULE_SETUP -#line 76 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ONE); } - YY_BREAK -case 41: -YY_RULE_SETUP -#line 77 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(OR); } - YY_BREAK -case 42: -YY_RULE_SETUP -#line 78 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ORDER); } - YY_BREAK -case 43: -YY_RULE_SETUP -#line 79 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ORDERED); } - YY_BREAK -case 44: -YY_RULE_SETUP -#line 80 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(OVERLAP); } - YY_BREAK -case 45: -YY_RULE_SETUP -#line 81 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(POINTER); } - YY_BREAK -case 46: -YY_RULE_SETUP -#line 82 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(PRECOMPUTED); } - YY_BREAK -case 47: -YY_RULE_SETUP -#line 83 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(PROPERTY); } - YY_BREAK -case 48: -YY_RULE_SETUP -#line 84 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(PROPERTIES); } - YY_BREAK -case 49: -YY_RULE_SETUP -#line 85 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(QUERY); } - YY_BREAK -case 50: -YY_RULE_SETUP -#line 86 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(RANGE); } - YY_BREAK -case 51: -YY_RULE_SETUP -#line 87 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(RETURN); } - YY_BREAK -case 52: -YY_RULE_SETUP -#line 88 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(SCHEMA); } - YY_BREAK -case 53: -YY_RULE_SETUP -#line 89 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(SELECT); } - YY_BREAK -case 54: -YY_RULE_SETUP -#line 90 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(SELECTIVITY); } - YY_BREAK -case 55: -YY_RULE_SETUP -#line 91 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(SIZE); } - YY_BREAK -case 56: -YY_RULE_SETUP -#line 92 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(SPACE); } - YY_BREAK -case 57: -YY_RULE_SETUP -#line 93 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(STATIC); } - YY_BREAK -case 58: -YY_RULE_SETUP -#line 94 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(STORE); } - YY_BREAK -case 59: -YY_RULE_SETUP -#line 95 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(STORING); } - YY_BREAK -case 60: -YY_RULE_SETUP -#line 96 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(STRCLASS); } - YY_BREAK -case 61: -YY_RULE_SETUP -#line 97 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(TIME); } - YY_BREAK -case 62: -YY_RULE_SETUP -#line 98 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(TO); } - YY_BREAK -case 63: -YY_RULE_SETUP -#line 99 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(TRANSACTION); } - YY_BREAK -case 64: -YY_RULE_SETUP -#line 100 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(TREE); } - YY_BREAK -case 65: -YY_RULE_SETUP -#line 101 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(TYPE); } - YY_BREAK -case 66: -YY_RULE_SETUP -#line 102 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(UNIT); } - YY_BREAK -case 67: -YY_RULE_SETUP -#line 103 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(WHERE); } - YY_BREAK -case 68: -YY_RULE_SETUP -#line 105 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(IDENTIFIER); } - YY_BREAK -case 69: -YY_RULE_SETUP -#line 107 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(INTEGER); } - YY_BREAK -case 70: -YY_RULE_SETUP -#line 108 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(REAL); } - YY_BREAK -case 71: -YY_RULE_SETUP -#line 109 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(REAL); } - YY_BREAK -case 72: -YY_RULE_SETUP -#line 110 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(REAL); } - YY_BREAK -case 73: -/* rule 73 can match eol */ -YY_RULE_SETUP -#line 112 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(STRING); } - YY_BREAK -case 74: -YY_RULE_SETUP -#line 114 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(ASSIGN); } - YY_BREAK -case 75: -YY_RULE_SETUP -#line 115 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(LE); } - YY_BREAK -case 76: -YY_RULE_SETUP -#line 116 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(GE); } - YY_BREAK -case 77: -YY_RULE_SETUP -#line 117 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(NE); } - YY_BREAK -case 78: -YY_RULE_SETUP -#line 118 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(';'); } - YY_BREAK -case 79: -YY_RULE_SETUP -#line 119 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('{'); } - YY_BREAK -case 80: -YY_RULE_SETUP -#line 120 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('}'); } - YY_BREAK -case 81: -YY_RULE_SETUP -#line 121 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(','); } - YY_BREAK -case 82: -YY_RULE_SETUP -#line 122 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(EQ); } - YY_BREAK -case 83: -YY_RULE_SETUP -#line 123 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('('); } - YY_BREAK -case 84: -YY_RULE_SETUP -#line 124 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(')'); } - YY_BREAK -case 85: -YY_RULE_SETUP -#line 125 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('['); } - YY_BREAK -case 86: -YY_RULE_SETUP -#line 126 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(']'); } - YY_BREAK -case 87: -YY_RULE_SETUP -#line 127 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('.'); } - YY_BREAK -case 88: -YY_RULE_SETUP -#line 128 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('-'); } - YY_BREAK -case 89: -YY_RULE_SETUP -#line 129 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('+'); } - YY_BREAK -case 90: -YY_RULE_SETUP -#line 130 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return(STAR); } - YY_BREAK -case 91: -YY_RULE_SETUP -#line 131 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('/'); } - YY_BREAK -case 92: -YY_RULE_SETUP -#line 132 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('<'); } - YY_BREAK -case 93: -YY_RULE_SETUP -#line 133 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); return('>'); } - YY_BREAK -case 94: -YY_RULE_SETUP -#line 135 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); } - YY_BREAK -case 95: -YY_RULE_SETUP -#line 136 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); } - YY_BREAK -case 96: -YY_RULE_SETUP -#line 137 "SQLPScanner.l" -{ strcat(LineBuffer, yytext); - yyerror("illegal character"); } - YY_BREAK -case 97: -YY_RULE_SETUP -#line 139 "SQLPScanner.l" -ECHO; - YY_BREAK -#line 1436 "lex.yy.c" -case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = (yy_c_buf_p); - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (yy_did_buffer_switch_on_eof) = 0; - - if ( yywrap( ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of user's declarations */ -} /* end of yylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (void) -{ - char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - char *source = (yytext_ptr); - int number_to_move, i; - int ret_val; - - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; - - else - { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - - int yy_c_buf_p_offset = - (int) ((yy_c_buf_p) - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yyrealloc( (void *) b->yy_ch_buf, - (yy_size_t) (b->yy_buf_size + 2) ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = NULL; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - if ( (yy_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( - (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - /* "- 2" to take care of EOB's */ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); - } - - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (void) -{ - yy_state_type yy_current_state; - char *yy_cp; - - yy_current_state = (yy_start); - - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) - { - YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 329 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -{ - int yy_is_jam; - char *yy_cp = (yy_c_buf_p); - - YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 329 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 328); - - return yy_is_jam ? 0 : yy_current_state; -} - -#ifndef YY_NO_UNPUT - - static void yyunput (int c, char * yy_bp ) -{ - char *yy_cp; - - yy_cp = (yy_c_buf_p); - - /* undo effects of setting up yytext */ - *yy_cp = (yy_hold_char); - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - int number_to_move = (yy_n_chars) + 2; - char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - (yytext_ptr) = yy_bp; - (yy_hold_char) = *yy_cp; - (yy_c_buf_p) = yy_cp; -} - -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(yy_c_buf_p) = (yy_hold_char); - - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; - - else - { /* need more input */ - int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); - ++(yy_c_buf_p); - - switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart( yyin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap( ) ) - return 0; - - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve yytext */ - (yy_hold_char) = *++(yy_c_buf_p); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void yyrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE ); - } - - yy_init_buffer( YY_CURRENT_BUFFER, input_file ); - yy_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - (yy_did_buffer_switch_on_eof) = 1; -} - -static void yy_load_buffer_state (void) -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * - */ - void yy_delete_buffer (YY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yyfree( (void *) b->yy_ch_buf ); - - yyfree( (void *) b ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - yy_flush_buffer( b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void yy_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void yypop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void yyensure_buffer_stack (void) -{ - yy_size_t num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ - (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - yy_size_t grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return NULL; - - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = NULL; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (const char * yystr ) -{ - - return yy_scan_bytes( yystr, (int) strlen(yystr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param yybytes the byte buffer to scan - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = (yy_size_t) (_yybytes_len + 2); - buf = (char *) yyalloc( n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yynoreturn yy_fatal_error (const char* msg ) -{ - fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = (yy_hold_char); \ - (yy_c_buf_p) = yytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int yyget_lineno (void) -{ - - return yylineno; -} - -/** Get the input stream. - * - */ -FILE *yyget_in (void) -{ - return yyin; -} - -/** Get the output stream. - * - */ -FILE *yyget_out (void) -{ - return yyout; -} - -/** Get the length of the current token. - * - */ -int yyget_leng (void) -{ - return yyleng; -} - -/** Get the current token. - * - */ - -char *yyget_text (void) -{ - return yytext; -} - -/** Set the current line number. - * @param _line_number line number - * - */ -void yyset_lineno (int _line_number ) -{ - - yylineno = _line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param _in_str A readable stream. - * - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * _in_str ) -{ - yyin = _in_str ; -} - -void yyset_out (FILE * _out_str ) -{ - yyout = _out_str ; -} - -int yyget_debug (void) -{ - return yy_flex_debug; -} - -void yyset_debug (int _bdebug ) -{ - yy_flex_debug = _bdebug ; -} - -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - (yy_buffer_stack) = NULL; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = NULL; - (yy_init) = 0; - (yy_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = NULL; - yyout = NULL; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; -} - -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer( YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(); - } - - /* Destroy the stack itself. */ - yyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, const char * s2, int n ) -{ - - int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (const char * s ) -{ - int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *yyalloc (yy_size_t size ) -{ - return malloc(size); -} - -void *yyrealloc (void * ptr, yy_size_t size ) -{ - - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return realloc(ptr, size); -} - -void yyfree (void * ptr ) -{ - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 139 "SQLPScanner.l" - - -yyerror(s) -char *s; -{ - int i; - char c; - fprintf( stderr, "\n%s", LineBuffer ); - c = input(); - while ( c != '\n' && c != 0 ) { - putc(c, stderr); - c = input(); - } - putc('\n', stderr); - for (i=1; i <= strlen( LineBuffer ) - strlen( yytext ); i++) - putc(' ', stderr); - for (i=1; i <= strlen( yytext ); i++) - putc('^', stderr); - putc('\n', stderr); - fprintf ( stderr, "** error: %s found in line %d.\n\n", s, LineNumber ); -} - -yywrap() -{ - return(1); -} diff --git a/util.c b/util.c index 5effa65..b4f3f7f 100644 --- a/util.c +++ b/util.c @@ -28,7 +28,6 @@ cons_cell* create_cons_cell_w_atom(char* val, cons_cell* cdr) { } cons_cell* create_spcol(cons_cell* var, cons_cell* pf) { - cons_cell* pf_cons = create_cons_cell(pf, NULL); cons_cell* var_cons = create_cons_cell(var, pf); char operator[6] = "SPCOL\0"; cons_cell* operator_cons = create_cons_cell_w_atom(operator, var_cons); @@ -84,6 +83,7 @@ cons_cell* create_op(char *op) { return create_cons_cell_w_atom(operator, op_cons); } +// todo: why need ra cons_cell* create_comp_operator(cons_cell* op, cons_cell* term1, cons_cell* term2, cons_cell* ra) { cons_cell* ra_cons = create_cons_cell(ra, NULL); cons_cell* term2_cons = create_cons_cell(term2, ra_cons); @@ -103,7 +103,7 @@ cons_cell* create_atom_operator(cons_cell* table, cons_cell* var) { return operator_cons; } - +// todo: why pass NULL cons_cell* create_union_all_operator(cons_cell* ra1, cons_cell* ra2) { cons_cell* ra2_cons = create_cons_cell(ra2, NULL); cons_cell* ra1_cons = create_cons_cell(ra1, ra2_cons); @@ -168,11 +168,13 @@ cons_cell* create_proj_operator(cons_cell* assign, cons_cell* ra) { return operator_cons; } -cons_cell* create_not_operator(cons_cell* ra1) { // todo: why do we need the second param ra2? - cons_cell* ra1_cons = create_cons_cell(ra1, NULL); +// todo: ra2? +cons_cell* create_not_operator(cons_cell* ra1, cons_cell* ra2) { + cons_cell* ra2_cons = create_cons_cell(ra2, NULL); + cons_cell* ra1_cons = create_cons_cell(ra1, ra2_cons); char operator[4] = "NOT\0"; cons_cell* operator_cons = create_cons_cell_w_atom(operator, ra1_cons); - return create_cons_cell_w_atom(operator, ra1_cons); + return operator_cons; } cons_cell* create_exist_operator(cons_cell* ra1) { @@ -191,7 +193,7 @@ cons_cell* create_limit_operator(cons_cell* ra1, cons_cell* ra2) { return operator_cons; } -cons_cell* create_elim_operator(cons_cell* ra1, cons_cell* ra2) { +cons_cell* create_elim_operator(cons_cell* ra1) { cons_cell* ra1_cons = create_cons_cell(ra1, NULL); char operator[5] = "ELIM\0"; cons_cell* operator_cons = create_cons_cell_w_atom(operator, ra1_cons); diff --git a/util.h b/util.h index f70f3df..a32e998 100644 --- a/util.h +++ b/util.h @@ -76,10 +76,10 @@ cons_cell* create_union_operator(cons_cell* ra1, cons_cell* ra2); cons_cell* create_cross_operator(cons_cell* ra1, cons_cell* ra2); cons_cell* create_rename_operator(cons_cell* table, cons_cell* var); cons_cell* create_proj_operator(cons_cell* assign, cons_cell* ra); -cons_cell* create_not_operator(cons_cell* ra1); +cons_cell* create_not_operator(cons_cell* ra1, cons_cell* ra2); cons_cell* create_exist_operator(cons_cell* ra1); cons_cell* create_limit_operator(cons_cell* ra1, cons_cell* ra2); -cons_cell* create_elim_operator(cons_cell* ra1, cons_cell* ra2); +cons_cell* create_elim_operator(cons_cell* ra1); cons_cell* create_eval_operator(cons_cell* logic, cons_cell* cross); // Prints an in order traversal of the tree -- GitLab