content: 
  //----------------------------------------------------
  // The following code was generated by CUP v0.11a beta 20060608
  // Sun Aug 14 10:44:48 NZST 2011
  //----------------------------------------------------
  
  package weka.core.json;
  
  import java_cup.runtime.*;
  import java.io.*;
  import java.util.*;
  
  /** CUP v0.11a beta 20060608 generated parser.
    * @version Sun Aug 14 10:44:48 NZST 2011
    */
  public class Parser extends java_cup.runtime.lr_parser {
  
    /** Default constructor. */
    public Parser() {super();}
  
    /** Constructor which sets the default scanner. */
    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\053\000\002\002\004\000\002\002\004\000\002\002" +
      "\005\000\002\003\005\000\002\003\003\000\002\004\003" +
      "\000\002\004\003\000\002\004\003\000\002\005\003\000" +
      "\002\005\003\000\002\005\003\000\002\005\003\000\002" +
      "\005\003\000\002\006\005\000\002\007\005\000\002\010" +
      "\005\000\002\011\005\000\002\012\005\000\002\014\004" +
      "\000\002\014\005\000\002\015\005\000\002\013\004\000" +
      "\002\013\005\000\002\016\003\000\002\017\003\000\002" +
      "\020\003\000\002\022\004\000\002\022\005\000\002\023" +
      "\005\000\002\021\004\000\002\021\005\000\002\024\003" +
      "\000\002\025\003\000\002\026\003\000\002\027\005\000" +
      "\002\027\003\000\002\030\003\000\002\030\003\000\002" +
      "\030\003\000\002\030\003\000\002\030\003\000\002\030" +
      "\003\000\002\030\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\073\000\004\007\005\001\002\000\004\002\075\001" +
      "\002\000\006\010\020\016\014\001\002\000\006\004\062" +
      "\010\074\001\002\000\006\010\060\016\014\001\002\000" +
      "\022\005\035\006\043\007\051\012\042\013\041\014\037" +
      "\015\047\016\045\001\002\000\006\004\ufffd\010\ufffd\001" +
      "\002\000\006\004\ufffb\010\ufffb\001\002\000\006\004\ufff7" +
      "\010\ufff7\001\002\000\004\011\024\001\002\000\006\004" +
      "\ufff9\010\ufff9\001\002\000\006\004\ufffc\010\ufffc\001\002" +
      "\000\006\004\ufff5\010\ufff5\001\002\000\004\002\001\001" +
      "\002\000\006\004\ufff6\010\ufff6\001\002\000\006\004\ufffa" +
      "\010\ufffa\001\002\000\006\004\ufff8\010\ufff8\001\002\000" +
      "\020\005\025\007\031\012\032\013\033\014\026\015\027" +
      "\016\030\001\002\000\022\005\uffe5\006\uffe5\007\uffe5\012" +
      "\uffe5\013\uffe5\014\uffe5\015\uffe5\016\uffe5\001\002\000\006" +
      "\004\ufff2\010\ufff2\001\002\000\006\004\ufff1\010\ufff1\001" +
      "\002\000\006\004\ufff0\010\ufff0\001\002\000\006\010\uffed" +
      "\016\uffed\001\002\000\006\004\ufff4\010\ufff4\001\002\000" +
      "\006\004\ufff3\010\ufff3\001\002\000\006\004\067\006\uffe1" +
      "\001\002\000\022\005\uffe2\006\uffe2\007\uffe2\012\uffe2\013" +
      "\uffe2\014\uffe2\015\uffe2\016\uffe2\001\002\000\022\005\035" +
      "\006\043\007\051\012\042\013\041\014\037\015\047\016" +
      "\045\001\002\000\006\004\uffdb\006\uffdb\001\002\000\006" +
      "\004\uffe7\010\uffe7\001\002\000\006\004\uffdc\006\uffdc\001" +
      "\002\000\006\004\uffdd\006\uffdd\001\002\000\010\004\uffe0" +
      "\006\uffe0\010\uffe0\001\002\000\006\004\uffde\006\uffde\001" +
      "\002\000\006\004\uffd9\006\uffd9\001\002\000\006\010\060" +
      "\016\014\001\002\000\006\004\uffda\006\uffda\001\002\000" +
      "\004\006\043\001\002\000\006\010\uffea\016\uffea\001\002" +
      "\000\006\004\uffd7\006\uffd7\001\002\000\006\004\uffd8\006" +
      "\uffd8\001\002\000\006\004\uffe6\010\uffe6\001\002\000\006" +
      "\004\062\010\uffe9\001\002\000\004\010\060\001\002\000" +
      "\006\004\uffec\006\uffec\001\002\000\010\004\uffe8\006\uffe8" +
      "\010\uffe8\001\002\000\006\004\uffeb\006\uffeb\001\002\000" +
      "\004\016\014\001\002\000\006\004\ufffe\010\ufffe\001\002" +
      "\000\006\004\uffe4\006\uffe4\001\002\000\004\006\043\001" +
      "\002\000\006\004\uffe3\006\uffe3\001\002\000\020\005\035" +
      "\007\051\012\042\013\041\014\037\015\047\016\045\001" +
      "\002\000\006\004\uffdf\006\uffdf\001\002\000\004\010\060" +
      "\001\002\000\006\004\uffef\010\uffef\001\002\000\006\004" +
      "\uffee\010\uffee\001\002\000\004\002\uffff\001\002\000\004" +
      "\002\000\001\002" });
  
    /** Access to parse-action table. */
    public short[][] action_table() {return _action_table;}
  
    /** <code>reduce_goto</code> table. */
    protected static final short[][] _reduce_table = 
      unpackFromStrings(new String[] {
      "\000\073\000\004\002\003\001\001\000\002\001\001\000" +
      "\032\003\005\004\010\005\015\006\014\007\022\010\012" +
      "\011\020\012\016\014\011\015\006\022\021\023\007\001" +
      "\001\000\002\001\001\000\036\003\054\004\010\005\015" +
      "\006\014\007\022\010\012\011\020\012\016\014\011\015" +
      "\006\017\070\020\071\022\021\023\007\001\001\000\022" +
      "\013\052\016\045\021\051\024\035\025\047\026\037\027" +
      "\033\030\043\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\002\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\002\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\002\001\001\000\022" +
      "\013\052\016\045\021\051\024\035\025\064\026\063\027" +
      "\033\030\043\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\002\001\001\000\036\003\054\004\010" +
      "\005\015\006\014\007\022\010\012\011\020\012\016\014" +
      "\011\015\006\017\055\020\056\022\021\023\007\001\001" +
      "\000\002\001\001\000\004\026\053\001\001\000\002\001" +
      "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
      "\000\002\001\001\000\004\020\060\001\001\000\002\001" +
      "\001\000\002\001\001\000\002\001\001\000\030\004\062" +
      "\005\015\006\014\007\022\010\012\011\020\012\016\014" +
      "\011\015\006\022\021\023\007\001\001\000\002\001\001" +
      "\000\002\001\001\000\004\026\065\001\001\000\002\001" +
      "\001\000\014\013\052\016\045\021\051\024\035\030\067" +
      "\001\001\000\002\001\001\000\004\020\072\001\001\000" +
      "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
      "\001\001" });
  
    /** Access to <code>reduce_goto</code> 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 1;}
  
    /** <code>EOF</code> Symbol index. */
    public int EOF_sym() {return 0;}
  
    /** <code>error</code> Symbol index. */
    public int error_sym() {return 1;}
  
  
    /** User initialization code. */
    public void user_init() throws java.lang.Exception
      {
  
    m_Symbols = new HashMap();
    m_Result  = new JSONNode();
    m_Stack   = new Stack<JSONNode>();
    m_Stack.push(m_Result);
  
      }
  
  
    /** variable - value relation. */
    protected HashMap m_Symbols;
  
    /** for storing the parsed JSON data structure. */
    protected JSONNode m_Result;
    
    /** the stack for keeping track of the current parent node. */
    protected Stack<JSONNode> m_Stack;
  
    /**
     * Returns the JSON data structure.
     * 
     * @return the result
     */
    public JSONNode getResult() {
      return m_Result;
    }
    
    /**
     * Returns the stack used internally for keeping track of the current
     * parent node.
     * 
     * @return the stack
     */
    protected Stack<JSONNode> getStack() {
      return m_Stack;
    }
  
    /**
     * Runs the parser from commandline. Expects a filename as first parameter,
     * pointing to a JSON file.
     * 
     * @param args the commandline arguments
     * @throws Exception if something goes wrong
     */
    public static void main(String args[]) throws Exception {
      if (args.length != 1) {
        System.err.println("No JSON file specified!");
        System.exit(1);
      }
      
      FileInputStream stream = new FileInputStream(args[0]);
      SymbolFactory sf = new DefaultSymbolFactory();
      Parser parser = new Parser(new Scanner(stream, sf), sf);
      parser.parse();
      StringBuffer buffer = new StringBuffer();
      parser.getResult().toString(buffer);
      System.out.println(buffer.toString());
    }
  
  }
  
  /** Cup generated class to encapsulate user supplied action code.*/
  class CUP$Parser$actions {
    private final Parser parser;
  
    /** Constructor */
    CUP$Parser$actions(Parser parser) {
      this.parser = parser;
    }
  
    /** Method with the actual generated action code. */
    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
      {
        /* 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 42: // element ::= anon_array 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("element",22, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 41: // element ::= anon_object 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("element",22, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 40: // element ::= STRING 
              {
                Object RESULT =null;
  		int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		String s = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		 
                              parser.getStack().peek().addArrayElement(s);
                           
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("element",22, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 39: // element ::= DOUBLE 
              {
                Object RESULT =null;
  		int dleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int dright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		Double d = (Double)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		
                              parser.getStack().peek().addArrayElement(d);
                           
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("element",22, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 38: // element ::= INTEGER 
              {
                Object RESULT =null;
  		int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		Integer i = (Integer)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		
                              parser.getStack().peek().addArrayElement(i);
                           
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("element",22, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 37: // element ::= BOOLEAN 
              {
                Object RESULT =null;
  		int bleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int bright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		Boolean b = (Boolean)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		 
                              parser.getStack().peek().addArrayElement(b);
                           
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("element",22, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 36: // element ::= NULL 
              {
                Object RESULT =null;
  		 
                              parser.getStack().peek().addArrayElement(null);
                           
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("element",22, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 35: // elements ::= element 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("elements",21, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 34: // elements ::= elements COMMA element 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("elements",21, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 33: // array_end ::= RSQUARE 
              {
                Object RESULT =null;
  		
                            parser.getStack().pop();
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("array_end",20, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 32: // array_content ::= elements 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("array_content",19, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 31: // anon_array_start ::= LSQUARE 
              {
                Object RESULT =null;
  		
                            JSONNode node = parser.getStack().peek().addArray(null);
                            parser.getStack().push(node);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("anon_array_start",18, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 30: // anon_array ::= anon_array_start array_content array_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("anon_array",15, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 29: // anon_array ::= anon_array_start array_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("anon_array",15, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 28: // named_array_start ::= STRING COLON LSQUARE 
              {
                Object RESULT =null;
  		int nameleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
  		int nameright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
  		String name = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
  		
                            JSONNode node = parser.getStack().peek().addArray(name);
                            parser.getStack().push(node);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("named_array_start",17, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 27: // named_array ::= named_array_start array_content array_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("named_array",16, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 26: // named_array ::= named_array_start array_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("named_array",16, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 25: // object_end ::= RCURLY 
              {
                Object RESULT =null;
  		
                            parser.getStack().pop();
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("object_end",14, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 24: // object_content ::= pairs 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("object_content",13, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 23: // anon_object_start ::= LCURLY 
              {
                Object RESULT =null;
  		
                            JSONNode node = parser.getStack().peek().addObject(null);
                            parser.getStack().push(node);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("anon_object_start",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 22: // anon_object ::= anon_object_start object_content object_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("anon_object",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 21: // anon_object ::= anon_object_start object_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("anon_object",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 20: // named_object_start ::= STRING COLON LCURLY 
              {
                Object RESULT =null;
  		int nameleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
  		int nameright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
  		String name = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
  		
                            JSONNode node = parser.getStack().peek().addObject(name);
                            parser.getStack().push(node);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("named_object_start",11, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 19: // named_object ::= named_object_start object_content object_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("named_object",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 18: // named_object ::= named_object_start object_end 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("named_object",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 17: // string ::= STRING COLON STRING 
              {
                String RESULT =null;
  		int nameleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
  		int nameright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
  		String name = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
  		int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		String s = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		 
                            parser.getStack().peek().addPrimitive(name, s);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("string",8, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 16: // double ::= STRING COLON DOUBLE 
              {
                Double RESULT =null;
  		int nameleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
  		int nameright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
  		String name = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
  		int dleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int dright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		Double d = (Double)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		
                            parser.getStack().peek().addPrimitive(name, d);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("double",7, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 15: // integer ::= STRING COLON INTEGER 
              {
                Integer RESULT =null;
  		int nameleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
  		int nameright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
  		String name = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
  		int ileft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int iright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		Integer i = (Integer)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		
                            parser.getStack().peek().addPrimitive(name, i);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("integer",6, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 14: // boolean ::= STRING COLON BOOLEAN 
              {
                Boolean RESULT =null;
  		int nameleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
  		int nameright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
  		String name = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
  		int bleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
  		int bright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
  		Boolean b = (Boolean)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
  		
                            parser.getStack().peek().addPrimitive(name, b);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("boolean",5, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 13: // null ::= STRING COLON NULL 
              {
                Object RESULT =null;
  		int nameleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
  		int nameright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
  		String name = (String)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
  		 
                            parser.getStack().peek().addNull(name);
                         
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("null",4, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 12: // primitive ::= string 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("primitive",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 11: // primitive ::= double 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("primitive",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 10: // primitive ::= integer 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("primitive",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 9: // primitive ::= boolean 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("primitive",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 8: // primitive ::= null 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("primitive",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 7: // pair ::= named_array 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("pair",2, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 6: // pair ::= named_object 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("pair",2, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 5: // pair ::= primitive 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("pair",2, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 4: // pairs ::= pair 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("pairs",1, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 3: // pairs ::= pairs COMMA pair 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("pairs",1, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 2: // json ::= LCURLY pairs RCURLY 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("json",0, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 1: // $START ::= json EOF 
              {
                Object RESULT =null;
  		int start_valleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
  		int start_valright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
  		Object start_val = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
  		RESULT = start_val;
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("$START",0, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            /* ACCEPT */
            CUP$Parser$parser.done_parsing();
            return CUP$Parser$result;
  
            /*. . . . . . . . . . . . . . . . . . . .*/
            case 0: // json ::= LCURLY RCURLY 
              {
                Object RESULT =null;
  
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("json",0, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
              }
            return CUP$Parser$result;
  
            /* . . . . . .*/
            default:
              throw new Exception(
                 "Invalid action number found in internal parse table");
  
          }
      }
  }
  
  