//---------------------------------------------------- // The following code was generated by CUP v0.11b 20160615 (GIT 4ac7450) //---------------------------------------------------- package MiniJS; import java_cup.runtime.XMLElement; /** CUP v0.11b 20160615 (GIT 4ac7450) generated parser. */ @SuppressWarnings({"rawtypes"}) public class parser extends java_cup.runtime.lr_parser { public final Class getSymbolContainer() { return sym.class; } /** Default constructor. */ @Deprecated public parser() {super();} /** Constructor which sets the default scanner. */ @Deprecated public parser(java_cup.runtime.Scanner s) {super(s);} /** Constructor which sets the default scanner. */ public parser(java_cup.runtime.Scanner s, java_cup.runtime.SymbolFactory sf) {super(s,sf);} /** Production table. */ protected static final short _production_table[][] = unpackFromStrings(new String[] { "\000\020\000\002\002\004\000\002\002\003\000\002\003" + "\005\000\002\003\006\000\002\004\002\000\002\004\005" + "\000\002\005\003\000\002\005\003\000\002\005\003\000" + "\002\005\005\000\002\006\005\000\002\006\005\000\002" + "\006\003\000\002\007\005\000\002\007\005\000\002\007" + "\003" }); /** Access to production table. */ public short[][] production_table() {return _production_table;} /** Parse-action table. */ protected static final short[][] _action_table = unpackFromStrings(new String[] { "\000\035\000\010\002\ufffd\005\ufffd\017\ufffd\001\002\000" + "\004\002\037\001\002\000\010\002\000\005\006\017\007" + "\001\002\000\004\006\034\001\002\000\004\004\012\001" + "\002\000\004\010\011\001\002\000\010\002\ufffc\005\ufffc" + "\017\ufffc\001\002\000\012\006\013\015\017\016\021\017" + "\015\001\002\000\012\006\013\015\017\016\021\017\015" + "\001\002\000\016\007\ufff5\010\ufff5\011\ufff5\012\ufff5\013" + "\ufff5\014\ufff5\001\002\000\016\007\ufffb\010\ufffb\011\ufffb" + "\012\ufffb\013\ufffb\014\ufffb\001\002\000\016\007\ufff2\010" + "\ufff2\011\026\012\025\013\ufff2\014\ufff2\001\002\000\016" + "\007\ufffa\010\ufffa\011\ufffa\012\ufffa\013\ufffa\014\ufffa\001" + "\002\000\010\010\uffff\013\023\014\022\001\002\000\016" + "\007\ufff9\010\ufff9\011\ufff9\012\ufff9\013\ufff9\014\ufff9\001" + "\002\000\012\006\013\015\017\016\021\017\015\001\002" + "\000\012\006\013\015\017\016\021\017\015\001\002\000" + "\016\007\ufff4\010\ufff4\011\026\012\025\013\ufff4\014\ufff4" + "\001\002\000\012\006\013\015\017\016\021\017\015\001" + "\002\000\012\006\013\015\017\016\021\017\015\001\002" + "\000\016\007\ufff7\010\ufff7\011\ufff7\012\ufff7\013\ufff7\014" + "\ufff7\001\002\000\016\007\ufff6\010\ufff6\011\ufff6\012\ufff6" + "\013\ufff6\014\ufff6\001\002\000\016\007\ufff3\010\ufff3\011" + "\026\012\025\013\ufff3\014\ufff3\001\002\000\010\007\033" + "\013\023\014\022\001\002\000\016\007\ufff8\010\ufff8\011" + "\ufff8\012\ufff8\013\ufff8\014\ufff8\001\002\000\012\006\013" + "\015\017\016\021\017\015\001\002\000\010\007\036\013" + "\023\014\022\001\002\000\004\010\ufffe\001\002\000\004" + "\002\001\001\002" }); /** Access to parse-action table. */ public short[][] action_table() {return _action_table;} /** reduce_goto table. */ protected static final short[][] _reduce_table = unpackFromStrings(new String[] { "\000\035\000\006\002\003\004\004\001\001\000\002\001" + "\001\000\004\003\007\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\010\005" + "\013\006\015\007\017\001\001\000\010\005\013\006\015" + "\007\031\001\001\000\002\001\001\000\002\001\001\000" + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\006\005\013\006\030\001\001\000\006\005" + "\013\006\023\001\001\000\002\001\001\000\004\005\027" + "\001\001\000\004\005\026\001\001\000\002\001\001\000" + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\010\005\013\006\015\007\034\001\001\000" + "\002\001\001\000\002\001\001\000\002\001\001" }); /** Access to reduce_goto table. */ public short[][] reduce_table() {return _reduce_table;} /** Instance of action encapsulation class. */ protected CUP$parser$actions action_obj; /** Action encapsulation object initializer. */ protected void init_actions() { action_obj = new CUP$parser$actions(this); } /** 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$parser$do_action(act_num, parser, stack, top); } /** Indicates start state. */ public int start_state() {return 0;} /** Indicates start production. */ public int start_production() {return 0;} /** EOF Symbol index. */ public int EOF_sym() {return 0;} /** error Symbol index. */ public int error_sym() {return 1;} public MiniJS.Absyn.Program pProgram() throws Exception { java_cup.runtime.Symbol res = parse(); return (MiniJS.Absyn.Program) res.value; } public > A cons_(B x, A xs) { xs.addFirst(x); return xs; } public void syntax_error(java_cup.runtime.Symbol cur_token) { report_error("Syntax Error, trying to recover and continue parse...", cur_token); } public void unrecovered_syntax_error(java_cup.runtime.Symbol cur_token) throws java.lang.Exception { throw new Exception("Unrecoverable Syntax Error"); } /** Cup generated class to encapsulate user supplied action code.*/ @SuppressWarnings({"rawtypes", "unchecked", "unused"}) class CUP$parser$actions { public java_cup.runtime.ComplexSymbolFactory.Location getLeftLocation( java_cup.runtime.ComplexSymbolFactory.Location ... locations) { for (java_cup.runtime.ComplexSymbolFactory.Location l : locations) { if (l != null) { return l; } } return null; } private final parser parser; /** Constructor */ CUP$parser$actions(parser parser) { this.parser = parser; } /** Method 0 with the actual generated action code for actions 0 to 300. */ public final java_cup.runtime.Symbol CUP$parser$do_action_part00000000( int CUP$parser$act_num, java_cup.runtime.lr_parser CUP$parser$parser, java.util.Stack CUP$parser$stack, int CUP$parser$top) throws java.lang.Exception { /* Symbol object for return from actions */ java_cup.runtime.Symbol CUP$parser$result; /* select the action based on the action number */ switch (CUP$parser$act_num) { /*. . . . . . . . . . . . . . . . . . . .*/ case 0: // $START ::= Program EOF { Object RESULT =null; MiniJS.Absyn.Program start_val = (MiniJS.Absyn.Program)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; RESULT = start_val; CUP$parser$result = parser.getSymbolFactory().newSymbol("$START",0, RESULT); } /* ACCEPT */ CUP$parser$parser.done_parsing(); return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 1: // Program ::= ListStm { MiniJS.Absyn.Program RESULT =null; MiniJS.Absyn.ListStm p_1 = (MiniJS.Absyn.ListStm)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.Prg(p_1); CUP$parser$result = parser.getSymbolFactory().newSymbol("Program",0, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 2: // Stm ::= _IDENT_ _SYMB_0 Exp { MiniJS.Absyn.Stm RESULT =null; String p_1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; Object p_2 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; MiniJS.Absyn.Exp p_3 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.SAssign(p_1,p_3); CUP$parser$result = parser.getSymbolFactory().newSymbol("Stm",1, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 3: // Stm ::= _SYMB_1 _SYMB_2 Exp _SYMB_3 { MiniJS.Absyn.Stm RESULT =null; Object p_1 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value; Object p_2 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; MiniJS.Absyn.Exp p_3 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; Object p_4 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.SPrint(p_3); CUP$parser$result = parser.getSymbolFactory().newSymbol("Stm",1, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 4: // ListStm ::= { MiniJS.Absyn.ListStm RESULT =null; RESULT = new MiniJS.Absyn.ListStm(); CUP$parser$result = parser.getSymbolFactory().newSymbol("ListStm",2, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 5: // ListStm ::= ListStm Stm _SYMB_4 { MiniJS.Absyn.ListStm RESULT =null; MiniJS.Absyn.ListStm p_1 = (MiniJS.Absyn.ListStm)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; MiniJS.Absyn.Stm p_2 = (MiniJS.Absyn.Stm)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; Object p_3 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = p_1; p_1.addLast(p_2); CUP$parser$result = parser.getSymbolFactory().newSymbol("ListStm",2, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 6: // Exp2 ::= _IDENT_ { MiniJS.Absyn.Exp RESULT =null; String p_1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.EVar(p_1); CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp2",3, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 7: // Exp2 ::= _INTEGER_ { MiniJS.Absyn.Exp RESULT =null; Integer p_1 = (Integer)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.EInt(p_1); CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp2",3, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 8: // Exp2 ::= _DOUBLE_ { MiniJS.Absyn.Exp RESULT =null; Double p_1 = (Double)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.EDouble(p_1); CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp2",3, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 9: // Exp2 ::= _SYMB_2 Exp _SYMB_3 { MiniJS.Absyn.Exp RESULT =null; Object p_1 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; MiniJS.Absyn.Exp p_2 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; Object p_3 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = p_2; CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp2",3, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 10: // Exp1 ::= Exp1 _SYMB_5 Exp2 { MiniJS.Absyn.Exp RESULT =null; MiniJS.Absyn.Exp p_1 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; Object p_2 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; MiniJS.Absyn.Exp p_3 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.ETimes(p_1,p_3); CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp1",4, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 11: // Exp1 ::= Exp1 _SYMB_6 Exp2 { MiniJS.Absyn.Exp RESULT =null; MiniJS.Absyn.Exp p_1 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; Object p_2 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; MiniJS.Absyn.Exp p_3 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.EDiv(p_1,p_3); CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp1",4, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 12: // Exp1 ::= Exp2 { MiniJS.Absyn.Exp RESULT =null; MiniJS.Absyn.Exp p_1 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = p_1; CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp1",4, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 13: // Exp ::= Exp _SYMB_7 Exp1 { MiniJS.Absyn.Exp RESULT =null; MiniJS.Absyn.Exp p_1 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; Object p_2 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; MiniJS.Absyn.Exp p_3 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.EPlus(p_1,p_3); CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp",5, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 14: // Exp ::= Exp _SYMB_8 Exp1 { MiniJS.Absyn.Exp RESULT =null; MiniJS.Absyn.Exp p_1 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; Object p_2 = (Object)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; MiniJS.Absyn.Exp p_3 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new MiniJS.Absyn.EMinus(p_1,p_3); CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp",5, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 15: // Exp ::= Exp1 { MiniJS.Absyn.Exp RESULT =null; MiniJS.Absyn.Exp p_1 = (MiniJS.Absyn.Exp)((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = p_1; CUP$parser$result = parser.getSymbolFactory().newSymbol("Exp",5, RESULT); } return CUP$parser$result; /* . . . . . .*/ default: throw new Exception( "Invalid action number "+CUP$parser$act_num+"found in internal parse table"); } } /* end of method */ /** Method splitting the generated action code into several parts. */ public final java_cup.runtime.Symbol CUP$parser$do_action( int CUP$parser$act_num, java_cup.runtime.lr_parser CUP$parser$parser, java.util.Stack CUP$parser$stack, int CUP$parser$top) throws java.lang.Exception { return CUP$parser$do_action_part00000000( CUP$parser$act_num, CUP$parser$parser, CUP$parser$stack, CUP$parser$top); } } }