//----------------------------------------------------
// 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);
}
}
}