
//----------------------------------------------------
// The following code was generated by CUP v0.11b 20160615 (GIT 4ac7450)
//----------------------------------------------------

package jflex.core;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jflex.chars.Interval;
import jflex.core.unicode.CharClasses;
import jflex.core.unicode.IntCharSet;
import jflex.core.unicode.UnicodeProperties;
import jflex.exceptions.GeneratorException;
import jflex.l10n.ErrorMessages;
import jflex.logging.Out;
import jflex.option.Options;
import jflex.performance.Timer;
import jflex.scanner.ScannerException;
import java_cup.runtime.Symbol;
import java_cup.runtime.XMLElement;

/** CUP v0.11b 20160615 (GIT 4ac7450) generated parser.
  */
@SuppressWarnings({"rawtypes"})
public class LexParse extends java_cup.runtime.lr_parser {

 public final Class getSymbolContainer() {
    return sym.class;
}

  /** Default constructor. */
  @Deprecated
  public LexParse() {super();}

  /** Constructor which sets the default scanner. */
  @Deprecated
  public LexParse(java_cup.runtime.Scanner s) {super(s);}

  /** Constructor which sets the default scanner. */
  public LexParse(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\127\000\002\002\004\000\002\005\006\000\002\005" +
    "\002\000\002\002\002\000\002\002\004\000\002\002\003" +
    "\000\002\003\006\000\002\003\004\000\002\023\004\000" +
    "\002\023\011\000\002\023\010\000\002\023\003\000\002" +
    "\004\006\000\002\004\007\000\002\004\007\000\002\004" +
    "\005\000\002\004\005\000\002\004\003\000\002\013\003" +
    "\000\002\013\004\000\002\013\005\000\002\026\004\000" +
    "\002\027\003\000\002\027\003\000\002\022\005\000\002" +
    "\022\002\000\002\021\005\000\002\021\003\000\002\021" +
    "\004\000\002\025\003\000\002\025\002\000\002\006\005" +
    "\000\002\006\003\000\002\006\003\000\002\007\004\000" +
    "\002\007\003\000\002\010\003\000\002\010\004\000\002" +
    "\010\004\000\002\011\004\000\002\011\004\000\002\011" +
    "\004\000\002\011\005\000\002\011\006\000\002\011\005" +
    "\000\002\011\003\000\002\011\003\000\002\011\003\000" +
    "\002\011\003\000\002\011\003\000\002\011\003\000\002" +
    "\011\003\000\002\011\003\000\002\011\003\000\002\012" +
    "\004\000\002\012\005\000\002\012\005\000\002\012\007" +
    "\000\002\012\010\000\002\024\003\000\002\024\003\000" +
    "\002\024\003\000\002\014\003\000\002\014\004\000\002" +
    "\017\003\000\002\017\004\000\002\020\004\000\002\020" +
    "\003\000\002\015\005\000\002\015\003\000\002\015\003" +
    "\000\002\015\003\000\002\015\003\000\002\015\003\000" +
    "\002\015\003\000\002\015\003\000\002\016\003\000\002" +
    "\016\003\000\002\016\003\000\002\016\003\000\002\016" +
    "\003\000\002\016\003\000\002\016\003\000\002\016\003" +
    "\000\002\016\003\000\002\016\003\000\002\016\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\175\000\006\002\uffff\047\004\001\002\000\010\003" +
    "\007\013\ufffe\046\ufffe\001\002\000\004\002\006\001\002" +
    "\000\004\002\001\001\002\000\006\013\ufffc\046\ufffc\001" +
    "\002\000\006\013\011\046\013\001\002\000\070\003\132" +
    "\004\uffe8\006\uffe8\010\uffe8\016\134\023\uffe8\024\uffe8\025" +
    "\uffe8\026\uffe8\027\uffe8\030\uffe8\031\uffe8\032\uffe8\035\uffe8" +
    "\036\uffe8\037\uffe8\040\uffe8\053\uffe8\055\uffe8\056\uffe8\057" +
    "\uffe8\060\uffe8\061\uffe8\062\uffe8\063\uffe8\064\uffe8\065\uffe8" +
    "\001\002\000\006\013\ufffd\046\ufffd\001\002\000\004\014" +
    "\014\001\002\000\064\004\040\010\051\013\ufffa\023\026" +
    "\024\034\025\016\026\046\027\021\030\041\031\035\035" +
    "\024\036\047\037\022\040\025\046\ufffa\053\045\055\023" +
    "\056\036\057\043\060\027\061\020\062\033\063\030\064" +
    "\017\065\015\001\002\000\102\004\uffd0\005\uffd0\007\uffd0" +
    "\010\uffd0\022\uffd0\023\uffd0\024\uffd0\025\uffd0\026\uffd0\027" +
    "\uffd0\030\uffd0\031\uffd0\033\uffd0\034\uffd0\035\uffd0\036\uffd0" +
    "\037\uffd0\040\uffd0\050\uffd0\051\uffd0\052\uffd0\053\uffd0\054" +
    "\uffd0\055\uffd0\056\uffd0\057\uffd0\060\uffd0\061\uffd0\062\uffd0" +
    "\063\uffd0\064\uffd0\065\uffd0\001\002\000\112\004\uffb3\005" +
    "\uffb3\007\uffb3\010\uffb3\011\uffb3\022\uffb3\023\uffb3\024\uffb3" +
    "\025\uffb3\026\uffb3\027\uffb3\030\uffb3\031\uffb3\033\uffb3\034" +
    "\uffb3\035\uffb3\036\uffb3\037\uffb3\040\uffb3\042\uffb3\043\uffb3" +
    "\044\uffb3\050\uffb3\051\uffb3\052\uffb3\053\uffb3\054\uffb3\055" +
    "\uffb3\056\uffb3\057\uffb3\060\uffb3\061\uffb3\062\uffb3\063\uffb3" +
    "\064\uffb3\065\uffb3\001\002\000\102\004\uffd1\005\uffd1\007" +
    "\uffd1\010\uffd1\022\uffd1\023\uffd1\024\uffd1\025\uffd1\026\uffd1" +
    "\027\uffd1\030\uffd1\031\uffd1\033\uffd1\034\uffd1\035\uffd1\036" +
    "\uffd1\037\uffd1\040\uffd1\050\uffd1\051\uffd1\052\uffd1\053\uffd1" +
    "\054\uffd1\055\uffd1\056\uffd1\057\uffd1\060\uffd1\061\uffd1\062" +
    "\uffd1\063\uffd1\064\uffd1\065\uffd1\001\002\000\102\004\uffcc" +
    "\005\uffcc\007\uffcc\010\uffcc\022\uffcc\023\uffcc\024\uffcc\025" +
    "\uffcc\026\uffcc\027\uffcc\030\uffcc\031\uffcc\033\uffcc\034\uffcc" +
    "\035\uffcc\036\uffcc\037\uffcc\040\uffcc\050\uffcc\051\uffcc\052" +
    "\uffcc\053\uffcc\054\uffcc\055\uffcc\056\uffcc\057\uffcc\060\uffcc" +
    "\061\uffcc\062\uffcc\063\uffcc\064\uffcc\065\uffcc\001\002\000" +
    "\112\004\uffb1\005\uffb1\007\uffb1\010\uffb1\011\uffb1\022\uffb1" +
    "\023\uffb1\024\uffb1\025\uffb1\026\uffb1\027\uffb1\030\uffb1\031" +
    "\uffb1\033\uffb1\034\uffb1\035\uffb1\036\uffb1\037\uffb1\040\uffb1" +
    "\042\uffb1\043\uffb1\044\uffb1\050\uffb1\051\uffb1\052\uffb1\053" +
    "\uffb1\054\uffb1\055\uffb1\056\uffb1\057\uffb1\060\uffb1\061\uffb1" +
    "\062\uffb1\063\uffb1\064\uffb1\065\uffb1\001\002\000\112\004" +
    "\uffac\005\uffac\007\uffac\010\uffac\011\uffac\022\uffac\023\uffac" +
    "\024\uffac\025\uffac\026\uffac\027\uffac\030\uffac\031\uffac\033" +
    "\uffac\034\uffac\035\uffac\036\uffac\037\uffac\040\uffac\042\uffac" +
    "\043\uffac\044\uffac\050\uffac\051\uffac\052\uffac\053\uffac\054" +
    "\uffac\055\uffac\056\uffac\057\uffac\060\uffac\061\uffac\062\uffac" +
    "\063\uffac\064\uffac\065\uffac\001\002\000\102\004\uffce\005" +
    "\uffce\007\uffce\010\uffce\022\uffce\023\uffce\024\uffce\025\uffce" +
    "\026\uffce\027\uffce\030\uffce\031\uffce\033\uffce\034\uffce\035" +
    "\uffce\036\uffce\037\uffce\040\uffce\050\uffce\051\uffce\052\uffce" +
    "\053\uffce\054\uffce\055\uffce\056\uffce\057\uffce\060\uffce\061" +
    "\uffce\062\uffce\063\uffce\064\uffce\065\uffce\001\002\000\112" +
    "\004\uffae\005\uffae\007\uffae\010\uffae\011\uffae\022\uffae\023" +
    "\uffae\024\uffae\025\uffae\026\uffae\027\uffae\030\uffae\031\uffae" +
    "\033\uffae\034\uffae\035\uffae\036\uffae\037\uffae\040\uffae\042" +
    "\uffae\043\uffae\044\uffae\050\uffae\051\uffae\052\uffae\053\uffae" +
    "\054\uffae\055\uffae\056\uffae\057\uffae\060\uffae\061\uffae\062" +
    "\uffae\063\uffae\064\uffae\065\uffae\001\002\000\112\004\uffab" +
    "\005\uffab\007\uffab\010\uffab\011\uffab\022\uffab\023\uffab\024" +
    "\uffab\025\uffab\026\uffab\027\uffab\030\uffab\031\uffab\033\uffab" +
    "\034\uffab\035\uffab\036\uffab\037\uffab\040\uffab\042\uffab\043" +
    "\uffab\044\uffab\050\uffab\051\uffab\052\uffab\053\uffab\054\uffab" +
    "\055\uffab\056\uffab\057\uffab\060\uffab\061\uffab\062\uffab\063" +
    "\uffab\064\uffab\065\uffab\001\002\000\112\004\uffb5\005\uffb5" +
    "\007\uffb5\010\uffb5\011\uffb5\022\uffb5\023\uffb5\024\uffb5\025" +
    "\uffb5\026\uffb5\027\uffb5\030\uffb5\031\uffb5\033\uffb5\034\uffb5" +
    "\035\uffb5\036\uffb5\037\uffb5\040\uffb5\042\uffb5\043\uffb5\044" +
    "\uffb5\050\uffb5\051\uffb5\052\uffb5\053\uffb5\054\uffb5\055\uffb5" +
    "\056\uffb5\057\uffb5\060\uffb5\061\uffb5\062\uffb5\063\uffb5\064" +
    "\uffb5\065\uffb5\001\002\000\056\004\040\010\051\023\026" +
    "\024\034\025\016\026\046\027\021\030\041\031\035\035" +
    "\024\036\047\037\022\040\025\055\023\056\036\057\043" +
    "\060\027\061\020\062\033\063\030\064\017\065\015\001" +
    "\002\000\102\004\uffd4\005\uffd4\007\uffd4\010\uffd4\022\uffd4" +
    "\023\uffd4\024\uffd4\025\uffd4\026\uffd4\027\uffd4\030\uffd4\031" +
    "\uffd4\033\uffd4\034\uffd4\035\uffd4\036\uffd4\037\uffd4\040\uffd4" +
    "\050\uffd4\051\uffd4\052\uffd4\053\uffd4\054\uffd4\055\uffd4\056" +
    "\uffd4\057\uffd4\060\uffd4\061\uffd4\062\uffd4\063\uffd4\064\uffd4" +
    "\065\uffd4\001\002\000\006\022\130\053\124\001\002\000" +
    "\102\004\uffd2\005\uffd2\007\uffd2\010\uffd2\022\uffd2\023\uffd2" +
    "\024\uffd2\025\uffd2\026\uffd2\027\uffd2\030\uffd2\031\uffd2\033" +
    "\uffd2\034\uffd2\035\uffd2\036\uffd2\037\uffd2\040\uffd2\050\uffd2" +
    "\051\uffd2\052\uffd2\053\uffd2\054\uffd2\055\uffd2\056\uffd2\057" +
    "\uffd2\060\uffd2\061\uffd2\062\uffd2\063\uffd2\064\uffd2\065\uffd2" +
    "\001\002\000\102\004\uffcf\005\uffcf\007\uffcf\010\uffcf\022" +
    "\uffcf\023\uffcf\024\uffcf\025\uffcf\026\uffcf\027\uffcf\030\uffcf" +
    "\031\uffcf\033\uffcf\034\uffcf\035\uffcf\036\uffcf\037\uffcf\040" +
    "\uffcf\050\uffcf\051\uffcf\052\uffcf\053\uffcf\054\uffcf\055\uffcf" +
    "\056\uffcf\057\uffcf\060\uffcf\061\uffcf\062\uffcf\063\uffcf\064" +
    "\uffcf\065\uffcf\001\002\000\112\004\uffb4\005\uffb4\007\uffb4" +
    "\010\uffb4\011\uffb4\022\uffb4\023\uffb4\024\uffb4\025\uffb4\026" +
    "\uffb4\027\uffb4\030\uffb4\031\uffb4\033\uffb4\034\uffb4\035\uffb4" +
    "\036\uffb4\037\uffb4\040\uffb4\042\uffb4\043\uffb4\044\uffb4\050" +
    "\uffb4\051\uffb4\052\uffb4\053\uffb4\054\uffb4\055\uffb4\056\uffb4" +
    "\057\uffb4\060\uffb4\061\uffb4\062\uffb4\063\uffb4\064\uffb4\065" +
    "\uffb4\001\002\000\112\004\uffaf\005\uffaf\007\uffaf\010\uffaf" +
    "\011\uffaf\022\uffaf\023\uffaf\024\uffaf\025\uffaf\026\uffaf\027" +
    "\uffaf\030\uffaf\031\uffaf\033\uffaf\034\uffaf\035\uffaf\036\uffaf" +
    "\037\uffaf\040\uffaf\042\uffaf\043\uffaf\044\uffaf\050\uffaf\051" +
    "\uffaf\052\uffaf\053\uffaf\054\uffaf\055\uffaf\056\uffaf\057\uffaf" +
    "\060\uffaf\061\uffaf\062\uffaf\063\uffaf\064\uffaf\065\uffaf\001" +
    "\002\000\102\004\uffcd\005\uffcd\007\uffcd\010\uffcd\022\uffcd" +
    "\023\uffcd\024\uffcd\025\uffcd\026\uffcd\027\uffcd\030\uffcd\031" +
    "\uffcd\033\uffcd\034\uffcd\035\uffcd\036\uffcd\037\uffcd\040\uffcd" +
    "\050\uffcd\051\uffcd\052\uffcd\053\uffcd\054\uffcd\055\uffcd\056" +
    "\uffcd\057\uffcd\060\uffcd\061\uffcd\062\uffcd\063\uffcd\064\uffcd" +
    "\065\uffcd\001\002\000\072\004\040\005\uffe1\007\uffe1\010" +
    "\051\022\uffe1\023\026\024\034\025\016\026\046\027\021" +
    "\030\041\031\035\033\uffe1\034\uffe1\035\024\036\047\037" +
    "\022\040\025\053\uffe1\055\023\056\036\057\043\060\027" +
    "\061\020\062\033\063\030\064\017\065\015\001\002\000" +
    "\060\004\040\010\051\023\026\024\034\025\016\026\046" +
    "\027\021\030\041\031\035\035\024\036\047\037\022\040" +
    "\025\053\045\055\023\056\036\057\043\060\027\061\020" +
    "\062\033\063\030\064\017\065\015\001\002\000\112\004" +
    "\uffb0\005\uffb0\007\uffb0\010\uffb0\011\uffb0\022\uffb0\023\uffb0" +
    "\024\uffb0\025\uffb0\026\uffb0\027\uffb0\030\uffb0\031\uffb0\033" +
    "\uffb0\034\uffb0\035\uffb0\036\uffb0\037\uffb0\040\uffb0\042\uffb0" +
    "\043\uffb0\044\uffb0\050\uffb0\051\uffb0\052\uffb0\053\uffb0\054" +
    "\uffb0\055\uffb0\056\uffb0\057\uffb0\060\uffb0\061\uffb0\062\uffb0" +
    "\063\uffb0\064\uffb0\065\uffb0\001\002\000\102\004\uffd3\005" +
    "\uffd3\007\uffd3\010\uffd3\022\uffd3\023\uffd3\024\uffd3\025\uffd3" +
    "\026\uffd3\027\uffd3\030\uffd3\031\uffd3\033\uffd3\034\uffd3\035" +
    "\uffd3\036\uffd3\037\uffd3\040\uffd3\050\uffd3\051\uffd3\052\uffd3" +
    "\053\uffd3\054\uffd3\055\uffd3\056\uffd3\057\uffd3\060\uffd3\061" +
    "\uffd3\062\uffd3\063\uffd3\064\uffd3\065\uffd3\001\002\000\056" +
    "\004\040\010\051\023\026\024\034\025\016\026\046\027" +
    "\021\030\041\031\035\035\024\036\047\037\022\040\025" +
    "\055\023\056\036\057\043\060\027\061\020\062\033\063" +
    "\030\064\017\065\015\001\002\000\072\004\uffde\005\uffde" +
    "\007\uffde\010\uffde\022\uffde\023\uffde\024\uffde\025\uffde\026" +
    "\uffde\027\uffde\030\uffde\031\uffde\033\uffde\034\uffde\035\uffde" +
    "\036\uffde\037\uffde\040\uffde\053\uffde\055\uffde\056\uffde\057" +
    "\uffde\060\uffde\061\uffde\062\uffde\063\uffde\064\uffde\065\uffde" +
    "\001\002\000\016\005\uffe0\007\uffe0\022\uffe0\033\uffe0\034" +
    "\uffe0\053\uffe0\001\002\000\112\004\uffb2\005\uffb2\007\uffb2" +
    "\010\uffb2\011\uffb2\022\uffb2\023\uffb2\024\uffb2\025\uffb2\026" +
    "\uffb2\027\uffb2\030\uffb2\031\uffb2\033\uffb2\034\uffb2\035\uffb2" +
    "\036\uffb2\037\uffb2\040\uffb2\042\uffb2\043\uffb2\044\uffb2\050" +
    "\uffb2\051\uffb2\052\uffb2\053\uffb2\054\uffb2\055\uffb2\056\uffb2" +
    "\057\uffb2\060\uffb2\061\uffb2\062\uffb2\063\uffb2\064\uffb2\065" +
    "\uffb2\001\002\000\112\004\uffad\005\uffad\007\uffad\010\uffad" +
    "\011\uffad\022\uffad\023\uffad\024\uffad\025\uffad\026\uffad\027" +
    "\uffad\030\uffad\031\uffad\033\uffad\034\uffad\035\uffad\036\uffad" +
    "\037\uffad\040\uffad\042\uffad\043\uffad\044\uffad\050\uffad\051" +
    "\uffad\052\uffad\053\uffad\054\uffad\055\uffad\056\uffad\057\uffad" +
    "\060\uffad\061\uffad\062\uffad\063\uffad\064\uffad\065\uffad\001" +
    "\002\000\102\004\uffdd\005\uffdd\007\uffdd\010\uffdd\022\uffdd" +
    "\023\uffdd\024\uffdd\025\uffdd\026\uffdd\027\uffdd\030\uffdd\031" +
    "\uffdd\033\uffdd\034\uffdd\035\uffdd\036\uffdd\037\uffdd\040\uffdd" +
    "\050\115\051\113\052\114\053\uffdd\054\116\055\uffdd\056" +
    "\uffdd\057\uffdd\060\uffdd\061\uffdd\062\uffdd\063\uffdd\064\uffdd" +
    "\065\uffdd\001\002\000\052\006\055\010\051\011\066\012" +
    "\064\023\026\024\034\025\016\026\046\027\021\030\041" +
    "\031\035\035\024\036\047\037\022\040\025\061\056\062" +
    "\062\063\060\064\053\065\052\001\002\000\054\010\uffb8" +
    "\011\uffb8\023\uffb8\024\uffb8\025\uffb8\026\uffb8\027\uffb8\030" +
    "\uffb8\031\uffb8\035\uffb8\036\uffb8\037\uffb8\040\uffb8\042\uffb8" +
    "\043\uffb8\044\uffb8\061\uffb8\062\uffb8\063\uffb8\064\uffb8\065" +
    "\uffb8\001\002\000\054\010\uffb9\011\uffb9\023\uffb9\024\uffb9" +
    "\025\uffb9\026\uffb9\027\uffb9\030\uffb9\031\uffb9\035\uffb9\036" +
    "\uffb9\037\uffb9\040\uffb9\042\uffb9\043\uffb9\044\uffb9\061\uffb9" +
    "\062\uffb9\063\uffb9\064\uffb9\065\uffb9\001\002\000\054\010" +
    "\uffbe\011\uffbe\023\uffbe\024\uffbe\025\uffbe\026\uffbe\027\uffbe" +
    "\030\uffbe\031\uffbe\035\uffbe\036\uffbe\037\uffbe\040\uffbe\042" +
    "\uffbe\043\uffbe\044\uffbe\061\uffbe\062\uffbe\063\uffbe\064\uffbe" +
    "\065\uffbe\001\002\000\050\010\051\011\107\012\064\023" +
    "\026\024\034\025\016\026\046\027\021\030\041\031\035" +
    "\035\024\036\047\037\022\040\025\061\056\062\062\063" +
    "\060\064\053\065\052\001\002\000\056\010\uffbc\011\uffbc" +
    "\012\104\023\uffbc\024\uffbc\025\uffbc\026\uffbc\027\uffbc\030" +
    "\uffbc\031\uffbc\035\uffbc\036\uffbc\037\uffbc\040\uffbc\042\uffbc" +
    "\043\uffbc\044\uffbc\061\uffbc\062\uffbc\063\uffbc\064\uffbc\065" +
    "\uffbc\001\002\000\004\011\103\001\002\000\054\010\uffb7" +
    "\011\uffb7\023\uffb7\024\uffb7\025\uffb7\026\uffb7\027\uffb7\030" +
    "\uffb7\031\uffb7\035\uffb7\036\uffb7\037\uffb7\040\uffb7\042\uffb7" +
    "\043\uffb7\044\uffb7\061\uffb7\062\uffb7\063\uffb7\064\uffb7\065" +
    "\uffb7\001\002\000\054\010\uffba\011\uffba\023\uffba\024\uffba" +
    "\025\uffba\026\uffba\027\uffba\030\uffba\031\uffba\035\uffba\036" +
    "\uffba\037\uffba\040\uffba\042\uffba\043\uffba\044\uffba\061\uffba" +
    "\062\uffba\063\uffba\064\uffba\065\uffba\001\002\000\054\010" +
    "\uffbb\011\uffbb\023\uffbb\024\uffbb\025\uffbb\026\uffbb\027\uffbb" +
    "\030\uffbb\031\uffbb\035\uffbb\036\uffbb\037\uffbb\040\uffbb\042" +
    "\uffbb\043\uffbb\044\uffbb\061\uffbb\062\uffbb\063\uffbb\064\uffbb" +
    "\065\uffbb\001\002\000\012\011\uffc3\042\074\043\073\044" +
    "\075\001\002\000\044\010\051\023\026\024\034\025\016" +
    "\026\046\027\021\030\041\031\035\035\024\036\047\037" +
    "\022\040\025\061\056\062\062\063\060\064\053\065\052" +
    "\001\002\000\054\010\uffb6\011\uffb6\023\uffb6\024\uffb6\025" +
    "\uffb6\026\uffb6\027\uffb6\030\uffb6\031\uffb6\035\uffb6\036\uffb6" +
    "\037\uffb6\040\uffb6\042\uffb6\043\uffb6\044\uffb6\061\uffb6\062" +
    "\uffb6\063\uffb6\064\uffb6\065\uffb6\001\002\000\112\004\uffcb" +
    "\005\uffcb\007\uffcb\010\uffcb\011\uffcb\022\uffcb\023\uffcb\024" +
    "\uffcb\025\uffcb\026\uffcb\027\uffcb\030\uffcb\031\uffcb\033\uffcb" +
    "\034\uffcb\035\uffcb\036\uffcb\037\uffcb\040\uffcb\042\uffcb\043" +
    "\uffcb\044\uffcb\050\uffcb\051\uffcb\052\uffcb\053\uffcb\054\uffcb" +
    "\055\uffcb\056\uffcb\057\uffcb\060\uffcb\061\uffcb\062\uffcb\063" +
    "\uffcb\064\uffcb\065\uffcb\001\002\000\054\010\051\011\uffc1" +
    "\023\026\024\034\025\016\026\046\027\021\030\041\031" +
    "\035\035\024\036\047\037\022\040\025\042\uffc1\043\uffc1" +
    "\044\uffc1\061\056\062\062\063\060\064\053\065\052\001" +
    "\002\000\054\010\uffbf\011\uffbf\023\uffbf\024\uffbf\025\uffbf" +
    "\026\uffbf\027\uffbf\030\uffbf\031\uffbf\035\uffbf\036\uffbf\037" +
    "\uffbf\040\uffbf\042\uffbf\043\uffbf\044\uffbf\061\uffbf\062\uffbf" +
    "\063\uffbf\064\uffbf\065\uffbf\001\002\000\054\010\051\011" +
    "\uffc0\023\026\024\034\025\016\026\046\027\021\030\041" +
    "\031\035\035\024\036\047\037\022\040\025\042\uffc0\043" +
    "\uffc0\044\uffc0\061\056\062\062\063\060\064\053\065\052" +
    "\001\002\000\050\006\076\010\051\012\064\023\026\024" +
    "\034\025\016\026\046\027\021\030\041\031\035\035\024" +
    "\036\047\037\022\040\025\061\056\062\062\063\060\064" +
    "\053\065\052\001\002\000\050\006\uffc5\010\uffc5\012\uffc5" +
    "\023\uffc5\024\uffc5\025\uffc5\026\uffc5\027\uffc5\030\uffc5\031" +
    "\uffc5\035\uffc5\036\uffc5\037\uffc5\040\uffc5\061\uffc5\062\uffc5" +
    "\063\uffc5\064\uffc5\065\uffc5\001\002\000\050\006\uffc6\010" +
    "\uffc6\012\uffc6\023\uffc6\024\uffc6\025\uffc6\026\uffc6\027\uffc6" +
    "\030\uffc6\031\uffc6\035\uffc6\036\uffc6\037\uffc6\040\uffc6\061" +
    "\uffc6\062\uffc6\063\uffc6\064\uffc6\065\uffc6\001\002\000\050" +
    "\006\uffc4\010\uffc4\012\uffc4\023\uffc4\024\uffc4\025\uffc4\026" +
    "\uffc4\027\uffc4\030\uffc4\031\uffc4\035\uffc4\036\uffc4\037\uffc4" +
    "\040\uffc4\061\uffc4\062\uffc4\063\uffc4\064\uffc4\065\uffc4\001" +
    "\002\000\046\010\051\012\064\023\026\024\034\025\016" +
    "\026\046\027\021\030\041\031\035\035\024\036\047\037" +
    "\022\040\025\061\056\062\062\063\060\064\053\065\052" +
    "\001\002\000\004\011\101\001\002\000\004\011\uffc3\001" +
    "\002\000\112\004\uffc8\005\uffc8\007\uffc8\010\uffc8\011\uffc8" +
    "\022\uffc8\023\uffc8\024\uffc8\025\uffc8\026\uffc8\027\uffc8\030" +
    "\uffc8\031\uffc8\033\uffc8\034\uffc8\035\uffc8\036\uffc8\037\uffc8" +
    "\040\uffc8\042\uffc8\043\uffc8\044\uffc8\050\uffc8\051\uffc8\052" +
    "\uffc8\053\uffc8\054\uffc8\055\uffc8\056\uffc8\057\uffc8\060\uffc8" +
    "\061\uffc8\062\uffc8\063\uffc8\064\uffc8\065\uffc8\001\002\000" +
    "\004\011\uffc2\001\002\000\112\004\uffc9\005\uffc9\007\uffc9" +
    "\010\uffc9\011\uffc9\022\uffc9\023\uffc9\024\uffc9\025\uffc9\026" +
    "\uffc9\027\uffc9\030\uffc9\031\uffc9\033\uffc9\034\uffc9\035\uffc9" +
    "\036\uffc9\037\uffc9\040\uffc9\042\uffc9\043\uffc9\044\uffc9\050" +
    "\uffc9\051\uffc9\052\uffc9\053\uffc9\054\uffc9\055\uffc9\056\uffc9" +
    "\057\uffc9\060\uffc9\061\uffc9\062\uffc9\063\uffc9\064\uffc9\065" +
    "\uffc9\001\002\000\004\061\105\001\002\000\054\010\uffbd" +
    "\011\uffbd\023\uffbd\024\uffbd\025\uffbd\026\uffbd\027\uffbd\030" +
    "\uffbd\031\uffbd\035\uffbd\036\uffbd\037\uffbd\040\uffbd\042\uffbd" +
    "\043\uffbd\044\uffbd\061\uffbd\062\uffbd\063\uffbd\064\uffbd\065" +
    "\uffbd\001\002\000\012\011\uffc2\042\074\043\073\044\075" +
    "\001\002\000\112\004\uffca\005\uffca\007\uffca\010\uffca\011" +
    "\uffca\022\uffca\023\uffca\024\uffca\025\uffca\026\uffca\027\uffca" +
    "\030\uffca\031\uffca\033\uffca\034\uffca\035\uffca\036\uffca\037" +
    "\uffca\040\uffca\042\uffca\043\uffca\044\uffca\050\uffca\051\uffca" +
    "\052\uffca\053\uffca\054\uffca\055\uffca\056\uffca\057\uffca\060" +
    "\uffca\061\uffca\062\uffca\063\uffca\064\uffca\065\uffca\001\002" +
    "\000\050\006\076\010\051\012\064\023\026\024\034\025" +
    "\016\026\046\027\021\030\041\031\035\035\024\036\047" +
    "\037\022\040\025\061\056\062\062\063\060\064\053\065" +
    "\052\001\002\000\004\011\112\001\002\000\112\004\uffc7" +
    "\005\uffc7\007\uffc7\010\uffc7\011\uffc7\022\uffc7\023\uffc7\024" +
    "\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031\uffc7\033\uffc7" +
    "\034\uffc7\035\uffc7\036\uffc7\037\uffc7\040\uffc7\042\uffc7\043" +
    "\uffc7\044\uffc7\050\uffc7\051\uffc7\052\uffc7\053\uffc7\054\uffc7" +
    "\055\uffc7\056\uffc7\057\uffc7\060\uffc7\061\uffc7\062\uffc7\063" +
    "\uffc7\064\uffc7\065\uffc7\001\002\000\102\004\uffda\005\uffda" +
    "\007\uffda\010\uffda\022\uffda\023\uffda\024\uffda\025\uffda\026" +
    "\uffda\027\uffda\030\uffda\031\uffda\033\uffda\034\uffda\035\uffda" +
    "\036\uffda\037\uffda\040\uffda\050\uffda\051\uffda\052\uffda\053" +
    "\uffda\054\uffda\055\uffda\056\uffda\057\uffda\060\uffda\061\uffda" +
    "\062\uffda\063\uffda\064\uffda\065\uffda\001\002\000\102\004" +
    "\uffd9\005\uffd9\007\uffd9\010\uffd9\022\uffd9\023\uffd9\024\uffd9" +
    "\025\uffd9\026\uffd9\027\uffd9\030\uffd9\031\uffd9\033\uffd9\034" +
    "\uffd9\035\uffd9\036\uffd9\037\uffd9\040\uffd9\050\uffd9\051\uffd9" +
    "\052\uffd9\053\uffd9\054\uffd9\055\uffd9\056\uffd9\057\uffd9\060" +
    "\uffd9\061\uffd9\062\uffd9\063\uffd9\064\uffd9\065\uffd9\001\002" +
    "\000\006\021\117\050\120\001\002\000\102\004\uffd8\005" +
    "\uffd8\007\uffd8\010\uffd8\022\uffd8\023\uffd8\024\uffd8\025\uffd8" +
    "\026\uffd8\027\uffd8\030\uffd8\031\uffd8\033\uffd8\034\uffd8\035" +
    "\uffd8\036\uffd8\037\uffd8\040\uffd8\050\uffd8\051\uffd8\052\uffd8" +
    "\053\uffd8\054\uffd8\055\uffd8\056\uffd8\057\uffd8\060\uffd8\061" +
    "\uffd8\062\uffd8\063\uffd8\064\uffd8\065\uffd8\001\002\000\102" +
    "\004\uffd7\005\uffd7\007\uffd7\010\uffd7\022\uffd7\023\uffd7\024" +
    "\uffd7\025\uffd7\026\uffd7\027\uffd7\030\uffd7\031\uffd7\033\uffd7" +
    "\034\uffd7\035\uffd7\036\uffd7\037\uffd7\040\uffd7\050\uffd7\051" +
    "\uffd7\052\uffd7\053\uffd7\054\uffd7\055\uffd7\056\uffd7\057\uffd7" +
    "\060\uffd7\061\uffd7\062\uffd7\063\uffd7\064\uffd7\065\uffd7\001" +
    "\002\000\004\021\121\001\002\000\102\004\uffd6\005\uffd6" +
    "\007\uffd6\010\uffd6\022\uffd6\023\uffd6\024\uffd6\025\uffd6\026" +
    "\uffd6\027\uffd6\030\uffd6\031\uffd6\033\uffd6\034\uffd6\035\uffd6" +
    "\036\uffd6\037\uffd6\040\uffd6\050\uffd6\051\uffd6\052\uffd6\053" +
    "\uffd6\054\uffd6\055\uffd6\056\uffd6\057\uffd6\060\uffd6\061\uffd6" +
    "\062\uffd6\063\uffd6\064\uffd6\065\uffd6\001\002\000\072\004" +
    "\uffdc\005\uffdc\007\uffdc\010\uffdc\022\uffdc\023\uffdc\024\uffdc" +
    "\025\uffdc\026\uffdc\027\uffdc\030\uffdc\031\uffdc\033\uffdc\034" +
    "\uffdc\035\uffdc\036\uffdc\037\uffdc\040\uffdc\053\uffdc\055\uffdc" +
    "\056\uffdc\057\uffdc\060\uffdc\061\uffdc\062\uffdc\063\uffdc\064" +
    "\uffdc\065\uffdc\001\002\000\006\005\125\053\124\001\002" +
    "\000\056\004\040\010\051\023\026\024\034\025\016\026" +
    "\046\027\021\030\041\031\035\035\024\036\047\037\022" +
    "\040\025\055\023\056\036\057\043\060\027\061\020\062" +
    "\033\063\030\064\017\065\015\001\002\000\102\004\uffd5" +
    "\005\uffd5\007\uffd5\010\uffd5\022\uffd5\023\uffd5\024\uffd5\025" +
    "\uffd5\026\uffd5\027\uffd5\030\uffd5\031\uffd5\033\uffd5\034\uffd5" +
    "\035\uffd5\036\uffd5\037\uffd5\040\uffd5\050\uffd5\051\uffd5\052" +
    "\uffd5\053\uffd5\054\uffd5\055\uffd5\056\uffd5\057\uffd5\060\uffd5" +
    "\061\uffd5\062\uffd5\063\uffd5\064\uffd5\065\uffd5\001\002\000" +
    "\072\004\040\005\uffe2\007\uffe2\010\051\022\uffe2\023\026" +
    "\024\034\025\016\026\046\027\021\030\041\031\035\033" +
    "\uffe2\034\uffe2\035\024\036\047\037\022\040\025\053\uffe2" +
    "\055\023\056\036\057\043\060\027\061\020\062\033\063" +
    "\030\064\017\065\015\001\002\000\072\004\uffdf\005\uffdf" +
    "\007\uffdf\010\uffdf\022\uffdf\023\uffdf\024\uffdf\025\uffdf\026" +
    "\uffdf\027\uffdf\030\uffdf\031\uffdf\033\uffdf\034\uffdf\035\uffdf" +
    "\036\uffdf\037\uffdf\040\uffdf\053\uffdf\055\uffdf\056\uffdf\057" +
    "\uffdf\060\uffdf\061\uffdf\062\uffdf\063\uffdf\064\uffdf\065\uffdf" +
    "\001\002\000\006\013\ufffb\046\ufffb\001\002\000\072\004" +
    "\uffdb\005\uffdb\007\uffdb\010\uffdb\022\uffdb\023\uffdb\024\uffdb" +
    "\025\uffdb\026\uffdb\027\uffdb\030\uffdb\031\uffdb\033\uffdb\034" +
    "\uffdb\035\uffdb\036\uffdb\037\uffdb\040\uffdb\053\uffdb\055\uffdb" +
    "\056\uffdb\057\uffdb\060\uffdb\061\uffdb\062\uffdb\063\uffdb\064" +
    "\uffdb\065\uffdb\001\002\000\074\002\ufff0\003\ufff0\004\ufff0" +
    "\006\ufff0\010\ufff0\016\ufff0\021\ufff0\023\ufff0\024\ufff0\025" +
    "\ufff0\026\ufff0\027\ufff0\030\ufff0\031\ufff0\032\ufff0\035\ufff0" +
    "\036\ufff0\037\ufff0\040\ufff0\053\ufff0\055\ufff0\056\ufff0\057" +
    "\ufff0\060\ufff0\061\ufff0\062\ufff0\063\ufff0\064\ufff0\065\ufff0" +
    "\001\002\000\064\004\uffe3\006\160\010\uffe3\023\uffe3\024" +
    "\uffe3\025\uffe3\026\uffe3\027\uffe3\030\uffe3\031\uffe3\032\156" +
    "\035\uffe3\036\uffe3\037\uffe3\040\uffe3\053\uffe3\055\uffe3\056" +
    "\uffe3\057\uffe3\060\uffe3\061\uffe3\062\uffe3\063\uffe3\064\uffe3" +
    "\065\uffe3\001\002\000\004\046\142\001\002\000\074\002" +
    "\ufff6\003\ufff6\004\ufff6\006\ufff6\010\ufff6\016\ufff6\021\ufff6" +
    "\023\ufff6\024\ufff6\025\ufff6\026\ufff6\027\ufff6\030\ufff6\031" +
    "\ufff6\032\ufff6\035\ufff6\036\ufff6\037\ufff6\040\ufff6\053\ufff6" +
    "\055\ufff6\056\ufff6\057\ufff6\060\ufff6\061\ufff6\062\ufff6\063" +
    "\ufff6\064\ufff6\065\ufff6\001\002\000\072\002\000\003\132" +
    "\004\uffe8\006\uffe8\010\uffe8\016\137\023\uffe8\024\uffe8\025" +
    "\uffe8\026\uffe8\027\uffe8\030\uffe8\031\uffe8\032\uffe8\035\uffe8" +
    "\036\uffe8\037\uffe8\040\uffe8\053\uffe8\055\uffe8\056\uffe8\057" +
    "\uffe8\060\uffe8\061\uffe8\062\uffe8\063\uffe8\064\uffe8\065\uffe8" +
    "\001\002\000\004\046\142\001\002\000\074\002\ufff9\003" +
    "\ufff9\004\ufff9\006\ufff9\010\ufff9\016\ufff9\021\ufff9\023\ufff9" +
    "\024\ufff9\025\ufff9\026\ufff9\027\ufff9\030\ufff9\031\ufff9\032" +
    "\ufff9\035\ufff9\036\ufff9\037\ufff9\040\ufff9\053\ufff9\055\ufff9" +
    "\056\ufff9\057\ufff9\060\ufff9\061\ufff9\062\ufff9\063\ufff9\064" +
    "\ufff9\065\ufff9\001\002\000\004\017\145\001\002\000\006" +
    "\015\143\017\uffe6\001\002\000\006\017\uffe5\046\142\001" +
    "\002\000\004\017\uffe7\001\002\000\066\004\uffe9\006\uffe9" +
    "\010\uffe9\020\146\023\uffe9\024\uffe9\025\uffe9\026\uffe9\027" +
    "\uffe9\030\uffe9\031\uffe9\032\uffe9\035\uffe9\036\uffe9\037\uffe9" +
    "\040\uffe9\053\uffe9\055\uffe9\056\uffe9\057\uffe9\060\uffe9\061" +
    "\uffe9\062\uffe9\063\uffe9\064\uffe9\065\uffe9\001\002\000\070" +
    "\003\132\004\uffe8\006\uffe8\010\uffe8\016\134\023\uffe8\024" +
    "\uffe8\025\uffe8\026\uffe8\027\uffe8\030\uffe8\031\uffe8\032\uffe8" +
    "\035\uffe8\036\uffe8\037\uffe8\040\uffe8\053\uffe8\055\uffe8\056" +
    "\uffe8\057\uffe8\060\uffe8\061\uffe8\062\uffe8\063\uffe8\064\uffe8" +
    "\065\uffe8\001\002\000\072\003\132\004\uffe8\006\uffe8\010" +
    "\uffe8\016\137\021\150\023\uffe8\024\uffe8\025\uffe8\026\uffe8" +
    "\027\uffe8\030\uffe8\031\uffe8\032\uffe8\035\uffe8\036\uffe8\037" +
    "\uffe8\040\uffe8\053\uffe8\055\uffe8\056\uffe8\057\uffe8\060\uffe8" +
    "\061\uffe8\062\uffe8\063\uffe8\064\uffe8\065\uffe8\001\002\000" +
    "\074\002\ufff8\003\ufff8\004\ufff8\006\ufff8\010\ufff8\016\ufff8" +
    "\021\ufff8\023\ufff8\024\ufff8\025\ufff8\026\ufff8\027\ufff8\030" +
    "\ufff8\031\ufff8\032\ufff8\035\ufff8\036\ufff8\037\ufff8\040\ufff8" +
    "\053\ufff8\055\ufff8\056\ufff8\057\ufff8\060\ufff8\061\ufff8\062" +
    "\ufff8\063\ufff8\064\ufff8\065\ufff8\001\002\000\004\017\152" +
    "\001\002\000\066\004\uffe9\006\uffe9\010\uffe9\020\153\023" +
    "\uffe9\024\uffe9\025\uffe9\026\uffe9\027\uffe9\030\uffe9\031\uffe9" +
    "\032\uffe9\035\uffe9\036\uffe9\037\uffe9\040\uffe9\053\uffe9\055" +
    "\uffe9\056\uffe9\057\uffe9\060\uffe9\061\uffe9\062\uffe9\063\uffe9" +
    "\064\uffe9\065\uffe9\001\002\000\070\003\132\004\uffe8\006" +
    "\uffe8\010\uffe8\016\134\023\uffe8\024\uffe8\025\uffe8\026\uffe8" +
    "\027\uffe8\030\uffe8\031\uffe8\032\uffe8\035\uffe8\036\uffe8\037" +
    "\uffe8\040\uffe8\053\uffe8\055\uffe8\056\uffe8\057\uffe8\060\uffe8" +
    "\061\uffe8\062\uffe8\063\uffe8\064\uffe8\065\uffe8\001\002\000" +
    "\072\003\132\004\uffe8\006\uffe8\010\uffe8\016\137\021\155" +
    "\023\uffe8\024\uffe8\025\uffe8\026\uffe8\027\uffe8\030\uffe8\031" +
    "\uffe8\032\uffe8\035\uffe8\036\uffe8\037\uffe8\040\uffe8\053\uffe8" +
    "\055\uffe8\056\uffe8\057\uffe8\060\uffe8\061\uffe8\062\uffe8\063" +
    "\uffe8\064\uffe8\065\uffe8\001\002\000\074\002\ufff7\003\ufff7" +
    "\004\ufff7\006\ufff7\010\ufff7\016\ufff7\021\ufff7\023\ufff7\024" +
    "\ufff7\025\ufff7\026\ufff7\027\ufff7\030\ufff7\031\ufff7\032\ufff7" +
    "\035\ufff7\036\ufff7\037\ufff7\040\ufff7\053\ufff7\055\ufff7\056" +
    "\ufff7\057\ufff7\060\ufff7\061\ufff7\062\ufff7\063\ufff7\064\ufff7" +
    "\065\ufff7\001\002\000\006\033\176\045\177\001\002\000" +
    "\060\004\040\010\051\023\026\024\034\025\016\026\046" +
    "\027\021\030\041\031\035\035\024\036\047\037\022\040" +
    "\025\053\045\055\023\056\036\057\043\060\027\061\020" +
    "\062\033\063\030\064\017\065\015\001\002\000\060\004" +
    "\uffe4\010\uffe4\023\uffe4\024\uffe4\025\uffe4\026\uffe4\027\uffe4" +
    "\030\uffe4\031\uffe4\035\uffe4\036\uffe4\037\uffe4\040\uffe4\053" +
    "\uffe4\055\uffe4\056\uffe4\057\uffe4\060\uffe4\061\uffe4\062\uffe4" +
    "\063\uffe4\064\uffe4\065\uffe4\001\002\000\014\007\167\022" +
    "\165\033\162\034\164\053\124\001\002\000\074\002\uffea" +
    "\003\uffea\004\uffea\006\uffea\010\uffea\016\uffea\021\uffea\023" +
    "\uffea\024\uffea\025\uffea\026\uffea\027\uffea\030\uffea\031\uffea" +
    "\032\uffea\035\uffea\036\uffea\037\uffea\040\uffea\053\uffea\055" +
    "\uffea\056\uffea\057\uffea\060\uffea\061\uffea\062\uffea\063\uffea" +
    "\064\uffea\065\uffea\001\002\000\074\002\uffeb\003\uffeb\004" +
    "\uffeb\006\uffeb\010\uffeb\016\uffeb\021\uffeb\023\uffeb\024\uffeb" +
    "\025\uffeb\026\uffeb\027\uffeb\030\uffeb\031\uffeb\032\uffeb\035" +
    "\uffeb\036\uffeb\037\uffeb\040\uffeb\053\uffeb\055\uffeb\056\uffeb" +
    "\057\uffeb\060\uffeb\061\uffeb\062\uffeb\063\uffeb\064\uffeb\065" +
    "\uffeb\001\002\000\060\004\040\010\051\023\026\024\034" +
    "\025\016\026\046\027\021\030\041\031\035\035\024\036" +
    "\047\037\022\040\025\053\045\055\023\056\036\057\043" +
    "\060\027\061\020\062\033\063\030\064\017\065\015\001" +
    "\002\000\004\045\173\001\002\000\006\022\165\033\171" +
    "\001\002\000\006\022\uffef\033\uffef\001\002\000\074\002" +
    "\ufff5\003\ufff5\004\ufff5\006\ufff5\010\ufff5\016\ufff5\021\ufff5" +
    "\023\ufff5\024\ufff5\025\ufff5\026\ufff5\027\ufff5\030\ufff5\031" +
    "\ufff5\032\ufff5\035\ufff5\036\ufff5\037\ufff5\040\ufff5\053\ufff5" +
    "\055\ufff5\056\ufff5\057\ufff5\060\ufff5\061\ufff5\062\ufff5\063" +
    "\ufff5\064\ufff5\065\ufff5\001\002\000\074\002\ufff3\003\ufff3" +
    "\004\ufff3\006\ufff3\010\ufff3\016\ufff3\021\ufff3\023\ufff3\024" +
    "\ufff3\025\ufff3\026\ufff3\027\ufff3\030\ufff3\031\ufff3\032\ufff3" +
    "\035\ufff3\036\ufff3\037\ufff3\040\ufff3\053\ufff3\055\ufff3\056" +
    "\ufff3\057\ufff3\060\ufff3\061\ufff3\062\ufff3\063\ufff3\064\ufff3" +
    "\065\ufff3\001\002\000\074\002\ufff4\003\ufff4\004\ufff4\006" +
    "\ufff4\010\ufff4\016\ufff4\021\ufff4\023\ufff4\024\ufff4\025\ufff4" +
    "\026\ufff4\027\ufff4\030\ufff4\031\ufff4\032\ufff4\035\ufff4\036" +
    "\ufff4\037\ufff4\040\ufff4\053\ufff4\055\ufff4\056\ufff4\057\ufff4" +
    "\060\ufff4\061\ufff4\062\ufff4\063\ufff4\064\ufff4\065\ufff4\001" +
    "\002\000\074\002\uffec\003\uffec\004\uffec\006\uffec\010\uffec" +
    "\016\uffec\021\uffec\023\uffec\024\uffec\025\uffec\026\uffec\027" +
    "\uffec\030\uffec\031\uffec\032\uffec\035\uffec\036\uffec\037\uffec" +
    "\040\uffec\053\uffec\055\uffec\056\uffec\057\uffec\060\uffec\061" +
    "\uffec\062\uffec\063\uffec\064\uffec\065\uffec\001\002\000\012" +
    "\007\175\022\uffee\033\uffee\053\124\001\002\000\006\022" +
    "\uffed\033\uffed\001\002\000\074\002\ufff1\003\ufff1\004\ufff1" +
    "\006\ufff1\010\ufff1\016\ufff1\021\ufff1\023\ufff1\024\ufff1\025" +
    "\ufff1\026\ufff1\027\ufff1\030\ufff1\031\ufff1\032\ufff1\035\ufff1" +
    "\036\ufff1\037\ufff1\040\ufff1\053\ufff1\055\ufff1\056\ufff1\057" +
    "\ufff1\060\ufff1\061\ufff1\062\ufff1\063\ufff1\064\ufff1\065\ufff1" +
    "\001\002\000\074\002\ufff2\003\ufff2\004\ufff2\006\ufff2\010" +
    "\ufff2\016\ufff2\021\ufff2\023\ufff2\024\ufff2\025\ufff2\026\ufff2" +
    "\027\ufff2\030\ufff2\031\ufff2\032\ufff2\035\ufff2\036\ufff2\037" +
    "\ufff2\040\ufff2\053\ufff2\055\ufff2\056\ufff2\057\ufff2\060\ufff2" +
    "\061\ufff2\062\ufff2\063\ufff2\064\ufff2\065\ufff2\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\175\000\004\005\004\001\001\000\004\002\007\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\004\003\011\001\001\000\010\004\134\022\132\023" +
    "\135\001\001\000\002\001\001\000\002\001\001\000\016" +
    "\006\030\007\036\010\043\011\047\012\041\016\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" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\012\010\130\011\047\012\041\016\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" +
    "\002\001\001\000\012\010\126\011\047\012\041\016\031" +
    "\001\001\000\016\006\122\007\036\010\043\011\047\012" +
    "\041\016\031\001\001\000\002\001\001\000\002\001\001" +
    "\000\012\010\121\011\047\012\041\016\031\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\016\012\064\014\056\015" +
    "\053\016\060\017\062\020\066\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\014\012\064\015" +
    "\053\016\060\017\105\020\066\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\004\024\071\001\001\000\012\012\064" +
    "\015\053\016\060\020\070\001\001\000\002\001\001\000" +
    "\002\001\001\000\010\012\064\015\067\016\060\001\001" +
    "\000\002\001\001\000\010\012\064\015\067\016\060\001" +
    "\001\000\016\012\064\014\076\015\053\016\060\017\077" +
    "\020\066\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\014\012\064\015\053\016\060\017\101" +
    "\020\066\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\004\024\107\001\001\000" +
    "\002\001\001\000\016\012\064\014\110\015\053\016\060" +
    "\017\077\020\066\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\014" +
    "\007\125\010\043\011\047\012\041\016\031\001\001\000" +
    "\002\001\001\000\012\010\126\011\047\012\041\016\031" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\004\025\156\001\001\000\004" +
    "\021\150\001\001\000\002\001\001\000\006\004\137\022" +
    "\132\001\001\000\004\021\140\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\021\143\001" +
    "\001\000\002\001\001\000\002\001\001\000\010\004\134" +
    "\022\132\023\146\001\001\000\006\004\137\022\132\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\010\004\134\022\132\023\153\001\001\000\006\004" +
    "\137\022\132\001\001\000\002\001\001\000\002\001\001" +
    "\000\016\006\160\007\036\010\043\011\047\012\041\016" +
    "\031\001\001\000\002\001\001\000\010\013\165\026\162" +
    "\027\167\001\001\000\002\001\001\000\002\001\001\000" +
    "\016\006\173\007\036\010\043\011\047\012\041\016\031" +
    "\001\001\000\002\001\001\000\004\026\171\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" });

  /** Access to <code>reduce_goto</code> table. */
  public short[][] reduce_table() {return _reduce_table;}

  /** Instance of action encapsulation class. */
  protected CUP$LexParse$actions action_obj;

  /** Action encapsulation object initializer. */
  protected void init_actions()
    {
      action_obj = new CUP$LexParse$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$LexParse$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;}

  /** <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
    {

  action_obj.scanner = scanner;
  // CharClasses.init() is delayed until UnicodeProperties.init() has been called,
  // since the max char code won't be known until then.
  action_obj.charClasses = scanner.getCharClasses();

    }


   public LexScan scanner;

   public LexParse(LexScan scanner) {
     super(scanner);
     this.scanner = scanner;
   }

   public CharClasses getCharClasses() {
     return action_obj.charClasses;
   }

   public EOFActions getEOFActions() {
     return action_obj.eofActions;
   }

   /**
    * Override syntax_error to not report expected tokens, just error message.
    */
   public void syntax_error(Symbol cur_token) {
     // TODO(lsf): reporting expected tokens using their actual surface syntax would
     // be useful. Would need a reverse mapping of terminals or similar.

     // JFlex reporting doesn't use the message argument.
     report_error(null, cur_token);
   }

   /**
    * Override lr_parser.report_error to use JFlex reporting.
    */
   public void report_error(String message, Object info) {
     if (info instanceof Symbol) {
       Symbol s = (Symbol) info;

       if (s.sym == sym.EOF)
         Out.error(ErrorMessages.UNEXPECTED_EOF);
       else
         Out.error(scanner.file, ErrorMessages.SYNTAX_ERROR, s.left, s.right);
     }
     else
       Out.error(ErrorMessages.UNKNOWN_SYNTAX);
   }

   /**
    * Override lr_parser.report_fatal_error to use JFlex reporting.
    */
   public void report_fatal_error(String message, Object info) {
     // CUP does not produce an informative message here, so we just stop.
     throw new GeneratorException();
   }


