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