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
zcmaJ^4Nz3q6~6DmBH#kMAS~<(Y*AVjK}DCJ7<E^6&5|Z9HpQ5j&WL|an}`yP&D6Az
z#8_9dM!l1UWEzD^E$x&#$+nHgm|#kbF-dD|n>u!4X-Df$P!Qx#th|2r=RMsm=FL36
z!}-2*&iy&}zO`eQvOB2ko~BkU+B4%|Vw;ojr_H(N+&f?KJH%hnXjX*ZOphoZO?vOp
zCI2x;!}=Y6`fz%vW7jLI4m!-CCUvJN!JbNpKbUmD8Y+mNqoh|_33)34q5h!jvW3Bd
z9!sb$;Xq90@+3mSn?^OwAAFvS0Rkt$u1=yeld{xrCeeG69#I!gq`yeoqV6`+?BqA-
z_cQaor?}F0*56p&;cxVv^anok2R;agguAQJ^vj8a1bqD|Z<<<Qtqb^uAno!8ef?58
zU!zrayYetym@>DhOvXW8EaZbJe=tplxx+Us0|#Z`yJIX+JwHqp>rBs+A~M`)I-aOk
zJPJ!z4BuAqUM6k4e`Jk+t~q}i7Gtw1T*tGxt8cQ2`;cV?&vFgbt6_=iEXg%l{XA1f
zB{7L4KQodHVyVUCdtr?;l)7=UH0`w(x@H+UUgS9jFnLyfK$cG#C$I#8?oa-!&!CtG
zvKh>T_5U+Cz?4xlI5o%?v!upI@^L(yL3DM`IH8a7(8byfQ6D>4i&)H=?ciFNw??4v
z;9r<FY6PPLbbo4D<{8$A0rXR2HC|tvoc2-Lo0?JBDoECJczuT@85C|b-R~x_QM0N4
zb^<+~Hc8F6!F$CuKu_CdtLdY3PiA_?*mYh5`T|3rFZ4ed<@$ryn10oEAv}$Gc#S6C
zAlw*&sU;3)Dd6kDtoOl`JAD=#)*}ZuD2pM!D|*h8c$xZv5k8*iGM@|g*+!ECsYQ`=
zQKTO;G{fBC8(8;&Z;+4^zG1>w<yPUPUs8Buzovco$7+AzqW`(e^dGi-wQ7VdO<}pH
ziKThQq_^-^SaM>wpWovne5tzn=%SS3(szdSHBI7yeOQqRB9QgLSghU$EJdGOo4ZAd
z6@7en<`47TnQCO(iXgF@PsZ}yY#-(&KfcQKzZqisyqAXb%Kb4+&w7>>(ND}Y5p<6T
z`Wg=^v=~88@E~?iJq~M}c{UC4qHp$Mp852ubz;WLgL*~6gIT|gs(ge_AzsA9#qMk&
z#I5pzs!wG*tXn5Szf}%0Wz>oIq=%ljFEhs>;4r)N!&`f(+mVy;PkaJ|V`-13y^C9l
zgfCs8n;l<YP?VCpjY&yLu9pzcgPvuTfxmmIJ>R}Bn7=E{Nvi$9LWU1`0yirIL-$Q*
z`ycN=elsRqdL`8BNL3U<Q?e)1;_RGy_Nj3qSNvs7Th3|%8-OQ)(|~8LXj&8SP@kr~
z4g4XRstb4wNHFNaYntW+HUQl~%Yde>1ik=l0A2?+1J`2i9l$fdF5o=u4HmYZG{bOW
zg;jKf8@Lg;66ivcHUK+;&A?^o^bX)CunV{o_W?ogq~Mxy0`~#kz$v)BRsuu724Dg1
z(q`amzz*OsU>9%)z7xb`CS-(tFwn$=&@DN6YEw6THK#~z`+}az`Ko<(x2EBCGae_b
zNAMP3rir<EYIiR!%FV0adsWjan8uTA*{)V3#r@bkfkjQm+llx0;5PydUVV%U7=Hn;
z35)wc1pf_#kHun_f!`g$HyZp@1&i1Q!P60f9~c5J62xM+)<^J<8vGjYOTj-L!GG7_
zw}F4{OX6FVdP2T{U{yqd?-&U>kzgj;<4y%GfPV`7o#JEBE^mRajmZB!BmdNT2;$La
z??(ta41pJXJNOqP_?-s72K;37<=zNBXz<&>?*iW%!S6Tt{8k83(Z_e%qfYS8Qfr>W
zcLCNVDDO0sSk~z{0nbO2YA{Mo1%H$-MJ6w-0-TMfB9xm9<r?tMfqx=`UvKc+!2gZD
zp64*Na_iGPM_ebYhU>IHZ*jaCN2Co$jn>Rg3sp^VCgPtKm2NC7Q@!@kuM6X1E4_A>
zI`WAj7E(2?-%9jfxwl8ekW{jqzCI^ClwAC*qW;QG_s(6SwmRv#xm#4fgMMpXQI=cg
z!_x7`g?>pT$%uPp-UcO?Cb&wKr>VzfQ~pXHa?P6YV204~HHLXn>VK3L=^s_-DOZj)
zdKwC~me}ZsD^r;RD|h;TWIDbj$nX%`Y?QxY6Y2N{z^r9)l>x~<CRyGRVE0SEd6J0Y
zy$17$^e;{qeqH}(maV2ovL}-x*&EUy#xH*MtP()tuz_rBXJj^g%-Qf;2!=G<DU||d
z(3(=)+H$Z~)kfl@*d@$=+lHbg_){&byodi(u%|)*SttFcvxH-<^lxE)`l*seua;)k
zPmwB%yjKgPYNzzuqvrGy{1%c)EK#Ftk$R6sB;eNz%y#J?#@)`Ij|7l6gg=Aan<_l~
zK7si*BiQgNKa-)GGKGSl9hlwHZ^ut<_I!@N+0zGP3l}}Kn`~JX8?~0(vSwk`*p{@*
zVe)Gjv5ROO*cFo9C)=Wx=fzi$wv^lMs*~(RIUc8EpOOB<awhLf|4*ggltuf?Pbg)f
zBX{K}w0r);p%r(V)cDmKYBz1Jsofmfv+$4-THszCqZX&qpH~zm>Sw@fr{^k4tojMo
zahU$gmrLDVi&a0vI+|&Xcb0WI`;g($u`1N!)f8nVZCO&9*jz5i_E`GwB_#>>FBE@{
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
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

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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

literal 41992
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

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