/** Cup generated class to encapsulate user supplied action code.*/
@SuppressWarnings({"rawtypes", "unchecked", "unused"})
class CUP$LexParse$actions {



  LexScan     scanner;
  CharClasses charClasses;
  RegExps     regExps     = new RegExps();
  Macros      macros      = new Macros();
  Integer     stateNumber;
  Timer       t           = new Timer();
  EOFActions  eofActions  = new EOFActions();
  Map<Integer,IntCharSet> preclassCache = new HashMap<Integer,IntCharSet>();

  void fatalError(ErrorMessages.ErrorMessage message, int line, int col) {
    syntaxError(message, line, col);
    throw new GeneratorException();
  }

  void fatalError(ErrorMessages.ErrorMessage message) {
    fatalError(message, scanner.lexLine(), -1);
    throw new GeneratorException();
  }

  void syntaxError(ErrorMessages.ErrorMessage message) {
    Out.error(scanner.file, message, scanner.lexLine(), -1);
  }

  void syntaxError(ErrorMessages.ErrorMessage message, int line) {
    Out.error(scanner.file, message, line, -1);
  }

  void syntaxError(ErrorMessages.ErrorMessage message, int line, int col) {
    Out.error(scanner.file, message, line, col);
  }

  void warning(ErrorMessages.ErrorMessage message, int line, int col) {
    Out.warning(scanner.file, message, line, col);
  }

