
//----------------------------------------------------
// The following code was generated by CUP v0.10k
// Mon Oct 08 19:44:44 CEST 2001
//----------------------------------------------------

package JFlex;

import java.util.*;
import java.io.*;

/** CUP v0.10k generated parser.
  * @version Mon Oct 08 19:44:44 CEST 2001
  */
public class LexParse extends java_cup.runtime.lr_parser {

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

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

  /** Production table. */
  protected static final short _production_table[][] = 
    unpackFromStrings(new String[] {
    "\000\110\000\002\002\004\000\002\006\006\000\002\006" +
    "\002\000\002\003\002\000\002\003\004\000\002\003\003" +
    "\000\002\004\003\000\002\004\003\000\002\004\006\000" +
    "\002\004\004\000\002\022\004\000\002\022\011\000\002" +
    "\022\010\000\002\022\003\000\002\005\007\000\002\005" +
    "\005\000\002\005\003\000\002\014\003\000\002\014\004" +
    "\000\002\014\002\000\002\014\005\000\002\024\004\000" +
    "\002\024\003\000\002\017\005\000\002\017\002\000\002" +
    "\016\005\000\002\016\003\000\002\016\004\000\002\023" +
    "\003\000\002\023\002\000\002\007\005\000\002\007\003" +
    "\000\002\007\003\000\002\010\004\000\002\010\003\000" +
    "\002\011\003\000\002\011\004\000\002\011\004\000\002" +
    "\012\004\000\002\012\004\000\002\012\004\000\002\012" +
    "\005\000\002\012\006\000\002\012\005\000\002\012\003" +
    "\000\002\012\003\000\002\012\003\000\002\012\003\000" +
    "\002\012\003\000\002\012\003\000\002\013\004\000\002" +
    "\013\005\000\002\013\005\000\002\013\006\000\002\013" +
    "\006\000\002\013\007\000\002\020\004\000\002\020\003" +
    "\000\002\020\004\000\002\020\003\000\002\020\004\000" +
    "\002\020\003\000\002\020\004\000\002\020\003\000\002" +
    "\015\005\000\002\015\003\000\002\021\003\000\002\021" +
    "\003\000\002\021\003\000\002\021\003\000\002\021\003" +
    "\000\002\021\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\152\000\006\002\uffff\050\004\001\002\000\014\003" +
    "\007\020\ufffe\030\ufffe\031\ufffe\051\ufffe\001\002\000\004" +
    "\002\006\001\002\000\004\002\001\001\002\000\012\020" +
    "\ufffc\030\ufffc\031\ufffc\051\ufffc\001\002\000\012\020\011" +
    "\030\015\031\014\051\013\001\002\000\050\003\113\004" +
    "\uffe9\010\uffe9\013\uffe9\014\uffe9\015\uffe9\023\115\024\uffe9" +
    "\033\uffe9\034\uffe9\035\uffe9\036\uffe9\037\uffe9\040\uffe9\041" +
    "\uffe9\042\uffe9\045\uffe9\047\uffe9\052\uffe9\001\002\000\012" +
    "\020\ufffd\030\ufffd\031\ufffd\051\ufffd\001\002\000\004\021" +
    "\016\001\002\000\012\020\ufffa\030\ufffa\031\ufffa\051\ufffa" +
    "\001\002\000\012\020\ufffb\030\ufffb\031\ufffb\051\ufffb\001" +
    "\002\000\050\004\033\010\040\014\021\015\043\020\ufff8" +
    "\024\036\030\ufff8\031\ufff8\033\022\034\023\035\030\036" +
    "\017\037\041\040\034\041\031\045\020\047\027\051\ufff8" +
    "\052\024\001\002\000\064\004\uffbd\005\uffbd\006\uffbd\007" +
    "\uffbd\010\uffbd\011\uffbd\012\uffbd\014\uffbd\015\uffbd\016\uffbd" +
    "\024\uffbd\032\uffbd\033\uffbd\034\uffbd\035\uffbd\036\uffbd\037" +
    "\uffbd\040\uffbd\041\uffbd\043\uffbd\044\uffbd\045\uffbd\047\uffbd" +
    "\052\uffbd\053\uffbd\001\002\000\062\004\uffd0\005\uffd0\006" +
    "\uffd0\007\uffd0\010\uffd0\011\uffd0\012\uffd0\014\uffd0\015\uffd0" +
    "\024\uffd0\032\uffd0\033\uffd0\034\uffd0\035\uffd0\036\uffd0\037" +
    "\uffd0\040\uffd0\041\uffd0\043\uffd0\044\uffd0\045\uffd0\047\uffd0" +
    "\052\uffd0\053\uffd0\001\002\000\062\004\uffd1\005\uffd1\006" +
    "\uffd1\007\uffd1\010\uffd1\011\uffd1\012\uffd1\014\uffd1\015\uffd1" +
    "\024\uffd1\032\uffd1\033\uffd1\034\uffd1\035\uffd1\036\uffd1\037" +
    "\uffd1\040\uffd1\041\uffd1\043\uffd1\044\uffd1\045\uffd1\047\uffd1" +
    "\052\uffd1\053\uffd1\001\002\000\036\004\033\014\021\015" +
    "\043\024\036\033\022\034\023\035\030\036\017\037\041" +
    "\040\034\041\031\045\020\047\027\052\024\001\002\000" +
    "\064\004\uffbf\005\uffbf\006\uffbf\007\uffbf\010\uffbf\011\uffbf" +
    "\012\uffbf\014\uffbf\015\uffbf\016\uffbf\024\uffbf\032\uffbf\033" +
    "\uffbf\034\uffbf\035\uffbf\036\uffbf\037\uffbf\040\uffbf\041\uffbf" +
    "\043\uffbf\044\uffbf\045\uffbf\047\uffbf\052\uffbf\053\uffbf\001" +
    "\002\000\062\004\uffd5\005\uffd5\006\uffd5\007\uffd5\010\uffd5" +
    "\011\uffd5\012\uffd5\014\uffd5\015\uffd5\024\uffd5\032\uffd5\033" +
    "\uffd5\034\uffd5\035\uffd5\036\uffd5\037\uffd5\040\uffd5\041\uffd5" +
    "\043\uffd5\044\uffd5\045\uffd5\047\uffd5\052\uffd5\053\uffd5\001" +
    "\002\000\006\010\105\032\111\001\002\000\062\004\uffd3" +
    "\005\uffd3\006\uffd3\007\uffd3\010\uffd3\011\uffd3\012\uffd3\014" +
    "\uffd3\015\uffd3\024\uffd3\032\uffd3\033\uffd3\034\uffd3\035\uffd3" +
    "\036\uffd3\037\uffd3\040\uffd3\041\uffd3\043\uffd3\044\uffd3\045" +
    "\uffd3\047\uffd3\052\uffd3\053\uffd3\001\002\000\062\004\uffd2" +
    "\005\uffd2\006\uffd2\007\uffd2\010\uffd2\011\uffd2\012\uffd2\014" +
    "\uffd2\015\uffd2\024\uffd2\032\uffd2\033\uffd2\034\uffd2\035\uffd2" +
    "\036\uffd2\037\uffd2\040\uffd2\041\uffd2\043\uffd2\044\uffd2\045" +
    "\uffd2\047\uffd2\052\uffd2\053\uffd2\001\002\000\064\004\uffbe" +
    "\005\uffbe\006\uffbe\007\uffbe\010\uffbe\011\uffbe\012\uffbe\014" +
    "\uffbe\015\uffbe\016\uffbe\024\uffbe\032\uffbe\033\uffbe\034\uffbe" +
    "\035\uffbe\036\uffbe\037\uffbe\040\uffbe\041\uffbe\043\uffbe\044" +
    "\uffbe\045\uffbe\047\uffbe\052\uffbe\053\uffbe\001\002\000\064" +
    "\004\uffba\005\uffba\006\uffba\007\uffba\010\uffba\011\uffba\012" +
    "\uffba\014\uffba\015\uffba\016\uffba\024\uffba\032\uffba\033\uffba" +
    "\034\uffba\035\uffba\036\uffba\037\uffba\040\uffba\041\uffba\043" +
    "\uffba\044\uffba\045\uffba\047\uffba\052\uffba\053\uffba\001\002" +
    "\000\052\004\033\005\uffe2\010\uffe2\012\uffe2\014\021\015" +
    "\043\024\036\032\uffe2\033\022\034\023\035\030\036\017" +
    "\037\041\040\034\041\031\043\uffe2\044\uffe2\045\020\047" +
    "\027\052\024\001\002\000\040\004\033\010\040\014\021" +
    "\015\043\024\036\033\022\034\023\035\030\036\017\037" +
    "\041\040\034\041\031\045\020\047\027\052\024\001\002" +
    "\000\064\004\uffbb\005\uffbb\006\uffbb\007\uffbb\010\uffbb\011" +
    "\uffbb\012\uffbb\014\uffbb\015\uffbb\016\uffbb\024\uffbb\032\uffbb" +
    "\033\uffbb\034\uffbb\035\uffbb\036\uffbb\037\uffbb\040\uffbb\041" +
    "\uffbb\043\uffbb\044\uffbb\045\uffbb\047\uffbb\052\uffbb\053\uffbb" +
    "\001\002\000\062\004\uffd4\005\uffd4\006\uffd4\007\uffd4\010" +
    "\uffd4\011\uffd4\012\uffd4\014\uffd4\015\uffd4\024\uffd4\032\uffd4" +
    "\033\uffd4\034\uffd4\035\uffd4\036\uffd4\037\uffd4\040\uffd4\041" +
    "\uffd4\043\uffd4\044\uffd4\045\uffd4\047\uffd4\052\uffd4\053\uffd4" +
    "\001\002\000\036\004\033\014\021\015\043\024\036\033" +
    "\022\034\023\035\030\036\017\037\041\040\034\041\031" +
    "\045\020\047\027\052\024\001\002\000\052\004\uffdf\005" +
    "\uffdf\010\uffdf\012\uffdf\014\uffdf\015\uffdf\024\uffdf\032\uffdf" +
    "\033\uffdf\034\uffdf\035\uffdf\036\uffdf\037\uffdf\040\uffdf\041" +
    "\uffdf\043\uffdf\044\uffdf\045\uffdf\047\uffdf\052\uffdf\001\002" +
    "\000\016\005\uffe1\010\uffe1\012\uffe1\032\uffe1\043\uffe1\044" +
    "\uffe1\001\002\000\064\004\uffbc\005\uffbc\006\uffbc\007\uffbc" +
    "\010\uffbc\011\uffbc\012\uffbc\014\uffbc\015\uffbc\016\uffbc\024" +
    "\uffbc\032\uffbc\033\uffbc\034\uffbc\035\uffbc\036\uffbc\037\uffbc" +
    "\040\uffbc\041\uffbc\043\uffbc\044\uffbc\045\uffbc\047\uffbc\052" +
    "\uffbc\053\uffbc\001\002\000\062\004\uffde\005\uffde\006\074" +
    "\007\075\010\uffde\011\077\012\uffde\014\uffde\015\uffde\024" +
    "\uffde\032\uffde\033\uffde\034\uffde\035\uffde\036\uffde\037\uffde" +
    "\040\uffde\041\uffde\043\uffde\044\uffde\045\uffde\047\uffde\052" +
    "\uffde\053\076\001\002\000\032\013\047\016\050\017\046" +
    "\034\023\035\030\036\017\037\041\040\034\041\031\045" +
    "\054\047\051\052\053\001\002\000\026\016\uffc6\034\uffc6" +
    "\035\uffc6\036\uffc6\037\uffc6\040\uffc6\041\uffc6\045\uffc6\047" +
    "\uffc6\052\uffc6\001\002\000\026\016\uffc8\034\uffc8\035\uffc8" +
    "\036\uffc8\037\uffc8\040\uffc8\041\uffc8\045\uffc8\047\uffc8\052" +
    "\uffc8\001\002\000\024\034\023\035\030\036\017\037\041" +
    "\040\034\041\031\045\054\047\051\052\053\001\002\000" +
    "\030\016\065\017\064\034\023\035\030\036\017\037\041" +
    "\040\034\041\031\045\054\047\051\052\053\001\002\000" +
    "\062\004\uffcf\005\uffcf\006\uffcf\007\uffcf\010\uffcf\011\uffcf" +
    "\012\uffcf\014\uffcf\015\uffcf\024\uffcf\032\uffcf\033\uffcf\034" +
    "\uffcf\035\uffcf\036\uffcf\037\uffcf\040\uffcf\041\uffcf\043\uffcf" +
    "\044\uffcf\045\uffcf\047\uffcf\052\uffcf\053\uffcf\001\002\000" +
    "\026\016\uffc4\034\uffc4\035\uffc4\036\uffc4\037\uffc4\040\uffc4" +
    "\041\uffc4\045\uffc4\047\uffc4\052\uffc4\001\002\000\026\016" +
    "\061\034\023\035\030\036\017\037\041\040\034\041\031" +
    "\045\054\047\062\052\063\001\002\000\026\016\uffc2\034" +
    "\uffc2\035\uffc2\036\uffc2\037\uffc2\040\uffc2\041\uffc2\045\uffc2" +
    "\047\uffc2\052\uffc2\001\002\000\030\016\uffc0\017\055\034" +
    "\uffc0\035\uffc0\036\uffc0\037\uffc0\040\uffc0\041\uffc0\045\uffc0" +
    "\047\uffc0\052\uffc0\001\002\000\004\045\056\001\002\000" +
    "\026\016\uffc1\034\uffc1\035\uffc1\036\uffc1\037\uffc1\040\uffc1" +
    "\041\uffc1\045\uffc1\047\uffc1\052\uffc1\001\002\000\026\016" +
    "\uffc7\034\uffc7\035\uffc7\036\uffc7\037\uffc7\040\uffc7\041\uffc7" +
    "\045\uffc7\047\uffc7\052\uffc7\001\002\000\026\016\uffc9\034" +
    "\uffc9\035\uffc9\036\uffc9\037\uffc9\040\uffc9\041\uffc9\045\uffc9" +
    "\047\uffc9\052\uffc9\001\002\000\062\004\uffce\005\uffce\006" +
    "\uffce\007\uffce\010\uffce\011\uffce\012\uffce\014\uffce\015\uffce" +
    "\024\uffce\032\uffce\033\uffce\034\uffce\035\uffce\036\uffce\037" +
    "\uffce\040\uffce\041\uffce\043\uffce\044\uffce\045\uffce\047\uffce" +
    "\052\uffce\053\uffce\001\002\000\026\016\uffc5\034\uffc5\035" +
    "\uffc5\036\uffc5\037\uffc5\040\uffc5\041\uffc5\045\uffc5\047\uffc5" +
    "\052\uffc5\001\002\000\026\016\uffc3\034\uffc3\035\uffc3\036" +
    "\uffc3\037\uffc3\040\uffc3\041\uffc3\045\uffc3\047\uffc3\052\uffc3" +
    "\001\002\000\024\034\023\035\030\036\017\037\041\040" +
    "\034\041\031\045\054\047\051\052\053\001\002\000\062" +
    "\004\uffcd\005\uffcd\006\uffcd\007\uffcd\010\uffcd\011\uffcd\012" +
    "\uffcd\014\uffcd\015\uffcd\024\uffcd\032\uffcd\033\uffcd\034\uffcd" +
    "\035\uffcd\036\uffcd\037\uffcd\040\uffcd\041\uffcd\043\uffcd\044" +
    "\uffcd\045\uffcd\047\uffcd\052\uffcd\053\uffcd\001\002\000\026" +
    "\016\067\034\023\035\030\036\017\037\041\040\034\041" +
    "\031\045\054\047\062\052\063\001\002\000\062\004\uffcc" +
    "\005\uffcc\006\uffcc\007\uffcc\010\uffcc\011\uffcc\012\uffcc\014" +
    "\uffcc\015\uffcc\024\uffcc\032\uffcc\033\uffcc\034\uffcc\035\uffcc" +
    "\036\uffcc\037\uffcc\040\uffcc\041\uffcc\043\uffcc\044\uffcc\045" +
    "\uffcc\047\uffcc\052\uffcc\053\uffcc\001\002\000\026\016\071" +
    "\034\023\035\030\036\017\037\041\040\034\041\031\045" +
    "\054\047\062\052\063\001\002\000\062\004\uffca\005\uffca" +
    "\006\uffca\007\uffca\010\uffca\011\uffca\012\uffca\014\uffca\015" +
    "\uffca\024\uffca\032\uffca\033\uffca\034\uffca\035\uffca\036\uffca" +
    "\037\uffca\040\uffca\041\uffca\043\uffca\044\uffca\045\uffca\047" +
    "\uffca\052\uffca\053\uffca\001\002\000\026\016\073\034\023" +
    "\035\030\036\017\037\041\040\034\041\031\045\054\047" +
    "\062\052\063\001\002\000\062\004\uffcb\005\uffcb\006\uffcb" +
    "\007\uffcb\010\uffcb\011\uffcb\012\uffcb\014\uffcb\015\uffcb\024" +
    "\uffcb\032\uffcb\033\uffcb\034\uffcb\035\uffcb\036\uffcb\037\uffcb" +
    "\040\uffcb\041\uffcb\043\uffcb\044\uffcb\045\uffcb\047\uffcb\052" +
    "\uffcb\053\uffcb\001\002\000\062\004\uffdb\005\uffdb\006\uffdb" +
    "\007\uffdb\010\uffdb\011\uffdb\012\uffdb\014\uffdb\015\uffdb\024" +
    "\uffdb\032\uffdb\033\uffdb\034\uffdb\035\uffdb\036\uffdb\037\uffdb" +
    "\040\uffdb\041\uffdb\043\uffdb\044\uffdb\045\uffdb\047\uffdb\052" +
    "\uffdb\053\uffdb\001\002\000\062\004\uffda\005\uffda\006\uffda" +
    "\007\uffda\010\uffda\011\uffda\012\uffda\014\uffda\015\uffda\024" +
    "\uffda\032\uffda\033\uffda\034\uffda\035\uffda\036\uffda\037\uffda" +
    "\040\uffda\041\uffda\043\uffda\044\uffda\045\uffda\047\uffda\052" +
    "\uffda\053\uffda\001\002\000\006\027\100\053\101\001\002" +
    "\000\062\004\uffd9\005\uffd9\006\uffd9\007\uffd9\010\uffd9\011" +
    "\uffd9\012\uffd9\014\uffd9\015\uffd9\024\uffd9\032\uffd9\033\uffd9" +
    "\034\uffd9\035\uffd9\036\uffd9\037\uffd9\040\uffd9\041\uffd9\043" +
    "\uffd9\044\uffd9\045\uffd9\047\uffd9\052\uffd9\053\uffd9\001\002" +
    "\000\062\004\uffd8\005\uffd8\006\uffd8\007\uffd8\010\uffd8\011" +
    "\uffd8\012\uffd8\014\uffd8\015\uffd8\024\uffd8\032\uffd8\033\uffd8" +
    "\034\uffd8\035\uffd8\036\uffd8\037\uffd8\040\uffd8\041\uffd8\043" +
    "\uffd8\044\uffd8\045\uffd8\047\uffd8\052\uffd8\053\uffd8\001\002" +
    "\000\004\027\102\001\002\000\062\004\uffd7\005\uffd7\006" +
    "\uffd7\007\uffd7\010\uffd7\011\uffd7\012\uffd7\014\uffd7\015\uffd7" +
    "\024\uffd7\032\uffd7\033\uffd7\034\uffd7\035\uffd7\036\uffd7\037" +
    "\uffd7\040\uffd7\041\uffd7\043\uffd7\044\uffd7\045\uffd7\047\uffd7" +
    "\052\uffd7\053\uffd7\001\002\000\052\004\uffdd\005\uffdd\010" +
    "\uffdd\012\uffdd\014\uffdd\015\uffdd\024\uffdd\032\uffdd\033\uffdd" +
    "\034\uffdd\035\uffdd\036\uffdd\037\uffdd\040\uffdd\041\uffdd\043" +
    "\uffdd\044\uffdd\045\uffdd\047\uffdd\052\uffdd\001\002\000\006" +
    "\005\106\010\105\001\002\000\036\004\033\014\021\015" +
    "\043\024\036\033\022\034\023\035\030\036\017\037\041" +
    "\040\034\041\031\045\020\047\027\052\024\001\002\000" +
    "\062\004\uffd6\005\uffd6\006\uffd6\007\uffd6\010\uffd6\011\uffd6" +
    "\012\uffd6\014\uffd6\015\uffd6\024\uffd6\032\uffd6\033\uffd6\034" +
    "\uffd6\035\uffd6\036\uffd6\037\uffd6\040\uffd6\041\uffd6\043\uffd6" +
    "\044\uffd6\045\uffd6\047\uffd6\052\uffd6\053\uffd6\001\002\000" +
    "\052\004\033\005\uffe3\010\uffe3\012\uffe3\014\021\015\043" +
    "\024\036\032\uffe3\033\022\034\023\035\030\036\017\037" +
    "\041\040\034\041\031\043\uffe3\044\uffe3\045\020\047\027" +
    "\052\024\001\002\000\052\004\uffe0\005\uffe0\010\uffe0\012" +
    "\uffe0\014\uffe0\015\uffe0\024\uffe0\032\uffe0\033\uffe0\034\uffe0" +
    "\035\uffe0\036\uffe0\037\uffe0\040\uffe0\041\uffe0\043\uffe0\044" +
    "\uffe0\045\uffe0\047\uffe0\052\uffe0\001\002\000\012\020\ufff9" +
    "\030\ufff9\031\ufff9\051\ufff9\001\002\000\052\004\uffdc\005" +
    "\uffdc\010\uffdc\012\uffdc\014\uffdc\015\uffdc\024\uffdc\032\uffdc" +
    "\033\uffdc\034\uffdc\035\uffdc\036\uffdc\037\uffdc\040\uffdc\041" +
    "\uffdc\043\uffdc\044\uffdc\045\uffdc\047\uffdc\052\uffdc\001\002" +
    "\000\054\002\ufff1\003\ufff1\004\ufff1\010\ufff1\013\ufff1\014" +
    "\ufff1\015\ufff1\023\ufff1\024\ufff1\027\ufff1\033\ufff1\034\ufff1" +
    "\035\ufff1\036\ufff1\037\ufff1\040\ufff1\041\ufff1\042\ufff1\045" +
    "\ufff1\047\ufff1\052\ufff1\001\002\000\044\004\uffe4\010\uffe4" +
    "\013\141\014\uffe4\015\uffe4\024\uffe4\033\uffe4\034\uffe4\035" +
    "\uffe4\036\uffe4\037\uffe4\040\uffe4\041\uffe4\042\137\045\uffe4" +
    "\047\uffe4\052\uffe4\001\002\000\004\051\123\001\002\000" +
    "\054\002\ufff4\003\ufff4\004\ufff4\010\ufff4\013\ufff4\014\ufff4" +
    "\015\ufff4\023\ufff4\024\ufff4\027\ufff4\033\ufff4\034\ufff4\035" +
    "\ufff4\036\ufff4\037\ufff4\040\ufff4\041\ufff4\042\ufff4\045\ufff4" +
    "\047\ufff4\052\ufff4\001\002\000\052\002\000\003\113\004" +
    "\uffe9\010\uffe9\013\uffe9\014\uffe9\015\uffe9\023\120\024\uffe9" +
    "\033\uffe9\034\uffe9\035\uffe9\036\uffe9\037\uffe9\040\uffe9\041" +
    "\uffe9\042\uffe9\045\uffe9\047\uffe9\052\uffe9\001\002\000\004" +
    "\051\123\001\002\000\054\002\ufff7\003\ufff7\004\ufff7\010" +
    "\ufff7\013\ufff7\014\ufff7\015\ufff7\023\ufff7\024\ufff7\027\ufff7" +
    "\033\ufff7\034\ufff7\035\ufff7\036\ufff7\037\ufff7\040\ufff7\041" +
    "\ufff7\042\ufff7\045\ufff7\047\ufff7\052\ufff7\001\002\000\004" +
    "\025\126\001\002\000\006\022\124\025\uffe7\001\002\000" +
    "\006\025\uffe6\051\123\001\002\000\004\025\uffe8\001\002" +
    "\000\046\004\uffea\010\uffea\013\uffea\014\uffea\015\uffea\024" +
    "\uffea\026\127\033\uffea\034\uffea\035\uffea\036\uffea\037\uffea" +
    "\040\uffea\041\uffea\042\uffea\045\uffea\047\uffea\052\uffea\001" +
    "\002\000\050\003\113\004\uffe9\010\uffe9\013\uffe9\014\uffe9" +
    "\015\uffe9\023\115\024\uffe9\033\uffe9\034\uffe9\035\uffe9\036" +
    "\uffe9\037\uffe9\040\uffe9\041\uffe9\042\uffe9\045\uffe9\047\uffe9" +
    "\052\uffe9\001\002\000\052\003\113\004\uffe9\010\uffe9\013" +
    "\uffe9\014\uffe9\015\uffe9\023\120\024\uffe9\027\131\033\uffe9" +
    "\034\uffe9\035\uffe9\036\uffe9\037\uffe9\040\uffe9\041\uffe9\042" +
    "\uffe9\045\uffe9\047\uffe9\052\uffe9\001\002\000\054\002\ufff6" +
    "\003\ufff6\004\ufff6\010\ufff6\013\ufff6\014\ufff6\015\ufff6\023" +
    "\ufff6\024\ufff6\027\ufff6\033\ufff6\034\ufff6\035\ufff6\036\ufff6" +
    "\037\ufff6\040\ufff6\041\ufff6\042\ufff6\045\ufff6\047\ufff6\052" +
    "\ufff6\001\002\000\004\025\133\001\002\000\046\004\uffea" +
    "\010\uffea\013\uffea\014\uffea\015\uffea\024\uffea\026\134\033" +
    "\uffea\034\uffea\035\uffea\036\uffea\037\uffea\040\uffea\041\uffea" +
    "\042\uffea\045\uffea\047\uffea\052\uffea\001\002\000\050\003" +
    "\113\004\uffe9\010\uffe9\013\uffe9\014\uffe9\015\uffe9\023\115" +
    "\024\uffe9\033\uffe9\034\uffe9\035\uffe9\036\uffe9\037\uffe9\040" +
    "\uffe9\041\uffe9\042\uffe9\045\uffe9\047\uffe9\052\uffe9\001\002" +
    "\000\052\003\113\004\uffe9\010\uffe9\013\uffe9\014\uffe9\015" +
    "\uffe9\023\120\024\uffe9\027\136\033\uffe9\034\uffe9\035\uffe9" +
    "\036\uffe9\037\uffe9\040\uffe9\041\uffe9\042\uffe9\045\uffe9\047" +
    "\uffe9\052\uffe9\001\002\000\054\002\ufff5\003\ufff5\004\ufff5" +
    "\010\ufff5\013\ufff5\014\ufff5\015\ufff5\023\ufff5\024\ufff5\027" +
    "\ufff5\033\ufff5\034\ufff5\035\ufff5\036\ufff5\037\ufff5\040\ufff5" +
    "\041\ufff5\042\ufff5\045\ufff5\047\ufff5\052\ufff5\001\002\000" +
    "\004\046\154\001\002\000\040\004\033\010\040\014\021" +
    "\015\043\024\036\033\022\034\023\035\030\036\017\037" +
    "\041\040\034\041\031\045\020\047\027\052\024\001\002" +
    "\000\040\004\uffe5\010\uffe5\014\uffe5\015\uffe5\024\uffe5\033" +
    "\uffe5\034\uffe5\035\uffe5\036\uffe5\037\uffe5\040\uffe5\041\uffe5" +
    "\045\uffe5\047\uffe5\052\uffe5\001\002\000\014\010\105\012" +
    "\145\032\uffee\043\uffee\044\143\001\002\000\040\004\033" +
    "\010\040\014\021\015\043\024\036\033\022\034\023\035" +
    "\030\036\017\037\041\040\034\041\031\045\020\047\027" +
    "\052\024\001\002\000\006\032\147\043\146\001\002\000" +
    "\006\032\ufff0\043\ufff0\001\002\000\054\002\uffeb\003\uffeb" +
    "\004\uffeb\010\uffeb\013\uffeb\014\uffeb\015\uffeb\023\uffeb\024" +
    "\uffeb\027\uffeb\033\uffeb\034\uffeb\035\uffeb\036\uffeb\037\uffeb" +
    "\040\uffeb\041\uffeb\042\uffeb\045\uffeb\047\uffeb\052\uffeb\001" +
    "\002\000\004\046\151\001\002\000\054\002\ufff3\003\ufff3" +
    "\004\ufff3\010\ufff3\013\ufff3\014\ufff3\015\ufff3\023\ufff3\024" +
    "\ufff3\027\ufff3\033\ufff3\034\ufff3\035\ufff3\036\ufff3\037\ufff3" +
    "\040\ufff3\041\ufff3\042\ufff3\045\ufff3\047\ufff3\052\ufff3\001" +
    "\002\000\054\002\uffec\003\uffec\004\uffec\010\uffec\013\uffec" +
    "\014\uffec\015\uffec\023\uffec\024\uffec\027\uffec\033\uffec\034" +
    "\uffec\035\uffec\036\uffec\037\uffec\040\uffec\041\uffec\042\uffec" +
    "\045\uffec\047\uffec\052\uffec\001\002\000\012\010\105\012" +
    "\153\032\uffef\043\uffef\001\002\000\006\032\uffed\043\uffed" +
    "\001\002\000\054\002\ufff2\003\ufff2\004\ufff2\010\ufff2\013" +
    "\ufff2\014\ufff2\015\ufff2\023\ufff2\024\ufff2\027\ufff2\033\ufff2" +
    "\034\ufff2\035\ufff2\036\ufff2\037\ufff2\040\ufff2\041\ufff2\042" +
    "\ufff2\045\ufff2\047\ufff2\052\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\152\000\004\006\004\001\001\000\004\003\007\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\004\004\011\001\001\000\010\005\115\017\113\022" +
    "\116\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\016\007\024\010\031\011" +
    "\036\012\041\013\034\021\025\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\012\011\111\012" +
    "\041\013\034\021\025\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\011\107" +
    "\012\041\013\034\021\025\001\001\000\016\007\103\010" +
    "\031\011\036\012\041\013\034\021\025\001\001\000\002" +
    "\001\001\000\002\001\001\000\012\011\102\012\041\013" +
    "\034\021\025\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\010\015\044\020" +
    "\051\021\043\001\001\000\002\001\001\000\002\001\001" +
    "\000\010\015\044\020\071\021\043\001\001\000\010\015" +
    "\044\020\065\021\043\001\001\000\002\001\001\000\002" +
    "\001\001\000\006\015\057\021\056\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\010\015\044\020\067" +
    "\021\043\001\001\000\002\001\001\000\006\015\057\021" +
    "\056\001\001\000\002\001\001\000\006\015\057\021\056" +
    "\001\001\000\002\001\001\000\006\015\057\021\056\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\010\106\011\036\012\041\013\034\021" +
    "\025\001\001\000\002\001\001\000\012\011\107\012\041" +
    "\013\034\021\025\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\004\023\137" +
    "\001\001\000\004\016\131\001\001\000\002\001\001\000" +
    "\006\005\120\017\113\001\001\000\004\016\121\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\004\016\124\001\001\000\002\001\001\000\002\001\001" +
    "\000\010\005\115\017\113\022\127\001\001\000\006\005" +
    "\120\017\113\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\010\005\115\017\113\022\134\001" +
    "\001\000\006\005\120\017\113\001\001\000\002\001\001" +
    "\000\002\001\001\000\016\007\141\010\031\011\036\012" +
    "\041\013\034\021\025\001\001\000\002\001\001\000\004" +
    "\014\143\001\001\000\016\007\151\010\031\011\036\012" +
    "\041\013\034\021\025\001\001\000\004\024\147\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 = this.scanner;

    }


   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;
   }
       
