001
002//----------------------------------------------------
003// The following code was generated by CUP v0.10k
004// Thu Jul 25 21:17:37 PDT 2013
005//----------------------------------------------------
006
007package mondrian.olap;
008
009import java_cup.runtime.*;
010import java.util.*;
011import java.math.BigDecimal;
012import mondrian.mdx.*;
013import mondrian.parser.MdxParserValidator;
014import mondrian.resource.MondrianResource;
015import mondrian.server.Statement;
016
017/** CUP v0.10k generated parser.
018  * @version Thu Jul 25 21:17:37 PDT 2013
019  */
020public class Parser extends java_cup.runtime.lr_parser {
021
022  /** Default constructor. */
023  public Parser() {super();}
024
025  /** Constructor which sets the default scanner. */
026  public Parser(java_cup.runtime.Scanner s) {super(s);}
027
028  /** Production table. */
029  protected static final short _production_table[][] = 
030    unpackFromStrings(new String[] {
031    "\000\223\000\002\002\004\000\002\045\003\000\002\047" +
032    "\003\000\002\046\003\000\002\046\003\000\002\044\003" +
033    "\000\002\044\003\000\002\043\003\000\002\043\003\000" +
034    "\002\034\003\000\002\034\005\000\002\032\003\000\002" +
035    "\032\005\000\002\035\003\000\002\021\003\000\002\021" +
036    "\005\000\002\021\005\000\002\017\003\000\002\017\005" +
037    "\000\002\016\003\000\002\016\004\000\002\015\003\000" +
038    "\002\015\005\000\002\015\005\000\002\015\005\000\002" +
039    "\015\005\000\002\015\005\000\002\015\006\000\002\015" +
040    "\005\000\002\015\006\000\002\014\003\000\002\014\005" +
041    "\000\002\014\005\000\002\014\005\000\002\013\003\000" +
042    "\002\013\005\000\002\013\005\000\002\011\003\000\002" +
043    "\011\004\000\002\011\004\000\002\023\003\000\002\023" +
044    "\003\000\002\023\003\000\002\023\005\000\002\023\005" +
045    "\000\002\023\005\000\002\023\010\000\002\023\006\000" +
046    "\002\023\006\000\002\023\005\000\002\023\005\000\002" +
047    "\023\003\000\002\023\003\000\002\005\007\000\002\022" +
048    "\002\000\002\022\003\000\002\077\002\000\002\077\004" +
049    "\000\002\101\006\000\002\006\002\000\002\006\004\000" +
050    "\002\042\003\000\002\042\003\000\002\042\003\000\002" +
051    "\042\003\000\002\042\003\000\002\042\003\000\002\007" +
052    "\005\000\002\007\003\000\002\007\003\000\002\010\003" +
053    "\000\002\010\002\000\002\070\002\000\002\070\003\000" +
054    "\002\067\003\000\002\067\005\000\002\004\005\000\002" +
055    "\026\003\000\002\026\003\000\002\026\003\000\002\026" +
056    "\004\000\002\025\011\000\002\100\002\000\002\100\004" +
057    "\000\002\061\002\000\002\061\003\000\002\060\003\000" +
058    "\002\060\005\000\002\024\002\000\002\024\004\000\002" +
059    "\063\002\000\002\063\003\000\002\071\003\000\002\071" +
060    "\004\000\002\052\003\000\002\052\003\000\002\050\007" +
061    "\000\002\050\007\000\002\064\002\000\002\064\004\000" +
062    "\002\072\003\000\002\072\005\000\002\037\003\000\002" +
063    "\053\005\000\002\051\006\000\002\051\006\000\002\040" +
064    "\003\000\002\003\007\000\002\003\007\000\002\057\002" +
065    "\000\002\057\004\000\002\066\002\000\002\066\003\000" +
066    "\002\041\003\000\002\041\003\000\002\041\003\000\002" +
067    "\041\003\000\002\041\003\000\002\102\003\000\002\102" +
068    "\006\000\002\065\005\000\002\055\002\000\002\055\003" +
069    "\000\002\073\003\000\002\073\005\000\002\056\003\000" +
070    "\002\036\003\000\002\012\003\000\002\062\005\000\002" +
071    "\054\002\000\002\054\003\000\002\074\003\000\002\074" +
072    "\005\000\002\033\003\000\002\030\007\000\002\103\004" +
073    "\000\002\103\002\000\002\104\004\000\002\104\002\000" +
074    "\002\075\004\000\002\075\002\000\002\076\003\000\002" +
075    "\076\005\000\002\020\003\000\002\027\003\000\002\027" +
076    "\003\000\002\031\006" });
077
078  /** Access to production table. */
079  public short[][] production_table() {return _production_table;}
080
081  /** Parse-action table. */
082  protected static final short[][] _action_table = 
083    unpackFromStrings(new String[] {
084    "\000\340\000\014\015\005\021\012\045\uffaf\053\010\054" +
085    "\014\001\002\000\004\002\uffb4\001\002\000\012\022\uff79" +
086    "\030\325\045\uff79\053\uff79\001\002\000\004\002\324\001" +
087    "\002\000\004\045\241\001\002\000\006\031\210\046\206" +
088    "\001\002\000\004\002\uffb3\001\002\000\004\040\176\001" +
089    "\002\000\004\002\uffb2\001\002\000\036\007\044\010\024" +
090    "\014\033\033\020\034\047\041\026\066\022\070\021\072" +
091    "\042\074\015\100\032\101\023\102\037\104\027\001\002" +
092    "\000\030\007\044\010\024\014\033\034\047\041\026\066" +
093    "\022\070\021\100\032\101\023\102\037\104\027\001\002" +
094    "\000\120\002\uffd7\004\uffd7\005\uffd7\011\uffd7\014\uffd7\016" +
095    "\uffd7\020\uffd7\025\uffd7\026\uffd7\027\uffd7\031\uffd7\033\uffd7" +
096    "\035\uffd7\036\uffd7\041\uffd7\042\uffd7\045\uffd7\046\uffd7\047" +
097    "\uffd7\050\uffd7\052\uffd7\055\uffd7\056\ufff6\057\uffd7\060\uffd7" +
098    "\061\uffd7\062\uffd7\063\uffd7\064\uffd7\065\uffd7\067\uffd7\070" +
099    "\ufff6\071\uffd7\072\uffd7\073\uffd7\074\uffd7\075\uffd7\076\uffd7" +
100    "\077\uffd7\001\002\000\114\002\uffcd\004\uffcd\005\uffcd\011" +
101    "\uffcd\014\uffcd\016\uffcd\020\uffcd\025\uffcd\026\uffcd\027\uffcd" +
102    "\031\uffcd\033\uffcd\035\uffcd\036\uffcd\041\uffcd\042\uffcd\045" +
103    "\uffcd\046\uffcd\047\uffcd\050\uffcd\052\uffcd\055\uffcd\057\uffcd" +
104    "\060\uffcd\061\uffcd\062\uffcd\063\uffcd\064\uffcd\065\uffcd\067" +
105    "\uffcd\071\uffcd\072\uffcd\073\uffcd\074\uffcd\075\uffcd\076\uffcd" +
106    "\077\uffcd\001\002\000\036\007\044\010\024\014\033\033" +
107    "\020\034\047\041\026\066\022\070\021\072\042\074\015" +
108    "\100\032\101\023\102\037\104\027\001\002\000\040\007" +
109    "\044\010\024\014\033\033\020\034\047\041\026\060\uffba" +
110    "\066\022\070\021\072\042\074\015\100\032\101\023\102" +
111    "\037\104\027\001\002\000\042\007\044\010\024\014\033" +
112    "\033\020\034\047\041\026\060\uffba\066\022\070\021\072" +
113    "\042\074\015\075\uffb9\100\032\101\023\102\037\104\027" +
114    "\001\002\000\122\002\ufffe\004\ufffe\005\ufffe\011\ufffe\014" +
115    "\ufffe\016\ufffe\020\ufffe\025\ufffe\026\ufffe\027\ufffe\031\ufffe" +
116    "\033\ufffe\035\ufffe\036\ufffe\041\ufffe\042\ufffe\045\ufffe\046" +
117    "\ufffe\047\ufffe\050\ufffe\051\ufffe\052\ufffe\055\ufffe\056\ufffe" +
118    "\057\ufffe\060\ufffe\061\ufffe\062\ufffe\063\ufffe\064\ufffe\065" +
119    "\ufffe\067\ufffe\070\ufffe\071\ufffe\072\ufffe\073\ufffe\074\ufffe" +
120    "\075\ufffe\076\ufffe\077\ufffe\001\002\000\004\070\164\001" +
121    "\002\000\006\056\157\070\160\001\002\000\122\002\ufff9" +
122    "\004\ufff9\005\ufff9\011\ufff9\014\ufff9\016\ufff9\020\ufff9\025" +
123    "\ufff9\026\ufff9\027\ufff9\031\ufff9\033\ufff9\035\ufff9\036\ufff9" +
124    "\041\ufff9\042\ufff9\045\ufff9\046\ufff9\047\ufff9\050\ufff9\051" +
125    "\ufff9\052\ufff9\055\ufff9\056\ufff9\057\ufff9\060\ufff9\061\ufff9" +
126    "\062\ufff9\063\ufff9\064\ufff9\065\ufff9\067\ufff9\070\ufff9\071" +
127    "\ufff9\072\ufff9\073\ufff9\074\ufff9\075\ufff9\076\ufff9\077\ufff9" +
128    "\001\002\000\114\002\uffd9\004\uffd9\005\uffd9\011\uffd9\014" +
129    "\uffd9\016\uffd9\020\uffd9\025\uffd9\026\uffd9\027\uffd9\031\uffd9" +
130    "\033\uffd9\035\uffd9\036\uffd9\041\uffd9\042\uffd9\045\uffd9\046" +
131    "\uffd9\047\uffd9\050\uffd9\052\uffd9\055\uffd9\057\uffd9\060\uffd9" +
132    "\061\uffd9\062\uffd9\063\uffd9\064\uffd9\065\uffd9\067\uffd9\071" +
133    "\uffd9\072\uffd9\073\uffd9\074\uffd9\075\uffd9\076\uffd9\077\uffd9" +
134    "\001\002\000\010\002\uffb1\005\070\057\071\001\002\000" +
135    "\042\002\uffbc\005\uffbc\011\uffbc\014\uffbc\031\uffbc\035\uffbc" +
136    "\036\073\041\uffbc\042\uffbc\045\uffbc\046\uffbc\052\074\057" +
137    "\uffbc\060\uffbc\075\uffbc\076\uffbc\001\002\000\114\002\uffd8" +
138    "\004\uffd8\005\uffd8\011\uffd8\014\uffd8\016\uffd8\020\uffd8\025" +
139    "\uffd8\026\uffd8\027\uffd8\031\uffd8\033\uffd8\035\uffd8\036\uffd8" +
140    "\041\uffd8\042\uffd8\045\uffd8\046\uffd8\047\uffd8\050\uffd8\052" +
141    "\uffd8\055\uffd8\057\uffd8\060\uffd8\061\uffd8\062\uffd8\063\uffd8" +
142    "\064\uffd8\065\uffd8\067\uffd8\071\uffd8\072\uffd8\073\uffd8\074" +
143    "\uffd8\075\uffd8\076\uffd8\077\uffd8\001\002\000\122\002\ufffa" +
144    "\004\ufffa\005\ufffa\011\ufffa\014\ufffa\016\ufffa\020\ufffa\025" +
145    "\ufffa\026\ufffa\027\ufffa\031\ufffa\033\ufffa\035\ufffa\036\ufffa" +
146    "\041\ufffa\042\ufffa\045\ufffa\046\ufffa\047\ufffa\050\ufffa\051" +
147    "\ufffa\052\ufffa\055\ufffa\056\ufffa\057\ufffa\060\ufffa\061\ufffa" +
148    "\062\ufffa\063\ufffa\064\ufffa\065\ufffa\067\ufffa\070\ufffa\071" +
149    "\ufffa\072\ufffa\073\ufffa\074\ufffa\075\ufffa\076\ufffa\077\ufffa" +
150    "\001\002\000\112\002\uffdf\004\uffdf\005\uffdf\011\uffdf\014" +
151    "\uffdf\016\uffdf\020\uffdf\025\uffdf\026\uffdf\027\uffdf\031\uffdf" +
152    "\033\uffdf\035\uffdf\036\uffdf\041\uffdf\042\uffdf\045\uffdf\046" +
153    "\uffdf\047\uffdf\050\uffdf\052\uffdf\055\uffdf\057\uffdf\060\uffdf" +
154    "\061\uffdf\063\uffdf\064\uffdf\065\uffdf\067\uffdf\071\uffdf\072" +
155    "\uffdf\073\uffdf\074\uffdf\075\uffdf\076\uffdf\077\uffdf\001\002" +
156    "\000\036\002\uffbd\005\uffbd\011\uffbd\014\uffbd\031\uffbd\035" +
157    "\uffbd\041\uffbd\042\uffbd\045\uffbd\046\uffbd\057\uffbd\060\uffbd" +
158    "\075\uffbd\076\uffbd\001\002\000\112\002\uffe3\004\uffe3\005" +
159    "\uffe3\011\uffe3\014\uffe3\016\uffe3\020\uffe3\025\uffe3\026\uffe3" +
160    "\027\uffe3\031\uffe3\033\uffe3\035\uffe3\036\uffe3\041\uffe3\042" +
161    "\uffe3\045\uffe3\046\uffe3\047\uffe3\050\uffe3\052\uffe3\055\107" +
162    "\057\uffe3\060\uffe3\061\uffe3\063\uffe3\064\uffe3\065\uffe3\067" +
163    "\uffe3\071\uffe3\072\uffe3\073\uffe3\074\uffe3\075\uffe3\076\uffe3" +
164    "\077\110\001\002\000\122\002\000\004\000\005\000\011" +
165    "\000\014\000\016\000\020\000\025\000\026\000\027\000" +
166    "\031\000\033\000\035\000\036\000\041\000\042\000\045" +
167    "\000\046\000\047\000\050\000\051\000\052\000\055\000" +
168    "\056\000\057\000\060\000\061\000\062\000\063\000\064" +
169    "\000\065\000\067\000\070\000\071\000\072\000\073\000" +
170    "\074\000\075\000\076\000\077\000\001\002\000\054\002" +
171    "\ufff3\004\076\005\ufff3\011\ufff3\014\ufff3\016\ufff3\020\ufff3" +
172    "\031\ufff3\035\ufff3\036\ufff3\041\ufff3\042\ufff3\045\ufff3\046" +
173    "\ufff3\047\ufff3\050\ufff3\052\ufff3\057\ufff3\060\ufff3\075\ufff3" +
174    "\076\ufff3\001\002\000\054\002\ufff0\004\ufff0\005\ufff0\011" +
175    "\ufff0\014\ufff0\016\ufff0\020\ufff0\031\ufff0\035\ufff0\036\ufff0" +
176    "\041\ufff0\042\ufff0\045\ufff0\046\ufff0\047\ufff0\050\ufff0\052" +
177    "\ufff0\057\ufff0\060\ufff0\075\ufff0\076\ufff0\001\002\000\030" +
178    "\007\044\010\024\014\033\034\047\041\026\066\022\070" +
179    "\021\100\032\101\023\102\037\104\027\001\002\000\100" +
180    "\002\uffee\004\uffee\005\uffee\011\uffee\014\uffee\016\uffee\020" +
181    "\uffee\025\131\026\143\027\140\031\uffee\033\137\035\uffee" +
182    "\036\uffee\041\uffee\042\uffee\045\uffee\046\uffee\047\uffee\050" +
183    "\uffee\052\uffee\057\uffee\060\uffee\063\134\064\133\065\136" +
184    "\067\135\071\142\073\141\075\uffee\076\uffee\001\002\000" +
185    "\044\007\044\010\024\014\033\016\uffcb\020\uffcb\033\020" +
186    "\034\047\041\026\050\uffcb\066\022\070\021\072\042\074" +
187    "\015\100\032\101\023\102\037\104\027\001\002\000\106" +
188    "\002\uffec\004\uffec\005\uffec\011\uffec\014\uffec\016\uffec\020" +
189    "\uffec\025\uffec\026\uffec\027\uffec\031\uffec\033\uffec\035\uffec" +
190    "\036\uffec\041\uffec\042\uffec\045\uffec\046\uffec\047\uffec\050" +
191    "\uffec\052\uffec\057\uffec\060\uffec\061\104\063\uffec\064\uffec" +
192    "\065\uffec\067\uffec\071\uffec\072\105\073\uffec\074\103\075" +
193    "\uffec\076\uffec\001\002\000\114\002\uffdc\004\uffdc\005\uffdc" +
194    "\011\uffdc\014\uffdc\016\uffdc\020\uffdc\025\uffdc\026\uffdc\027" +
195    "\uffdc\031\uffdc\033\uffdc\035\uffdc\036\uffdc\041\uffdc\042\uffdc" +
196    "\045\uffdc\046\uffdc\047\uffdc\050\uffdc\052\uffdc\055\uffdc\057" +
197    "\uffdc\060\uffdc\061\uffdc\062\053\063\uffdc\064\uffdc\065\uffdc" +
198    "\067\uffdc\071\uffdc\072\uffdc\073\uffdc\074\uffdc\075\uffdc\076" +
199    "\uffdc\077\uffdc\001\002\000\114\002\uffce\004\uffce\005\uffce" +
200    "\011\uffce\014\uffce\016\uffce\020\uffce\025\uffce\026\uffce\027" +
201    "\uffce\031\uffce\033\uffce\035\uffce\036\uffce\041\uffce\042\uffce" +
202    "\045\uffce\046\uffce\047\uffce\050\uffce\052\uffce\055\uffce\057" +
203    "\uffce\060\uffce\061\uffce\062\uffce\063\uffce\064\uffce\065\uffce" +
204    "\067\uffce\071\uffce\072\uffce\073\uffce\074\uffce\075\uffce\076" +
205    "\uffce\077\uffce\001\002\000\122\002\ufffd\004\ufffd\005\ufffd" +
206    "\011\ufffd\014\ufffd\016\ufffd\020\ufffd\025\ufffd\026\ufffd\027" +
207    "\ufffd\031\ufffd\033\ufffd\035\ufffd\036\ufffd\041\ufffd\042\ufffd" +
208    "\045\ufffd\046\ufffd\047\ufffd\050\ufffd\051\ufffd\052\ufffd\055" +
209    "\ufffd\056\ufffd\057\ufffd\060\ufffd\061\ufffd\062\ufffd\063\ufffd" +
210    "\064\ufffd\065\ufffd\067\ufffd\070\ufffd\071\ufffd\072\ufffd\073" +
211    "\ufffd\074\ufffd\075\ufffd\076\ufffd\077\ufffd\001\002\000\122" +
212    "\002\ufffc\004\ufffc\005\ufffc\011\ufffc\014\ufffc\016\ufffc\020" +
213    "\ufffc\025\ufffc\026\ufffc\027\ufffc\031\ufffc\033\ufffc\035\ufffc" +
214    "\036\ufffc\041\ufffc\042\ufffc\045\ufffc\046\ufffc\047\ufffc\050" +
215    "\ufffc\051\ufffc\052\ufffc\055\ufffc\056\ufffc\057\ufffc\060\ufffc" +
216    "\061\ufffc\062\ufffc\063\ufffc\064\ufffc\065\ufffc\067\ufffc\070" +
217    "\ufffc\071\ufffc\072\ufffc\073\ufffc\074\ufffc\075\ufffc\076\ufffc" +
218    "\077\ufffc\001\002\000\122\002\ufffb\004\ufffb\005\ufffb\011" +
219    "\ufffb\014\ufffb\016\ufffb\020\ufffb\025\ufffb\026\ufffb\027\ufffb" +
220    "\031\ufffb\033\ufffb\035\ufffb\036\ufffb\041\ufffb\042\ufffb\045" +
221    "\ufffb\046\ufffb\047\ufffb\050\ufffb\051\ufffb\052\ufffb\055\ufffb" +
222    "\056\ufffb\057\ufffb\060\ufffb\061\ufffb\062\ufffb\063\ufffb\064" +
223    "\ufffb\065\ufffb\067\ufffb\070\ufffb\071\ufffb\072\ufffb\073\ufffb" +
224    "\074\ufffb\075\ufffb\076\ufffb\077\ufffb\001\002\000\014\014" +
225    "\033\041\026\101\023\102\037\103\060\001\002\000\114" +
226    "\002\uffd4\004\uffd4\005\uffd4\011\uffd4\014\uffd4\016\uffd4\020" +
227    "\uffd4\025\uffd4\026\uffd4\027\uffd4\031\uffd4\033\uffd4\035\uffd4" +
228    "\036\uffd4\041\uffd4\042\uffd4\045\uffd4\046\uffd4\047\uffd4\050" +
229    "\uffd4\052\uffd4\055\uffd4\057\uffd4\060\uffd4\061\uffd4\062\uffd4" +
230    "\063\uffd4\064\uffd4\065\uffd4\067\uffd4\071\uffd4\072\uffd4\073" +
231    "\uffd4\074\uffd4\075\uffd4\076\uffd4\077\uffd4\001\002\000\004" +
232    "\070\061\001\002\000\116\002\uffd6\004\uffd6\005\uffd6\011" +
233    "\uffd6\014\uffd6\016\uffd6\020\uffd6\025\uffd6\026\uffd6\027\uffd6" +
234    "\031\uffd6\033\uffd6\035\uffd6\036\uffd6\041\uffd6\042\uffd6\045" +
235    "\uffd6\046\uffd6\047\uffd6\050\uffd6\052\uffd6\055\uffd6\057\uffd6" +
236    "\060\uffd6\061\uffd6\062\uffd6\063\uffd6\064\uffd6\065\uffd6\067" +
237    "\uffd6\070\ufffc\071\uffd6\072\uffd6\073\uffd6\074\uffd6\075\uffd6" +
238    "\076\uffd6\077\uffd6\001\002\000\116\002\uffd5\004\uffd5\005" +
239    "\uffd5\011\uffd5\014\uffd5\016\uffd5\020\uffd5\025\uffd5\026\uffd5" +
240    "\027\uffd5\031\uffd5\033\uffd5\035\uffd5\036\uffd5\041\uffd5\042" +
241    "\uffd5\045\uffd5\046\uffd5\047\uffd5\050\uffd5\052\uffd5\055\uffd5" +
242    "\057\uffd5\060\uffd5\061\uffd5\062\uffd5\063\uffd5\064\uffd5\065" +
243    "\uffd5\067\uffd5\070\ufffb\071\uffd5\072\uffd5\073\uffd5\074\uffd5" +
244    "\075\uffd5\076\uffd5\077\uffd5\001\002\000\114\002\uffff\004" +
245    "\uffff\005\uffff\011\uffff\014\uffff\016\uffff\020\uffff\025\uffff" +
246    "\026\uffff\027\uffff\031\uffff\033\uffff\035\uffff\036\uffff\041" +
247    "\uffff\042\uffff\045\uffff\046\uffff\047\uffff\050\uffff\052\uffff" +
248    "\055\uffff\057\uffff\060\uffff\061\uffff\062\uffff\063\uffff\064" +
249    "\uffff\065\uffff\067\uffff\071\uffff\072\uffff\073\uffff\074\uffff" +
250    "\075\uffff\076\uffff\077\uffff\001\002\000\042\007\044\010" +
251    "\024\014\033\033\020\034\047\041\026\060\uffba\066\022" +
252    "\070\021\072\042\074\015\076\uffb9\100\032\101\023\102" +
253    "\037\104\027\001\002\000\004\076\102\001\002\000\006" +
254    "\075\uffb8\076\uffb8\001\002\000\014\005\070\057\071\060" +
255    "\uffbb\075\uffb7\076\uffb7\001\002\000\004\060\066\001\002" +
256    "\000\040\007\044\010\024\014\033\033\020\034\047\041" +
257    "\026\060\uffba\066\022\070\021\072\042\074\015\100\032" +
258    "\101\023\102\037\104\027\001\002\000\006\075\uffb6\076" +
259    "\uffb6\001\002\000\012\014\033\041\026\101\023\102\037" +
260    "\001\002\000\036\007\044\010\024\014\033\033\020\034" +
261    "\047\041\026\066\022\070\021\072\042\074\015\100\032" +
262    "\101\023\102\037\104\027\001\002\000\042\002\uffbe\005" +
263    "\uffbe\011\uffbe\014\uffbe\031\uffbe\035\uffbe\036\073\041\uffbe" +
264    "\042\uffbe\045\uffbe\046\uffbe\052\074\057\uffbe\060\uffbe\075" +
265    "\uffbe\076\uffbe\001\002\000\036\007\044\010\024\014\033" +
266    "\033\020\034\047\041\026\066\022\070\021\072\042\074" +
267    "\015\100\032\101\023\102\037\104\027\001\002\000\036" +
268    "\007\044\010\024\014\033\033\020\034\047\041\026\066" +
269    "\022\070\021\072\042\074\015\100\032\101\023\102\037" +
270    "\104\027\001\002\000\054\002\ufff1\004\076\005\ufff1\011" +
271    "\ufff1\014\ufff1\016\ufff1\020\ufff1\031\ufff1\035\ufff1\036\ufff1" +
272    "\041\ufff1\042\ufff1\045\ufff1\046\ufff1\047\ufff1\050\ufff1\052" +
273    "\ufff1\057\ufff1\060\ufff1\075\ufff1\076\ufff1\001\002\000\036" +
274    "\007\044\010\024\014\033\033\020\034\047\041\026\066" +
275    "\022\070\021\072\042\074\015\100\032\101\023\102\037" +
276    "\104\027\001\002\000\054\002\uffef\004\uffef\005\uffef\011" +
277    "\uffef\014\uffef\016\uffef\020\uffef\031\uffef\035\uffef\036\uffef" +
278    "\041\uffef\042\uffef\045\uffef\046\uffef\047\uffef\050\uffef\052" +
279    "\uffef\057\uffef\060\uffef\075\uffef\076\uffef\001\002\000\054" +
280    "\002\ufff2\004\076\005\ufff2\011\ufff2\014\ufff2\016\ufff2\020" +
281    "\ufff2\031\ufff2\035\ufff2\036\ufff2\041\ufff2\042\ufff2\045\ufff2" +
282    "\046\ufff2\047\ufff2\050\ufff2\052\ufff2\057\ufff2\060\ufff2\075" +
283    "\ufff2\076\ufff2\001\002\000\036\002\uffb5\005\uffb5\011\uffb5" +
284    "\014\uffb5\031\uffb5\035\uffb5\041\uffb5\042\uffb5\045\uffb5\046" +
285    "\uffb5\057\uffb5\060\uffb5\075\uffb5\076\uffb5\001\002\000\114" +
286    "\002\uffd3\004\uffd3\005\uffd3\011\uffd3\014\uffd3\016\uffd3\020" +
287    "\uffd3\025\uffd3\026\uffd3\027\uffd3\031\uffd3\033\uffd3\035\uffd3" +
288    "\036\uffd3\041\uffd3\042\uffd3\045\uffd3\046\uffd3\047\uffd3\050" +
289    "\uffd3\052\uffd3\055\uffd3\057\uffd3\060\uffd3\061\uffd3\062\uffd3" +
290    "\063\uffd3\064\uffd3\065\uffd3\067\uffd3\071\uffd3\072\uffd3\073" +
291    "\uffd3\074\uffd3\075\uffd3\076\uffd3\077\uffd3\001\002\000\034" +
292    "\007\044\010\024\014\033\034\047\041\026\066\022\070" +
293    "\021\072\042\074\015\100\032\101\023\102\037\104\027" +
294    "\001\002\000\034\007\044\010\024\014\033\034\047\041" +
295    "\026\066\022\070\021\072\042\074\015\100\032\101\023" +
296    "\102\037\104\027\001\002\000\034\007\044\010\024\014" +
297    "\033\034\047\041\026\066\022\070\021\072\042\074\015" +
298    "\100\032\101\023\102\037\104\027\001\002\000\112\002" +
299    "\uffe1\004\uffe1\005\uffe1\011\uffe1\014\uffe1\016\uffe1\020\uffe1" +
300    "\025\uffe1\026\uffe1\027\uffe1\031\uffe1\033\uffe1\035\uffe1\036" +
301    "\uffe1\041\uffe1\042\uffe1\045\uffe1\046\uffe1\047\uffe1\050\uffe1" +
302    "\052\uffe1\055\107\057\uffe1\060\uffe1\061\uffe1\063\uffe1\064" +
303    "\uffe1\065\uffe1\067\uffe1\071\uffe1\072\uffe1\073\uffe1\074\uffe1" +
304    "\075\uffe1\076\uffe1\077\110\001\002\000\034\007\044\010" +
305    "\024\014\033\034\047\041\026\066\022\070\021\072\042" +
306    "\074\015\100\032\101\023\102\037\104\027\001\002\000" +
307    "\034\007\044\010\024\014\033\034\047\041\026\066\022" +
308    "\070\021\072\042\074\015\100\032\101\023\102\037\104" +
309    "\027\001\002\000\112\002\uffdd\004\uffdd\005\uffdd\011\uffdd" +
310    "\014\uffdd\016\uffdd\020\uffdd\025\uffdd\026\uffdd\027\uffdd\031" +
311    "\uffdd\033\uffdd\035\uffdd\036\uffdd\041\uffdd\042\uffdd\045\uffdd" +
312    "\046\uffdd\047\uffdd\050\uffdd\052\uffdd\055\uffdd\057\uffdd\060" +
313    "\uffdd\061\uffdd\063\uffdd\064\uffdd\065\uffdd\067\uffdd\071\uffdd" +
314    "\072\uffdd\073\uffdd\074\uffdd\075\uffdd\076\uffdd\077\uffdd\001" +
315    "\002\000\112\002\uffde\004\uffde\005\uffde\011\uffde\014\uffde" +
316    "\016\uffde\020\uffde\025\uffde\026\uffde\027\uffde\031\uffde\033" +
317    "\uffde\035\uffde\036\uffde\041\uffde\042\uffde\045\uffde\046\uffde" +
318    "\047\uffde\050\uffde\052\uffde\055\uffde\057\uffde\060\uffde\061" +
319    "\uffde\063\uffde\064\uffde\065\uffde\067\uffde\071\uffde\072\uffde" +
320    "\073\uffde\074\uffde\075\uffde\076\uffde\077\uffde\001\002\000" +
321    "\112\002\uffe0\004\uffe0\005\uffe0\011\uffe0\014\uffe0\016\uffe0" +
322    "\020\uffe0\025\uffe0\026\uffe0\027\uffe0\031\uffe0\033\uffe0\035" +
323    "\uffe0\036\uffe0\041\uffe0\042\uffe0\045\uffe0\046\uffe0\047\uffe0" +
324    "\050\uffe0\052\uffe0\055\107\057\uffe0\060\uffe0\061\uffe0\063" +
325    "\uffe0\064\uffe0\065\uffe0\067\uffe0\071\uffe0\072\uffe0\073\uffe0" +
326    "\074\uffe0\075\uffe0\076\uffe0\077\110\001\002\000\112\002" +
327    "\uffe2\004\uffe2\005\uffe2\011\uffe2\014\uffe2\016\uffe2\020\uffe2" +
328    "\025\uffe2\026\uffe2\027\uffe2\031\uffe2\033\uffe2\035\uffe2\036" +
329    "\uffe2\041\uffe2\042\uffe2\045\uffe2\046\uffe2\047\uffe2\050\uffe2" +
330    "\052\uffe2\055\107\057\uffe2\060\uffe2\061\uffe2\063\uffe2\064" +
331    "\uffe2\065\uffe2\067\uffe2\071\uffe2\072\uffe2\073\uffe2\074\uffe2" +
332    "\075\uffe2\076\uffe2\077\110\001\002\000\014\016\uffca\020" +
333    "\uffca\036\073\050\uffca\052\074\001\002\000\010\016\uffc9" +
334    "\020\uffc9\050\uffc9\001\002\000\010\016\121\020\uffc6\050" +
335    "\122\001\002\000\004\020\130\001\002\000\036\007\044" +
336    "\010\024\014\033\033\020\034\047\041\026\066\022\070" +
337    "\021\072\042\074\015\100\032\101\023\102\037\104\027" +
338    "\001\002\000\036\007\044\010\024\014\033\033\020\034" +
339    "\047\041\026\066\022\070\021\072\042\074\015\100\032" +
340    "\101\023\102\037\104\027\001\002\000\010\016\uffc8\020" +
341    "\uffc8\050\uffc8\001\002\000\010\036\073\047\125\052\074" +
342    "\001\002\000\036\007\044\010\024\014\033\033\020\034" +
343    "\047\041\026\066\022\070\021\072\042\074\015\100\032" +
344    "\101\023\102\037\104\027\001\002\000\014\016\uffc7\020" +
345    "\uffc7\036\073\050\uffc7\052\074\001\002\000\010\020\uffc5" +
346    "\036\073\052\074\001\002\000\114\002\uffcc\004\uffcc\005" +
347    "\uffcc\011\uffcc\014\uffcc\016\uffcc\020\uffcc\025\uffcc\026\uffcc" +
348    "\027\uffcc\031\uffcc\033\uffcc\035\uffcc\036\uffcc\041\uffcc\042" +
349    "\uffcc\045\uffcc\046\uffcc\047\uffcc\050\uffcc\052\uffcc\055\uffcc" +
350    "\057\uffcc\060\uffcc\061\uffcc\062\uffcc\063\uffcc\064\uffcc\065" +
351    "\uffcc\067\uffcc\071\uffcc\072\uffcc\073\uffcc\074\uffcc\075\uffcc" +
352    "\076\uffcc\077\uffcc\001\002\000\034\007\044\010\024\014" +
353    "\033\034\047\041\026\066\022\070\021\072\042\074\015" +
354    "\100\032\101\023\102\037\104\027\001\002\000\034\007" +
355    "\044\010\024\014\033\034\047\041\026\066\022\070\021" +
356    "\072\042\074\015\100\032\101\023\102\037\104\027\001" +
357    "\002\000\034\007\uffbf\010\uffbf\014\uffbf\034\uffbf\041\uffbf" +
358    "\066\uffbf\070\uffbf\072\uffbf\074\uffbf\100\uffbf\101\uffbf\102" +
359    "\uffbf\104\uffbf\001\002\000\034\007\uffc4\010\uffc4\014\uffc4" +
360    "\034\uffc4\041\uffc4\066\uffc4\070\uffc4\072\uffc4\074\uffc4\100" +
361    "\uffc4\101\uffc4\102\uffc4\104\uffc4\001\002\000\034\007\uffc0" +
362    "\010\uffc0\014\uffc0\034\uffc0\041\uffc0\066\uffc0\070\uffc0\072" +
363    "\uffc0\074\uffc0\100\uffc0\101\uffc0\102\uffc0\104\uffc0\001\002" +
364    "\000\034\007\uffc1\010\uffc1\014\uffc1\034\uffc1\041\uffc1\066" +
365    "\uffc1\070\uffc1\072\uffc1\074\uffc1\100\uffc1\101\uffc1\102\uffc1" +
366    "\104\uffc1\001\002\000\006\025\150\027\151\001\002\000" +
367    "\034\007\044\010\024\014\033\034\047\041\026\066\022" +
368    "\070\021\072\042\074\015\100\032\101\023\102\037\104" +
369    "\027\001\002\000\034\007\uffc3\010\uffc3\014\uffc3\034\uffc3" +
370    "\041\uffc3\066\uffc3\070\uffc3\072\uffc3\074\uffc3\100\uffc3\101" +
371    "\uffc3\102\uffc3\104\uffc3\001\002\000\034\007\uffc2\010\uffc2" +
372    "\014\uffc2\034\uffc2\041\uffc2\066\uffc2\070\uffc2\072\uffc2\074" +
373    "\uffc2\100\uffc2\101\uffc2\102\uffc2\104\uffc2\001\002\000\036" +
374    "\007\044\010\024\014\033\017\146\034\145\041\026\066" +
375    "\022\070\021\072\042\074\015\100\032\101\023\102\037" +
376    "\104\027\001\002\000\106\002\uffe9\004\uffe9\005\uffe9\011" +
377    "\uffe9\014\uffe9\016\uffe9\020\uffe9\025\uffe9\026\uffe9\027\uffe9" +
378    "\031\uffe9\033\uffe9\035\uffe9\036\uffe9\041\uffe9\042\uffe9\045" +
379    "\uffe9\046\uffe9\047\uffe9\050\uffe9\052\uffe9\057\uffe9\060\uffe9" +
380    "\061\104\063\uffe9\064\uffe9\065\uffe9\067\uffe9\071\uffe9\072" +
381    "\105\073\uffe9\074\103\075\uffe9\076\uffe9\001\002\000\114" +
382    "\002\uffea\004\uffea\005\uffea\011\uffea\014\uffea\016\uffea\020" +
383    "\uffea\025\uffea\026\uffea\027\uffea\031\uffea\033\uffea\035\uffea" +
384    "\036\uffea\041\uffea\042\uffea\045\uffea\046\uffea\047\uffea\050" +
385    "\uffea\052\uffea\055\uffce\057\uffea\060\uffea\061\uffce\062\uffce" +
386    "\063\uffea\064\uffea\065\uffea\067\uffea\071\uffea\072\uffce\073" +
387    "\uffea\074\uffce\075\uffea\076\uffea\077\uffce\001\002\000\100" +
388    "\002\uffe8\004\uffe8\005\uffe8\011\uffe8\014\uffe8\016\uffe8\020" +
389    "\uffe8\025\uffe8\026\uffe8\027\uffe8\031\uffe8\033\uffe8\035\uffe8" +
390    "\036\uffe8\041\uffe8\042\uffe8\045\uffe8\046\uffe8\047\uffe8\050" +
391    "\uffe8\052\uffe8\057\uffe8\060\uffe8\063\uffe8\064\uffe8\065\uffe8" +
392    "\067\uffe8\071\uffe8\073\uffe8\075\uffe8\076\uffe8\001\002\000" +
393    "\106\002\uffe7\004\uffe7\005\uffe7\011\uffe7\014\uffe7\016\uffe7" +
394    "\020\uffe7\025\uffe7\026\uffe7\027\uffe7\031\uffe7\033\uffe7\035" +
395    "\uffe7\036\uffe7\041\uffe7\042\uffe7\045\uffe7\046\uffe7\047\uffe7" +
396    "\050\uffe7\052\uffe7\057\uffe7\060\uffe7\061\104\063\uffe7\064" +
397    "\uffe7\065\uffe7\067\uffe7\071\uffe7\072\105\073\uffe7\074\103" +
398    "\075\uffe7\076\uffe7\001\002\000\034\007\044\010\024\014" +
399    "\033\034\047\041\026\066\022\070\021\072\042\074\015" +
400    "\100\032\101\023\102\037\104\027\001\002\000\034\007" +
401    "\044\010\024\014\033\034\047\041\026\066\022\070\021" +
402    "\072\042\074\015\100\032\101\023\102\037\104\027\001" +
403    "\002\000\106\002\uffe6\004\uffe6\005\uffe6\011\uffe6\014\uffe6" +
404    "\016\uffe6\020\uffe6\025\uffe6\026\uffe6\027\uffe6\031\uffe6\033" +
405    "\uffe6\035\uffe6\036\uffe6\041\uffe6\042\uffe6\045\uffe6\046\uffe6" +
406    "\047\uffe6\050\uffe6\052\uffe6\057\uffe6\060\uffe6\061\104\063" +
407    "\uffe6\064\uffe6\065\uffe6\067\uffe6\071\uffe6\072\105\073\uffe6" +
408    "\074\103\075\uffe6\076\uffe6\001\002\000\106\002\uffe4\004" +
409    "\uffe4\005\uffe4\011\uffe4\014\uffe4\016\uffe4\020\uffe4\025\uffe4" +
410    "\026\uffe4\027\uffe4\031\uffe4\033\uffe4\035\uffe4\036\uffe4\041" +
411    "\uffe4\042\uffe4\045\uffe4\046\uffe4\047\uffe4\050\uffe4\052\uffe4" +
412    "\057\uffe4\060\uffe4\061\104\063\uffe4\064\uffe4\065\uffe4\067" +
413    "\uffe4\071\uffe4\072\105\073\uffe4\074\103\075\uffe4\076\uffe4" +
414    "\001\002\000\106\002\uffeb\004\uffeb\005\uffeb\011\uffeb\014" +
415    "\uffeb\016\uffeb\020\uffeb\025\uffeb\026\uffeb\027\uffeb\031\uffeb" +
416    "\033\uffeb\035\uffeb\036\uffeb\041\uffeb\042\uffeb\045\uffeb\046" +
417    "\uffeb\047\uffeb\050\uffeb\052\uffeb\057\uffeb\060\uffeb\061\104" +
418    "\063\uffeb\064\uffeb\065\uffeb\067\uffeb\071\uffeb\072\105\073" +
419    "\uffeb\074\103\075\uffeb\076\uffeb\001\002\000\106\002\uffe5" +
420    "\004\uffe5\005\uffe5\011\uffe5\014\uffe5\016\uffe5\020\uffe5\025" +
421    "\uffe5\026\uffe5\027\uffe5\031\uffe5\033\uffe5\035\uffe5\036\uffe5" +
422    "\041\uffe5\042\uffe5\045\uffe5\046\uffe5\047\uffe5\050\uffe5\052" +
423    "\uffe5\057\uffe5\060\uffe5\061\104\063\uffe5\064\uffe5\065\uffe5" +
424    "\067\uffe5\071\uffe5\072\105\073\uffe5\074\103\075\uffe5\076" +
425    "\uffe5\001\002\000\114\002\uffda\004\uffda\005\uffda\011\uffda" +
426    "\014\uffda\016\uffda\020\uffda\025\uffda\026\uffda\027\uffda\031" +
427    "\uffda\033\uffda\035\uffda\036\uffda\041\uffda\042\uffda\045\uffda" +
428    "\046\uffda\047\uffda\050\uffda\052\uffda\055\uffda\057\uffda\060" +
429    "\uffda\061\uffda\062\053\063\uffda\064\uffda\065\uffda\067\uffda" +
430    "\071\uffda\072\uffda\073\uffda\074\uffda\075\uffda\076\uffda\077" +
431    "\uffda\001\002\000\012\014\033\041\026\101\023\102\037" +
432    "\001\002\000\042\007\044\010\024\014\033\033\020\034" +
433    "\047\041\026\060\uffba\066\022\070\021\072\042\074\015" +
434    "\076\uffb9\100\032\101\023\102\037\104\027\001\002\000" +
435    "\004\076\162\001\002\000\114\002\uffd2\004\uffd2\005\uffd2" +
436    "\011\uffd2\014\uffd2\016\uffd2\020\uffd2\025\uffd2\026\uffd2\027" +
437    "\uffd2\031\uffd2\033\uffd2\035\uffd2\036\uffd2\041\uffd2\042\uffd2" +
438    "\045\uffd2\046\uffd2\047\uffd2\050\uffd2\052\uffd2\055\uffd2\057" +
439    "\uffd2\060\uffd2\061\uffd2\062\uffd2\063\uffd2\064\uffd2\065\uffd2" +
440    "\067\uffd2\071\uffd2\072\uffd2\073\uffd2\074\uffd2\075\uffd2\076" +
441    "\uffd2\077\uffd2\001\002\000\006\056\ufff5\070\ufff5\001\002" +
442    "\000\036\007\044\010\024\014\033\033\020\034\047\041" +
443    "\026\066\022\070\021\072\042\074\015\100\032\101\023" +
444    "\102\037\104\027\001\002\000\006\005\070\057\071\001" +
445    "\002\000\010\005\uffbd\057\uffbd\076\167\001\002\000\114" +
446    "\002\uffd1\004\uffd1\005\uffd1\011\uffd1\014\uffd1\016\uffd1\020" +
447    "\uffd1\025\uffd1\026\uffd1\027\uffd1\031\uffd1\033\uffd1\035\uffd1" +
448    "\036\uffd1\041\uffd1\042\uffd1\045\uffd1\046\uffd1\047\uffd1\050" +
449    "\uffd1\052\uffd1\055\uffd1\057\uffd1\060\uffd1\061\uffd1\062\uffd1" +
450    "\063\uffd1\064\uffd1\065\uffd1\067\uffd1\071\uffd1\072\uffd1\073" +
451    "\uffd1\074\uffd1\075\uffd1\076\uffd1\077\uffd1\001\002\000\004" +
452    "\075\171\001\002\000\114\002\uffcf\004\uffcf\005\uffcf\011" +
453    "\uffcf\014\uffcf\016\uffcf\020\uffcf\025\uffcf\026\uffcf\027\uffcf" +
454    "\031\uffcf\033\uffcf\035\uffcf\036\uffcf\041\uffcf\042\uffcf\045" +
455    "\uffcf\046\uffcf\047\uffcf\050\uffcf\052\uffcf\055\uffcf\057\uffcf" +
456    "\060\uffcf\061\uffcf\062\uffcf\063\uffcf\064\uffcf\065\uffcf\067" +
457    "\uffcf\071\uffcf\072\uffcf\073\uffcf\074\uffcf\075\uffcf\076\uffcf" +
458    "\077\uffcf\001\002\000\004\076\173\001\002\000\114\002" +
459    "\uffd0\004\uffd0\005\uffd0\011\uffd0\014\uffd0\016\uffd0\020\uffd0" +
460    "\025\uffd0\026\uffd0\027\uffd0\031\uffd0\033\uffd0\035\uffd0\036" +
461    "\uffd0\041\uffd0\042\uffd0\045\uffd0\046\uffd0\047\uffd0\050\uffd0" +
462    "\052\uffd0\055\uffd0\057\uffd0\060\uffd0\061\uffd0\062\uffd0\063" +
463    "\uffd0\064\uffd0\065\uffd0\067\uffd0\071\uffd0\072\uffd0\073\uffd0" +
464    "\074\uffd0\075\uffd0\076\uffd0\077\uffd0\001\002\000\054\002" +
465    "\uffed\004\uffed\005\uffed\011\uffed\014\uffed\016\uffed\020\uffed" +
466    "\031\uffed\035\uffed\036\uffed\041\uffed\042\uffed\045\uffed\046" +
467    "\uffed\047\uffed\050\uffed\052\uffed\057\uffed\060\uffed\075\uffed" +
468    "\076\uffed\001\002\000\114\002\uffdb\004\uffdb\005\uffdb\011" +
469    "\uffdb\014\uffdb\016\uffdb\020\uffdb\025\uffdb\026\uffdb\027\uffdb" +
470    "\031\uffdb\033\uffdb\035\uffdb\036\uffdb\041\uffdb\042\uffdb\045" +
471    "\uffdb\046\uffdb\047\uffdb\050\uffdb\052\uffdb\055\uffdb\057\uffdb" +
472    "\060\uffdb\061\uffdb\062\053\063\uffdb\064\uffdb\065\uffdb\067" +
473    "\uffdb\071\uffdb\072\uffdb\073\uffdb\074\uffdb\075\uffdb\076\uffdb" +
474    "\077\uffdb\001\002\000\004\023\177\001\002\000\010\015" +
475    "\005\045\uffaf\053\010\001\002\000\004\002\uff71\001\002" +
476    "\000\004\002\uff70\001\002\000\004\002\uff6f\001\002\000" +
477    "\004\045\uffae\001\002\000\010\031\uffa3\045\uffa3\046\uffa3" +
478    "\001\002\000\010\031\210\045\uffa5\046\206\001\002\000" +
479    "\012\014\033\041\026\101\023\102\037\001\002\000\010" +
480    "\031\uffa2\045\uffa2\046\uffa2\001\002\000\012\014\033\041" +
481    "\026\101\023\102\037\001\002\000\004\005\216\001\002" +
482    "\000\024\002\ufff8\005\ufff8\011\ufff8\035\ufff8\041\ufff8\042" +
483    "\ufff8\051\ufff8\060\ufff8\062\ufff8\001\002\000\006\005\uff9b" +
484    "\062\214\001\002\000\012\014\033\041\026\101\023\102" +
485    "\037\001\002\000\024\002\ufff7\005\ufff7\011\ufff7\035\ufff7" +
486    "\041\ufff7\042\ufff7\051\ufff7\060\ufff7\062\ufff7\001\002\000" +
487    "\040\007\044\010\024\014\033\033\020\034\047\041\026" +
488    "\066\022\070\021\072\042\074\015\100\032\101\023\102" +
489    "\037\104\027\105\220\001\002\000\016\031\uff9f\036\073" +
490    "\045\uff9f\046\uff9f\052\074\060\221\001\002\000\012\031" +
491    "\uff9f\045\uff9f\046\uff9f\060\221\001\002\000\012\014\033" +
492    "\041\026\101\023\102\037\001\002\000\010\031\uffa1\045" +
493    "\uffa1\046\uffa1\001\002\000\010\031\uff9e\045\uff9e\046\uff9e" +
494    "\001\002\000\012\031\uff9d\045\uff9d\046\uff9d\060\230\001" +
495    "\002\000\004\063\226\001\002\000\036\007\044\010\024" +
496    "\014\033\033\020\034\047\041\026\066\022\070\021\072" +
497    "\042\074\015\100\032\101\023\102\037\104\027\001\002" +
498    "\000\016\031\uff9a\036\073\045\uff9a\046\uff9a\052\074\060" +
499    "\uff9a\001\002\000\012\014\033\041\026\101\023\102\037" +
500    "\001\002\000\010\031\uff9c\045\uff9c\046\uff9c\001\002\000" +
501    "\010\031\uffa0\045\uffa0\046\uffa0\001\002\000\004\005\235" +
502    "\001\002\000\006\005\uff97\062\214\001\002\000\040\007" +
503    "\044\010\024\014\033\033\020\034\047\041\026\066\022" +
504    "\070\021\072\042\074\015\100\032\101\023\102\037\104" +
505    "\027\105\237\001\002\000\014\005\070\031\uff98\045\uff98" +
506    "\046\uff98\057\071\001\002\000\010\031\uff99\045\uff99\046" +
507    "\uff99\001\002\000\004\045\uffa4\001\002\000\042\007\uff94" +
508    "\010\uff94\014\uff94\024\uffad\032\245\033\uff94\034\uff94\041" +
509    "\uff94\066\uff94\070\uff94\072\uff94\074\uff94\100\uff94\101\uff94" +
510    "\102\uff94\104\uff94\001\002\000\004\024\302\001\002\000" +
511    "\036\007\044\010\024\014\033\033\020\034\047\041\026" +
512    "\066\022\070\021\072\042\074\015\100\032\101\023\102" +
513    "\037\104\027\001\002\000\006\024\uffab\060\250\001\002" +
514    "\000\004\017\247\001\002\000\004\024\uffac\001\002\000" +
515    "\036\007\uff93\010\uff93\014\uff93\033\uff93\034\uff93\041\uff93" +
516    "\066\uff93\070\uff93\072\uff93\074\uff93\100\uff93\101\uff93\102" +
517    "\uff93\104\uff93\001\002\000\040\007\uff94\010\uff94\014\uff94" +
518    "\032\245\033\uff94\034\uff94\041\uff94\066\uff94\070\uff94\072" +
519    "\uff94\074\uff94\100\uff94\101\uff94\102\uff94\104\uff94\001\002" +
520    "\000\004\024\uffaa\001\002\000\014\005\070\014\254\035" +
521    "\uff92\041\uff88\057\071\001\002\000\004\035\uff91\001\002" +
522    "\000\004\041\uff87\001\002\000\004\035\265\001\002\000" +
523    "\004\041\257\001\002\000\012\014\033\041\026\101\023" +
524    "\102\037\001\002\000\004\035\uff89\001\002\000\006\035" +
525    "\uff86\060\263\001\002\000\010\035\uff84\060\uff84\062\214" +
526    "\001\002\000\012\014\033\041\026\101\023\102\037\001" +
527    "\002\000\004\035\uff85\001\002\000\020\006\270\012\267" +
528    "\013\274\037\275\043\276\044\266\100\271\001\002\000" +
529    "\006\024\uff8d\060\uff8d\001\002\000\006\024\uff8c\060\uff8c" +
530    "\001\002\000\004\070\277\001\002\000\006\024\uff8b\060" +
531    "\uff8b\001\002\000\006\024\uff96\060\uff96\001\002\000\006" +
532    "\024\uff95\060\uff95\001\002\000\006\024\uff90\060\uff90\001" +
533    "\002\000\006\024\uff8e\060\uff8e\001\002\000\006\024\uff8f" +
534    "\060\uff8f\001\002\000\004\100\300\001\002\000\004\076" +
535    "\301\001\002\000\006\024\uff8a\060\uff8a\001\002\000\012" +
536    "\014\033\041\026\101\023\102\037\001\002\000\014\002" +
537    "\uff83\011\uff83\041\uff83\042\uff83\051\uff83\001\002\000\016" +
538    "\002\ufff4\011\ufff4\041\ufff4\042\ufff4\051\ufff4\062\214\001" +
539    "\002\000\014\002\uffa9\011\uffa9\041\uffa9\042\uffa9\051\306" +
540    "\001\002\000\036\007\044\010\024\014\033\033\020\034" +
541    "\047\041\026\066\022\070\021\072\042\074\015\100\032" +
542    "\101\023\102\037\104\027\001\002\000\012\002\uffa7\011" +
543    "\313\041\uff80\042\uffa7\001\002\000\006\002\uffa6\042\uffa6" +
544    "\001\002\000\004\041\314\001\002\000\006\002\uffb0\042" +
545    "\uffb0\001\002\000\004\041\uff7f\001\002\000\012\014\033" +
546    "\041\026\101\023\102\037\001\002\000\010\002\uff7e\042" +
547    "\uff7e\060\320\001\002\000\006\002\uff81\042\uff81\001\002" +
548    "\000\012\002\uff7c\042\uff7c\060\uff7c\062\214\001\002\000" +
549    "\012\014\033\041\026\101\023\102\037\001\002\000\006" +
550    "\002\uff7d\042\uff7d\001\002\000\012\002\uffa8\011\uffa8\041" +
551    "\uffa8\042\uffa8\001\002\000\016\002\uff82\005\070\011\uff82" +
552    "\041\uff82\042\uff82\057\071\001\002\000\004\002\001\001" +
553    "\002\000\004\100\342\001\002\000\010\022\330\045\uff77" +
554    "\053\uff77\001\002\000\006\045\uffaf\053\010\001\002\000" +
555    "\004\100\331\001\002\000\006\045\uff78\053\uff78\001\002" +
556    "\000\006\002\uff75\042\333\001\002\000\012\014\033\041" +
557    "\026\101\023\102\037\001\002\000\004\002\uff7b\001\002" +
558    "\000\006\002\uff74\060\340\001\002\000\004\002\uff76\001" +
559    "\002\000\010\002\uff72\060\uff72\062\214\001\002\000\012" +
560    "\014\033\041\026\101\023\102\037\001\002\000\004\002" +
561    "\uff73\001\002\000\010\022\uff7a\045\uff7a\053\uff7a\001\002" +
562    "" });
563
564  /** Access to parse-action table. */
565  public short[][] action_table() {return _action_table;}
566
567  /** <code>reduce_goto</code> table. */
568  protected static final short[][] _reduce_table = 
569    unpackFromStrings(new String[] {
570    "\000\340\000\014\025\003\026\005\030\010\031\012\100" +
571    "\006\001\001\000\002\001\001\000\004\103\325\001\001" +
572    "\000\002\001\001\000\002\001\001\000\012\050\203\051" +
573    "\206\052\204\071\202\001\001\000\002\001\001\000\002" +
574    "\001\001\000\002\001\001\000\042\004\034\005\016\007" +
575    "\027\011\033\013\035\014\044\015\042\016\040\017\037" +
576    "\021\030\023\045\032\024\043\047\044\015\045\051\046" +
577    "\050\001\001\000\020\005\016\023\174\032\024\043\047" +
578    "\044\015\045\051\046\050\001\001\000\002\001\001\000" +
579    "\002\001\001\000\032\005\016\011\033\013\035\014\044" +
580    "\015\042\016\173\023\045\032\024\043\047\044\015\045" +
581    "\051\046\050\001\001\000\046\004\034\005\016\007\063" +
582    "\010\064\011\033\013\035\014\044\015\042\016\040\017" +
583    "\037\021\030\023\045\032\024\043\047\044\015\045\051" +
584    "\046\050\067\171\001\001\000\050\004\034\005\016\007" +
585    "\063\010\064\011\033\013\035\014\044\015\042\016\040" +
586    "\017\037\021\030\023\045\032\024\043\047\044\015\045" +
587    "\051\046\050\067\062\070\167\001\001\000\002\001\001" +
588    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
589    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
590    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
591    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
592    "\000\002\001\001\000\020\005\016\023\155\032\024\043" +
593    "\047\044\015\045\051\046\050\001\001\000\004\042\131" +
594    "\001\001\000\040\005\016\011\033\013\035\014\044\015" +
595    "\042\016\040\017\037\021\114\022\115\023\045\032\024" +
596    "\043\047\044\015\045\051\046\050\001\001\000\002\001" +
597    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
598    "\000\002\001\001\000\002\001\001\000\014\043\047\044" +
599    "\054\045\056\046\055\047\053\001\001\000\002\001\001" +
600    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
601    "\002\001\001\000\050\004\034\005\016\007\063\010\064" +
602    "\011\033\013\035\014\044\015\042\016\040\017\037\021" +
603    "\030\023\045\032\024\043\047\044\015\045\051\046\050" +
604    "\067\062\070\061\001\001\000\002\001\001\000\002\001" +
605    "\001\000\002\001\001\000\002\001\001\000\046\004\034" +
606    "\005\016\007\063\010\064\011\033\013\035\014\044\015" +
607    "\042\016\040\017\037\021\030\023\045\032\024\043\047" +
608    "\044\015\045\051\046\050\067\066\001\001\000\002\001" +
609    "\001\000\012\043\047\044\100\045\051\046\050\001\001" +
610    "\000\036\005\016\011\033\013\035\014\044\015\042\016" +
611    "\040\017\037\021\071\023\045\032\024\043\047\044\015" +
612    "\045\051\046\050\001\001\000\002\001\001\000\034\005" +
613    "\016\011\033\013\035\014\044\015\042\016\040\017\077" +
614    "\023\045\032\024\043\047\044\015\045\051\046\050\001" +
615    "\001\000\034\005\016\011\033\013\035\014\044\015\042" +
616    "\016\040\017\074\023\045\032\024\043\047\044\015\045" +
617    "\051\046\050\001\001\000\002\001\001\000\032\005\016" +
618    "\011\033\013\035\014\044\015\042\016\076\023\045\032" +
619    "\024\043\047\044\015\045\051\046\050\001\001\000\002" +
620    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
621    "\001\000\024\005\016\011\033\013\113\023\045\032\024" +
622    "\043\047\044\015\045\051\046\050\001\001\000\024\005" +
623    "\016\011\033\013\112\023\045\032\024\043\047\044\015" +
624    "\045\051\046\050\001\001\000\024\005\016\011\033\013" +
625    "\105\023\045\032\024\043\047\044\015\045\051\046\050" +
626    "\001\001\000\002\001\001\000\022\005\016\011\111\023" +
627    "\045\032\024\043\047\044\015\045\051\046\050\001\001" +
628    "\000\022\005\016\011\110\023\045\032\024\043\047\044" +
629    "\015\045\051\046\050\001\001\000\002\001\001\000\002" +
630    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
631    "\001\000\004\077\116\001\001\000\006\006\117\101\122" +
632    "\001\001\000\002\001\001\000\036\005\016\011\033\013" +
633    "\035\014\044\015\042\016\040\017\037\021\126\023\045" +
634    "\032\024\043\047\044\015\045\051\046\050\001\001\000" +
635    "\036\005\016\011\033\013\035\014\044\015\042\016\040" +
636    "\017\037\021\123\023\045\032\024\043\047\044\015\045" +
637    "\051\046\050\001\001\000\002\001\001\000\002\001\001" +
638    "\000\036\005\016\011\033\013\035\014\044\015\042\016" +
639    "\040\017\037\021\125\023\045\032\024\043\047\044\015" +
640    "\045\051\046\050\001\001\000\002\001\001\000\002\001" +
641    "\001\000\002\001\001\000\026\005\016\011\033\013\035" +
642    "\014\154\023\045\032\024\043\047\044\015\045\051\046" +
643    "\050\001\001\000\026\005\016\011\033\013\035\014\153" +
644    "\023\045\032\024\043\047\044\015\045\051\046\050\001" +
645    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
646    "\000\002\001\001\000\002\001\001\000\026\005\016\011" +
647    "\033\013\035\014\146\023\045\032\024\043\047\044\015" +
648    "\045\051\046\050\001\001\000\002\001\001\000\002\001" +
649    "\001\000\026\005\016\011\033\013\035\014\143\023\045" +
650    "\032\024\043\047\044\015\045\051\046\050\001\001\000" +
651    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
652    "\001\001\000\026\005\016\011\033\013\035\014\152\023" +
653    "\045\032\024\043\047\044\015\045\051\046\050\001\001" +
654    "\000\026\005\016\011\033\013\035\014\151\023\045\032" +
655    "\024\043\047\044\015\045\051\046\050\001\001\000\002" +
656    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
657    "\001\000\002\001\001\000\012\043\047\044\162\045\051" +
658    "\046\050\001\001\000\050\004\034\005\016\007\063\010" +
659    "\064\011\033\013\035\014\044\015\042\016\040\017\037" +
660    "\021\030\023\045\032\024\043\047\044\015\045\051\046" +
661    "\050\067\062\070\160\001\001\000\002\001\001\000\002" +
662    "\001\001\000\002\001\001\000\042\004\165\005\016\007" +
663    "\164\011\033\013\035\014\044\015\042\016\040\017\037" +
664    "\021\030\023\045\032\024\043\047\044\015\045\051\046" +
665    "\050\001\001\000\002\001\001\000\002\001\001\000\002" +
666    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
667    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
668    "\000\002\001\001\000\012\025\177\027\201\030\200\100" +
669    "\006\001\001\000\002\001\001\000\002\001\001\000\002" +
670    "\001\001\000\002\001\001\000\002\001\001\000\012\050" +
671    "\203\051\206\052\204\071\237\001\001\000\016\034\233" +
672    "\040\232\043\047\044\211\045\051\046\050\001\001\000" +
673    "\002\001\001\000\016\034\212\037\210\043\047\044\211" +
674    "\045\051\046\050\001\001\000\002\001\001\000\002\001" +
675    "\001\000\002\001\001\000\012\043\047\044\214\045\051" +
676    "\046\050\001\001\000\002\001\001\000\036\005\016\011" +
677    "\033\013\035\014\044\015\042\016\040\017\037\021\216" +
678    "\023\045\032\024\043\047\044\015\045\051\046\050\001" +
679    "\001\000\004\064\231\001\001\000\004\064\221\001\001" +
680    "\000\016\043\047\044\224\045\051\046\050\053\223\072" +
681    "\222\001\001\000\002\001\001\000\002\001\001\000\002" +
682    "\001\001\000\002\001\001\000\036\005\016\011\033\013" +
683    "\035\014\044\015\042\016\040\017\037\021\226\023\045" +
684    "\032\024\043\047\044\015\045\051\046\050\001\001\000" +
685    "\002\001\001\000\016\043\047\044\224\045\051\046\050" +
686    "\053\223\072\230\001\001\000\002\001\001\000\002\001" +
687    "\001\000\002\001\001\000\002\001\001\000\042\004\034" +
688    "\005\016\007\235\011\033\013\035\014\044\015\042\016" +
689    "\040\017\037\021\030\023\045\032\024\043\047\044\015" +
690    "\045\051\046\050\001\001\000\002\001\001\000\002\001" +
691    "\001\000\002\001\001\000\012\003\243\057\242\060\245" +
692    "\061\241\001\001\000\002\001\001\000\042\004\034\005" +
693    "\016\007\251\011\033\013\035\014\044\015\042\016\040" +
694    "\017\037\021\030\023\045\032\024\043\047\044\015\045" +
695    "\051\046\050\001\001\000\002\001\001\000\002\001\001" +
696    "\000\002\001\001\000\002\001\001\000\010\003\243\057" +
697    "\242\060\250\001\001\000\002\001\001\000\010\055\255" +
698    "\065\252\066\254\001\001\000\002\001\001\000\002\001" +
699    "\001\000\002\001\001\000\002\001\001\000\020\034\261" +
700    "\043\047\044\211\045\051\046\050\056\260\073\257\001" +
701    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
702    "\000\020\034\261\043\047\044\211\045\051\046\050\056" +
703    "\260\073\263\001\001\000\002\001\001\000\006\041\271" +
704    "\102\272\001\001\000\002\001\001\000\002\001\001\000" +
705    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
706    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
707    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
708    "\000\020\034\303\035\302\036\304\043\047\044\211\045" +
709    "\051\046\050\001\001\000\002\001\001\000\002\001\001" +
710    "\000\004\024\306\001\001\000\044\004\034\005\016\007" +
711    "\322\011\033\012\321\013\035\014\044\015\042\016\040" +
712    "\017\037\021\030\023\045\032\024\043\047\044\015\045" +
713    "\051\046\050\001\001\000\010\054\310\062\307\063\311" +
714    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
715    "\001\000\002\001\001\000\020\033\314\034\316\043\047" +
716    "\044\211\045\051\046\050\074\315\001\001\000\002\001" +
717    "\001\000\002\001\001\000\002\001\001\000\020\033\314" +
718    "\034\316\043\047\044\211\045\051\046\050\074\320\001" +
719    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
720    "\000\002\001\001\000\002\001\001\000\004\104\326\001" +
721    "\001\000\006\025\331\100\006\001\001\000\002\001\001" +
722    "\000\002\001\001\000\004\075\333\001\001\000\020\020" +
723    "\334\034\336\043\047\044\211\045\051\046\050\076\335" +
724    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
725    "\001\000\002\001\001\000\020\020\334\034\336\043\047" +
726    "\044\211\045\051\046\050\076\340\001\001\000\002\001" +
727    "\001\000\002\001\001" });
728
729  /** Access to <code>reduce_goto</code> table. */
730  public short[][] reduce_table() {return _reduce_table;}
731
732  /** Instance of action encapsulation class. */
733  protected CUP$Parser$actions action_obj;
734
735  /** Action encapsulation object initializer. */
736  protected void init_actions()
737    {
738      action_obj = new CUP$Parser$actions(this);
739    }
740
741  /** Invoke a user supplied parse action. */
742  public java_cup.runtime.Symbol do_action(
743    int                        act_num,
744    java_cup.runtime.lr_parser parser,
745    java.util.Stack            stack,
746    int                        top)
747    throws java.lang.Exception
748  {
749    /* call code in generated class */
750    return action_obj.CUP$Parser$do_action(act_num, parser, stack, top);
751  }
752
753  /** Indicates start state. */
754  public int start_state() {return 0;}
755  /** Indicates start production. */
756  public int start_production() {return 0;}
757
758  /** <code>EOF</code> Symbol index. */
759  public int EOF_sym() {return 0;}
760
761  /** <code>error</code> Symbol index. */
762  public int error_sym() {return 1;}
763
764
765  /** User initialization code. */
766  public void user_init() throws java.lang.Exception
767    {
768
769    scanner.init();
770
771    }
772
773  /** Scan to get the next Symbol. */
774  public java_cup.runtime.Symbol scan()
775    throws java.lang.Exception
776    {
777
778    return scanner.next_token();
779
780    }
781
782
783    // Generated from Parser.cup.
784    private Scanner scanner;
785    private String queryString;
786    Statement statement;
787    private FunTable funTable;
788    boolean strictValidation;
789    MdxParserValidator.QueryPartFactory factory;
790
791    /**
792      * Recursively parses an expression.
793      */
794    Exp recursivelyParseExp(String s)
795    {
796        return new Parser().parseExpression(
797            factory, statement, s, false, funTable);
798    }
799
800    /**
801      * Parses a string to create a {@link Query}.
802      * Called only by {@link ConnectionBase#parseQuery}.
803      */
804    public QueryPart parseInternal(
805        MdxParserValidator.QueryPartFactory factory,
806        Statement statement,
807        String queryString,
808        boolean debug,
809        FunTable funTable,
810        boolean strictValidation)
811    {
812        Symbol parse_tree;
813        this.factory = factory;
814        this.scanner = new StringScanner(queryString, debug);
815        this.statement = statement;
816        this.queryString = queryString;
817        this.funTable = funTable;
818        this.strictValidation = strictValidation;
819        try {
820            if (debug) {
821                parse_tree = debug_parse();
822            } else {
823                parse_tree = parse();
824            }
825            return (QueryPart) parse_tree.value;
826        } catch (Exception e) {
827            // "Error while parsing MDX statement '%1'"
828            throw MondrianResource.instance().WhileParsingMdx.ex(
829                queryString, e);
830        } finally {
831            this.scanner = null;
832            this.statement = null;
833            this.queryString = null;
834            this.funTable = null;
835        }
836    }
837
838    /**
839      * Parses a string to create an {@link Exp}.
840      * Called only by {@link ConnectionBase#parseExpression}.
841      */
842    public Exp parseExpression(
843        MdxParserValidator.QueryPartFactory factory,
844        Statement statement,
845        String queryString,
846        boolean debug,
847        FunTable funTable)
848    {
849        this.factory = factory;
850        Symbol parse_tree = null;
851        this.scanner = new PrefixScanner(
852            debug,
853            new StringScanner(queryString, debug),
854            new int[] {ParserSym._VALUE_EXPRESSION});
855        this.statement = statement;
856        this.queryString = queryString;
857        this.funTable = funTable;
858        try {
859            if (debug) {
860                parse_tree = debug_parse();
861            } else {
862                parse_tree = parse();
863            }
864            return (Exp) parse_tree.value;
865        } catch (Exception e) {
866            // "Syntax error while parsing MDX expression '%1'"
867            throw MondrianResource.instance().WhileParsingMdxExpression.ex(
868                queryString, e);
869        } finally {
870            this.scanner = null;
871            this.statement = null;
872            this.queryString = null;
873            this.funTable = null;
874        }
875    }
876
877    /**
878      * Scanner which returns a list of pre-programmed tokens, then switches
879      * to a parent scanner.
880      */
881    private static class PrefixScanner extends Scanner {
882        private final Scanner parent;
883        private final int tokens[];
884        private int i;
885
886        PrefixScanner(boolean debug, Scanner parent, int[] tokens) {
887            super(debug);
888            this.parent = parent;
889            this.tokens = tokens;
890        }
891
892        public void init() throws java.io.IOException {
893            i = 0;
894            parent.init();
895        }
896
897        public Symbol next_token() throws java.io.IOException {
898            if (i < tokens.length) {
899                return new Symbol(tokens[i++], 0, 0, null);
900            }
901            return parent.next_token();
902        }
903
904        void getLocation(Symbol symbol, int[] loc) {
905            parent.getLocation(symbol, loc);
906        }
907    }
908
909    public static class FactoryImpl
910        implements MdxParserValidator.QueryPartFactory
911    {
912        public Query makeQuery(
913            Statement statement,
914            Formula[] formulae,
915            QueryAxis[] axes,
916            String cube,
917            Exp slicer,
918            QueryPart[] cellProps,
919            boolean strictValidation)
920        {
921            final QueryAxis slicerAxis =
922                slicer == null
923                    ? null
924                    : new QueryAxis(
925                        false, slicer, AxisOrdinal.StandardAxisOrdinal.SLICER,
926                        QueryAxis.SubtotalVisibility.Undefined, new Id[0]);
927            return new Query(
928                statement, formulae, axes, cube, slicerAxis, cellProps,
929                strictValidation);
930        }
931
932        public DrillThrough makeDrillThrough(
933            Query query,
934            int maxRowCount,
935            int firstRowOrdinal,
936            List<Exp> returnList)
937        {
938            return new DrillThrough(
939                query, maxRowCount, firstRowOrdinal, returnList);
940        }
941
942        /**
943         * Creates an {@link Explain} object.
944         */
945        public Explain makeExplain(
946            QueryPart query)
947        {
948            return new Explain(query);
949        }
950    }
951
952    // Override lr_parser methods for NLS.  With this error handling scheme,
953    // all errors are fatal.
954    public void report_fatal_error(
955        String   message,
956        Object   info)
957        throws java.lang.Exception
958    {
959        done_parsing();
960        try {
961            report_error(message, info);
962        } catch (Throwable e) {
963            // "MDX parser cannot recover from previous error(s)"
964            throw MondrianResource.instance().MdxFatalError.ex(e);
965        }
966    }
967
968    // override lr_parser method
969    public void report_error(String message, Object info)
970    {
971        // "Error: %1"
972        throw MondrianResource.instance().MdxError.ex(message);
973    }
974
975    // override lr_parser method
976    public void syntax_error(Symbol cur_token)
977    {
978        String s = cur_token.value.toString();
979        if (cur_token.left != -1) {
980            int loc[] = new int[2];
981            scanner.getLocation(cur_token, loc);
982            // "Syntax error at line %2, column %3, token '%1'"
983            throw MondrianResource.instance().MdxSyntaxErrorAt.ex(
984                s, Integer.toString(loc[0] + 1), Integer.toString(loc[1] + 1));
985        } else {
986            // "Syntax error at token '%1'"
987            throw MondrianResource.instance().MdxSyntaxError.ex(s);
988        }
989    }
990
991    public void unrecovered_syntax_error(Symbol cur_token)
992        throws java.lang.Exception
993    {
994        // "Couldn't repair and continue parse"
995        String sFatalSyntaxError =
996            MondrianResource.instance().MdxFatalSyntaxError.str();
997        report_fatal_error(sFatalSyntaxError, cur_token);
998    }
999
1000    /**
1001     * Returns whether the given identifier can possibly the name of an operator
1002     * with property syntax.
1003     *
1004     * <p>For example, <code>isFunCall("ORDINAL")</code>
1005     * returns true because there is a "&lt;Level&gt;.Ordinal" property.</p>
1006     */
1007    protected boolean isFunCall(String s) {
1008        return funTable.isProperty(s);
1009    }
1010
1011    static Id[] toIdArray(List<Id> idList) {
1012        if (idList == null || idList.size() == 0) {
1013            return EmptyIdArray;
1014        } else {
1015            return idList.toArray(new Id[idList.size()]);
1016        }
1017    }
1018
1019    static Exp[] toExpArray(List<Exp> expList) {
1020        if (expList == null || expList.size() == 0) {
1021            return EmptyExpArray;
1022        } else {
1023            return expList.toArray(new Exp[expList.size()]);
1024        }
1025    }
1026
1027    static Formula[] toFormulaArray(List<Formula> formulaList) {
1028        if (formulaList == null || formulaList.size() == 0) {
1029            return EmptyFormulaArray;
1030        } else {
1031            return formulaList.toArray(new Formula[formulaList.size()]);
1032        }
1033    }
1034
1035    static MemberProperty[] toMemberPropertyArray(List<MemberProperty> mpList) {
1036        if (mpList == null || mpList.size() == 0) {
1037            return EmptyMemberPropertyArray;
1038        } else {
1039            return mpList.toArray(new MemberProperty[mpList.size()]);
1040        }
1041    }
1042
1043    static QueryPart[] toQueryPartArray(List<QueryPart> qpList) {
1044        if (qpList == null || qpList.size() == 0) {
1045            return EmptyQueryPartArray;
1046        } else {
1047            return qpList.toArray(new QueryPart[qpList.size()]);
1048        }
1049    }
1050
1051    static QueryAxis[] toQueryAxisArray(List<QueryAxis> qpList) {
1052        if (qpList == null || qpList.size() == 0) {
1053            return EmptyQueryAxisArray;
1054        } else {
1055            return qpList.toArray(new QueryAxis[qpList.size()]);
1056        }
1057    }
1058
1059    private static final MemberProperty[] EmptyMemberPropertyArray =
1060        new MemberProperty[0];
1061    private static final Exp[] EmptyExpArray = new Exp[0];
1062    private static final Formula[] EmptyFormulaArray = new Formula[0];
1063    private static final Id[] EmptyIdArray = new Id[0];
1064    private static final QueryPart[] EmptyQueryPartArray = new QueryPart[0];
1065    private static final QueryAxis[] EmptyQueryAxisArray = new QueryAxis[0];
1066
1067}
1068
1069/** Cup generated class to encapsulate user supplied action code.*/
1070class CUP$Parser$actions {
1071  private final Parser parser;
1072
1073  /** Constructor */
1074  CUP$Parser$actions(Parser parser) {
1075    this.parser = parser;
1076  }
1077
1078  /** Method with the actual generated action code. */
1079  public final java_cup.runtime.Symbol CUP$Parser$do_action(
1080    int                        CUP$Parser$act_num,
1081    java_cup.runtime.lr_parser CUP$Parser$parser,
1082    java.util.Stack            CUP$Parser$stack,
1083    int                        CUP$Parser$top)
1084    throws java.lang.Exception
1085    {
1086      /* Symbol object for return from actions */
1087      java_cup.runtime.Symbol CUP$Parser$result;
1088
1089      /* select the action based on the action number */
1090      switch (CUP$Parser$act_num)
1091        {
1092          /*. . . . . . . . . . . . . . . . . . . .*/
1093          case 146: // explain_statement ::= EXPLAIN PLAN FOR select_or_drillthrough_statement 
1094            {
1095              QueryPart RESULT = null;
1096                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1097                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1098                QueryPart s = (QueryPart)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1099                
1100            RESULT = parser.factory.makeExplain(
1101                s);
1102        
1103              CUP$Parser$result = new java_cup.runtime.Symbol(23/*explain_statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1104            }
1105          return CUP$Parser$result;
1106
1107          /*. . . . . . . . . . . . . . . . . . . .*/
1108          case 145: // select_or_drillthrough_statement ::= drillthrough_statement 
1109            {
1110              QueryPart RESULT = null;
1111
1112                // Default action for single-symbol production
1113                RESULT = (QueryPart)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1114              CUP$Parser$result = new java_cup.runtime.Symbol(21/*select_or_drillthrough_statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1115            }
1116          return CUP$Parser$result;
1117
1118          /*. . . . . . . . . . . . . . . . . . . .*/
1119          case 144: // select_or_drillthrough_statement ::= select_statement 
1120            {
1121              QueryPart RESULT = null;
1122
1123                // Default action for single-symbol production
1124                RESULT = (Query)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1125              CUP$Parser$result = new java_cup.runtime.Symbol(21/*select_or_drillthrough_statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1126            }
1127          return CUP$Parser$result;
1128
1129          /*. . . . . . . . . . . . . . . . . . . .*/
1130          case 143: // return_item ::= compound_id 
1131            {
1132              Exp RESULT = null;
1133                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1134                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1135                Id i = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1136
1137                // Default action for single-symbol production
1138                RESULT = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1139              CUP$Parser$result = new java_cup.runtime.Symbol(14/*return_item*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1140            }
1141          return CUP$Parser$result;
1142
1143          /*. . . . . . . . . . . . . . . . . . . .*/
1144          case 142: // return_item_list ::= return_item COMMA return_item_list 
1145            {
1146              List RESULT = null;
1147                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1148                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1149                Exp i = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1150                int listleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1151                int listright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1152                List list = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1153                
1154            list.add(0, i);
1155            RESULT = list;
1156        
1157              CUP$Parser$result = new java_cup.runtime.Symbol(60/*return_item_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1158            }
1159          return CUP$Parser$result;
1160
1161          /*. . . . . . . . . . . . . . . . . . . .*/
1162          case 141: // return_item_list ::= return_item 
1163            {
1164              List RESULT = null;
1165                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1166                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1167                Exp i = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1168                
1169            RESULT = new LinkedList();
1170            RESULT.add(i);
1171        
1172              CUP$Parser$result = new java_cup.runtime.Symbol(60/*return_item_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1173            }
1174          return CUP$Parser$result;
1175
1176          /*. . . . . . . . . . . . . . . . . . . .*/
1177          case 140: // return_opt ::= 
1178            {
1179              List RESULT = null;
1180                
1181            RESULT = null;
1182        
1183              CUP$Parser$result = new java_cup.runtime.Symbol(59/*return_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1184            }
1185          return CUP$Parser$result;
1186
1187          /*. . . . . . . . . . . . . . . . . . . .*/
1188          case 139: // return_opt ::= RETURN return_item_list 
1189            {
1190              List RESULT = null;
1191                int rlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1192                int rlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1193                List rl = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1194                
1195            RESULT = rl;
1196        
1197              CUP$Parser$result = new java_cup.runtime.Symbol(59/*return_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1198            }
1199          return CUP$Parser$result;
1200
1201          /*. . . . . . . . . . . . . . . . . . . .*/
1202          case 138: // firstrowset_opt ::= 
1203            {
1204              Number RESULT = null;
1205                
1206            RESULT = null;
1207        
1208              CUP$Parser$result = new java_cup.runtime.Symbol(66/*firstrowset_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1209            }
1210          return CUP$Parser$result;
1211
1212          /*. . . . . . . . . . . . . . . . . . . .*/
1213          case 137: // firstrowset_opt ::= FIRSTROWSET NUMBER 
1214            {
1215              Number RESULT = null;
1216                int nleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1217                int nright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1218                BigDecimal n = (BigDecimal)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1219                
1220            RESULT = n;
1221        
1222              CUP$Parser$result = new java_cup.runtime.Symbol(66/*firstrowset_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1223            }
1224          return CUP$Parser$result;
1225
1226          /*. . . . . . . . . . . . . . . . . . . .*/
1227          case 136: // maxrows_opt ::= 
1228            {
1229              Number RESULT = null;
1230                
1231            RESULT = null;
1232        
1233              CUP$Parser$result = new java_cup.runtime.Symbol(65/*maxrows_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1234            }
1235          return CUP$Parser$result;
1236
1237          /*. . . . . . . . . . . . . . . . . . . .*/
1238          case 135: // maxrows_opt ::= MAXROWS NUMBER 
1239            {
1240              Number RESULT = null;
1241                int nleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1242                int nright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1243                BigDecimal n = (BigDecimal)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1244                
1245            RESULT = n;
1246        
1247              CUP$Parser$result = new java_cup.runtime.Symbol(65/*maxrows_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1248            }
1249          return CUP$Parser$result;
1250
1251          /*. . . . . . . . . . . . . . . . . . . .*/
1252          case 134: // drillthrough_statement ::= DRILLTHROUGH maxrows_opt firstrowset_opt select_statement return_opt 
1253            {
1254              QueryPart RESULT = null;
1255                int mleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
1256                int mright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
1257                Number m = (Number)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
1258                int fleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1259                int fright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1260                Number f = (Number)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1261                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
1262                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
1263                Query s = (Query)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
1264                int rleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1265                int rright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1266                List r = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1267                
1268            RESULT = parser.factory.makeDrillThrough(
1269                s,
1270                m == null ? 0 : m.intValue(),
1271                f == null ? 0 : f.intValue(),
1272                r);
1273        
1274              CUP$Parser$result = new java_cup.runtime.Symbol(22/*drillthrough_statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1275            }
1276          return CUP$Parser$result;
1277
1278          /*. . . . . . . . . . . . . . . . . . . .*/
1279          case 133: // cell_property ::= compound_id 
1280            {
1281              Id RESULT = null;
1282
1283                // Default action for single-symbol production
1284                RESULT = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1285              CUP$Parser$result = new java_cup.runtime.Symbol(25/*cell_property*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1286            }
1287          return CUP$Parser$result;
1288
1289          /*. . . . . . . . . . . . . . . . . . . .*/
1290          case 132: // cell_property_list ::= cell_property COMMA cell_property_list 
1291            {
1292              List RESULT = null;
1293                int pleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1294                int pright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1295                Id p = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1296                int p1left = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1297                int p1right = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1298                List p1 = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1299                
1300        p1.add(0, new CellProperty(p.getSegments()));
1301        RESULT = p1;
1302    
1303              CUP$Parser$result = new java_cup.runtime.Symbol(58/*cell_property_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1304            }
1305          return CUP$Parser$result;
1306
1307          /*. . . . . . . . . . . . . . . . . . . .*/
1308          case 131: // cell_property_list ::= cell_property 
1309            {
1310              List RESULT = null;
1311                int pleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1312                int pright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1313                Id p = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1314                
1315        RESULT = new LinkedList();
1316        RESULT.add(new CellProperty(p.getSegments()));
1317    
1318              CUP$Parser$result = new java_cup.runtime.Symbol(58/*cell_property_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1319            }
1320          return CUP$Parser$result;
1321
1322          /*. . . . . . . . . . . . . . . . . . . .*/
1323          case 130: // cell_opt ::= CELL 
1324            {
1325              Object RESULT = null;
1326
1327                // Default action for single-symbol production
1328                RESULT = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1329              CUP$Parser$result = new java_cup.runtime.Symbol(42/*cell_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1330            }
1331          return CUP$Parser$result;
1332
1333          /*. . . . . . . . . . . . . . . . . . . .*/
1334          case 129: // cell_opt ::= 
1335            {
1336              Object RESULT = null;
1337
1338              CUP$Parser$result = new java_cup.runtime.Symbol(42/*cell_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1339            }
1340          return CUP$Parser$result;
1341
1342          /*. . . . . . . . . . . . . . . . . . . .*/
1343          case 128: // cell_props ::= cell_opt PROPERTIES cell_property_list 
1344            {
1345              List RESULT = null;
1346                int p1left = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1347                int p1right = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1348                List p1 = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1349                
1350            RESULT = p1;
1351        
1352              CUP$Parser$result = new java_cup.runtime.Symbol(48/*cell_props*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1353            }
1354          return CUP$Parser$result;
1355
1356          /*. . . . . . . . . . . . . . . . . . . .*/
1357          case 127: // slicer_specification ::= expression 
1358            {
1359              Exp RESULT = null;
1360
1361                // Default action for single-symbol production
1362                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1363              CUP$Parser$result = new java_cup.runtime.Symbol(8/*slicer_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1364            }
1365          return CUP$Parser$result;
1366
1367          /*. . . . . . . . . . . . . . . . . . . .*/
1368          case 126: // cube_specification ::= cube_name 
1369            {
1370              Id RESULT = null;
1371
1372                // Default action for single-symbol production
1373                RESULT = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1374              CUP$Parser$result = new java_cup.runtime.Symbol(28/*cube_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1375            }
1376          return CUP$Parser$result;
1377
1378          /*. . . . . . . . . . . . . . . . . . . .*/
1379          case 125: // property ::= compound_id 
1380            {
1381              Object RESULT = null;
1382
1383                // Default action for single-symbol production
1384                RESULT = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1385              CUP$Parser$result = new java_cup.runtime.Symbol(44/*property*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1386            }
1387          return CUP$Parser$result;
1388
1389          /*. . . . . . . . . . . . . . . . . . . .*/
1390          case 124: // property_list ::= property COMMA property_list 
1391            {
1392              List RESULT = null;
1393                int pleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1394                int pright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1395                Object p = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1396                int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1397                int plright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1398                List pl = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1399                
1400            pl.add(0, p);
1401            RESULT = pl;
1402        
1403              CUP$Parser$result = new java_cup.runtime.Symbol(57/*property_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1404            }
1405          return CUP$Parser$result;
1406
1407          /*. . . . . . . . . . . . . . . . . . . .*/
1408          case 123: // property_list ::= property 
1409            {
1410              List RESULT = null;
1411                int pleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1412                int pright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1413                Object p = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1414                
1415            RESULT = new LinkedList();
1416            RESULT.add(p);
1417        
1418              CUP$Parser$result = new java_cup.runtime.Symbol(57/*property_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1419            }
1420          return CUP$Parser$result;
1421
1422          /*. . . . . . . . . . . . . . . . . . . .*/
1423          case 122: // dimension_opt ::= DIMENSION 
1424            {
1425              Object RESULT = null;
1426
1427                // Default action for single-symbol production
1428                RESULT = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1429              CUP$Parser$result = new java_cup.runtime.Symbol(43/*dimension_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1430            }
1431          return CUP$Parser$result;
1432
1433          /*. . . . . . . . . . . . . . . . . . . .*/
1434          case 121: // dimension_opt ::= 
1435            {
1436              Object RESULT = null;
1437
1438              CUP$Parser$result = new java_cup.runtime.Symbol(43/*dimension_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1439            }
1440          return CUP$Parser$result;
1441
1442          /*. . . . . . . . . . . . . . . . . . . .*/
1443          case 120: // dim_props ::= dimension_opt PROPERTIES property_list 
1444            {
1445              List RESULT = null;
1446                int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1447                int plright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1448                List pl = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1449                
1450        RESULT = pl;
1451    
1452              CUP$Parser$result = new java_cup.runtime.Symbol(51/*dim_props*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1453            }
1454          return CUP$Parser$result;
1455
1456          /*. . . . . . . . . . . . . . . . . . . .*/
1457          case 119: // axis_number ::= AXIS LPAREN NUMBER RPAREN 
1458            {
1459              BigDecimal RESULT = null;
1460                int nleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
1461                int nright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
1462                BigDecimal n = (BigDecimal)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
1463                
1464            RESULT = n;
1465        
1466              CUP$Parser$result = new java_cup.runtime.Symbol(64/*axis_number*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1467            }
1468          return CUP$Parser$result;
1469
1470          /*. . . . . . . . . . . . . . . . . . . .*/
1471          case 118: // axis_number ::= NUMBER 
1472            {
1473              BigDecimal RESULT = null;
1474
1475                // Default action for single-symbol production
1476                RESULT = (BigDecimal)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1477              CUP$Parser$result = new java_cup.runtime.Symbol(64/*axis_number*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1478            }
1479          return CUP$Parser$result;
1480
1481          /*. . . . . . . . . . . . . . . . . . . .*/
1482          case 117: // axis_name ::= CHAPTERS 
1483            {
1484              AxisOrdinal.StandardAxisOrdinal RESULT = null;
1485                
1486            RESULT = AxisOrdinal.StandardAxisOrdinal.CHAPTERS;
1487        
1488              CUP$Parser$result = new java_cup.runtime.Symbol(31/*axis_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1489            }
1490          return CUP$Parser$result;
1491
1492          /*. . . . . . . . . . . . . . . . . . . .*/
1493          case 116: // axis_name ::= SECTIONS 
1494            {
1495              AxisOrdinal.StandardAxisOrdinal RESULT = null;
1496                
1497            RESULT = AxisOrdinal.StandardAxisOrdinal.SECTIONS;
1498        
1499              CUP$Parser$result = new java_cup.runtime.Symbol(31/*axis_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1500            }
1501          return CUP$Parser$result;
1502
1503          /*. . . . . . . . . . . . . . . . . . . .*/
1504          case 115: // axis_name ::= PAGES 
1505            {
1506              AxisOrdinal.StandardAxisOrdinal RESULT = null;
1507                
1508            RESULT = AxisOrdinal.StandardAxisOrdinal.PAGES;
1509        
1510              CUP$Parser$result = new java_cup.runtime.Symbol(31/*axis_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1511            }
1512          return CUP$Parser$result;
1513
1514          /*. . . . . . . . . . . . . . . . . . . .*/
1515          case 114: // axis_name ::= ROWS 
1516            {
1517              AxisOrdinal.StandardAxisOrdinal RESULT = null;
1518                
1519            RESULT = AxisOrdinal.StandardAxisOrdinal.ROWS;
1520        
1521              CUP$Parser$result = new java_cup.runtime.Symbol(31/*axis_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1522            }
1523          return CUP$Parser$result;
1524
1525          /*. . . . . . . . . . . . . . . . . . . .*/
1526          case 113: // axis_name ::= COLUMNS 
1527            {
1528              AxisOrdinal.StandardAxisOrdinal RESULT = null;
1529                
1530            RESULT = AxisOrdinal.StandardAxisOrdinal.COLUMNS;
1531        
1532              CUP$Parser$result = new java_cup.runtime.Symbol(31/*axis_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1533            }
1534          return CUP$Parser$result;
1535
1536          /*. . . . . . . . . . . . . . . . . . . .*/
1537          case 112: // dim_props_opt ::= dim_props 
1538            {
1539              List RESULT = null;
1540
1541                // Default action for single-symbol production
1542                RESULT = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1543              CUP$Parser$result = new java_cup.runtime.Symbol(52/*dim_props_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1544            }
1545          return CUP$Parser$result;
1546
1547          /*. . . . . . . . . . . . . . . . . . . .*/
1548          case 111: // dim_props_opt ::= 
1549            {
1550              List RESULT = null;
1551
1552              CUP$Parser$result = new java_cup.runtime.Symbol(52/*dim_props_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1553            }
1554          return CUP$Parser$result;
1555
1556          /*. . . . . . . . . . . . . . . . . . . .*/
1557          case 110: // non_empty_opt ::= NON EMPTY 
1558            {
1559              Boolean RESULT = null;
1560                
1561            RESULT = Boolean.TRUE;
1562        
1563              CUP$Parser$result = new java_cup.runtime.Symbol(45/*non_empty_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1564            }
1565          return CUP$Parser$result;
1566
1567          /*. . . . . . . . . . . . . . . . . . . .*/
1568          case 109: // non_empty_opt ::= 
1569            {
1570              Boolean RESULT = null;
1571                
1572            RESULT = Boolean.FALSE;
1573        
1574              CUP$Parser$result = new java_cup.runtime.Symbol(45/*non_empty_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1575            }
1576          return CUP$Parser$result;
1577
1578          /*. . . . . . . . . . . . . . . . . . . .*/
1579          case 108: // axis_specification ::= non_empty_opt expression dim_props_opt ON axis_number 
1580            {
1581              QueryAxis RESULT = null;
1582                int bleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
1583                int bright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
1584                Boolean b = (Boolean)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
1585                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
1586                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
1587                Exp s = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
1588                int dpleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1589                int dpright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1590                List dp = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1591                int nleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1592                int nright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1593                BigDecimal n = (BigDecimal)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1594                
1595            double d = n.doubleValue();
1596            int index = n.intValue();
1597
1598            // AxisOrdinal values go from -2 to 4 for standard axis, but higher
1599            // ordinals are allowed. The negative values represent
1600            // special cases, so are ignored.
1601            if (index < 0 || index != d) {
1602                throw MondrianResource.instance().InvalidAxis.ex(
1603                    d);
1604            }
1605
1606            AxisOrdinal axis =
1607                AxisOrdinal.StandardAxisOrdinal.forLogicalOrdinal(index);
1608            RESULT =
1609                new QueryAxis(
1610                    b.booleanValue(), s, axis,
1611                    QueryAxis.SubtotalVisibility.Undefined,
1612                    Parser.toIdArray(dp));
1613        
1614              CUP$Parser$result = new java_cup.runtime.Symbol(1/*axis_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1615            }
1616          return CUP$Parser$result;
1617
1618          /*. . . . . . . . . . . . . . . . . . . .*/
1619          case 107: // axis_specification ::= non_empty_opt expression dim_props_opt ON axis_name 
1620            {
1621              QueryAxis RESULT = null;
1622                int bleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
1623                int bright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
1624                Boolean b = (Boolean)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
1625                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
1626                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
1627                Exp s = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
1628                int dpleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1629                int dpright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1630                List dp = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1631                int aleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1632                int aright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1633                AxisOrdinal.StandardAxisOrdinal a = (AxisOrdinal.StandardAxisOrdinal)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1634                
1635            RESULT = new QueryAxis(
1636                    b.booleanValue(), s, a,
1637                    QueryAxis.SubtotalVisibility.Undefined,
1638                    Parser.toIdArray(dp));
1639        
1640              CUP$Parser$result = new java_cup.runtime.Symbol(1/*axis_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1641            }
1642          return CUP$Parser$result;
1643
1644          /*. . . . . . . . . . . . . . . . . . . .*/
1645          case 106: // set_name ::= compound_id 
1646            {
1647              Id RESULT = null;
1648
1649                // Default action for single-symbol production
1650                RESULT = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1651              CUP$Parser$result = new java_cup.runtime.Symbol(30/*set_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1652            }
1653          return CUP$Parser$result;
1654
1655          /*. . . . . . . . . . . . . . . . . . . .*/
1656          case 105: // set_specification ::= SET set_name AS expression 
1657            {
1658              Formula RESULT = null;
1659                int nleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1660                int nright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1661                Id n = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1662                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1663                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1664                Exp e = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1665                
1666            RESULT = new Formula(n, e);
1667        
1668              CUP$Parser$result = new java_cup.runtime.Symbol(39/*set_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1669            }
1670          return CUP$Parser$result;
1671
1672          /*. . . . . . . . . . . . . . . . . . . .*/
1673          case 104: // set_specification ::= SET set_name AS FORMULA_STRING 
1674            {
1675              Formula RESULT = null;
1676                int nleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1677                int nright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1678                Id n = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1679                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1680                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1681                String s = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1682                
1683            Exp e = parser.recursivelyParseExp(s);
1684            RESULT = new Formula(n, e);
1685        
1686              CUP$Parser$result = new java_cup.runtime.Symbol(39/*set_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1687            }
1688          return CUP$Parser$result;
1689
1690          /*. . . . . . . . . . . . . . . . . . . .*/
1691          case 103: // member_property_definition ::= identifier EQ value_expression 
1692            {
1693              MemberProperty RESULT = null;
1694                int idleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1695                int idright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1696                Id.NameSegment id = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1697                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1698                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1699                Exp e = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1700                
1701            RESULT = new MemberProperty(id.name, e);
1702        
1703              CUP$Parser$result = new java_cup.runtime.Symbol(41/*member_property_definition*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1704            }
1705          return CUP$Parser$result;
1706
1707          /*. . . . . . . . . . . . . . . . . . . .*/
1708          case 102: // member_name ::= compound_id 
1709            {
1710              Id RESULT = null;
1711
1712                // Default action for single-symbol production
1713                RESULT = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1714              CUP$Parser$result = new java_cup.runtime.Symbol(29/*member_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1715            }
1716          return CUP$Parser$result;
1717
1718          /*. . . . . . . . . . . . . . . . . . . .*/
1719          case 101: // member_property_def_list ::= member_property_definition COMMA member_property_def_list 
1720            {
1721              List RESULT = null;
1722                int hdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1723                int hdright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1724                MemberProperty hd = (MemberProperty)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1725                int tlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1726                int tlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1727                List tl = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1728                
1729            RESULT = tl;
1730            RESULT.add(0, hd);
1731        
1732              CUP$Parser$result = new java_cup.runtime.Symbol(56/*member_property_def_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1733            }
1734          return CUP$Parser$result;
1735
1736          /*. . . . . . . . . . . . . . . . . . . .*/
1737          case 100: // member_property_def_list ::= member_property_definition 
1738            {
1739              List RESULT = null;
1740                int mleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1741                int mright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1742                MemberProperty m = (MemberProperty)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1743                
1744            RESULT = new LinkedList();
1745            RESULT.add(m);
1746        
1747              CUP$Parser$result = new java_cup.runtime.Symbol(56/*member_property_def_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1748            }
1749          return CUP$Parser$result;
1750
1751          /*. . . . . . . . . . . . . . . . . . . .*/
1752          case 99: // comma_member_property_def_list_opt ::= COMMA member_property_def_list 
1753            {
1754              List RESULT = null;
1755                int lleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1756                int lright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1757                List l = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1758                
1759            RESULT = l;
1760        
1761              CUP$Parser$result = new java_cup.runtime.Symbol(50/*comma_member_property_def_list_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1762            }
1763          return CUP$Parser$result;
1764
1765          /*. . . . . . . . . . . . . . . . . . . .*/
1766          case 98: // comma_member_property_def_list_opt ::= 
1767            {
1768              List RESULT = null;
1769                
1770            RESULT = new LinkedList();
1771        
1772              CUP$Parser$result = new java_cup.runtime.Symbol(50/*comma_member_property_def_list_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1773            }
1774          return CUP$Parser$result;
1775
1776          /*. . . . . . . . . . . . . . . . . . . .*/
1777          case 97: // member_specification ::= MEMBER member_name AS value_expression comma_member_property_def_list_opt 
1778            {
1779              Formula RESULT = null;
1780                int mleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
1781                int mright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
1782                Id m = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
1783                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
1784                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
1785                Exp e = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
1786                int lleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1787                int lright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1788                List l = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1789                
1790            RESULT = new Formula(
1791                m,
1792                e,
1793                Parser.toMemberPropertyArray(l));
1794        
1795              CUP$Parser$result = new java_cup.runtime.Symbol(38/*member_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1796            }
1797          return CUP$Parser$result;
1798
1799          /*. . . . . . . . . . . . . . . . . . . .*/
1800          case 96: // member_specification ::= MEMBER member_name AS FORMULA_STRING comma_member_property_def_list_opt 
1801            {
1802              Formula RESULT = null;
1803                int mleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
1804                int mright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
1805                Id m = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
1806                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
1807                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
1808                String s = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
1809                int lleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1810                int lright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1811                List l = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1812                
1813            Exp e = parser.recursivelyParseExp(s);
1814            RESULT = new Formula(
1815                m,
1816                e,
1817                Parser.toMemberPropertyArray(l));
1818        
1819              CUP$Parser$result = new java_cup.runtime.Symbol(38/*member_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1820            }
1821          return CUP$Parser$result;
1822
1823          /*. . . . . . . . . . . . . . . . . . . .*/
1824          case 95: // single_formula_specification ::= set_specification 
1825            {
1826              Formula RESULT = null;
1827
1828                // Default action for single-symbol production
1829                RESULT = (Formula)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1830              CUP$Parser$result = new java_cup.runtime.Symbol(40/*single_formula_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1831            }
1832          return CUP$Parser$result;
1833
1834          /*. . . . . . . . . . . . . . . . . . . .*/
1835          case 94: // single_formula_specification ::= member_specification 
1836            {
1837              Formula RESULT = null;
1838
1839                // Default action for single-symbol production
1840                RESULT = (Formula)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1841              CUP$Parser$result = new java_cup.runtime.Symbol(40/*single_formula_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1842            }
1843          return CUP$Parser$result;
1844
1845          /*. . . . . . . . . . . . . . . . . . . .*/
1846          case 93: // formula_specification ::= single_formula_specification formula_specification 
1847            {
1848              List RESULT = null;
1849                int hdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
1850                int hdright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
1851                Formula hd = (Formula)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
1852                int tlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1853                int tlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1854                List tl = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1855                
1856            tl.add(0, hd);
1857            RESULT = tl;
1858        
1859              CUP$Parser$result = new java_cup.runtime.Symbol(55/*formula_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1860            }
1861          return CUP$Parser$result;
1862
1863          /*. . . . . . . . . . . . . . . . . . . .*/
1864          case 92: // formula_specification ::= single_formula_specification 
1865            {
1866              List RESULT = null;
1867                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1868                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1869                Formula e = (Formula)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1870                
1871            RESULT = new LinkedList();
1872            RESULT.add(e);
1873        
1874              CUP$Parser$result = new java_cup.runtime.Symbol(55/*formula_specification*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1875            }
1876          return CUP$Parser$result;
1877
1878          /*. . . . . . . . . . . . . . . . . . . .*/
1879          case 91: // cell_props_opt ::= cell_props 
1880            {
1881              List RESULT = null;
1882
1883                // Default action for single-symbol production
1884                RESULT = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1885              CUP$Parser$result = new java_cup.runtime.Symbol(49/*cell_props_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1886            }
1887          return CUP$Parser$result;
1888
1889          /*. . . . . . . . . . . . . . . . . . . .*/
1890          case 90: // cell_props_opt ::= 
1891            {
1892              List RESULT = null;
1893                
1894            RESULT = new LinkedList();
1895        
1896              CUP$Parser$result = new java_cup.runtime.Symbol(49/*cell_props_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1897            }
1898          return CUP$Parser$result;
1899
1900          /*. . . . . . . . . . . . . . . . . . . .*/
1901          case 89: // where_clause_opt ::= WHERE slicer_specification 
1902            {
1903              Exp RESULT = null;
1904                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1905                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1906                Exp s = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1907                
1908            RESULT = s;
1909        
1910              CUP$Parser$result = new java_cup.runtime.Symbol(18/*where_clause_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1911            }
1912          return CUP$Parser$result;
1913
1914          /*. . . . . . . . . . . . . . . . . . . .*/
1915          case 88: // where_clause_opt ::= 
1916            {
1917              Exp RESULT = null;
1918
1919              CUP$Parser$result = new java_cup.runtime.Symbol(18/*where_clause_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1920            }
1921          return CUP$Parser$result;
1922
1923          /*. . . . . . . . . . . . . . . . . . . .*/
1924          case 87: // axis_specification_list ::= axis_specification COMMA axis_specification_list 
1925            {
1926              List RESULT = null;
1927                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
1928                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
1929                QueryAxis e = (QueryAxis)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
1930                int listleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1931                int listright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1932                List list = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1933                
1934            list.add(0, e);
1935            RESULT = list;
1936        
1937              CUP$Parser$result = new java_cup.runtime.Symbol(46/*axis_specification_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1938            }
1939          return CUP$Parser$result;
1940
1941          /*. . . . . . . . . . . . . . . . . . . .*/
1942          case 86: // axis_specification_list ::= axis_specification 
1943            {
1944              List RESULT = null;
1945                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1946                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1947                QueryAxis i = (QueryAxis)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1948                
1949            RESULT = new LinkedList();
1950            RESULT.add(i);
1951        
1952              CUP$Parser$result = new java_cup.runtime.Symbol(46/*axis_specification_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1953            }
1954          return CUP$Parser$result;
1955
1956          /*. . . . . . . . . . . . . . . . . . . .*/
1957          case 85: // axis_specification_list_opt ::= axis_specification_list 
1958            {
1959              List RESULT = null;
1960
1961                // Default action for single-symbol production
1962                RESULT = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
1963              CUP$Parser$result = new java_cup.runtime.Symbol(47/*axis_specification_list_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1964            }
1965          return CUP$Parser$result;
1966
1967          /*. . . . . . . . . . . . . . . . . . . .*/
1968          case 84: // axis_specification_list_opt ::= 
1969            {
1970              List RESULT = null;
1971                
1972            RESULT = new LinkedList();
1973        
1974              CUP$Parser$result = new java_cup.runtime.Symbol(47/*axis_specification_list_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1975            }
1976          return CUP$Parser$result;
1977
1978          /*. . . . . . . . . . . . . . . . . . . .*/
1979          case 83: // with_formula_specification_opt ::= WITH formula_specification 
1980            {
1981              List RESULT = null;
1982                int fleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
1983                int fright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
1984                List f = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
1985                
1986            RESULT = f;
1987        
1988              CUP$Parser$result = new java_cup.runtime.Symbol(62/*with_formula_specification_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
1989            }
1990          return CUP$Parser$result;
1991
1992          /*. . . . . . . . . . . . . . . . . . . .*/
1993          case 82: // with_formula_specification_opt ::= 
1994            {
1995              List RESULT = null;
1996                
1997            RESULT = new LinkedList();
1998        
1999              CUP$Parser$result = new java_cup.runtime.Symbol(62/*with_formula_specification_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2000            }
2001          return CUP$Parser$result;
2002
2003          /*. . . . . . . . . . . . . . . . . . . .*/
2004          case 81: // select_statement ::= with_formula_specification_opt SELECT axis_specification_list_opt FROM cube_specification where_clause_opt cell_props_opt 
2005            {
2006              Query RESULT = null;
2007                int fleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
2008                int fright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).right;
2009                List f = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-6)).value;
2010                int aleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
2011                int aright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
2012                List a = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
2013                int cleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2014                int cright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2015                Id c = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2016                int wleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2017                int wright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2018                Exp w = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2019                int cpleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2020                int cpright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2021                List cp = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2022                
2023            Parser parser = (Parser) CUP$Parser$parser;
2024            // We want 'Sales', not '[Sales]', and can't handle 'Schema.Sales'
2025            // yet.
2026            String cubeName = ((Id.NameSegment) c.getElement(0)).name;
2027            RESULT = parser.factory.makeQuery(
2028                parser.statement,
2029                Parser.toFormulaArray(f),
2030                Parser.toQueryAxisArray(a),
2031                cubeName,
2032                w,
2033                Parser.toQueryPartArray(cp),
2034                parser.strictValidation);
2035        
2036              CUP$Parser$result = new java_cup.runtime.Symbol(19/*select_statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2037            }
2038          return CUP$Parser$result;
2039
2040          /*. . . . . . . . . . . . . . . . . . . .*/
2041          case 80: // statement ::= _VALUE_EXPRESSION expression 
2042            {
2043              QueryPart RESULT = null;
2044                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2045                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2046                Exp e = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2047                
2048            RESULT = (QueryPart) e;
2049        
2050              CUP$Parser$result = new java_cup.runtime.Symbol(20/*statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2051            }
2052          return CUP$Parser$result;
2053
2054          /*. . . . . . . . . . . . . . . . . . . .*/
2055          case 79: // statement ::= explain_statement 
2056            {
2057              QueryPart RESULT = null;
2058
2059                // Default action for single-symbol production
2060                RESULT = (QueryPart)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2061              CUP$Parser$result = new java_cup.runtime.Symbol(20/*statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2062            }
2063          return CUP$Parser$result;
2064
2065          /*. . . . . . . . . . . . . . . . . . . .*/
2066          case 78: // statement ::= drillthrough_statement 
2067            {
2068              QueryPart RESULT = null;
2069
2070                // Default action for single-symbol production
2071                RESULT = (QueryPart)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2072              CUP$Parser$result = new java_cup.runtime.Symbol(20/*statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2073            }
2074          return CUP$Parser$result;
2075
2076          /*. . . . . . . . . . . . . . . . . . . .*/
2077          case 77: // statement ::= select_statement 
2078            {
2079              QueryPart RESULT = null;
2080
2081                // Default action for single-symbol production
2082                RESULT = (Query)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2083              CUP$Parser$result = new java_cup.runtime.Symbol(20/*statement*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2084            }
2085          return CUP$Parser$result;
2086
2087          /*. . . . . . . . . . . . . . . . . . . .*/
2088          case 76: // aliasedExpression ::= expression AS identifier 
2089            {
2090              UnresolvedFunCall RESULT = null;
2091                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2092                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2093                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2094                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2095                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2096                Id.NameSegment i = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2097                
2098            Id id = new Id(i);
2099            RESULT =
2100                new UnresolvedFunCall("AS", Syntax.Infix, new Exp[] {x, id});
2101        
2102              CUP$Parser$result = new java_cup.runtime.Symbol(2/*aliasedExpression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2103            }
2104          return CUP$Parser$result;
2105
2106          /*. . . . . . . . . . . . . . . . . . . .*/
2107          case 75: // exp_list ::= expression_or_empty COMMA exp_list 
2108            {
2109              List RESULT = null;
2110                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2111                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2112                Exp e = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2113                int listleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2114                int listright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2115                List list = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2116                
2117            list.add(0, e); RESULT = list;
2118        
2119              CUP$Parser$result = new java_cup.runtime.Symbol(53/*exp_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2120            }
2121          return CUP$Parser$result;
2122
2123          /*. . . . . . . . . . . . . . . . . . . .*/
2124          case 74: // exp_list ::= expression 
2125            {
2126              List RESULT = null;
2127                int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2128                int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2129                Exp e = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2130                
2131            RESULT = new LinkedList();
2132            RESULT.add(e);
2133        
2134              CUP$Parser$result = new java_cup.runtime.Symbol(53/*exp_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2135            }
2136          return CUP$Parser$result;
2137
2138          /*. . . . . . . . . . . . . . . . . . . .*/
2139          case 73: // exp_list_opt ::= exp_list 
2140            {
2141              List RESULT = null;
2142
2143                // Default action for single-symbol production
2144                RESULT = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2145              CUP$Parser$result = new java_cup.runtime.Symbol(54/*exp_list_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2146            }
2147          return CUP$Parser$result;
2148
2149          /*. . . . . . . . . . . . . . . . . . . .*/
2150          case 72: // exp_list_opt ::= 
2151            {
2152              List RESULT = null;
2153                
2154            RESULT = new LinkedList();
2155        
2156              CUP$Parser$result = new java_cup.runtime.Symbol(54/*exp_list_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2157            }
2158          return CUP$Parser$result;
2159
2160          /*. . . . . . . . . . . . . . . . . . . .*/
2161          case 71: // expression_or_empty ::= 
2162            {
2163              Exp RESULT = null;
2164                
2165            RESULT = new UnresolvedFunCall("", Syntax.Empty, new Exp[] {});
2166        
2167              CUP$Parser$result = new java_cup.runtime.Symbol(6/*expression_or_empty*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2168            }
2169          return CUP$Parser$result;
2170
2171          /*. . . . . . . . . . . . . . . . . . . .*/
2172          case 70: // expression_or_empty ::= expression 
2173            {
2174              Exp RESULT = null;
2175
2176                // Default action for single-symbol production
2177                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2178              CUP$Parser$result = new java_cup.runtime.Symbol(6/*expression_or_empty*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2179            }
2180          return CUP$Parser$result;
2181
2182          /*. . . . . . . . . . . . . . . . . . . .*/
2183          case 69: // expression ::= value_expression 
2184            {
2185              Exp RESULT = null;
2186
2187                // Default action for single-symbol production
2188                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2189              CUP$Parser$result = new java_cup.runtime.Symbol(5/*expression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2190            }
2191          return CUP$Parser$result;
2192
2193          /*. . . . . . . . . . . . . . . . . . . .*/
2194          case 68: // expression ::= aliasedExpression 
2195            {
2196              Exp RESULT = null;
2197
2198                // Default action for single-symbol production
2199                RESULT = (UnresolvedFunCall)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2200              CUP$Parser$result = new java_cup.runtime.Symbol(5/*expression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2201            }
2202          return CUP$Parser$result;
2203
2204          /*. . . . . . . . . . . . . . . . . . . .*/
2205          case 67: // expression ::= expression COLON value_expression 
2206            {
2207              Exp RESULT = null;
2208                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2209                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2210                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2211                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2212                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2213                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2214                 // range yields set
2215            RESULT = new UnresolvedFunCall(":", Syntax.Infix, new Exp[] {x, y});
2216        
2217              CUP$Parser$result = new java_cup.runtime.Symbol(5/*expression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2218            }
2219          return CUP$Parser$result;
2220
2221          /*. . . . . . . . . . . . . . . . . . . .*/
2222          case 66: // comp_op ::= GE 
2223            {
2224              String RESULT = null;
2225                
2226            RESULT = ">=";
2227        
2228              CUP$Parser$result = new java_cup.runtime.Symbol(32/*comp_op*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2229            }
2230          return CUP$Parser$result;
2231
2232          /*. . . . . . . . . . . . . . . . . . . .*/
2233          case 65: // comp_op ::= LE 
2234            {
2235              String RESULT = null;
2236                
2237            RESULT = "<=";
2238        
2239              CUP$Parser$result = new java_cup.runtime.Symbol(32/*comp_op*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2240            }
2241          return CUP$Parser$result;
2242
2243          /*. . . . . . . . . . . . . . . . . . . .*/
2244          case 64: // comp_op ::= GT 
2245            {
2246              String RESULT = null;
2247                
2248            RESULT = ">";
2249        
2250              CUP$Parser$result = new java_cup.runtime.Symbol(32/*comp_op*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2251            }
2252          return CUP$Parser$result;
2253
2254          /*. . . . . . . . . . . . . . . . . . . .*/
2255          case 63: // comp_op ::= LT 
2256            {
2257              String RESULT = null;
2258                
2259            RESULT = "<";
2260        
2261              CUP$Parser$result = new java_cup.runtime.Symbol(32/*comp_op*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2262            }
2263          return CUP$Parser$result;
2264
2265          /*. . . . . . . . . . . . . . . . . . . .*/
2266          case 62: // comp_op ::= NE 
2267            {
2268              String RESULT = null;
2269                
2270            RESULT = "<>";
2271        
2272              CUP$Parser$result = new java_cup.runtime.Symbol(32/*comp_op*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2273            }
2274          return CUP$Parser$result;
2275
2276          /*. . . . . . . . . . . . . . . . . . . .*/
2277          case 61: // comp_op ::= EQ 
2278            {
2279              String RESULT = null;
2280                
2281            RESULT = "=";
2282        
2283              CUP$Parser$result = new java_cup.runtime.Symbol(32/*comp_op*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2284            }
2285          return CUP$Parser$result;
2286
2287          /*. . . . . . . . . . . . . . . . . . . .*/
2288          case 60: // else_clause_opt ::= ELSE value_expression 
2289            {
2290              Exp RESULT = null;
2291                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2292                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2293                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2294                
2295            RESULT = x;
2296        
2297              CUP$Parser$result = new java_cup.runtime.Symbol(4/*else_clause_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2298            }
2299          return CUP$Parser$result;
2300
2301          /*. . . . . . . . . . . . . . . . . . . .*/
2302          case 59: // else_clause_opt ::= 
2303            {
2304              Exp RESULT = null;
2305
2306              CUP$Parser$result = new java_cup.runtime.Symbol(4/*else_clause_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2307            }
2308          return CUP$Parser$result;
2309
2310          /*. . . . . . . . . . . . . . . . . . . .*/
2311          case 58: // when_clause ::= WHEN value_expression THEN value_expression 
2312            {
2313              Exp[] RESULT = null;
2314                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2315                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2316                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2317                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2318                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2319                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2320                
2321            RESULT = new Exp[] {x, y};
2322        
2323              CUP$Parser$result = new java_cup.runtime.Symbol(63/*when_clause*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2324            }
2325          return CUP$Parser$result;
2326
2327          /*. . . . . . . . . . . . . . . . . . . .*/
2328          case 57: // when_list ::= when_list when_clause 
2329            {
2330              List RESULT = null;
2331                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2332                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2333                List x = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2334                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2335                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2336                Exp[] y = (Exp[])((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2337                
2338            RESULT = x;
2339            x.add(y);
2340        
2341              CUP$Parser$result = new java_cup.runtime.Symbol(61/*when_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2342            }
2343          return CUP$Parser$result;
2344
2345          /*. . . . . . . . . . . . . . . . . . . .*/
2346          case 56: // when_list ::= 
2347            {
2348              List RESULT = null;
2349                
2350            RESULT = new ArrayList();
2351        
2352              CUP$Parser$result = new java_cup.runtime.Symbol(61/*when_list*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2353            }
2354          return CUP$Parser$result;
2355
2356          /*. . . . . . . . . . . . . . . . . . . .*/
2357          case 55: // value_expression_opt ::= value_expression 
2358            {
2359              Exp RESULT = null;
2360
2361                // Default action for single-symbol production
2362                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2363              CUP$Parser$result = new java_cup.runtime.Symbol(16/*value_expression_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2364            }
2365          return CUP$Parser$result;
2366
2367          /*. . . . . . . . . . . . . . . . . . . .*/
2368          case 54: // value_expression_opt ::= 
2369            {
2370              Exp RESULT = null;
2371
2372              CUP$Parser$result = new java_cup.runtime.Symbol(16/*value_expression_opt*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2373            }
2374          return CUP$Parser$result;
2375
2376          /*. . . . . . . . . . . . . . . . . . . .*/
2377          case 53: // case_expression ::= CASE value_expression_opt when_list else_clause_opt END 
2378            {
2379              Exp RESULT = null;
2380                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
2381                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
2382                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
2383                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2384                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2385                List y = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2386                int zleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2387                int zright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2388                Exp z = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2389                
2390            List v = new ArrayList();
2391            if (x != null) {
2392                v.add(x);
2393            }
2394            for (int i = 0; i < y.size(); i++) {
2395                Exp[] exps = (Exp[]) y.get(i);
2396                Util.assertTrue(exps.length == 2);
2397                v.add(exps[0]);
2398                v.add(exps[1]);
2399            }
2400            if (z != null) {
2401                v.add(z);
2402            }
2403            if (x == null) {
2404                RESULT = new UnresolvedFunCall(
2405                    "_CaseTest", Syntax.Case, Parser.toExpArray(v));
2406            } else {
2407                RESULT = new UnresolvedFunCall(
2408                    "_CaseMatch", Syntax.Case, Parser.toExpArray(v));
2409            }
2410        
2411              CUP$Parser$result = new java_cup.runtime.Symbol(3/*case_expression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2412            }
2413          return CUP$Parser$result;
2414
2415          /*. . . . . . . . . . . . . . . . . . . .*/
2416          case 52: // value_expression_primary ::= case_expression 
2417            {
2418              Exp RESULT = null;
2419
2420                // Default action for single-symbol production
2421                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2422              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2423            }
2424          return CUP$Parser$result;
2425
2426          /*. . . . . . . . . . . . . . . . . . . .*/
2427          case 51: // value_expression_primary ::= NULL 
2428            {
2429              Exp RESULT = null;
2430                
2431            RESULT = Literal.nullValue;
2432        
2433              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2434            }
2435          return CUP$Parser$result;
2436
2437          /*. . . . . . . . . . . . . . . . . . . .*/
2438          case 50: // value_expression_primary ::= LBRACE exp_list_opt RBRACE 
2439            {
2440              Exp RESULT = null;
2441                int lisleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2442                int lisright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2443                List lis = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2444                 // set built from sets/tuples
2445            RESULT = new UnresolvedFunCall(
2446                "{}", Syntax.Braces, Parser.toExpArray(lis));
2447        
2448              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2449            }
2450          return CUP$Parser$result;
2451
2452          /*. . . . . . . . . . . . . . . . . . . .*/
2453          case 49: // value_expression_primary ::= LPAREN exp_list RPAREN 
2454            {
2455              Exp RESULT = null;
2456                int lisleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2457                int lisright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2458                List lis = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2459                
2460            // Whereas ([Sales],[Time]) and () are tuples, ([Sales]) and (5)
2461            // are just expressions.
2462            RESULT = new UnresolvedFunCall(
2463                "()", Syntax.Parentheses, Parser.toExpArray(lis));
2464        
2465              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2466            }
2467          return CUP$Parser$result;
2468
2469          /*. . . . . . . . . . . . . . . . . . . .*/
2470          case 48: // value_expression_primary ::= CAST LPAREN aliasedExpression RPAREN 
2471            {
2472              Exp RESULT = null;
2473                int aeleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2474                int aeright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2475                UnresolvedFunCall ae = (UnresolvedFunCall)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2476                
2477            assert ae.getArgCount() == 2;
2478            Exp e = ae.getArg(0);
2479            Id.NameSegment t = (Id.NameSegment) ((Id) ae.getArg(1)).getSegments().get(0);
2480            RESULT = new UnresolvedFunCall(
2481                "CAST", Syntax.Cast, new Exp[] {
2482                    e,
2483                    Literal.createSymbol(t.name)});
2484        
2485              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2486            }
2487          return CUP$Parser$result;
2488
2489          /*. . . . . . . . . . . . . . . . . . . .*/
2490          case 47: // value_expression_primary ::= bang_compound_id LPAREN exp_list_opt RPAREN 
2491            {
2492              Exp RESULT = null;
2493                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
2494                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
2495                Id i = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
2496                int lisleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2497                int lisright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2498                List lis = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2499                
2500            RESULT = new UnresolvedFunCall(
2501                ((Id.NameSegment) Util.last(i.getSegments())).name,
2502                Syntax.Function, Parser.toExpArray(lis));
2503        
2504              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2505            }
2506          return CUP$Parser$result;
2507
2508          /*. . . . . . . . . . . . . . . . . . . .*/
2509          case 46: // value_expression_primary ::= value_expression_primary DOT identifier LPAREN exp_list_opt RPAREN 
2510            {
2511              Exp RESULT = null;
2512                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
2513                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).right;
2514                Exp i = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-5)).value;
2515                int jleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
2516                int jright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
2517                Id.NameSegment j = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
2518                int lisleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2519                int lisright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2520                List lis = (List)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2521                
2522            lis.add(0, i);
2523            RESULT = new UnresolvedFunCall(
2524                j.name, Syntax.Method, Parser.toExpArray(lis));
2525        
2526              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2527            }
2528          return CUP$Parser$result;
2529
2530          /*. . . . . . . . . . . . . . . . . . . .*/
2531          case 45: // value_expression_primary ::= value_expression_primary DOT amp_quoted_identifier 
2532            {
2533              Exp RESULT = null;
2534                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2535                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2536                Exp i = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2537                int jleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2538                int jright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2539                Id.NameSegment j = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2540                
2541            if (i instanceof Id) {
2542                RESULT = ((Id) i).append(j);
2543            } else {
2544                RESULT = new UnresolvedFunCall(
2545                    j.name, Syntax.AmpersandQuotedProperty, new Exp[] {i});
2546            }
2547        
2548              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2549            }
2550          return CUP$Parser$result;
2551
2552          /*. . . . . . . . . . . . . . . . . . . .*/
2553          case 44: // value_expression_primary ::= value_expression_primary DOT quoted_identifier 
2554            {
2555              Exp RESULT = null;
2556                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2557                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2558                Exp i = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2559                int jleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2560                int jright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2561                Id.NameSegment j = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2562                
2563            if (i instanceof Id) {
2564                RESULT = ((Id) i).append(j);
2565            } else {
2566                RESULT = new UnresolvedFunCall(
2567                    j.name, Syntax.QuotedProperty, new Exp[] {i});
2568            }
2569        
2570              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2571            }
2572          return CUP$Parser$result;
2573
2574          /*. . . . . . . . . . . . . . . . . . . .*/
2575          case 43: // value_expression_primary ::= value_expression_primary DOT unquoted_identifier 
2576            {
2577              Exp RESULT = null;
2578                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2579                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2580                Exp i = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2581                int jleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2582                int jright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2583                Id.NameSegment j = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2584                
2585            if (i instanceof Id && !parser.isFunCall(j.name)) {
2586                RESULT = ((Id) i).append(j);
2587            } else {
2588                RESULT =
2589                    new UnresolvedFunCall(
2590                        j.name, Syntax.Property, new Exp[] {i});
2591            }
2592        
2593              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2594            }
2595          return CUP$Parser$result;
2596
2597          /*. . . . . . . . . . . . . . . . . . . .*/
2598          case 42: // value_expression_primary ::= identifier 
2599            {
2600              Exp RESULT = null;
2601                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2602                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2603                Id.NameSegment i = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2604                
2605            RESULT = new Id(i);
2606        
2607              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2608            }
2609          return CUP$Parser$result;
2610
2611          /*. . . . . . . . . . . . . . . . . . . .*/
2612          case 41: // value_expression_primary ::= NUMBER 
2613            {
2614              Exp RESULT = null;
2615                int dleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2616                int dright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2617                BigDecimal d = (BigDecimal)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2618                
2619            RESULT = Literal.create(d);
2620        
2621              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2622            }
2623          return CUP$Parser$result;
2624
2625          /*. . . . . . . . . . . . . . . . . . . .*/
2626          case 40: // value_expression_primary ::= STRING 
2627            {
2628              Exp RESULT = null;
2629                int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2630                int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2631                String s = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2632                
2633            RESULT = Literal.createString(s);
2634        
2635              CUP$Parser$result = new java_cup.runtime.Symbol(17/*value_expression_primary*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2636            }
2637          return CUP$Parser$result;
2638
2639          /*. . . . . . . . . . . . . . . . . . . .*/
2640          case 39: // factor ::= MINUS value_expression_primary 
2641            {
2642              Exp RESULT = null;
2643                int pleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2644                int pright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2645                Exp p = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2646                
2647            RESULT = new UnresolvedFunCall("-", Syntax.Prefix, new Exp[] {p});
2648        
2649              CUP$Parser$result = new java_cup.runtime.Symbol(7/*factor*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2650            }
2651          return CUP$Parser$result;
2652
2653          /*. . . . . . . . . . . . . . . . . . . .*/
2654          case 38: // factor ::= PLUS value_expression_primary 
2655            {
2656              Exp RESULT = null;
2657                int pleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2658                int pright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2659                Exp p = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2660                
2661            RESULT = p;
2662        
2663              CUP$Parser$result = new java_cup.runtime.Symbol(7/*factor*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2664            }
2665          return CUP$Parser$result;
2666
2667          /*. . . . . . . . . . . . . . . . . . . .*/
2668          case 37: // factor ::= value_expression_primary 
2669            {
2670              Exp RESULT = null;
2671
2672                // Default action for single-symbol production
2673                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2674              CUP$Parser$result = new java_cup.runtime.Symbol(7/*factor*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2675            }
2676          return CUP$Parser$result;
2677
2678          /*. . . . . . . . . . . . . . . . . . . .*/
2679          case 36: // term ::= term SOLIDUS factor 
2680            {
2681              Exp RESULT = null;
2682                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2683                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2684                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2685                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2686                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2687                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2688                
2689            RESULT = new UnresolvedFunCall("/", Syntax.Infix, new Exp[] {x, y});
2690        
2691              CUP$Parser$result = new java_cup.runtime.Symbol(9/*term*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2692            }
2693          return CUP$Parser$result;
2694
2695          /*. . . . . . . . . . . . . . . . . . . .*/
2696          case 35: // term ::= term ASTERISK factor 
2697            {
2698              Exp RESULT = null;
2699                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2700                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2701                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2702                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2703                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2704                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2705                
2706            RESULT = new UnresolvedFunCall("*", Syntax.Infix, new Exp[] {x, y});
2707        
2708              CUP$Parser$result = new java_cup.runtime.Symbol(9/*term*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2709            }
2710          return CUP$Parser$result;
2711
2712          /*. . . . . . . . . . . . . . . . . . . .*/
2713          case 34: // term ::= factor 
2714            {
2715              Exp RESULT = null;
2716
2717                // Default action for single-symbol production
2718                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2719              CUP$Parser$result = new java_cup.runtime.Symbol(9/*term*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2720            }
2721          return CUP$Parser$result;
2722
2723          /*. . . . . . . . . . . . . . . . . . . .*/
2724          case 33: // term2 ::= term2 CONCAT term 
2725            {
2726              Exp RESULT = null;
2727                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2728                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2729                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2730                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2731                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2732                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2733                
2734            RESULT =
2735                 new UnresolvedFunCall("||", Syntax.Infix, new Exp[] {x, y});
2736        
2737              CUP$Parser$result = new java_cup.runtime.Symbol(10/*term2*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2738            }
2739          return CUP$Parser$result;
2740
2741          /*. . . . . . . . . . . . . . . . . . . .*/
2742          case 32: // term2 ::= term2 MINUS term 
2743            {
2744              Exp RESULT = null;
2745                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2746                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2747                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2748                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2749                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2750                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2751                
2752            RESULT = new UnresolvedFunCall("-", Syntax.Infix, new Exp[] {x, y});
2753        
2754              CUP$Parser$result = new java_cup.runtime.Symbol(10/*term2*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2755            }
2756          return CUP$Parser$result;
2757
2758          /*. . . . . . . . . . . . . . . . . . . .*/
2759          case 31: // term2 ::= term2 PLUS term 
2760            {
2761              Exp RESULT = null;
2762                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2763                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2764                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2765                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2766                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2767                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2768                
2769            RESULT = new UnresolvedFunCall("+", Syntax.Infix, new Exp[] {x, y});
2770        
2771              CUP$Parser$result = new java_cup.runtime.Symbol(10/*term2*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2772            }
2773          return CUP$Parser$result;
2774
2775          /*. . . . . . . . . . . . . . . . . . . .*/
2776          case 30: // term2 ::= term 
2777            {
2778              Exp RESULT = null;
2779
2780                // Default action for single-symbol production
2781                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2782              CUP$Parser$result = new java_cup.runtime.Symbol(10/*term2*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2783            }
2784          return CUP$Parser$result;
2785
2786          /*. . . . . . . . . . . . . . . . . . . .*/
2787          case 29: // term3 ::= term3 NOT IN term2 
2788            {
2789              Exp RESULT = null;
2790                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
2791                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
2792                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
2793                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2794                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2795                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2796                
2797            RESULT = new UnresolvedFunCall(
2798                "NOT", Syntax.Prefix, new Exp[] {
2799                    new UnresolvedFunCall(
2800                        "IN", Syntax.Infix, new Exp[] {x, y})});
2801        
2802              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2803            }
2804          return CUP$Parser$result;
2805
2806          /*. . . . . . . . . . . . . . . . . . . .*/
2807          case 28: // term3 ::= term3 IN term2 
2808            {
2809              Exp RESULT = null;
2810                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2811                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2812                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2813                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2814                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2815                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2816                
2817            RESULT =
2818                new UnresolvedFunCall("IN", Syntax.Infix, new Exp[] {x, y});
2819        
2820              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2821            }
2822          return CUP$Parser$result;
2823
2824          /*. . . . . . . . . . . . . . . . . . . .*/
2825          case 27: // term3 ::= term3 NOT MATCHES term2 
2826            {
2827              Exp RESULT = null;
2828                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
2829                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
2830                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
2831                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2832                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2833                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2834                
2835            RESULT = new UnresolvedFunCall(
2836                "NOT", Syntax.Prefix, new Exp[] {
2837                    new UnresolvedFunCall(
2838                        "MATCHES", Syntax.Infix, new Exp[] {x, y})});
2839        
2840              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2841            }
2842          return CUP$Parser$result;
2843
2844          /*. . . . . . . . . . . . . . . . . . . .*/
2845          case 26: // term3 ::= term3 MATCHES term2 
2846            {
2847              Exp RESULT = null;
2848                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2849                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2850                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2851                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2852                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2853                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2854                
2855            RESULT =
2856                new UnresolvedFunCall(
2857                    "MATCHES", Syntax.Infix, new Exp[] {x, y});
2858        
2859              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2860            }
2861          return CUP$Parser$result;
2862
2863          /*. . . . . . . . . . . . . . . . . . . .*/
2864          case 25: // term3 ::= term3 IS EMPTY 
2865            {
2866              Exp RESULT = null;
2867                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2868                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2869                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2870                
2871            RESULT =
2872                new UnresolvedFunCall(
2873                    "IS EMPTY", Syntax.Postfix, new Exp[] {x});
2874        
2875              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2876            }
2877          return CUP$Parser$result;
2878
2879          /*. . . . . . . . . . . . . . . . . . . .*/
2880          case 24: // term3 ::= term3 IS term2 
2881            {
2882              Exp RESULT = null;
2883                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2884                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2885                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2886                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2887                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2888                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2889                
2890            // e.g. "x IS y"; but "x IS NULL" is handled elsewhere
2891            RESULT =
2892                new UnresolvedFunCall("IS", Syntax.Infix, new Exp[] {x, y});
2893        
2894              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2895            }
2896          return CUP$Parser$result;
2897
2898          /*. . . . . . . . . . . . . . . . . . . .*/
2899          case 23: // term3 ::= term3 IS NULL 
2900            {
2901              Exp RESULT = null;
2902                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2903                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2904                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2905                
2906            RESULT =
2907                new UnresolvedFunCall("IS NULL", Syntax.Postfix, new Exp[] {x});
2908        
2909              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2910            }
2911          return CUP$Parser$result;
2912
2913          /*. . . . . . . . . . . . . . . . . . . .*/
2914          case 22: // term3 ::= term3 comp_op term2 
2915            {
2916              Exp RESULT = null;
2917                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2918                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2919                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2920                int opleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
2921                int opright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
2922                String op = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
2923                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2924                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2925                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2926                 // e.g. "1 < 5"
2927            RESULT = new UnresolvedFunCall(op, Syntax.Infix, new Exp[] {x, y});
2928        
2929              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2930            }
2931          return CUP$Parser$result;
2932
2933          /*. . . . . . . . . . . . . . . . . . . .*/
2934          case 21: // term3 ::= term2 
2935            {
2936              Exp RESULT = null;
2937
2938                // Default action for single-symbol production
2939                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2940              CUP$Parser$result = new java_cup.runtime.Symbol(11/*term3*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2941            }
2942          return CUP$Parser$result;
2943
2944          /*. . . . . . . . . . . . . . . . . . . .*/
2945          case 20: // term4 ::= NOT term4 
2946            {
2947              Exp RESULT = null;
2948                int pleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2949                int pright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2950                Exp p = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2951                
2952            RESULT = new UnresolvedFunCall("NOT", Syntax.Prefix, new Exp[] {p});
2953        
2954              CUP$Parser$result = new java_cup.runtime.Symbol(12/*term4*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2955            }
2956          return CUP$Parser$result;
2957
2958          /*. . . . . . . . . . . . . . . . . . . .*/
2959          case 19: // term4 ::= term3 
2960            {
2961              Exp RESULT = null;
2962
2963                // Default action for single-symbol production
2964                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2965              CUP$Parser$result = new java_cup.runtime.Symbol(12/*term4*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2966            }
2967          return CUP$Parser$result;
2968
2969          /*. . . . . . . . . . . . . . . . . . . .*/
2970          case 18: // term5 ::= term5 AND term4 
2971            {
2972              Exp RESULT = null;
2973                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
2974                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
2975                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
2976                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
2977                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
2978                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
2979                
2980            RESULT =
2981                new UnresolvedFunCall("AND", Syntax.Infix, new Exp[] {x, y});
2982        
2983              CUP$Parser$result = new java_cup.runtime.Symbol(13/*term5*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2984            }
2985          return CUP$Parser$result;
2986
2987          /*. . . . . . . . . . . . . . . . . . . .*/
2988          case 17: // term5 ::= term4 
2989            {
2990              Exp RESULT = null;
2991
2992                // Default action for single-symbol production
2993                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
2994              CUP$Parser$result = new java_cup.runtime.Symbol(13/*term5*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
2995            }
2996          return CUP$Parser$result;
2997
2998          /*. . . . . . . . . . . . . . . . . . . .*/
2999          case 16: // value_expression ::= value_expression XOR term5 
3000            {
3001              Exp RESULT = null;
3002                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
3003                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
3004                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
3005                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3006                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3007                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3008                
3009            RESULT =
3010                new UnresolvedFunCall("XOR", Syntax.Infix, new Exp[] {x, y});
3011        
3012              CUP$Parser$result = new java_cup.runtime.Symbol(15/*value_expression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3013            }
3014          return CUP$Parser$result;
3015
3016          /*. . . . . . . . . . . . . . . . . . . .*/
3017          case 15: // value_expression ::= value_expression OR term5 
3018            {
3019              Exp RESULT = null;
3020                int xleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
3021                int xright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
3022                Exp x = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
3023                int yleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3024                int yright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3025                Exp y = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3026                
3027            RESULT =
3028                new UnresolvedFunCall("OR", Syntax.Infix, new Exp[] {x, y});
3029        
3030              CUP$Parser$result = new java_cup.runtime.Symbol(15/*value_expression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3031            }
3032          return CUP$Parser$result;
3033
3034          /*. . . . . . . . . . . . . . . . . . . .*/
3035          case 14: // value_expression ::= term5 
3036            {
3037              Exp RESULT = null;
3038
3039                // Default action for single-symbol production
3040                RESULT = (Exp)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
3041              CUP$Parser$result = new java_cup.runtime.Symbol(15/*value_expression*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3042            }
3043          return CUP$Parser$result;
3044
3045          /*. . . . . . . . . . . . . . . . . . . .*/
3046          case 13: // cube_name ::= compound_id 
3047            {
3048              Id RESULT = null;
3049
3050                // Default action for single-symbol production
3051                RESULT = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
3052              CUP$Parser$result = new java_cup.runtime.Symbol(27/*cube_name*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3053            }
3054          return CUP$Parser$result;
3055
3056          /*. . . . . . . . . . . . . . . . . . . .*/
3057          case 12: // bang_compound_id ::= bang_compound_id BANG identifier 
3058            {
3059              Id RESULT = null;
3060                int hdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
3061                int hdright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
3062                Id hd = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
3063                int tlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3064                int tlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3065                Id.NameSegment tl = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3066                
3067            RESULT = hd.append(tl);
3068        
3069              CUP$Parser$result = new java_cup.runtime.Symbol(24/*bang_compound_id*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3070            }
3071          return CUP$Parser$result;
3072
3073          /*. . . . . . . . . . . . . . . . . . . .*/
3074          case 11: // bang_compound_id ::= identifier 
3075            {
3076              Id RESULT = null;
3077                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3078                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3079                Id.NameSegment i = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3080                
3081            RESULT = new Id(i);
3082        
3083              CUP$Parser$result = new java_cup.runtime.Symbol(24/*bang_compound_id*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3084            }
3085          return CUP$Parser$result;
3086
3087          /*. . . . . . . . . . . . . . . . . . . .*/
3088          case 10: // compound_id ::= compound_id DOT identifier 
3089            {
3090              Id RESULT = null;
3091                int hdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
3092                int hdright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
3093                Id hd = (Id)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
3094                int tlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3095                int tlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3096                Id.NameSegment tl = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3097                
3098            RESULT = hd.append(tl);
3099        
3100              CUP$Parser$result = new java_cup.runtime.Symbol(26/*compound_id*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3101            }
3102          return CUP$Parser$result;
3103
3104          /*. . . . . . . . . . . . . . . . . . . .*/
3105          case 9: // compound_id ::= identifier 
3106            {
3107              Id RESULT = null;
3108                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3109                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3110                Id.NameSegment i = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3111                
3112            RESULT = new Id(i);
3113        
3114              CUP$Parser$result = new java_cup.runtime.Symbol(26/*compound_id*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3115            }
3116          return CUP$Parser$result;
3117
3118          /*. . . . . . . . . . . . . . . . . . . .*/
3119          case 8: // keyword ::= PROPERTIES 
3120            {
3121              String RESULT = null;
3122                
3123            RESULT = "Properties";
3124        
3125              CUP$Parser$result = new java_cup.runtime.Symbol(33/*keyword*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3126            }
3127          return CUP$Parser$result;
3128
3129          /*. . . . . . . . . . . . . . . . . . . .*/
3130          case 7: // keyword ::= DIMENSION 
3131            {
3132              String RESULT = null;
3133                
3134            RESULT = "Dimension";
3135        
3136              CUP$Parser$result = new java_cup.runtime.Symbol(33/*keyword*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3137            }
3138          return CUP$Parser$result;
3139
3140          /*. . . . . . . . . . . . . . . . . . . .*/
3141          case 6: // identifier ::= quoted_identifier 
3142            {
3143              Id.NameSegment RESULT = null;
3144
3145                // Default action for single-symbol production
3146                RESULT = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
3147              CUP$Parser$result = new java_cup.runtime.Symbol(34/*identifier*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3148            }
3149          return CUP$Parser$result;
3150
3151          /*. . . . . . . . . . . . . . . . . . . .*/
3152          case 5: // identifier ::= unquoted_identifier 
3153            {
3154              Id.NameSegment RESULT = null;
3155
3156                // Default action for single-symbol production
3157                RESULT = (Id.NameSegment)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top)).value;
3158              CUP$Parser$result = new java_cup.runtime.Symbol(34/*identifier*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3159            }
3160          return CUP$Parser$result;
3161
3162          /*. . . . . . . . . . . . . . . . . . . .*/
3163          case 4: // unquoted_identifier ::= keyword 
3164            {
3165              Id.NameSegment RESULT = null;
3166                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3167                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3168                String i = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3169                
3170            RESULT = new Id.NameSegment(i, Id.Quoting.UNQUOTED);
3171        
3172              CUP$Parser$result = new java_cup.runtime.Symbol(36/*unquoted_identifier*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3173            }
3174          return CUP$Parser$result;
3175
3176          /*. . . . . . . . . . . . . . . . . . . .*/
3177          case 3: // unquoted_identifier ::= ID 
3178            {
3179              Id.NameSegment RESULT = null;
3180                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3181                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3182                String i = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3183                
3184            RESULT = new Id.NameSegment(i, Id.Quoting.UNQUOTED);
3185        
3186              CUP$Parser$result = new java_cup.runtime.Symbol(36/*unquoted_identifier*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3187            }
3188          return CUP$Parser$result;
3189
3190          /*. . . . . . . . . . . . . . . . . . . .*/
3191          case 2: // amp_quoted_identifier ::= AMP_QUOTED_ID 
3192            {
3193              Id.NameSegment RESULT = null;
3194                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3195                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3196                String i = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3197                
3198            RESULT = new Id.NameSegment(i, Id.Quoting.KEY); // yuck
3199        
3200              CUP$Parser$result = new java_cup.runtime.Symbol(37/*amp_quoted_identifier*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3201            }
3202          return CUP$Parser$result;
3203
3204          /*. . . . . . . . . . . . . . . . . . . .*/
3205          case 1: // quoted_identifier ::= QUOTED_ID 
3206            {
3207              Id.NameSegment RESULT = null;
3208                int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left;
3209                int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right;
3210                String i = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-0)).value;
3211                
3212            RESULT = new Id.NameSegment(i, Id.Quoting.QUOTED);
3213        
3214              CUP$Parser$result = new java_cup.runtime.Symbol(35/*quoted_identifier*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3215            }
3216          return CUP$Parser$result;
3217
3218          /*. . . . . . . . . . . . . . . . . . . .*/
3219          case 0: // $START ::= statement EOF 
3220            {
3221              Object RESULT = null;
3222                int start_valleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
3223                int start_valright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
3224                QueryPart start_val = (QueryPart)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
3225                RESULT = start_val;
3226              CUP$Parser$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-0)).right, RESULT);
3227            }
3228          /* ACCEPT */
3229          CUP$Parser$parser.done_parsing();
3230          return CUP$Parser$result;
3231
3232          /* . . . . . .*/
3233          default:
3234            throw new Exception(
3235               "Invalid action number found in internal parse table");
3236
3237        }
3238    }
3239}
3240