  private boolean isDotOrNewlinePattern(RegExp r1, RegExp r2) {
    return ( r1 instanceof RegExp1 && ((RegExp1)r1).isPoint && isNewline(r2) )
        || ( r2 instanceof RegExp1 && ((RegExp1)r2).isPoint && isNewline(r1) );
  }

  private boolean isNewline(RegExp r) {
    if ( ! (r instanceof RegExp1) || null == ((RegExp1)r).content ) {
      return false;
    }
    RegExp1 r1 = (RegExp1)r;
    switch ( r1.type ) {
      case sym.STRING:
      case sym.STRING_I:
        return "\n".equals(r1.content);
      case sym.CHAR:
      case sym.CHAR_I:
        return '\n' == (char)((Integer)r1.content).intValue();
      case sym.PRIMCLASS:
        return IntCharSet.nlChars().contains((IntCharSet) r1.content);
      default:
        return false;
    }
  }

  private boolean check(int type, int c) {
    switch (type) {
      case sym.JLETTERCLASS:
        return Character.isJavaIdentifierStart(c);

      case sym.JLETTERDIGITCLASS:
        return Character.isJavaIdentifierPart(c);

      default: return false;
    }
  }

  private IntCharSet getPreClass(int type) {
    IntCharSet result = preclassCache.get(type);
    if (null == result) {
      UnicodeProperties unicodeProperties = scanner.getUnicodeProperties();
      switch (type) {
        case sym.LETTERCLASS:
          result = unicodeProperties.getIntCharSet("L");
          preclassCache.put(type, result);
          break;

        case sym.DIGITCLASS:
          result = unicodeProperties.getIntCharSet("Nd");
          preclassCache.put(type, result);
          break;

        case sym.DIGITCLASSNOT:
          IntCharSet digits = unicodeProperties.getIntCharSet("Nd");
          result = IntCharSet.ofCharacterRange(0,  unicodeProperties.getMaximumCodePoint());
          result.sub(digits);
          preclassCache.put(type, result);
          break;

        case sym.UPPERCLASS:
          // "Uppercase" is more than Uppercase_Letter, but older Unicode
          // versions don't have this definition - check for "Uppercase",
          // then fall back to Uppercase_Letter (Lu) if it does not exist.
          result = unicodeProperties.getIntCharSet("Uppercase");
          if (null == result) {
            result = unicodeProperties.getIntCharSet("Lu");
          }
          preclassCache.put(type, result);
          break;

        case sym.LOWERCLASS:
          // "Lowercase" is more than Lowercase_Letter, but older Unicode
          // versions don't have this definition - check for "Lowercase",
          // then fall back to Lowercase_Letter (Ll) if it does not exist.
          result = unicodeProperties.getIntCharSet("Lowercase");
          if (null == result) {
            result = unicodeProperties.getIntCharSet("Ll");
          }
          preclassCache.put(type, result);
          break;

        case sym.WHITESPACECLASS:
          // Although later versions do, Unicode 1.1 does not have the
          // "Whitespace" definition - check for "Whitespace", then fall back
          // to "Space_separator" (Zs) if it does not exist.
          result = unicodeProperties.getIntCharSet("Whitespace");
          if (null == result) {
            result = unicodeProperties.getIntCharSet("Zs");
          }
          preclassCache.put(type, result);
          break;

        case sym.WHITESPACECLASSNOT:
          // Although later versions do, Unicode 1.1 does not have the
          // "Whitespace" definition - check for "Whitespace", then fall back
          // to "Space_separator" (Zs) if it does not exist.
          IntCharSet whitespaceClass = unicodeProperties.getIntCharSet("Whitespace");
          if (null == whitespaceClass) {
            whitespaceClass = unicodeProperties.getIntCharSet("Zs");
          }
          result = IntCharSet.ofCharacterRange(0,  unicodeProperties.getMaximumCodePoint());
          result.sub(whitespaceClass);
          preclassCache.put(type, result);
          break;

        case sym.WORDCLASS:
          {
            // UTR#18: \w = [\p{alpha}\p{gc=Mark}\p{digit}\p{gc=Connector_Punctuation}]
            IntCharSet alphaClass = unicodeProperties.getIntCharSet("Alphabetic");
            if (null == alphaClass) {
              // For Unicode 1.1, substitute "Letter" (L) for "Alphabetic".
              alphaClass = unicodeProperties.getIntCharSet("L");
            }
            IntCharSet markClass = unicodeProperties.getIntCharSet("M");
            IntCharSet digitClass = unicodeProperties.getIntCharSet("Nd");
            IntCharSet connectorPunctClass = unicodeProperties.getIntCharSet("Pc");
            if (null == connectorPunctClass) {
              // For Unicode 1.1, substitute "_" for "Connector_Punctuation".
              connectorPunctClass = IntCharSet.ofCharacter('_');
            }
            result = IntCharSet.copyOf(alphaClass);
            result.add(markClass);
            result.add(digitClass);
            result.add(connectorPunctClass);
            preclassCache.put(type, result);
            break;
          }

        case sym.WORDCLASSNOT:
          {
            // UTR#18: \W = [^\p{alpha}\p{gc=Mark}\p{digit}\p{gc=Connector_Punctuation}]
            IntCharSet alphaClass = unicodeProperties.getIntCharSet("Alphabetic");
            if (null == alphaClass) {
              // For Unicode 1.1, substitute "Letter" (L) for "Alphabetic".
              alphaClass = unicodeProperties.getIntCharSet("L");
            }
            IntCharSet markClass = unicodeProperties.getIntCharSet("M");
            IntCharSet digitClass = unicodeProperties.getIntCharSet("Nd");
            IntCharSet connectorPunctClass = unicodeProperties.getIntCharSet("Pc");
            if (null == connectorPunctClass) {
              // For Unicode 1.1, substitute "_" for "Connector_Punctuation".
              connectorPunctClass = IntCharSet.ofCharacter('_');
            }
            IntCharSet wordClass = IntCharSet.copyOf(alphaClass);
            wordClass.add(markClass);
            wordClass.add(digitClass);
            wordClass.add(connectorPunctClass);
            result = IntCharSet.ofCharacterRange(0,  unicodeProperties.getMaximumCodePoint());
            result.sub(wordClass);
            preclassCache.put(type, result);
            break;
          }
        case sym.JLETTERCLASS:
        case sym.JLETTERDIGITCLASS:
        default:
          result = new IntCharSet();

          int c = 0;
          int start = 0;
          int last = charClasses.getMaxCharCode();

          boolean prev, current;

          prev = check(type, 0);

          for (c = 1; c < last; c++) {

            current = check(type, c);

            if (!prev && current) start = c;
            if (prev && !current) {
              result.add(new Interval(start, c - 1));
            }

            prev = current;
          }

          // the last iteration is moved out of the loop to
          // avoid an endless loop if last == maxCharCode and
          // last+1 == 0
          current = check(type, c);

          if (!prev && current) result.add(new Interval(c, c));
          if (prev && current) result.add(new Interval(start, c));
          if (prev && !current) result.add(new Interval(start, c - 1));

          preclassCache.put(type, result);
          break;
        }
    }
    return result;
  }