   public void report_error(String message, Object info) {     
     if ( info instanceof java_cup.runtime.Symbol ) {
       java_cup.runtime.Symbol s = (java_cup.runtime.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);
   }
   
   public void report_fatal_error(String message, Object info) {
     // report_error(message, info);
     throw new GeneratorException();
   }


}

/** Cup generated class to encapsulate user supplied action code.*/
class CUP$LexParse$actions {



  LexScan     scanner;
  CharClasses charClasses = new CharClasses(127);
  RegExps     regExps     = new RegExps();
  Macros      macros      = new Macros();
  Integer     stateNumber;
  Timer       t           = new Timer();
  EOFActions  eofActions  = new EOFActions();

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

  void fatalError(int message) {
    fatalError(message, scanner.currentLine(), -1);
    throw new GeneratorException();
  }

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

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


  private boolean check(int type, char c) {
    switch (type) {
      case sym.JLETTERCLASS:
        return Character.isJavaIdentifierStart(c);
        
      case sym.JLETTERDIGITCLASS:
        return Character.isJavaIdentifierPart(c);
        
      case sym.LETTERCLASS:
        return Character.isLetter(c);
        
      case sym.DIGITCLASS:
        return Character.isDigit(c);
        
      case sym.UPPERCLASS: 
        return Character.isUpperCase(c);
        
      case sym.LOWERCLASS: 
        return Character.isLowerCase(c);
        
      default: return false;
    }
  }
  
