//---------------------------------------------------- // The following code was generated by Java(tm) CUP v0.9d // Sun Jan 07 17:10:11 EST 1996 //---------------------------------------------------- import java_cup.runtime.*; public class parser extends java_cup.runtime.lr_parser { /** constructor */ public parser() {super();} /** production table */ protected static final short _production_table[][] = { {1, 2}, {0, 2}, {1, 1}, {6, 0}, {2, 3}, {3, 3}, {3, 3}, {3, 1}, {4, 3}, {4, 3}, {4, 3}, {4, 1}, {5, 1}, {5, 2}, {5, 3} }; /** access to production table */ public short[][] production_table() {return _production_table;} /** parse action table */ protected static final short[][] _action_table = { /*0*/{4,2,8,9,10,4,-1,0}, /*1*/{4,2,8,9,10,4,-1,0}, /*2*/{2,-12,3,-12,4,-12,5,-12,6,-12,7,-12,9,-12,-1,0}, /*3*/{2,-13,3,-13,4,-13,5,-13,6,-13,7,-13,9,-13,-1,0}, /*4*/{0,-3,4,-3,8,-3,10,-3,-1,0}, /*5*/{2,-4,3,13,4,11,-1,0}, /*6*/{0,23,4,2,8,9,10,4,-1,0}, /*7*/{2,-8,3,-8,4,-8,5,16,6,17,7,15,9,-8,-1,0}, /*8*/{4,2,8,9,10,4,-1,0}, /*9*/{3,13,4,11,9,12,-1,0}, /*10*/{4,2,8,9,10,4,-1,0}, /*11*/{2,-15,3,-15,4,-15,5,-15,6,-15,7,-15,9,-15,-1,0}, /*12*/{4,2,8,9,10,4,-1,0}, /*13*/{2,-6,3,-6,4,-6,5,16,6,17,7,15,9,-6,-1,0}, /*14*/{4,2,8,9,10,4,-1,0}, /*15*/{4,2,8,9,10,4,-1,0}, /*16*/{4,2,8,9,10,4,-1,0}, /*17*/{2,-10,3,-10,4,-10,5,-10,6,-10,7,-10,9,-10,-1,0}, /*18*/{2,-9,3,-9,4,-9,5,-9,6,-9,7,-9,9,-9,-1,0}, /*19*/{2,-11,3,-11,4,-11,5,-11,6,-11,7,-11,9,-11,-1,0}, /*20*/{2,-7,3,-7,4,-7,5,16,6,17,7,15,9,-7,-1,0}, /*21*/{0,-1,4,-1,8,-1,10,-1,-1,0}, /*22*/{0,-2,-1,0}, /*23*/{2,25,-1,0}, /*24*/{0,-5,4,-5,8,-5,10,-5,-1,0}, /*25*/{2,-14,3,-14,4,-14,5,-14,6,-14,7,-14,9,-14,-1,0}, }; /** access to parse action table */ public short[][] action_table() {return _action_table;} /** reduce_goto table */ protected static final short[][] _reduce_table = { /*0*/{1,6,2,4,3,5,4,7,5,2,-1,-1}, /*1*/{5,25,-1,-1}, /*2*/{-1,-1}, /*3*/{-1,-1}, /*4*/{-1,-1}, /*5*/{6,23,-1,-1}, /*6*/{2,21,3,5,4,7,5,2,-1,-1}, /*7*/{-1,-1}, /*8*/{3,9,4,7,5,2,-1,-1}, /*9*/{-1,-1}, /*10*/{4,20,5,2,-1,-1}, /*11*/{-1,-1}, /*12*/{4,13,5,2,-1,-1}, /*13*/{-1,-1}, /*14*/{5,19,-1,-1}, /*15*/{5,18,-1,-1}, /*16*/{5,17,-1,-1}, /*17*/{-1,-1}, /*18*/{-1,-1}, /*19*/{-1,-1}, /*20*/{-1,-1}, /*21*/{-1,-1}, /*22*/{-1,-1}, /*23*/{-1,-1}, /*24*/{-1,-1}, /*25*/{-1,-1}, }; /** access to reduce_goto table */ public short[][] reduce_table() {return _reduce_table;} /** instance of action encapsulation class */ protected CUP$actions action_obj; /** action encapsulation object initializer */ protected void init_actions() { action_obj = new CUP$actions(); } /** invoke a user supplied parse action */ public java_cup.runtime.symbol do_action( int act_num, java_cup.runtime.lr_parser parser, java.util.Stack stack, int top) throws java.lang.Exception { /* call code in generated class */ return action_obj.CUP$do_action(act_num, parser, stack, top); } /** start state */ public int start_state() {return 0;} /** start production */ public int start_production() {return 1;} /** EOF symbol index */ public int EOF_sym() {return 0;} /** error symbol index */ public int error_sym() {return 1;} /** user initialization */ public void user_init() throws java.lang.Exception { scanner.init(); } /** scan to get the next token */ public java_cup.runtime.token scan() throws java.lang.Exception { return scanner.next_token(); } }; /** JavaCup generated class to encapsulate user supplied action code.*/ class CUP$actions { /** Constructor */ CUP$actions() { } /** Method with the actual generated action code. */ public final java_cup.runtime.symbol CUP$do_action( int CUP$act_num, java_cup.runtime.lr_parser CUP$parser, java.util.Stack CUP$stack, int CUP$top) throws java.lang.Exception { /* object for return from actions */ java_cup.runtime.symbol CUP$result; /* select the action based on the action number */ switch (CUP$act_num) { /*. . . . . . . . . . . . . . . . . . . .*/ case 14: // factor ::= LPAREN expr RPAREN { CUP$result = new int_token(/*factor*/5); ((int_token)CUP$result).int_val = (/*e*/(int_token)CUP$stack.elementAt(CUP$top-1)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 13: // factor ::= MINUS factor { CUP$result = new int_token(/*factor*/5); ((int_token)CUP$result).int_val = -(/*e*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 12: // factor ::= NUMBER { CUP$result = new int_token(/*factor*/5); ((int_token)CUP$result).int_val = (/*n*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 11: // term ::= factor { CUP$result = new int_token(/*term*/4); ((int_token)CUP$result).int_val = (/*e*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 10: // term ::= term MOD factor { CUP$result = new int_token(/*term*/4); ((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val % (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 9: // term ::= term DIVIDE factor { CUP$result = new int_token(/*term*/4); ((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val / (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 8: // term ::= term TIMES factor { CUP$result = new int_token(/*term*/4); ((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val * (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 7: // expr ::= term { CUP$result = new int_token(/*expr*/3); ((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 6: // expr ::= expr MINUS term { CUP$result = new int_token(/*expr*/3); ((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val - (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 5: // expr ::= expr PLUS term { CUP$result = new int_token(/*expr*/3); ((int_token)CUP$result).int_val = (/*e1*/(int_token)CUP$stack.elementAt(CUP$top-2)).int_val + (/*e2*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val; } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 4: // expr_part ::= expr NT$0 SEMI { CUP$result = new symbol(/*expr_part*/2); } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 3: // NT$0 ::= { CUP$result = new java_cup.runtime.token(/*NT$0*/6); System.out.println("= " + (/*e*/(int_token)CUP$stack.elementAt(CUP$top-0)).int_val); } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 2: // expr_list ::= expr_part { CUP$result = new symbol(/*expr_list*/1); } return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 1: // $START ::= expr_list EOF { CUP$result = new java_cup.runtime.token(/*$START*/0); } /* ACCEPT */ CUP$parser.done_parsing(); return CUP$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 0: // expr_list ::= expr_list expr_part { CUP$result = new symbol(/*expr_list*/1); } return CUP$result; /* . . . . . .*/ default: throw new Exception( "Invalid action number found in internal parse table"); } } };