  private RegExp makeRepeat(RegExp r, int n1, int n2, int line, int col) {
    if (n1 <= 0 && n2 <= 0) {
      syntaxError(ErrorMessages.REPEAT_ZERO, line, col);
      return null;
    }

    if (n1 > n2) {
      syntaxError(ErrorMessages.REPEAT_GREATER, line, col);
      return null;
    }

    int i;
    RegExp result;

    if (n1 > 0) {
      result = r;
      n1--; n2--; // we need one concatenation less than the number of expressions to match
    }
    else {
      result = new RegExp1(sym.QUESTION,r);
      n2--;
    }

    for (i = 0; i < n1; i++)
      result = new RegExp2(sym.CONCAT, result, r);

    n2-= n1;
    for (i = 0; i < n2; i++)
      result = new RegExp2(sym.CONCAT, result, new RegExp1(sym.QUESTION,r));

    return result;
  }

  private RegExp makeNL() {
    IntCharSet set = IntCharSet.nlChars();

	  // assumption: line feeds are caseless
    charClasses.makeClass(set, false);
    charClasses.makeClass('\n', false);
    charClasses.makeClass('\r', false);

    RegExp1 c = new RegExp1(sym.PRIMCLASS, set);
    Integer n = Integer.valueOf((int)'\n');
    Integer r = Integer.valueOf((int)'\r');

    return new RegExp2(sym.BAR,
                       c,
                       new RegExp2(sym.CONCAT,
                                   new RegExp1(sym.CHAR, r),
                                   new RegExp1(sym.CHAR, n)));
  }