  private Vector makePreClass(int type) {
    
    Vector result = new Vector();
    
    char c = 0;
    char start = 0;
    char last = charClasses.getMaxCharCode();
    
    boolean prev, current;
    
    prev = check(type,'\u0000');
    
    for (c = 1; c < last; c++) {
      
      current = check(type,c);
      
      if (!prev && current) start = c;
      if (prev && !current) {
        result.addElement(new Intervall(start, (char)(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.addElement(new Intervall(c,c));
    if (prev && current)  result.addElement(new Intervall(start, c));    
    if (prev && !current) result.addElement(new Intervall(start, (char)(c-1)));

    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 makeCaseless(String s) {

    if ( s == null ) return null;

    if ( s.equals("") ) return new RegExp1(sym.STRING, s);

    RegExp result, union, r1, r2;
    Vector ccl;
    char lower, upper;

    upper = Character.toUpperCase( s.charAt(0) );
    lower = Character.toLowerCase( s.charAt(0) );
    
    ccl = new Vector();
    ccl.addElement( new Intervall(upper,upper) );
    ccl.addElement( new Intervall(lower,lower) );
    charClasses.makeClass( ccl );
    
    r1 = new RegExp1(sym.CHAR, new Character(upper)); 
    r2 = new RegExp1(sym.CHAR, new Character(lower)); 
      
    result = new RegExp2(sym.BAR, r1, r2);    
    
    for (int i = 1; i < s.length(); i++) {
      upper = Character.toUpperCase( s.charAt(i) );
      lower = Character.toLowerCase( s.charAt(i) );
      
      ccl = new Vector();
      ccl.addElement( new Intervall(upper,upper) );
      ccl.addElement( new Intervall(lower,lower) );
      charClasses.makeClass( ccl );
      
      r1 = new RegExp1(sym.CHAR, new Character(upper)); 
      r2 = new RegExp1(sym.CHAR, new Character(lower)); 
      
      union = new RegExp2(sym.BAR, r1, r2);    

      result = new RegExp2(sym.CONCAT, result, union);
    }
     
    return result;
  } 

  private RegExp makeCaseless(Character c) {
    char upper = c.toUpperCase( c.charValue() );
    char lower = c.toLowerCase( c.charValue() );

    Vector ccl = new Vector();
    ccl.addElement( new Intervall(upper,upper) );
    ccl.addElement( new Intervall(lower,lower) );
    charClasses.makeClass( ccl );
    
    RegExp r1 = new RegExp1(sym.CHAR, new Character(upper)); 
    RegExp r2 = new RegExp1(sym.CHAR, new Character(lower)); 

    return new RegExp2(sym.BAR, r1, r2);    
  }

  private RegExp makeNL() {
    Vector list = new Vector();
    list.addElement(new Intervall('\n','\r'));
    list.addElement(new Intervall('\u0085','\u0085'));
    list.addElement(new Intervall('\u2028','\u2029'));

    charClasses.makeClass(list);
    charClasses.makeClass('\n');
    charClasses.makeClass('\r');

    RegExp1   c = new RegExp1(sym.CCLASS, list);
    Character n = new Character('\n');
    Character r = new Character('\r');

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

  private final LexParse parser;

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

  /** Method with the actual generated action code. */
  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
    {
      /* 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 71: // preclass ::= LOWERCLASS 
            {
              Vector RESULT = null;
		 RESULT = makePreClass(sym.LOWERCLASS); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 70: // preclass ::= UPPERCLASS 
            {
              Vector RESULT = null;
		 RESULT = makePreClass(sym.UPPERCLASS); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 69: // preclass ::= DIGITCLASS 
            {
              Vector RESULT = null;
		 RESULT = makePreClass(sym.DIGITCLASS); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 68: // preclass ::= LETTERCLASS 
            {
              Vector RESULT = null;
		 RESULT = makePreClass(sym.LETTERCLASS); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 67: // preclass ::= JLETTERDIGITCLASS 
            {
              Vector RESULT = null;
		 RESULT = makePreClass(sym.JLETTERDIGITCLASS); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 66: // preclass ::= JLETTERCLASS 
            {
              Vector RESULT = null;
		 RESULT = makePreClass(sym.JLETTERCLASS); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(15/*preclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 65: // classcontentelem ::= CHAR 
            {
              Intervall RESULT = null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = new Intervall(c.charValue(), c.charValue()); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(11/*classcontentelem*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 64: // classcontentelem ::= CHAR DASH CHAR 
            {
              Intervall 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;
		Character c1 = (Character)((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-0)).left;
		int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Character c2 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = new Intervall(c1.charValue(), c2.charValue()); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(11/*classcontentelem*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 63: // classcontent ::= MACROUSE 
            {
              Vector RESULT = null;
		int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 62: // classcontent ::= classcontent MACROUSE 
            {
              Vector 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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 61: // classcontent ::= STRING 
            {
              Vector RESULT = null;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                      RESULT = new Vector();
                      for (int i = 0; i < s.length(); i++)
                        RESULT.addElement(new Intervall(s.charAt(i),s.charAt(i)));
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 60: // classcontent ::= classcontent STRING 
            {
              Vector 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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int sleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		String s = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                      for (int i = 0; i < s.length(); i++)
                        list.addElement(new Intervall(s.charAt(i),s.charAt(i)));
                      RESULT = list;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 59: // classcontent ::= preclass 
            {
              Vector RESULT = null;
		int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = list; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 58: // classcontent ::= classcontent preclass 
            {
              Vector 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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int plistleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int plistright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Vector plist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		
                     for (Enumeration e = plist.elements(); e.hasMoreElements();)
                       list.addElement(e.nextElement());
                     RESULT = list;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 57: // classcontent ::= classcontentelem 
            {
              Vector RESULT = null;
		int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Intervall elem = (Intervall)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		
                     Vector list = new Vector();
                     list.addElement(elem);
                     RESULT = list;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 56: // classcontent ::= classcontent classcontentelem 
            {
              Vector 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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int elemleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int elemright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Intervall elem = (Intervall)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		
                     list.addElement(elem);
                     RESULT = list;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(14/*classcontent*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 55: // charclass ::= OPENCLASS HAT DASH classcontent CLOSECLASS 
            {
              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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     try {
                       list.addElement(new Intervall('-','-'));
                       charClasses.makeClassNot(list);
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                     }
                     RESULT = new RegExp1(sym.CCLASSNOT,list);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 54: // charclass ::= OPENCLASS DASH classcontent CLOSECLASS 
            {
              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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     try {
                       list.addElement(new Intervall('-','-'));
                       charClasses.makeClass(list);
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                     }
                     RESULT = new RegExp1(sym.CCLASS,list);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 53: // charclass ::= OPENCLASS HAT classcontent CLOSECLASS 
            {
              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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     try {
                       charClasses.makeClassNot(list);
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                     }
                     RESULT = new RegExp1(sym.CCLASSNOT,list);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 52: // charclass ::= OPENCLASS HAT CLOSECLASS 
            {
              RegExp RESULT = null;
		int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     Vector list = new Vector();
                     list.addElement(new Intervall((char)0,charClasses.maxChar));
                     try {
                       charClasses.makeClass(list);
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                     }
                     RESULT = new RegExp1(sym.CCLASS,list);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 51: // charclass ::= OPENCLASS classcontent CLOSECLASS 
            {
              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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int closeleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int closeright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object close = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     try {
                       charClasses.makeClass(list);
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                     }
                     RESULT = new RegExp1(sym.CCLASS,list);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 50: // charclass ::= OPENCLASS CLOSECLASS 
            {
              RegExp RESULT = null;
		 
                     RESULT = new RegExp1(sym.CCLASS,null);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(9/*charclass*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 49: // regexp ::= CHAR 
            {
              RegExp RESULT = null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     try {
                       if ( scanner.caseless ) {            
                         RESULT = makeCaseless( c );
                       }
                       else {
                         charClasses.makeClass( c.charValue() );
                         RESULT = new RegExp1(sym.CHAR, c); 
                       }
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CS2SMALL_CHAR, cleft, cright);
                     }

                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 48: // regexp ::= POINT 
            {
              RegExp RESULT = null;
		 
                      Vector any = new Vector();
                      any.addElement(new Intervall('\n','\n'));
                      charClasses.makeClass( '\n' );
                      RESULT = new RegExp1(sym.CCLASSNOT, any); 
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 47: // regexp ::= STRING 
            {
              RegExp RESULT = null;
		int strleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int strright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		String str = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 
                     try {
                       if ( scanner.caseless ) {
                         RESULT = makeCaseless(str);
                       }
                       else {
                         charClasses.makeClass( str );
                         RESULT = new RegExp1(sym.STRING, str); 
                       }
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CS2SMALL_STRING, strleft, strright);
                     }

                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 46: // regexp ::= preclass 
            {
              RegExp RESULT = null;
		int listleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		
                     try {
                       charClasses.makeClass(list);
                     }
                     catch (CharClassException e) {
                       syntaxError(ErrorMessages.CHARSET_2_SMALL, listleft);
                     }
                     RESULT = new RegExp1(sym.CCLASS, list);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 45: // regexp ::= charclass 
            {
              RegExp RESULT = null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		RegExp c = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = c; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 44: // regexp ::= MACROUSE 
            {
              RegExp RESULT = null;
		int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).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 = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 43: // 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 = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 42: // 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.intValue(), n2.intValue(), n1left, n2right); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 41: // 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.elementAt(CUP$LexParse$top-0)).left;
		int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = makeRepeat(r, n.intValue(), n.intValue(), bleft, bright); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 40: // 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 = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 39: // 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 = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // 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 = new java_cup.runtime.Symbol(8/*regexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // nregexp ::= regexp 
            {
              RegExp RESULT = null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = r; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(7/*nregexp*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // concs ::= nregexp 
            {
              RegExp RESULT = null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = r; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(6/*concs*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // 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.elementAt(CUP$LexParse$top-0)).left;
		int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = new RegExp2(sym.CONCAT, r1, r2); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(6/*concs*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // series ::= BAR 
            {
              RegExp RESULT = null;
		int bleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int bright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object b = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 syntaxError(ErrorMessages.REGEXP_EXPECTED, bleft, bright); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(5/*series*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 31: // series ::= concs 
            {
              RegExp RESULT = null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = r; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(5/*series*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // 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.elementAt(CUP$LexParse$top-0)).left;
		int r2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		RegExp r2 = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = new RegExp2(sym.BAR, r1, r2); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(5/*series*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // hatOPT ::= 
            {
              Boolean RESULT = null;
		 RESULT = new Boolean(false); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(17/*hatOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 28: // hatOPT ::= HAT 
            {
              Boolean RESULT = null;
		 charClasses.makeClass('\n');
                      RESULT = new Boolean(true); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(17/*hatOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 27: // states ::= IDENT COMMA 
            {
              Vector RESULT = null;
		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Object c = (Object)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 syntaxError(ErrorMessages.REGEXP_EXPECTED, cleft, cright+1); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(12/*states*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 26: // states ::= IDENT 
            {
              Vector RESULT = null;
		int idleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		
                     Vector list = new Vector();
                     stateNumber = scanner.states.getNumber( id );
                     if ( stateNumber != null )
                       list.addElement( stateNumber ); 
                     else {
                       throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL, 
                                                  idleft, idright);
                     }
                     RESULT = list;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(12/*states*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 25: // states ::= IDENT COMMA states 
            {
              Vector 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.elementAt(CUP$LexParse$top-0)).left;
		int listright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		
                     stateNumber = scanner.states.getNumber( id );
                     if ( stateNumber != null )
                       list.addElement( stateNumber ); 
                     else {
                       throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL, 
                                                  idleft, idright);
                     }
                     RESULT = list;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(12/*states*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // statesOPT ::= 
            {
              Vector RESULT = null;
		 RESULT = new Vector(); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(13/*statesOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // statesOPT ::= LESSTHAN states MORETHAN 
            {
              Vector 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;
		Vector list = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 RESULT = list; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(13/*statesOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // actions ::= NOACTION 
            {
              Action RESULT = null;
		 RESULT = null; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(18/*actions*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // actions ::= REGEXPEND ACTION 
            {
              Action RESULT = null;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = a; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(18/*actions*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // lookaheadOPT ::= 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 = new java_cup.runtime.Symbol(10/*lookaheadOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // lookaheadOPT ::= 
            {
              RegExp RESULT = null;
		 RESULT = null; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(10/*lookaheadOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // lookaheadOPT ::= LOOKAHEAD series 
            {
              RegExp RESULT = null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		RegExp r = (RegExp)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = r; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(10/*lookaheadOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // lookaheadOPT ::= DOLLAR 
            {
              RegExp RESULT = null;
		 RESULT = makeNL(); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(10/*lookaheadOPT*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

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

              CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, 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;
		Vector s = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;
		int aleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = new Integer(regExps.insert(s, a)); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // rule ::= statesOPT hatOPT series lookaheadOPT actions 
            {
              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;
		Vector s = (Vector)((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.elementAt(CUP$LexParse$top-0)).left;
		int aright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Action a = (Action)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, l)); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(3/*rule*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-4)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 13: // rules ::= rule 
            {
              Vector RESULT = null;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 RESULT = new Vector(); RESULT.addElement(r); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // rules ::= LESSTHAN states MORETHAN LBRACE rules RBRACE 
            {
              Vector 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;
		Vector states = (Vector)((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;
		Vector rlist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 
                     Enumeration rs = rlist.elements();
                     while ( rs.hasMoreElements() ) {
                       Integer elem = (Integer) rs.nextElement();
                       regExps.addStates( elem.intValue(), states );
                     }                       
                     RESULT = rlist;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-5)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // rules ::= rules LESSTHAN states MORETHAN LBRACE rules RBRACE 
            {
              Vector 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;
		Vector rlist1 = (Vector)((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;
		Vector states = (Vector)((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;
		Vector rlist2 = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		 
                     Enumeration rs = rlist2.elements();
                     while ( rs.hasMoreElements() ) {
                       Integer elem = (Integer) rs.nextElement();
                       regExps.addStates( elem.intValue(), states );
                       rlist1.addElement( elem );
                     }                       
                     RESULT = rlist1;
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-6)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // rules ::= rules rule 
            {
              Vector 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;
		Vector rlist = (Vector)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).value;
		int rleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left;
		int rright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right;
		Integer r = (Integer)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).value;
		 rlist.addElement(r); RESULT = rlist; 
              CUP$LexParse$result = new java_cup.runtime.Symbol(16/*rules*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 8: // 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 = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 7: // macro ::= UNICODE 
            {
              Object RESULT = null;
		 charClasses.setMaxCharCode(0xFFFF); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 6: // macro ::= FULL 
            {
              Object RESULT = null;
		 charClasses.setMaxCharCode(255); 
              CUP$LexParse$result = new java_cup.runtime.Symbol(2/*macro*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

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

              CUP$LexParse$result = new java_cup.runtime.Symbol(1/*macros*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

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

              CUP$LexParse$result = new java_cup.runtime.Symbol(1/*macros*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

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

              CUP$LexParse$result = new java_cup.runtime.Symbol(1/*macros*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // specification ::= 
            {
              NFA RESULT = null;
		 
                     fatalError(ErrorMessages.NO_LEX_SPEC);
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(4/*specification*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

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

                     Out.checkErrors();
                     
                     Out.time("Parsing took "+t);
                     
                     macros.expand();
                     Enumeration unused = macros.unused();                     
                     while ( unused.hasMoreElements() ) {
                       Out.warning("Macro \""+unused.nextElement()+"\" has been declared but never used.");
                     }

                     SemCheck.check(regExps, macros, charClasses.getMaxCharCode(), scanner.file);
  
                     regExps.checkActions();

                     if (Out.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.NL+"NFA construction took "+t);
                     
                   
              CUP$LexParse$result = new java_cup.runtime.Symbol(4/*specification*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-3)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          return CUP$LexParse$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          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 = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-1)).left, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-0)).right, RESULT);
            }
          /* ACCEPT */
          CUP$LexParse$parser.done_parsing();
          return CUP$LexParse$result;

          /* . . . . . .*/
          default:
            throw new Exception(
               "Invalid action number found in internal parse table");

        }
    }
}

