001
002 //----------------------------------------------------
003 // The following code was generated by CUP v0.10i
004 // Tue Mar 16 03:05:28 EST 1999
005 //----------------------------------------------------
006
007 package com.croftsoft.apps.compiler;
008
009 import java.util.HashMap;
010 import java.util.Map;
011 import java_cup.runtime.*;
012
013 public class CalcParser extends java_cup.runtime.lr_parser {
014
015 /** constructor */
016 public CalcParser() {super();}
017
018 /** production table */
019 protected static final short _production_table[][] =
020 unpackFromStrings(new String[] {
021 "\000\025\000\002\002\004\000\002\003\003\000\002\004" +
022 "\005\000\002\004\004\000\002\005\003\000\002\005\003" +
023 "\000\002\005\003\000\002\006\006\000\002\006\006\000" +
024 "\002\007\005\000\002\010\005\000\002\010\005\000\002" +
025 "\010\005\000\002\010\005\000\002\010\005\000\002\010" +
026 "\005\000\002\010\004\000\002\010\003\000\002\010\003" +
027 "\000\002\010\005\000\002\010\005" });
028
029 /** access to production table */
030 public short[][] production_table() {return _production_table;}
031
032 /** parse action table */
033 protected static final short[][] _action_table =
034 unpackFromStrings(new String[] {
035 "\000\051\000\010\003\005\024\007\027\013\001\002\000" +
036 "\004\002\053\001\002\000\004\021\ufffb\001\002\000\004" +
037 "\021\ufffc\001\002\000\004\022\046\001\002\000\004\002" +
038 "\000\001\002\000\004\021\044\001\002\000\004\021\ufffd" +
039 "\001\002\000\004\025\014\001\002\000\012\005\016\022" +
040 "\017\026\015\027\021\001\002\000\022\004\uffef\005\uffef" +
041 "\006\uffef\007\uffef\010\uffef\011\uffef\021\uffef\023\uffef\001" +
042 "\002\000\012\005\016\022\017\026\015\027\021\001\002" +
043 "\000\012\005\016\022\017\026\015\027\040\001\002\000" +
044 "\022\004\023\005\024\006\027\007\026\010\022\011\025" +
045 "\021\ufff8\023\ufff8\001\002\000\022\004\ufff0\005\ufff0\006" +
046 "\ufff0\007\ufff0\010\ufff0\011\ufff0\021\ufff0\023\ufff0\001\002" +
047 "\000\012\005\016\022\017\026\015\027\021\001\002\000" +
048 "\012\005\016\022\017\026\015\027\021\001\002\000\012" +
049 "\005\016\022\017\026\015\027\021\001\002\000\012\005" +
050 "\016\022\017\026\015\027\021\001\002\000\012\005\016" +
051 "\022\017\026\015\027\021\001\002\000\012\005\016\022" +
052 "\017\026\015\027\021\001\002\000\022\004\ufff5\005\ufff5" +
053 "\006\ufff5\007\ufff5\010\ufff5\011\025\021\ufff5\023\ufff5\001" +
054 "\002\000\022\004\ufff4\005\ufff4\006\ufff4\007\ufff4\010\ufff4" +
055 "\011\025\021\ufff4\023\ufff4\001\002\000\022\004\ufff3\005" +
056 "\ufff3\006\ufff3\007\ufff3\010\ufff3\011\025\021\ufff3\023\ufff3" +
057 "\001\002\000\022\004\ufff6\005\ufff6\006\027\007\026\010" +
058 "\022\011\025\021\ufff6\023\ufff6\001\002\000\022\004\ufff7" +
059 "\005\ufff7\006\027\007\026\010\022\011\025\021\ufff7\023" +
060 "\ufff7\001\002\000\022\004\ufff2\005\ufff2\006\ufff2\007\ufff2" +
061 "\010\ufff2\011\025\021\ufff2\023\ufff2\001\002\000\004\023" +
062 "\042\001\002\000\020\004\023\005\024\006\027\007\026" +
063 "\010\022\011\025\023\041\001\002\000\022\004\ufff0\005" +
064 "\ufff0\006\ufff0\007\ufff0\010\ufff0\011\ufff0\023\ufff0\025\014" +
065 "\001\002\000\022\004\uffee\005\uffee\006\uffee\007\uffee\010" +
066 "\uffee\011\uffee\021\uffee\023\uffee\001\002\000\022\004\uffed" +
067 "\005\uffed\006\uffed\007\uffed\010\uffed\011\uffed\021\uffed\023" +
068 "\uffed\001\002\000\022\004\ufff1\005\ufff1\006\ufff1\007\ufff1" +
069 "\010\ufff1\011\025\021\ufff1\023\ufff1\001\002\000\012\002" +
070 "\ufffe\003\005\024\007\027\013\001\002\000\004\002\uffff" +
071 "\001\002\000\012\005\016\022\017\026\015\027\040\001" +
072 "\002\000\020\004\023\005\024\006\027\007\026\010\022" +
073 "\011\025\023\052\001\002\000\004\023\051\001\002\000" +
074 "\004\021\ufff9\001\002\000\004\021\ufffa\001\002\000\004" +
075 "\002\001\001\002" });
076
077 /** access to parse action table */
078 public short[][] action_table() {return _action_table;}
079
080 /** reduce_goto table */
081 protected static final short[][] _reduce_table =
082 unpackFromStrings(new String[] {
083 "\000\051\000\014\003\003\004\007\005\010\006\005\007" +
084 "\011\001\001\000\002\001\001\000\002\001\001\000\002" +
085 "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
086 "\001\000\002\001\001\000\002\001\001\000\004\010\017" +
087 "\001\001\000\002\001\001\000\004\010\042\001\001\000" +
088 "\006\007\035\010\036\001\001\000\002\001\001\000\002" +
089 "\001\001\000\004\010\034\001\001\000\004\010\033\001" +
090 "\001\000\004\010\032\001\001\000\004\010\031\001\001" +
091 "\000\004\010\030\001\001\000\004\010\027\001\001\000" +
092 "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
093 "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
094 "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
095 "\000\002\001\001\000\002\001\001\000\012\004\044\005" +
096 "\010\006\005\007\011\001\001\000\002\001\001\000\006" +
097 "\007\047\010\046\001\001\000\002\001\001\000\002\001" +
098 "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
099 "" });
100
101 /** access to reduce_goto table */
102 public short[][] reduce_table() {return _reduce_table;}
103
104 /** instance of action encapsulation class */
105 protected CUP$CalcParser$actions action_obj;
106
107 /** action encapsulation object initializer */
108 protected void init_actions()
109 {
110 action_obj = new CUP$CalcParser$actions(this);
111 }
112
113 /** invoke a user supplied parse action */
114 public java_cup.runtime.Symbol do_action(
115 int act_num,
116 java_cup.runtime.lr_parser parser,
117 java.util.Stack stack,
118 int top)
119 throws java.lang.Exception
120 {
121 /* call code in generated class */
122 return action_obj.CUP$CalcParser$do_action(act_num, parser, stack, top);
123 }
124
125 /** start state */
126 public int start_state() {return 0;}
127 /** start production */
128 public int start_production() {return 0;}
129
130 /** EOF Symbol index */
131 public int EOF_sym() {return 0;}
132
133 /** error Symbol index */
134 public int error_sym() {return 1;}
135
136
137 /** user initialization */
138 public void user_init() throws java.lang.Exception
139 {
140
141 }
142
143 /** scan to get the next Symbol */
144 public java_cup.runtime.Symbol scan()
145 throws java.lang.Exception
146 {
147 return calcScanner.nextToken ( );
148 }
149
150
151
152 protected CalcScanner calcScanner;
153
154 public CalcParser ( CalcScanner calcScanner )
155 //////////////////////////////////////////////////////////////////////
156 {
157 this.calcScanner = calcScanner;
158 }
159
160
161 }
162
163 /** Cup generated class to encapsulate user supplied action code.*/
164 class CUP$CalcParser$actions {
165
166
167
168 //////////////////////////////////////////////////////////////////////
169 // Action Code
170 //////////////////////////////////////////////////////////////////////
171
172 public static Integer actExpressPlus ( Integer e0, Integer e1 )
173 //////////////////////////////////////////////////////////////////////
174 {
175 if ( ( e0 == null ) || ( e1 == null ) )
176 {
177 System.out.println ( "null operand" );
178 return null;
179 }
180
181 return new Integer ( e0.intValue ( ) + e1.intValue ( ) );
182 }
183
184 public static Integer actExpressMinus ( Integer e0, Integer e1 )
185 //////////////////////////////////////////////////////////////////////
186 {
187 if ( ( e0 == null ) || ( e1 == null ) )
188 {
189 System.out.println ( "null operand" );
190 return null;
191 }
192
193 return new Integer ( e0.intValue ( ) - e1.intValue ( ) );
194 }
195
196 public static Integer actExpressTimes ( Integer e0, Integer e1 )
197 //////////////////////////////////////////////////////////////////////
198 {
199 if ( ( e0 == null ) || ( e1 == null ) )
200 {
201 System.out.println ( "null operand" );
202 return null;
203 }
204
205 return new Integer ( e0.intValue ( ) * e1.intValue ( ) );
206 }
207
208 public static Integer actExpressDivide ( Integer e0, Integer e1 )
209 //////////////////////////////////////////////////////////////////////
210 {
211 if ( ( e0 == null ) || ( e1 == null ) )
212 {
213 System.out.println ( "null operand" );
214 return null;
215 }
216
217 return new Integer ( e0.intValue ( ) / e1.intValue ( ) );
218 }
219
220 public static Integer actExpressExponent ( Integer e0, Integer e1 )
221 //////////////////////////////////////////////////////////////////////
222 {
223 if ( ( e0 == null ) || ( e1 == null ) )
224 {
225 System.out.println ( "null operand" );
226 return null;
227 }
228
229 return new Integer ( power ( e0.intValue ( ), e1.intValue ( ) ) );
230 }
231
232 public static Integer actExpressModulus ( Integer e0, Integer e1 )
233 //////////////////////////////////////////////////////////////////////
234 {
235 if ( ( e0 == null ) || ( e1 == null ) )
236 {
237 System.out.println ( "null operand" );
238 return null;
239 }
240
241 return new Integer ( e0.intValue ( ) % e1.intValue ( ) );
242 }
243
244 public static Integer actExpressNegate ( Integer e0 )
245 //////////////////////////////////////////////////////////////////////
246 {
247 if ( e0 == null )
248 {
249 System.out.println ( "null operand" );
250 return null;
251 }
252
253 return new Integer ( -e0.intValue ( ) );
254 }
255
256 //////////////////////////////////////////////////////////////////////
257 //////////////////////////////////////////////////////////////////////
258
259 public static int power ( int a, int b )
260 //////////////////////////////////////////////////////////////////////
261 {
262 if ( b < 0 )
263 {
264 throw new IllegalArgumentException ( "negative exponent" );
265 }
266
267 int result = 1;
268
269 for ( int i = 0; i < b; i++ )
270 {
271 result *= a;
272 }
273
274 return result;
275 }
276
277 //////////////////////////////////////////////////////////////////////
278 //////////////////////////////////////////////////////////////////////
279
280 private Map map = new HashMap ( );
281
282 public Integer actExpressVariable ( String variable )
283 //////////////////////////////////////////////////////////////////////
284 {
285 return ( Integer ) map.get ( variable );
286 }
287
288 public void actWrite ( Integer i )
289 //////////////////////////////////////////////////////////////////////
290 {
291 System.out.println ( i );
292 }
293
294 public Integer actAssignment ( String variable, Integer i )
295 //////////////////////////////////////////////////////////////////////
296 {
297 map.put ( variable, i );
298 return i;
299 }
300
301
302 private final CalcParser parser;
303
304 /** Constructor */
305 CUP$CalcParser$actions(CalcParser parser) {
306 this.parser = parser;
307 }
308
309 /** Method with the actual generated action code. */
310 public final java_cup.runtime.Symbol CUP$CalcParser$do_action(
311 int CUP$CalcParser$act_num,
312 java_cup.runtime.lr_parser CUP$CalcParser$parser,
313 java.util.Stack CUP$CalcParser$stack,
314 int CUP$CalcParser$top)
315 throws java.lang.Exception
316 {
317 /* Symbol object for return from actions */
318 java_cup.runtime.Symbol CUP$CalcParser$result;
319
320 /* select the action based on the action number */
321 switch (CUP$CalcParser$act_num)
322 {
323 /*. . . . . . . . . . . . . . . . . . . .*/
324 case 20: // expression ::= LPAREN assignment RPAREN
325 {
326 Integer RESULT = null;
327 int a0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left;
328 int a0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).right;
329 Integer a0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).value;
330 RESULT = a0;
331 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
332 }
333 return CUP$CalcParser$result;
334
335 /*. . . . . . . . . . . . . . . . . . . .*/
336 case 19: // expression ::= LPAREN expression RPAREN
337 {
338 Integer RESULT = null;
339 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left;
340 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).right;
341 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).value;
342 RESULT = e0;
343 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
344 }
345 return CUP$CalcParser$result;
346
347 /*. . . . . . . . . . . . . . . . . . . .*/
348 case 18: // expression ::= INTEGER
349 {
350 Integer RESULT = null;
351 int i0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
352 int i0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
353 Integer i0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
354 RESULT = i0;
355 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
356 }
357 return CUP$CalcParser$result;
358
359 /*. . . . . . . . . . . . . . . . . . . .*/
360 case 17: // expression ::= VARIABLE
361 {
362 Integer RESULT = null;
363 int v0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
364 int v0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
365 String v0 = (String)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
366 RESULT = actExpressVariable ( v0 );
367 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
368 }
369 return CUP$CalcParser$result;
370
371 /*. . . . . . . . . . . . . . . . . . . .*/
372 case 16: // expression ::= MINUS expression
373 {
374 Integer RESULT = null;
375 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
376 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
377 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
378 RESULT = actExpressNegate ( e0 );
379 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
380 }
381 return CUP$CalcParser$result;
382
383 /*. . . . . . . . . . . . . . . . . . . .*/
384 case 15: // expression ::= expression MOD expression
385 {
386 Integer RESULT = null;
387 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left;
388 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).right;
389 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).value;
390 int e1left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
391 int e1right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
392 Integer e1 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
393 RESULT = actExpressModulus ( e0, e1 );
394 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
395 }
396 return CUP$CalcParser$result;
397
398 /*. . . . . . . . . . . . . . . . . . . .*/
399 case 14: // expression ::= expression EXP expression
400 {
401 Integer RESULT = null;
402 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left;
403 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).right;
404 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).value;
405 int e1left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
406 int e1right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
407 Integer e1 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
408 RESULT = actExpressExponent ( e0, e1 );
409 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
410 }
411 return CUP$CalcParser$result;
412
413 /*. . . . . . . . . . . . . . . . . . . .*/
414 case 13: // expression ::= expression DIVIDE expression
415 {
416 Integer RESULT = null;
417 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left;
418 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).right;
419 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).value;
420 int e1left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
421 int e1right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
422 Integer e1 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
423 RESULT = actExpressDivide ( e0, e1 );
424 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
425 }
426 return CUP$CalcParser$result;
427
428 /*. . . . . . . . . . . . . . . . . . . .*/
429 case 12: // expression ::= expression TIMES expression
430 {
431 Integer RESULT = null;
432 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left;
433 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).right;
434 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).value;
435 int e1left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
436 int e1right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
437 Integer e1 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
438 RESULT = actExpressTimes ( e0, e1 );
439 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
440 }
441 return CUP$CalcParser$result;
442
443 /*. . . . . . . . . . . . . . . . . . . .*/
444 case 11: // expression ::= expression MINUS expression
445 {
446 Integer RESULT = null;
447 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left;
448 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).right;
449 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).value;
450 int e1left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
451 int e1right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
452 Integer e1 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
453 RESULT = actExpressMinus ( e0, e1 );
454 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
455 }
456 return CUP$CalcParser$result;
457
458 /*. . . . . . . . . . . . . . . . . . . .*/
459 case 10: // expression ::= expression PLUS expression
460 {
461 Integer RESULT = null;
462 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left;
463 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).right;
464 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).value;
465 int e1left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
466 int e1right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
467 Integer e1 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
468 RESULT = actExpressPlus ( e0, e1 );
469 CUP$CalcParser$result = new java_cup.runtime.Symbol(6/*expression*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
470 }
471 return CUP$CalcParser$result;
472
473 /*. . . . . . . . . . . . . . . . . . . .*/
474 case 9: // assignment ::= VARIABLE ASSIGN expression
475 {
476 Integer RESULT = null;
477 int v0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left;
478 int v0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).right;
479 String v0 = (String)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).value;
480 int e0left = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left;
481 int e0right = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right;
482 Integer e0 = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).value;
483 RESULT = actAssignment ( v0, e0 );
484 CUP$CalcParser$result = new java_cup.runtime.Symbol(5/*assignment*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
485 }
486 return CUP$CalcParser$result;
487
488 /*. . . . . . . . . . . . . . . . . . . .*/
489 case 8: // write ::= WRITE LPAREN assignment RPAREN
490 {
491 Object RESULT = null;
492 int aleft = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left;
493 int aright = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).right;
494 Integer a = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).value;
495 actWrite ( a );
496 CUP$CalcParser$result = new java_cup.runtime.Symbol(4/*write*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
497 }
498 return CUP$CalcParser$result;
499
500 /*. . . . . . . . . . . . . . . . . . . .*/
501 case 7: // write ::= WRITE LPAREN expression RPAREN
502 {
503 Object RESULT = null;
504 int eleft = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left;
505 int eright = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).right;
506 Integer e = (Integer)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).value;
507 actWrite ( e );
508 CUP$CalcParser$result = new java_cup.runtime.Symbol(4/*write*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
509 }
510 return CUP$CalcParser$result;
511
512 /*. . . . . . . . . . . . . . . . . . . .*/
513 case 6: // statement ::= error
514 {
515 Object RESULT = null;
516 System.out.println ( "syntax error" );
517 CUP$CalcParser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
518 }
519 return CUP$CalcParser$result;
520
521 /*. . . . . . . . . . . . . . . . . . . .*/
522 case 5: // statement ::= write
523 {
524 Object RESULT = null;
525
526 CUP$CalcParser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
527 }
528 return CUP$CalcParser$result;
529
530 /*. . . . . . . . . . . . . . . . . . . .*/
531 case 4: // statement ::= assignment
532 {
533 Object RESULT = null;
534
535 CUP$CalcParser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
536 }
537 return CUP$CalcParser$result;
538
539 /*. . . . . . . . . . . . . . . . . . . .*/
540 case 3: // statementList ::= statement SEMICOLON
541 {
542 Object RESULT = null;
543
544 CUP$CalcParser$result = new java_cup.runtime.Symbol(2/*statementList*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
545 }
546 return CUP$CalcParser$result;
547
548 /*. . . . . . . . . . . . . . . . . . . .*/
549 case 2: // statementList ::= statement SEMICOLON statementList
550 {
551 Object RESULT = null;
552
553 CUP$CalcParser$result = new java_cup.runtime.Symbol(2/*statementList*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
554 }
555 return CUP$CalcParser$result;
556
557 /*. . . . . . . . . . . . . . . . . . . .*/
558 case 1: // program ::= statementList
559 {
560 Object RESULT = null;
561
562 CUP$CalcParser$result = new java_cup.runtime.Symbol(1/*program*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
563 }
564 return CUP$CalcParser$result;
565
566 /*. . . . . . . . . . . . . . . . . . . .*/
567 case 0: // $START ::= program EOF
568 {
569 Object RESULT = null;
570 int start_valleft = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left;
571 int start_valright = ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).right;
572 Object start_val = (Object)((java_cup.runtime.Symbol) CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).value;
573 RESULT = start_val;
574 CUP$CalcParser$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$CalcParser$stack.elementAt(CUP$CalcParser$top-0)).right, RESULT);
575 }
576 /* ACCEPT */
577 CUP$CalcParser$parser.done_parsing();
578 return CUP$CalcParser$result;
579
580 /* . . . . . .*/
581 default:
582 throw new Exception(
583 "Invalid action number found in internal parse table");
584
585 }
586 }
587 }
588