  private RegExp primClass(int content) {
    return primClass(content, content);
  }

  private RegExp primClass(int start, int end) {
    return primClass(IntCharSet.ofCharacterRange(start, end));
  }

  private RegExp primClass(IntCharSet set) {
    return new RegExp1(sym.PRIMCLASS, set);
  }


  private final LexParse parser;

  /** Constructor */
  CUP$LexParse$actions(LexParse parser) {
    this.parser = parser;
  }

  /** Method 0 with the actual generated action code for actions 0 to 300. */
  public final java_cup.runtime.Symbol CUP$LexParse$do_action_part00000000(
    int                        CUP$LexParse$act_num,
    java_cup.runtime.lr_parser CUP$LexParse$parser,
    java.util.Stack            CUP$LexParse$stack,
    int                        CUP$LexParse$top)
    throws java.lang.Exception
    {
      /* Symbol object for return from actions */
      java_cup.runtime.Symbol CUP$LexParse$result;

      /* select the action based on the action number */
      switch (CUP$LexParse$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 0: // $START ::= specification EOF 
            {
              Object RESULT =null;
		int start_valleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int start_valright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		NFA start_val = (NFA)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		RESULT = start_val;
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("$START",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          /* ACCEPT */
          CUP$LexParse$parser.done_parsing();
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 1: // specification ::= USERCODE macros DELIMITER rules 
            {
              NFA RESULT =null;
		
                     scanner.t.stop();

                     Out.checkErrors();

                     Out.time(ErrorMessages.PARSING_TOOK, t);

                     macros.expand(); // expands only inside macro definitions
                     if (Options.unused_warning) {
	                     for (String unusedMacro : macros.unused()) {
	                       Out.warning(String.format(
	                    		   "Macro \"%s\" has been declared but never used.", unusedMacro));
	                     }
                     }

                     // expand macros + char classes in rules and lookahead rules
                     regExps.normalise(macros);
                     // make char class partitions (modifies charClasses)
                     regExps.makeCCLs(charClasses, Options.jlex && scanner.caseless);

                     SemCheck.check(regExps, scanner.file);

                     regExps.checkActions();
                     regExps.checkLookAheads();

                     Out.checkErrors();

                     charClasses.normalise();
                     if (Options.dump) charClasses.dump();

                     Out.print("Constructing NFA : ");

                     t.start();
                     int num = regExps.getNum();

                     RESULT = new NFA(charClasses.getNumClasses(),
                                      scanner, regExps, macros, charClasses);

                     eofActions.setNumLexStates(scanner.states.number());

                     for (int i = 0; i < num; i++) {
                       if (regExps.isEOF(i))
                         eofActions.add( regExps.getStates(i), regExps.getAction(i) );
                       else
                         RESULT.addRegExp(i);
                     }

                     if (scanner.standalone) RESULT.addStandaloneRule();
                     t.stop();

                     Out.time("");
	                   Out.time(ErrorMessages.NFA_TOOK, t);

                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("specification",3, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // specification ::= 
            {
              NFA RESULT =null;
		
                     fatalError(ErrorMessages.NO_LEX_SPEC);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("specification",3, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 3: // macros ::= 
            {
              Object RESULT =null;

              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 4: // macros ::= macros macro 
            {
              Object RESULT =null;

              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 5: // macros ::= error 
            {
              Object RESULT =null;

              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macros",0, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 6: // macro ::= IDENT EQUALS series REGEXPEND 
            {
              Object RESULT =null;
		int nameleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left;
		int nameright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right;
		String name = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value;
		int definitionleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int definitionright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp definition = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 macros.insert(name, definition); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 7: // macro ::= IDENT EQUALS 
            {
              Object RESULT =null;
		int eleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int eright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Object e = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 syntaxError(ErrorMessages.REGEXP_EXPECTED, eleft, eright); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("macro",1, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 8: // rules ::= rules rule 
            {
              List<Integer> RESULT =null;
		int rlistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rlistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		List<Integer> rlist = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 rlist.add(r); RESULT = rlist; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",17, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 9: // rules ::= rules LESSTHAN states MORETHAN LBRACE rules RBRACE 
            {
              List<Integer> RESULT =null;
		int rlist1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).left;
		int rlist1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).right;
		List<Integer> rlist1 = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).value;
		int statesleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left;
		int statesright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right;
		List<Integer> states = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value;
		int rlist2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rlist2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		List<Integer> rlist2 = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		
                     for (Integer elem : rlist2) {
                       // might be null for error case of "rule"
                       if (elem != null) {
                         regExps.addStates( elem, states );
                       }
                       rlist1.add( elem );
                     }
                     RESULT = rlist1;
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",17, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // rules ::= LESSTHAN states MORETHAN LBRACE rules RBRACE 
            {
              List<Integer> RESULT =null;
		int statesleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left;
		int statesright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right;
		List<Integer> states = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value;
		int rlistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rlistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		List<Integer> rlist = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		
                     for (Integer elem : rlist) {
                       // might be null for error case of "rule"
                       if (elem != null) {
                         regExps.addStates( elem, states );
                       }
                     }
                     RESULT = rlist;
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",17, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-5)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // rules ::= rule 
            {
              List<Integer> RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = new ArrayList<Integer>(); RESULT.add(r); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rules",17, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // rule ::= statesOPT hatOPT series actions 
            {
              Integer RESULT =null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right;
		List<Integer> s = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value;
		int bolleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int bolright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		Boolean bol = (Boolean)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = regExps.insert(rleft, s, r, a, bol, null); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 13: // rule ::= statesOPT hatOPT series lookahead act 
            {
              Integer RESULT =null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right;
		List<Integer> s = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value;
		int bolleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left;
		int bolright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right;
		Boolean bol = (Boolean)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int lleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp l = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = regExps.insert(rleft, s, r, a, bol, l); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // rule ::= statesOPT hatOPT series lookahead NOACTION 
            {
              Integer RESULT =null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).right;
		List<Integer> s = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).value;
		int bolleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left;
		int bolright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right;
		Boolean bol = (Boolean)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int lleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp l = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Object a = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 syntaxError(ErrorMessages.LOOKAHEAD_NEEDS_ACTION, aleft, aright+1); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 15: // rule ::= statesOPT EOFRULE ACTION 
            {
              Integer RESULT =null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		List<Integer> s = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = regExps.insert(s, a); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 16: // rule ::= statesOPT EOFRULE NOACTION 
            {
              Integer RESULT =null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		List<Integer> s = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		 RESULT = regExps.insert(s, null); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // rule ::= error 
            {
              Integer RESULT =null;

              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("rule",2, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // lookahead ::= DOLLAR 
            {
              RegExp RESULT =null;
		 RESULT = makeNL(); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // lookahead ::= LOOKAHEAD series 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = r; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // lookahead ::= LOOKAHEAD series DOLLAR 
            {
              RegExp RESULT =null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp s = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = new RegExp2(sym.CONCAT, s, makeNL()); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("lookahead",9, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // act ::= REGEXPEND ACTION 
            {
              Action RESULT =null;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = a; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("act",20, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // actions ::= act 
            {
              Action RESULT =null;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = a; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("actions",21, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // actions ::= NOACTION 
            {
              Action RESULT =null;

              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("actions",21, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // statesOPT ::= LESSTHAN states MORETHAN 
            {
              List<Integer> RESULT =null;
		int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		List<Integer> list = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = list; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("statesOPT",16, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 25: // statesOPT ::= 
            {
              List<Integer> RESULT =null;
		 RESULT = new ArrayList<Integer>(); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("statesOPT",16, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 26: // states ::= IDENT COMMA states 
            {
              List<Integer> RESULT =null;
		int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		List<Integer> list = (List<Integer>)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     stateNumber = scanner.states.getNumber( id );
                     if ( stateNumber != null )
                       list.add( stateNumber );
                     else {
                       throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL,
                                                  idleft, idright);
                     }
                     RESULT = list;
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 27: // states ::= IDENT 
            {
              List<Integer> RESULT =null;
		int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     List<Integer> list = new ArrayList<Integer>();
                     stateNumber = scanner.states.getNumber( id );
                     if ( stateNumber != null )
                       list.add( stateNumber );
                     else {
                       throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL,
                                                  idleft, idright);
                     }
                     RESULT = list;
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 28: // states ::= IDENT COMMA 
            {
              List<Integer> RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Object c = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 syntaxError(ErrorMessages.REGEXP_EXPECTED, cleft, cright+1); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("states",15, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // hatOPT ::= HAT 
            {
              Boolean RESULT =null;
		 RESULT = true; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("hatOPT",19, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // hatOPT ::= 
            {
              Boolean RESULT =null;
		 RESULT = false; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("hatOPT",19, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 31: // series ::= series BAR concs 
            {
              RegExp RESULT =null;
		int r1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int r1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		RegExp r1 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     if ( ! Options.jlex && ! Options.legacy_dot && isDotOrNewlinePattern(r1, r2) ) {
                       warning(ErrorMessages.DOT_BAR_NEWLINE_DOES_NOT_MATCH_ALL_CHARS, r1left, r1right);
                     }
                     RESULT = new RegExp2(sym.BAR, r1, r2);
                  
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // series ::= concs 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = r; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // series ::= BAR 
            {
              RegExp RESULT =null;
		int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 syntaxError(ErrorMessages.REGEXP_EXPECTED, bleft, bright); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("series",4, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // concs ::= concs nregexp 
            {
              RegExp RESULT =null;
		int r1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int r1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp r1 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int r2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = new RegExp2(sym.CONCAT, r1, r2); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("concs",5, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // concs ::= nregexp 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = r; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("concs",5, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 36: // nregexp ::= regexp 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = r; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 37: // nregexp ::= BANG nregexp 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = new RegExp1(sym.BANG, r); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // nregexp ::= TILDE nregexp 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = new RegExp1(sym.TILDE, r); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("nregexp",6, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 39: // regexp ::= regexp STAR 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = new RegExp1(sym.STAR, r); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 40: // regexp ::= regexp PLUS 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = new RegExp1(sym.PLUS, r); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 41: // regexp ::= regexp QUESTION 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = new RegExp1(sym.QUESTION, r); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 42: // regexp ::= regexp REPEAT RBRACE 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int nleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int nright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		Integer n = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = makeRepeat(r, n, n, bleft, bright); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 43: // regexp ::= regexp REPEAT REPEAT RBRACE 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value;
		int n1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int n1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		Integer n1 = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int n2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int n2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		Integer n2 = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = makeRepeat(r, n1, n2, n1left, n2right); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 44: // regexp ::= OPENBRACKET series CLOSEBRACKET 
            {
              RegExp RESULT =null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = r; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 45: // regexp ::= MACROUSE 
            {
              RegExp RESULT =null;
		int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                      if ( !scanner.macroDefinition ) {
                        if ( ! macros.markUsed(ident) )
                          throw new ScannerException(scanner.file, ErrorMessages.MACRO_UNDECL,
                                                     identleft, identright);
                      }
                      RESULT = new RegExp1(sym.MACROUSE, ident);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 46: // regexp ::= charclass 
            {
              RegExp RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp c = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = c; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 47: // regexp ::= preclass 
            {
              RegExp RESULT =null;
		int setleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int setright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		IntCharSet set = (IntCharSet)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     // assumption [correct?]: preclasses are already closed under case
                     charClasses.makeClass(set, false);
                     RESULT = new RegExp1(sym.PRIMCLASS, set);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 48: // regexp ::= UNIPROPCCLASS 
            {
              RegExp RESULT =null;
		int intcharsetleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int intcharsetright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		IntCharSet intcharset = (IntCharSet)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     IntCharSet set
                       = scanner.caseless
                       ? intcharset.getCaseless(scanner.getUnicodeProperties())
                       : intcharset;
                     charClasses.makeClass(set, false);
                     RESULT = new RegExp1(sym.PRIMCLASS, set);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 49: // regexp ::= UNIPROPCCLASSNOT 
            {
              RegExp RESULT =null;
		int notintcharsetleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int notintcharsetright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		IntCharSet notintcharset = (IntCharSet)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     IntCharSet set
                       = scanner.caseless
                       ? notintcharset.getCaseless(scanner.getUnicodeProperties())
                       : notintcharset;
                     charClasses.makeClass(set, false);

                     ArrayList<RegExp> l = new ArrayList<RegExp>();
                     l.add(new RegExp1(sym.PRIMCLASS, set));
                     RESULT = new RegExp1(sym.CCLASSNOT, l);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 50: // regexp ::= STRING 
            {
              RegExp RESULT =null;
		int strleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int strright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		String str = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     charClasses.makeClass(str, scanner.caseless);
                     RESULT = new RegExp1(scanner.caseless ? sym.STRING_I : sym.STRING, str);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 51: // regexp ::= POINT 
            {
              RegExp RESULT =null;
		
                      IntCharSet nl;
                      if ( Options.jlex || Options.legacy_dot ) {
                        nl = IntCharSet.ofCharacter('\n');
                      }
                      else {
                        nl = IntCharSet.nlChars();
                      }
                      nl.add(new Interval(Character.MIN_SURROGATE, Character.MAX_SURROGATE));
                      // assumption: surrogate and newline chars have no uppercase variant
                      charClasses.makeClass(nl, false);
                      ArrayList<RegExp> l = new ArrayList<RegExp>();
                      l.add(new RegExp1(sym.PRIMCLASS, nl));
                      RegExp1 r = new RegExp1(sym.CCLASSNOT, l);
                      r.isPoint = true;
                      RESULT = r;
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 52: // regexp ::= NEWLINE 
            {
              RegExp RESULT =null;
		 RESULT = makeNL(); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 53: // regexp ::= CHAR 
            {
              RegExp RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Integer c = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     if ( scanner.caseless ) {
                       charClasses.makeClass(c, true);
                       RESULT = new RegExp1(sym.CHAR_I, c);
                     }
                     else {
                       charClasses.makeClass(c, false);
                       RESULT = new RegExp1(sym.CHAR, c);
                     }
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("regexp",7, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 54: // charclass ::= OPENCLASS CLOSECLASS 
            {
              RegExp RESULT =null;
		 RESULT = new RegExp1(sym.CCLASS, new ArrayList<RegExp>()); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 55: // charclass ::= OPENCLASS HAT CLOSECLASS 
            {
              RegExp RESULT =null;
		int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = RegExp.anyChar(); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 56: // charclass ::= OPENCLASS opt_hat_content CLOSECLASS 
            {
              RegExp RESULT =null;
		int cclleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int cclright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp ccl = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = ccl; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 57: // charclass ::= OPENCLASS opt_dash_content charclass_op opt_hat_content CLOSECLASS 
            {
              RegExp RESULT =null;
		int cc1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left;
		int cc1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right;
		List<RegExp> cc1 = (List<RegExp>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value;
		int opleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int opright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		Integer op = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int c2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp c2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		
                      RegExp c1 = new RegExp1(sym.CCLASS, cc1);
                      RESULT = new RegExp1(sym.CCLASSOP, new RegExp2(op.intValue(), c1, c2));
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 58: // charclass ::= OPENCLASS HAT opt_dash_content charclass_op opt_hat_content CLOSECLASS 
            {
              RegExp RESULT =null;
		int cc1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left;
		int cc1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).right;
		List<RegExp> cc1 = (List<RegExp>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).value;
		int opleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int opright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		Integer op = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int c2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		RegExp c2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		
                      RegExp c1 = new RegExp1(sym.CCLASS, cc1);
                      List<RegExp> l = new ArrayList<>();
                      l.add(new RegExp1(sym.CCLASSOP, new RegExp2(op.intValue(), c1, c2)));
                      RESULT = new RegExp1(sym.CCLASSNOT, l);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass",8, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-5)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 59: // charclass_op ::= INTERSECTION 
            {
              Integer RESULT =null;
		 RESULT = Integer.valueOf(sym.INTERSECTION); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass_op",18, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 60: // charclass_op ::= DIFFERENCE 
            {
              Integer RESULT =null;
		 RESULT = Integer.valueOf(sym.DIFFERENCE); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass_op",18, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 61: // charclass_op ::= SYMMETRICDIFFERENCE 
            {
              Integer RESULT =null;
		 RESULT = Integer.valueOf(sym.SYMMETRICDIFFERENCE); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("charclass_op",18, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 62: // opt_hat_content ::= opt_dash_content 
            {
              RegExp RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		List<RegExp> c = (List<RegExp>)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = new RegExp1(sym.CCLASS, c); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("opt_hat_content",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 63: // opt_hat_content ::= HAT opt_dash_content 
            {
              RegExp RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		List<RegExp> c = (List<RegExp>)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = new RegExp1(sym.CCLASSNOT, c); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("opt_hat_content",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 64: // opt_dash_content ::= classcontent 
            {
              List<RegExp> RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		List<RegExp> c = (List<RegExp>)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = c; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("opt_dash_content",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 65: // opt_dash_content ::= DASH classcontent 
            {
              List<RegExp> RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		List<RegExp> c = (List<RegExp>)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                        c.add(primClass('-'));
                        RESULT = c;
                     
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("opt_dash_content",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 66: // classcontent ::= classcontent classcontentelem 
            {
              List<RegExp> RESULT =null;
		int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left;
		int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).right;
		List<RegExp> list = (List<RegExp>)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp elem = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     list.add(elem);
                     RESULT = list;
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 67: // classcontent ::= classcontentelem 
            {
              List<RegExp> RESULT =null;
		int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp elem = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                     RESULT = new ArrayList<RegExp>();
                     RESULT.add(elem);
                   
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 68: // classcontentelem ::= CHAR DASH CHAR 
            {
              RegExp RESULT =null;
		int c1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;
		int c1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;
		Integer c1 = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int c2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Integer c2 = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                       if (c2 < c1) {
                         syntaxError(ErrorMessages.IMPOSSIBLE_CHARCLASS_RANGE, c1left, c1right);
                         c2 = c1; // avoid violating Interval invariant; error is logged.
                       }
                       RESULT = primClass(c1, c2);
                     
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 69: // classcontentelem ::= CHAR 
            {
              RegExp RESULT =null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		Integer c = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = primClass(c); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 70: // classcontentelem ::= STRING 
            {
              RegExp RESULT =null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                        IntCharSet set = new IntCharSet();
                        for (int i = 0; i < s.length(); ) {
                          int ch = s.codePointAt(i);
                          i += Character.charCount(ch);
                          set.add(ch);
                        }
                        RESULT = primClass(set);
                     
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 71: // classcontentelem ::= preclass 
            {
              RegExp RESULT =null;
		int setleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int setright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		IntCharSet set = (IntCharSet)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = primClass(set); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 72: // classcontentelem ::= UNIPROPCCLASS 
            {
              RegExp RESULT =null;
		int intcharsetleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int intcharsetright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		IntCharSet intcharset = (IntCharSet)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = primClass(intcharset); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 73: // classcontentelem ::= UNIPROPCCLASSNOT 
            {
              RegExp RESULT =null;
		int notintcharsetleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int notintcharsetright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		IntCharSet notintcharset = (IntCharSet)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                        List<RegExp> l = new ArrayList<RegExp>();
                        l.add(primClass(notintcharset));
                        RESULT = new RegExp1(sym.CCLASSNOT, l);
                     
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 74: // classcontentelem ::= MACROUSE 
            {
              RegExp RESULT =null;
		int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		
                        if ( !scanner.macroDefinition ) {
                          if ( ! macros.markUsed(ident) )
                            throw new ScannerException(scanner.file, ErrorMessages.MACRO_UNDECL,
                                                       identleft, identright);
                        }
                        RESULT = new RegExp1(sym.MACROUSE, ident);
                     
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 75: // classcontentelem ::= charclass 
            {
              RegExp RESULT =null;
		int regexleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;
		int regexright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;
		RegExp regex = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;
		 RESULT = regex; 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",11, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 76: // preclass ::= JLETTERCLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.JLETTERCLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 77: // preclass ::= JLETTERDIGITCLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.JLETTERDIGITCLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 78: // preclass ::= LETTERCLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.LETTERCLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 79: // preclass ::= DIGITCLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.DIGITCLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 80: // preclass ::= DIGITCLASSNOT 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.DIGITCLASSNOT); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 81: // preclass ::= UPPERCLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.UPPERCLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 82: // preclass ::= LOWERCLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.LOWERCLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 83: // preclass ::= WHITESPACECLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.WHITESPACECLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 84: // preclass ::= WHITESPACECLASSNOT 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.WHITESPACECLASSNOT); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 85: // preclass ::= WORDCLASS 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.WORDCLASS); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 86: // preclass ::= WORDCLASSNOT 
            {
              IntCharSet RESULT =null;
		 RESULT = getPreClass(sym.WORDCLASSNOT); 
              CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",12, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);
            }
          return CUP$LexParse$result;

          /* . . . . . .*/
          default:
            throw new Exception(
               "Invalid action number "+CUP$LexParse$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$LexParse$do_action(
    int                        CUP$LexParse$act_num,
    java_cup.runtime.lr_parser CUP$LexParse$parser,
    java.util.Stack            CUP$LexParse$stack,
    int                        CUP$LexParse$top)
    throws java.lang.Exception
    {
              return CUP$LexParse$do_action_part00000000(
                               CUP$LexParse$act_num,
                               CUP$LexParse$parser,
                               CUP$LexParse$stack,
                               CUP$LexParse$top);
    }
}

}
