
//----------------------------------------------------
// The following code was generated by CUP v0.10k
// Tue May 14 05:05:47 GMT 2019
//----------------------------------------------------

package org.apache.xalan.xsltc.compiler;

import java.util.Stack;
import java.util.Vector;
import java.io.StringReader;
import java_cup.runtime.*;
import org.apache.xml.dtm.DTM;
import org.apache.xalan.xsltc.DOM;
import org.apache.xml.dtm.Axis;
import org.apache.xalan.xsltc.runtime.Operators;
import org.apache.xalan.xsltc.compiler.util.ErrorMsg;

/** CUP v0.10k generated parser.
  * @version Tue May 14 05:05:47 GMT 2019
  */
public class XPathParser extends java_cup.runtime.lr_parser {

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

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

  /** Production table. */
  protected static final short _production_table[][] = 
    unpackFromStrings(new String[] {
    "\000\215\000\002\002\004\000\002\003\004\000\002\003" +
    "\004\000\002\036\003\000\002\036\005\000\002\037\003" +
    "\000\002\037\004\000\002\037\003\000\002\037\005\000" +
    "\002\037\005\000\002\037\004\000\002\037\003\000\002" +
    "\035\006\000\002\035\010\000\002\040\006\000\002\041" +
    "\003\000\002\041\005\000\002\041\005\000\002\042\003" +
    "\000\002\042\004\000\002\042\003\000\002\042\004\000" +
    "\002\042\004\000\002\042\005\000\002\042\004\000\002" +
    "\042\005\000\002\043\003\000\002\043\003\000\002\043" +
    "\003\000\002\043\003\000\002\043\003\000\002\044\003" +
    "\000\002\044\003\000\002\054\003\000\002\054\004\000" +
    "\002\054\004\000\002\045\003\000\002\045\004\000\002" +
    "\007\005\000\002\004\003\000\002\012\003\000\002\012" +
    "\005\000\002\013\003\000\002\013\005\000\002\014\003" +
    "\000\002\014\005\000\002\014\005\000\002\015\003\000" +
    "\002\015\005\000\002\015\005\000\002\015\005\000\002" +
    "\015\005\000\002\016\003\000\002\016\005\000\002\016" +
    "\005\000\002\017\003\000\002\017\005\000\002\017\005" +
    "\000\002\017\005\000\002\020\003\000\002\020\004\000" +
    "\002\024\003\000\002\024\005\000\002\025\003\000\002" +
    "\025\003\000\002\025\005\000\002\025\005\000\002\006" +
    "\003\000\002\006\003\000\002\027\003\000\002\027\005" +
    "\000\002\027\003\000\002\031\003\000\002\031\004\000" +
    "\002\031\003\000\002\030\005\000\002\032\004\000\002" +
    "\011\003\000\002\011\004\000\002\011\005\000\002\011" +
    "\004\000\002\011\003\000\002\053\004\000\002\053\003" +
    "\000\002\052\003\000\002\052\003\000\002\052\003\000" +
    "\002\052\003\000\002\052\003\000\002\052\003\000\002" +
    "\052\003\000\002\052\003\000\002\052\003\000\002\052" +
    "\003\000\002\052\003\000\002\052\003\000\002\052\003" +
    "\000\002\026\003\000\002\026\003\000\002\010\003\000" +
    "\002\010\004\000\002\023\003\000\002\023\005\000\002" +
    "\023\003\000\002\023\003\000\002\023\003\000\002\023" +
    "\003\000\002\021\004\000\002\022\005\000\002\022\006" +
    "\000\002\046\003\000\002\046\005\000\002\050\003\000" +
    "\002\051\003\000\002\005\003\000\002\033\003\000\002" +
    "\033\003\000\002\033\003\000\002\033\003\000\002\033" +
    "\006\000\002\033\003\000\002\034\003\000\002\034\003" +
    "\000\002\047\003\000\002\047\003\000\002\047\003\000" +
    "\002\047\003\000\002\047\003\000\002\047\003\000\002" +
    "\047\003\000\002\047\003\000\002\047\003\000\002\047" +
    "\003\000\002\047\003\000\002\047\003\000\002\047\003" +
    "\000\002\047\003\000\002\047\003\000\002\047\003\000" +
    "\002\047\003\000\002\047\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\307\000\006\067\006\070\005\001\002\000\004\002" +
    "\311\001\002\000\110\004\061\005\111\011\071\013\103" +
    "\015\134\016\066\017\106\021\070\031\075\032\031\033" +
    "\040\035\057\036\034\037\113\040\141\041\142\042\145" +
    "\045\063\046\062\047\065\050\115\051\123\052\136\053" +
    "\077\054\143\055\131\056\125\057\116\060\104\061\140" +
    "\062\067\063\060\064\127\065\132\066\072\001\002\000" +
    "\070\004\013\013\027\016\020\021\023\032\031\033\040" +
    "\036\034\037\033\040\046\041\047\042\051\045\015\046" +
    "\014\047\016\050\036\051\037\052\044\053\025\054\050" +
    "\055\043\056\041\057\035\060\030\061\045\062\021\063" +
    "\012\064\042\001\002\000\006\002\ufffe\010\306\001\002" +
    "\000\004\002\000\001\002\000\014\002\uffe7\004\uffe7\006" +
    "\uffe7\010\uffe7\021\uffe7\001\002\000\054\002\uff7a\004\uff7a" +
    "\006\uff7a\007\uff7a\010\uff7a\012\uff7a\014\uff7a\021\uff7a\022" +
    "\uff7a\023\uff7a\024\uff7a\025\uff7a\026\uff7a\027\uff7a\030\uff7a" +
    "\031\uff7a\032\uff7a\033\uff7a\034\uff7a\043\uff7a\044\uff7a\001" +
    "\002\000\070\002\ufffc\010\ufffc\013\027\016\020\032\031" +
    "\033\040\036\034\037\113\040\141\041\047\042\051\045" +
    "\015\046\014\047\016\050\036\051\037\052\044\053\025" +
    "\054\050\055\043\056\041\057\035\060\030\061\045\062" +
    "\021\063\012\064\042\001\002\000\014\002\uffe3\004\uffe3" +
    "\006\uffe3\010\uffe3\021\uffe3\001\002\000\014\002\uffe4\004" +
    "\uffe4\006\uffe4\010\uffe4\021\uffe4\001\002\000\004\011\302" +
    "\001\002\000\012\002\ufffa\004\277\010\ufffa\021\276\001" +
    "\002\000\062\013\uffe0\032\uffe0\033\uffe0\036\uffe0\037\uffe0" +
    "\040\uffe0\041\uffe0\042\uffe0\045\uffe0\046\uffe0\047\uffe0\050" +
    "\uffe0\051\uffe0\052\uffe0\053\uffe0\054\uffe0\055\uffe0\056\uffe0" +
    "\057\uffe0\060\uffe0\061\uffe0\062\uffe0\063\uffe0\064\uffe0\001" +
    "\002\000\054\002\uff7b\004\uff7b\006\uff7b\007\uff7b\010\uff7b" +
    "\012\uff7b\014\uff7b\021\uff7b\022\uff7b\023\uff7b\024\uff7b\025" +
    "\uff7b\026\uff7b\027\uff7b\030\uff7b\031\uff7b\032\uff7b\033\uff7b" +
    "\034\uff7b\043\uff7b\044\uff7b\001\002\000\062\013\027\032" +
    "\031\033\040\036\034\037\113\040\141\041\047\042\051" +
    "\045\015\046\014\047\016\050\036\051\037\052\044\053" +
    "\170\054\166\055\043\056\041\057\035\060\030\061\045" +
    "\062\021\063\012\064\042\001\002\000\064\013\027\016" +
    "\020\032\031\033\040\036\034\037\113\040\141\041\047" +
    "\042\051\045\015\046\014\047\016\050\036\051\037\052" +
    "\044\053\025\054\050\055\043\056\041\057\035\060\030" +
    "\061\045\062\021\063\012\064\042\001\002\000\012\002" +
    "\ufff2\004\266\010\ufff2\021\265\001\002\000\016\002\uff7f" +
    "\004\uff7f\006\uff7f\010\uff7f\020\264\021\uff7f\001\002\000" +
    "\006\002\ufff6\010\ufff6\001\002\000\014\002\uffe2\004\uffe2" +
    "\006\uffe2\010\uffe2\021\uffe2\001\002\000\054\002\uff7d\004" +
    "\uff7d\006\uff7d\007\uff7d\010\uff7d\012\uff7d\014\uff7d\021\uff7d" +
    "\022\uff7d\023\uff7d\024\uff7d\025\uff7d\026\uff7d\027\uff7d\030" +
    "\uff7d\031\uff7d\032\uff7d\033\uff7d\034\uff7d\043\uff7d\044\uff7d" +
    "\001\002\000\056\002\uff85\004\uff85\006\uff85\007\uff85\010" +
    "\uff85\011\uff85\012\uff85\014\uff85\021\uff85\022\uff85\023\uff85" +
    "\024\uff85\025\uff85\026\uff85\027\uff85\030\uff85\031\uff85\032" +
    "\uff85\033\uff85\034\uff85\043\uff85\044\uff85\001\002\000\014" +
    "\002\uffed\004\uffed\006\055\010\uffed\021\uffed\001\002\000" +
    "\016\002\uff75\004\uff75\006\uff75\010\uff75\011\260\021\uff75" +
    "\001\002\000\056\002\uff86\004\uff86\006\uff86\007\uff86\010" +
    "\uff86\011\uff86\012\uff86\014\uff86\021\uff86\022\uff86\023\uff86" +
    "\024\uff86\025\uff86\026\uff86\027\uff86\030\uff86\031\uff86\032" +
    "\uff86\033\uff86\034\uff86\043\uff86\044\uff86\001\002\000\054" +
    "\002\uff7e\004\uff7e\006\uff7e\007\uff7e\010\uff7e\012\uff7e\014" +
    "\uff7e\021\uff7e\022\uff7e\023\uff7e\024\uff7e\025\uff7e\026\uff7e" +
    "\027\uff7e\030\uff7e\031\uff7e\032\uff7e\033\uff7e\034\uff7e\043" +
    "\uff7e\044\uff7e\001\002\000\054\002\uff77\004\uff77\006\uff77" +
    "\007\uff77\010\uff77\012\uff77\014\uff77\021\uff77\022\uff77\023" +
    "\uff77\024\uff77\025\uff77\026\uff77\027\uff77\030\uff77\031\uff77" +
    "\032\uff77\033\uff77\034\uff77\043\uff77\044\uff77\001\002\000" +
    "\054\002\uff76\004\uff76\006\uff76\007\uff76\010\uff76\012\uff76" +
    "\014\uff76\021\uff76\022\uff76\023\uff76\024\uff76\025\uff76\026" +
    "\uff76\027\uff76\030\uff76\031\uff76\032\uff76\033\uff76\034\uff76" +
    "\043\uff76\044\uff76\001\002\000\056\002\uff84\004\uff84\006" +
    "\uff84\007\uff84\010\uff84\011\uff84\012\uff84\014\uff84\021\uff84" +
    "\022\uff84\023\uff84\024\uff84\025\uff84\026\uff84\027\uff84\030" +
    "\uff84\031\uff84\032\uff84\033\uff84\034\uff84\043\uff84\044\uff84" +
    "\001\002\000\054\002\uff81\004\uff81\006\uff81\007\uff81\010" +
    "\uff81\012\uff81\014\uff81\021\uff81\022\uff81\023\uff81\024\uff81" +
    "\025\uff81\026\uff81\027\uff81\030\uff81\031\uff81\032\uff81\033" +
    "\uff81\034\uff81\043\uff81\044\uff81\001\002\000\054\002\uff78" +
    "\004\uff78\006\uff78\007\uff78\010\uff78\012\uff78\014\uff78\021" +
    "\uff78\022\uff78\023\uff78\024\uff78\025\uff78\026\uff78\027\uff78" +
    "\030\uff78\031\uff78\032\uff78\033\uff78\034\uff78\043\uff78\044" +
    "\uff78\001\002\000\054\002\uff82\004\uff82\006\uff82\007\uff82" +
    "\010\uff82\012\uff82\014\uff82\021\uff82\022\uff82\023\uff82\024" +
    "\uff82\025\uff82\026\uff82\027\uff82\030\uff82\031\uff82\032\uff82" +
    "\033\uff82\034\uff82\043\uff82\044\uff82\001\002\000\054\002" +
    "\uff79\004\uff79\006\uff79\007\uff79\010\uff79\012\uff79\014\uff79" +
    "\021\uff79\022\uff79\023\uff79\024\uff79\025\uff79\026\uff79\027" +
    "\uff79\030\uff79\031\uff79\032\uff79\033\uff79\034\uff79\043\uff79" +
    "\044\uff79\001\002\000\054\002\uff7c\004\uff7c\006\uff7c\007" +
    "\uff7c\010\uff7c\012\uff7c\014\uff7c\021\uff7c\022\uff7c\023\uff7c" +
    "\024\uff7c\025\uff7c\026\uff7c\027\uff7c\030\uff7c\031\uff7c\032" +
    "\uff7c\033\uff7c\034\uff7c\043\uff7c\044\uff7c\001\002\000\016" +
    "\002\uff83\004\uff83\006\uff83\010\uff83\011\253\021\uff83\001" +
    "\002\000\014\002\uffe5\004\uffe5\006\uffe5\010\uffe5\021\uffe5" +
    "\001\002\000\016\002\uff80\004\uff80\006\uff80\010\uff80\020" +
    "\252\021\uff80\001\002\000\014\002\uffe6\004\uffe6\006\uffe6" +
    "\010\uffe6\021\uffe6\001\002\000\014\002\uffe1\004\uffe1\006" +
    "\uffe1\010\uffe1\021\uffe1\001\002\000\014\002\uffef\004\uffef" +
    "\006\055\010\uffef\021\uffef\001\002\000\054\002\uffdd\004" +
    "\uffdd\006\055\007\uffdd\010\uffdd\012\uffdd\014\uffdd\021\uffdd" +
    "\022\uffdd\023\uffdd\024\uffdd\025\uffdd\026\uffdd\027\uffdd\030" +
    "\uffdd\031\uffdd\032\uffdd\033\uffdd\034\uffdd\043\uffdd\044\uffdd" +
    "\001\002\000\110\004\061\005\111\011\071\013\103\015" +
    "\134\016\066\017\106\021\070\031\075\032\031\033\040" +
    "\035\057\036\034\037\113\040\141\041\142\042\145\045" +
    "\063\046\062\047\065\050\115\051\123\052\136\053\077" +
    "\054\143\055\131\056\125\057\116\060\104\061\140\062" +
    "\067\063\060\064\127\065\132\066\072\001\002\000\012" +
    "\002\uffee\004\uffee\010\uffee\021\uffee\001\002\000\054\002" +
    "\uff9a\004\uff9a\006\uff9a\007\uff9a\010\uff9a\012\uff9a\014\uff9a" +
    "\021\uff9a\022\uff9a\023\uff9a\024\uff9a\025\uff9a\026\uff9a\027" +
    "\uff9a\030\uff9a\031\uff9a\032\uff9a\033\uff9a\034\uff9a\043\uff9a" +
    "\044\uff9a\001\002\000\060\002\uff7a\004\uff7a\006\uff7a\007" +
    "\uff7a\010\uff7a\011\uff7a\012\uff7a\014\uff7a\020\uffa5\021\uff7a" +
    "\022\uff7a\023\uff7a\024\uff7a\025\uff7a\026\uff7a\027\uff7a\030" +
    "\uff7a\031\uff7a\032\uff7a\033\uff7a\034\uff7a\043\uff7a\044\uff7a" +
    "\001\002\000\130\002\uffb9\005\111\007\uffb9\010\uffb9\012" +
    "\uffb9\013\103\014\uffb9\016\066\017\106\022\uffb9\023\uffb9" +
    "\024\uffb9\025\uffb9\026\uffb9\027\uffb9\030\uffb9\031\uffb9\032" +
    "\031\033\040\034\uffb9\036\034\037\113\040\141\041\142" +
    "\042\145\043\uffb9\044\uffb9\045\063\046\062\047\065\050" +
    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
    "\057\116\060\104\061\140\062\067\063\060\064\127\001" +
    "\002\000\054\002\uff89\004\uff89\006\uff89\007\uff89\010\uff89" +
    "\012\uff89\014\uff89\021\uff89\022\uff89\023\uff89\024\uff89\025" +
    "\uff89\026\uff89\027\uff89\030\uff89\031\uff89\032\uff89\033\uff89" +
    "\034\uff89\043\uff89\044\uff89\001\002\000\054\002\uff8b\004" +
    "\uff8b\006\uff8b\007\uff8b\010\uff8b\012\uff8b\014\uff8b\021\uff8b" +
    "\022\uff8b\023\uff8b\024\uff8b\025\uff8b\026\uff8b\027\uff8b\030" +
    "\uff8b\031\uff8b\032\uff8b\033\uff8b\034\uff8b\043\uff8b\044\uff8b" +
    "\001\002\000\032\002\uffd5\007\uffd5\012\uffd5\014\uffd5\022" +
    "\uffd5\023\uffd5\024\221\025\222\026\223\027\224\043\uffd5" +
    "\044\uffd5\001\002\000\004\011\245\001\002\000\062\013" +
    "\uffae\032\uffae\033\uffae\036\uffae\037\uffae\040\uffae\041\uffae" +
    "\042\uffae\045\uffae\046\uffae\047\uffae\050\uffae\051\uffae\052" +
    "\uffae\053\uffae\054\uffae\055\uffae\056\uffae\057\uffae\060\uffae" +
    "\061\uffae\062\uffae\063\uffae\064\uffae\001\002\000\060\002" +
    "\uff7b\004\uff7b\006\uff7b\007\uff7b\010\uff7b\011\uff7b\012\uff7b" +
    "\014\uff7b\020\uffa6\021\uff7b\022\uff7b\023\uff7b\024\uff7b\025" +
    "\uff7b\026\uff7b\027\uff7b\030\uff7b\031\uff7b\032\uff7b\033\uff7b" +
    "\034\uff7b\043\uff7b\044\uff7b\001\002\000\070\005\111\013" +
    "\103\016\066\017\106\032\031\033\040\036\034\037\113" +
    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
    "\057\116\060\104\061\140\062\067\063\060\064\127\001" +
    "\002\000\110\004\061\005\111\011\071\013\103\015\134" +
    "\016\066\017\106\021\070\031\075\032\031\033\040\035" +
    "\057\036\034\037\113\040\141\041\142\042\145\045\063" +
    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
    "\063\060\064\127\065\132\066\072\001\002\000\054\002" +
    "\uff99\004\uff99\006\uff99\007\uff99\010\uff99\012\uff99\014\uff99" +
    "\021\uff99\022\uff99\023\uff99\024\uff99\025\uff99\026\uff99\027" +
    "\uff99\030\uff99\031\uff99\032\uff99\033\uff99\034\uff99\043\uff99" +
    "\044\uff99\001\002\000\046\002\uffb7\007\uffb7\010\uffb7\012" +
    "\uffb7\014\uffb7\022\uffb7\023\uffb7\024\uffb7\025\uffb7\026\uffb7" +
    "\027\uffb7\030\uffb7\031\uffb7\032\uffb7\033\uffb7\034\uffb7\043" +
    "\uffb7\044\uffb7\001\002\000\054\002\uff97\004\uff97\006\uff97" +
    "\007\uff97\010\uff97\012\uff97\014\uff97\021\uff97\022\uff97\023" +
    "\uff97\024\uff97\025\uff97\026\uff97\027\uff97\030\uff97\031\uff97" +
    "\032\uff97\033\uff97\034\uff97\043\uff97\044\uff97\001\002\000" +
    "\110\004\061\005\111\011\071\013\103\015\134\016\066" +
    "\017\106\021\070\031\075\032\031\033\040\035\057\036" +
    "\034\037\113\040\141\041\142\042\145\045\063\046\062" +
    "\047\065\050\115\051\123\052\136\053\077\054\143\055" +
    "\131\056\125\057\116\060\104\061\140\062\067\063\060" +
    "\064\127\065\132\066\072\001\002\000\016\002\uffd9\007" +
    "\uffd9\012\uffd9\014\uffd9\043\uffd9\044\234\001\002\000\060" +
    "\002\uff7f\004\uff7f\006\uff7f\007\uff7f\010\uff7f\011\uff7f\012" +
    "\uff7f\014\uff7f\020\uffaa\021\uff7f\022\uff7f\023\uff7f\024\uff7f" +
    "\025\uff7f\026\uff7f\027\uff7f\030\uff7f\031\uff7f\032\uff7f\033" +
    "\uff7f\034\uff7f\043\uff7f\044\uff7f\001\002\000\062\013\103" +
    "\032\031\033\040\036\034\037\113\040\141\041\142\042" +
    "\145\045\063\046\062\047\065\050\036\051\037\052\044" +
    "\053\170\054\166\055\043\056\041\057\035\060\030\061" +
    "\045\062\021\063\012\064\042\001\002\000\004\020\236" +
    "\001\002\000\014\002\uffda\007\uffda\012\uffda\014\uffda\043" +
    "\232\001\002\000\054\002\uff88\004\uff88\006\uff88\007\uff88" +
    "\010\uff88\012\uff88\014\uff88\021\uff88\022\uff88\023\uff88\024" +
    "\uff88\025\uff88\026\uff88\027\uff88\030\uff88\031\uff88\032\uff88" +
    "\033\uff88\034\uff88\043\uff88\044\uff88\001\002\000\060\002" +
    "\uff7d\004\uff7d\006\uff7d\007\uff7d\010\uff7d\011\uff7d\012\uff7d" +
    "\014\uff7d\020\uffa8\021\uff7d\022\uff7d\023\uff7d\024\uff7d\025" +
    "\uff7d\026\uff7d\027\uff7d\030\uff7d\031\uff7d\032\uff7d\033\uff7d" +
    "\034\uff7d\043\uff7d\044\uff7d\001\002\000\022\002\uffd7\007" +
    "\uffd7\012\uffd7\014\uffd7\022\216\023\217\043\uffd7\044\uffd7" +
    "\001\002\000\052\002\uff9f\004\uff9f\007\uff9f\010\uff9f\012" +
    "\uff9f\014\uff9f\021\uff9f\022\uff9f\023\uff9f\024\uff9f\025\uff9f" +
    "\026\uff9f\027\uff9f\030\uff9f\031\uff9f\032\uff9f\033\uff9f\034" +
    "\uff9f\043\uff9f\044\uff9f\001\002\000\054\002\uffb4\004\uffb4" +
    "\006\055\007\uffb4\010\uffb4\012\uffb4\014\uffb4\021\uffb4\022" +
    "\uffb4\023\uffb4\024\uffb4\025\uffb4\026\uffb4\027\uffb4\030\uffb4" +
    "\031\uffb4\032\uffb4\033\uffb4\034\uffb4\043\uffb4\044\uffb4\001" +
    "\002\000\046\002\uffbd\007\uffbd\010\uffbd\012\uffbd\014\uffbd" +
    "\022\uffbd\023\uffbd\024\uffbd\025\uffbd\026\uffbd\027\uffbd\030" +
    "\uffbd\031\uffbd\032\uffbd\033\uffbd\034\uffbd\043\uffbd\044\uffbd" +
    "\001\002\000\052\002\uffa0\004\uffa0\007\uffa0\010\uffa0\012" +
    "\uffa0\014\uffa0\021\uffa0\022\uffa0\023\uffa0\024\uffa0\025\uffa0" +
    "\026\uffa0\027\uffa0\030\uffa0\031\uffa0\032\uffa0\033\uffa0\034" +
    "\uffa0\043\uffa0\044\uffa0\001\002\000\036\002\uffd2\007\uffd2" +
    "\012\uffd2\014\uffd2\022\uffd2\023\uffd2\024\uffd2\025\uffd2\026" +
    "\uffd2\027\uffd2\030\211\031\212\043\uffd2\044\uffd2\001\002" +
    "\000\056\002\uff75\004\uff75\006\uff75\007\uff75\010\uff75\011" +
    "\uff75\012\uff75\014\uff75\021\uff75\022\uff75\023\uff75\024\uff75" +
    "\025\uff75\026\uff75\027\uff75\030\uff75\031\uff75\032\uff75\033" +
    "\uff75\034\uff75\043\uff75\044\uff75\001\002\000\044\002\uffca" +
    "\007\uffca\012\uffca\014\uffca\022\uffca\023\uffca\024\uffca\025" +
    "\uffca\026\uffca\027\uffca\030\uffca\031\uffca\032\uffca\033\uffca" +
    "\034\uffca\043\uffca\044\uffca\001\002\000\060\002\uff77\004" +
    "\uff77\006\uff77\007\uff77\010\uff77\011\uff77\012\uff77\014\uff77" +
    "\020\uffa2\021\uff77\022\uff77\023\uff77\024\uff77\025\uff77\026" +
    "\uff77\027\uff77\030\uff77\031\uff77\032\uff77\033\uff77\034\uff77" +
    "\043\uff77\044\uff77\001\002\000\060\002\uff7e\004\uff7e\006" +
    "\uff7e\007\uff7e\010\uff7e\011\uff7e\012\uff7e\014\uff7e\020\uffa9" +
    "\021\uff7e\022\uff7e\023\uff7e\024\uff7e\025\uff7e\026\uff7e\027" +
    "\uff7e\030\uff7e\031\uff7e\032\uff7e\033\uff7e\034\uff7e\043\uff7e" +
    "\044\uff7e\001\002\000\004\011\201\001\002\000\052\002" +
    "\uffbc\004\uffbc\007\uffbc\010\uffbc\012\uffbc\014\uffbc\021\uffbc" +
    "\022\uffbc\023\uffbc\024\uffbc\025\uffbc\026\uffbc\027\uffbc\030" +
    "\uffbc\031\uffbc\032\uffbc\033\uffbc\034\uffbc\043\uffbc\044\uffbc" +
    "\001\002\000\046\002\uffc2\007\uffc2\010\uffc2\012\uffc2\014" +
    "\uffc2\022\uffc2\023\uffc2\024\uffc2\025\uffc2\026\uffc2\027\uffc2" +
    "\030\uffc2\031\uffc2\032\uffc2\033\uffc2\034\uffc2\043\uffc2\044" +
    "\uffc2\001\002\000\054\002\uff9e\004\uff9e\006\055\007\uff9e" +
    "\010\uff9e\012\uff9e\014\uff9e\021\uff9e\022\uff9e\023\uff9e\024" +
    "\uff9e\025\uff9e\026\uff9e\027\uff9e\030\uff9e\031\uff9e\032\uff9e" +
    "\033\uff9e\034\uff9e\043\uff9e\044\uff9e\001\002\000\060\002" +
    "\uff76\004\uff76\006\uff76\007\uff76\010\uff76\011\uff76\012\uff76" +
    "\014\uff76\020\uffa1\021\uff76\022\uff76\023\uff76\024\uff76\025" +
    "\uff76\026\uff76\027\uff76\030\uff76\031\uff76\032\uff76\033\uff76" +
    "\034\uff76\043\uff76\044\uff76\001\002\000\046\002\uffc4\007" +
    "\uffc4\010\176\012\uffc4\014\uffc4\022\uffc4\023\uffc4\024\uffc4" +
    "\025\uffc4\026\uffc4\027\uffc4\030\uffc4\031\uffc4\032\uffc4\033" +
    "\uffc4\034\uffc4\043\uffc4\044\uffc4\001\002\000\060\002\uff81" +
    "\004\uff81\006\uff81\007\uff81\010\uff81\011\uff81\012\uff81\014" +
    "\uff81\020\uffac\021\uff81\022\uff81\023\uff81\024\uff81\025\uff81" +
    "\026\uff81\027\uff81\030\uff81\031\uff81\032\uff81\033\uff81\034" +
    "\uff81\043\uff81\044\uff81\001\002\000\054\002\uff9c\004\uff9c" +
    "\006\uff9c\007\uff9c\010\uff9c\012\uff9c\014\uff9c\021\uff9c\022" +
    "\uff9c\023\uff9c\024\uff9c\025\uff9c\026\uff9c\027\uff9c\030\uff9c" +
    "\031\uff9c\032\uff9c\033\uff9c\034\uff9c\043\uff9c\044\uff9c\001" +
    "\002\000\060\002\uff78\004\uff78\006\uff78\007\uff78\010\uff78" +
    "\011\uff78\012\uff78\014\uff78\020\uffa3\021\uff78\022\uff78\023" +
    "\uff78\024\uff78\025\uff78\026\uff78\027\uff78\030\uff78\031\uff78" +
    "\032\uff78\033\uff78\034\uff78\043\uff78\044\uff78\001\002\000" +
    "\052\002\uffc1\004\173\007\uffc1\010\uffc1\012\uffc1\014\uffc1" +
    "\021\172\022\uffc1\023\uffc1\024\uffc1\025\uffc1\026\uffc1\027" +
    "\uffc1\030\uffc1\031\uffc1\032\uffc1\033\uffc1\034\uffc1\043\uffc1" +
    "\044\uffc1\001\002\000\060\002\uff82\004\uff82\006\uff82\007" +
    "\uff82\010\uff82\011\uff82\012\uff82\014\uff82\020\uffad\021\uff82" +
    "\022\uff82\023\uff82\024\uff82\025\uff82\026\uff82\027\uff82\030" +
    "\uff82\031\uff82\032\uff82\033\uff82\034\uff82\043\uff82\044\uff82" +
    "\001\002\000\054\002\uff98\004\uff98\006\uff98\007\uff98\010" +
    "\uff98\012\uff98\014\uff98\021\uff98\022\uff98\023\uff98\024\uff98" +
    "\025\uff98\026\uff98\027\uff98\030\uff98\031\uff98\032\uff98\033" +
    "\uff98\034\uff98\043\uff98\044\uff98\001\002\000\004\007\171" +
    "\001\002\000\046\032\031\033\040\036\034\037\113\040" +
    "\141\050\036\051\037\052\044\053\170\054\166\055\043" +
    "\056\041\057\035\060\030\061\045\062\021\063\012\064" +
    "\042\001\002\000\052\002\uffba\004\uffba\007\uffba\010\uffba" +
    "\012\uffba\014\uffba\021\uffba\022\uffba\023\uffba\024\uffba\025" +
    "\uffba\026\uffba\027\uffba\030\uffba\031\uffba\032\uffba\033\uffba" +
    "\034\uffba\043\uffba\044\uffba\001\002\000\060\002\uff79\004" +
    "\uff79\006\uff79\007\uff79\010\uff79\011\uff79\012\uff79\014\uff79" +
    "\020\uffa4\021\uff79\022\uff79\023\uff79\024\uff79\025\uff79\026" +
    "\uff79\027\uff79\030\uff79\031\uff79\032\uff79\033\uff79\034\uff79" +
    "\043\uff79\044\uff79\001\002\000\052\002\uffb0\004\uffb0\007" +
    "\uffb0\010\uffb0\012\uffb0\014\uffb0\021\uffb0\022\uffb0\023\uffb0" +
    "\024\uffb0\025\uffb0\026\uffb0\027\uffb0\030\uffb0\031\uffb0\032" +
    "\uffb0\033\uffb0\034\uffb0\043\uffb0\044\uffb0\001\002\000\060" +
    "\002\uff7c\004\uff7c\006\uff7c\007\uff7c\010\uff7c\011\uff7c\012" +
    "\uff7c\014\uff7c\020\uffa7\021\uff7c\022\uff7c\023\uff7c\024\uff7c" +
    "\025\uff7c\026\uff7c\027\uff7c\030\uff7c\031\uff7c\032\uff7c\033" +
    "\uff7c\034\uff7c\043\uff7c\044\uff7c\001\002\000\056\002\uff83" +
    "\004\uff83\006\uff83\007\uff83\010\uff83\011\uff83\012\uff83\014" +
    "\uff83\021\uff83\022\uff83\023\uff83\024\uff83\025\uff83\026\uff83" +
    "\027\uff83\030\uff83\031\uff83\032\uff83\033\uff83\034\uff83\043" +
    "\uff83\044\uff83\001\002\000\054\002\uff8c\004\uff8c\006\uff8c" +
    "\007\uff8c\010\uff8c\012\uff8c\014\uff8c\021\uff8c\022\uff8c\023" +
    "\uff8c\024\uff8c\025\uff8c\026\uff8c\027\uff8c\030\uff8c\031\uff8c" +
    "\032\uff8c\033\uff8c\034\uff8c\043\uff8c\044\uff8c\001\002\000" +
    "\060\002\uff80\004\uff80\006\uff80\007\uff80\010\uff80\011\uff80" +
    "\012\uff80\014\uff80\020\uffab\021\uff80\022\uff80\023\uff80\024" +
    "\uff80\025\uff80\026\uff80\027\uff80\030\uff80\031\uff80\032\uff80" +
    "\033\uff80\034\uff80\043\uff80\044\uff80\001\002\000\044\002" +
    "\uffc6\007\uffc6\012\uffc6\014\uffc6\022\uffc6\023\uffc6\024\uffc6" +
    "\025\uffc6\026\uffc6\027\uffc6\030\uffc6\031\uffc6\032\uffc6\033" +
    "\uffc6\034\uffc6\043\uffc6\044\uffc6\001\002\000\054\002\uff8d" +
    "\004\uff8d\006\uff8d\007\uff8d\010\uff8d\012\uff8d\014\uff8d\021" +
    "\uff8d\022\uff8d\023\uff8d\024\uff8d\025\uff8d\026\uff8d\027\uff8d" +
    "\030\uff8d\031\uff8d\032\uff8d\033\uff8d\034\uff8d\043\uff8d\044" +
    "\uff8d\001\002\000\044\002\uffcd\007\uffcd\012\uffcd\014\uffcd" +
    "\022\uffcd\023\uffcd\024\uffcd\025\uffcd\026\uffcd\027\uffcd\030" +
    "\uffcd\031\uffcd\032\161\033\157\034\160\043\uffcd\044\uffcd" +
    "\001\002\000\052\002\uffbe\004\153\007\uffbe\010\uffbe\012" +
    "\uffbe\014\uffbe\021\152\022\uffbe\023\uffbe\024\uffbe\025\uffbe" +
    "\026\uffbe\027\uffbe\030\uffbe\031\uffbe\032\uffbe\033\uffbe\034" +
    "\uffbe\043\uffbe\044\uffbe\001\002\000\054\002\uff8e\004\uff8e" +
    "\006\uff8e\007\uff8e\010\uff8e\012\uff8e\014\uff8e\021\uff8e\022" +
    "\uff8e\023\uff8e\024\uff8e\025\uff8e\026\uff8e\027\uff8e\030\uff8e" +
    "\031\uff8e\032\uff8e\033\uff8e\034\uff8e\043\uff8e\044\uff8e\001" +
    "\002\000\056\002\uff87\004\uff87\006\uff87\007\uff87\010\uff87" +
    "\011\uff91\012\uff87\014\uff87\021\uff87\022\uff87\023\uff87\024" +
    "\uff87\025\uff87\026\uff87\027\uff87\030\uff87\031\uff87\032\uff87" +
    "\033\uff87\034\uff87\043\uff87\044\uff87\001\002\000\070\005" +
    "\111\013\103\016\066\017\106\032\031\033\040\036\034" +
    "\037\113\040\141\041\142\042\145\045\063\046\062\047" +
    "\065\050\115\051\123\052\136\053\077\054\143\055\131" +
    "\056\125\057\116\060\104\061\140\062\067\063\060\064" +
    "\127\001\002\000\070\005\111\013\103\016\066\017\106" +
    "\032\031\033\040\036\034\037\113\040\141\041\142\042" +
    "\145\045\063\046\062\047\065\050\115\051\123\052\136" +
    "\053\077\054\143\055\131\056\125\057\116\060\104\061" +
    "\140\062\067\063\060\064\127\001\002\000\054\002\uff87" +
    "\004\uff87\006\uff87\007\uff87\010\uff87\012\uff87\014\uff87\021" +
    "\uff87\022\uff87\023\uff87\024\uff87\025\uff87\026\uff87\027\uff87" +
    "\030\uff87\031\uff87\032\uff87\033\uff87\034\uff87\043\uff87\044" +
    "\uff87\001\002\000\052\002\uffbb\004\uffbb\007\uffbb\010\uffbb" +
    "\012\uffbb\014\uffbb\021\uffbb\022\uffbb\023\uffbb\024\uffbb\025" +
    "\uffbb\026\uffbb\027\uffbb\030\uffbb\031\uffbb\032\uffbb\033\uffbb" +
    "\034\uffbb\043\uffbb\044\uffbb\001\002\000\052\002\uffb6\004" +
    "\uffb6\007\uffb6\010\uffb6\012\uffb6\014\uffb6\021\uffb6\022\uffb6" +
    "\023\uffb6\024\uffb6\025\uffb6\026\uffb6\027\uffb6\030\uffb6\031" +
    "\uffb6\032\uffb6\033\uffb6\034\uffb6\043\uffb6\044\uffb6\001\002" +
    "\000\110\004\061\005\111\011\071\013\103\015\134\016" +
    "\066\017\106\021\070\031\075\032\031\033\040\035\057" +
    "\036\034\037\113\040\141\041\142\042\145\045\063\046" +
    "\062\047\065\050\115\051\123\052\136\053\077\054\143" +
    "\055\131\056\125\057\116\060\104\061\140\062\067\063" +
    "\060\064\127\065\132\066\072\001\002\000\110\004\061" +
    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
    "\132\066\072\001\002\000\110\004\061\005\111\011\071" +
    "\013\103\015\134\016\066\017\106\021\070\031\075\032" +
    "\031\033\040\035\057\036\034\037\113\040\141\041\142" +
    "\042\145\045\063\046\062\047\065\050\115\051\123\052" +
    "\136\053\077\054\143\055\131\056\125\057\116\060\104" +
    "\061\140\062\067\063\060\064\127\065\132\066\072\001" +
    "\002\000\044\002\uffc8\007\uffc8\012\uffc8\014\uffc8\022\uffc8" +
    "\023\uffc8\024\uffc8\025\uffc8\026\uffc8\027\uffc8\030\uffc8\031" +
    "\uffc8\032\uffc8\033\uffc8\034\uffc8\043\uffc8\044\uffc8\001\002" +
    "\000\044\002\uffc9\007\uffc9\012\uffc9\014\uffc9\022\uffc9\023" +
    "\uffc9\024\uffc9\025\uffc9\026\uffc9\027\uffc9\030\uffc9\031\uffc9" +
    "\032\uffc9\033\uffc9\034\uffc9\043\uffc9\044\uffc9\001\002\000" +
    "\044\002\uffc7\007\uffc7\012\uffc7\014\uffc7\022\uffc7\023\uffc7" +
    "\024\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031\uffc7\032" +
    "\uffc7\033\uffc7\034\uffc7\043\uffc7\044\uffc7\001\002\000\054" +
    "\002\uff90\004\uff90\006\uff90\007\uff90\010\uff90\012\uff90\014" +
    "\uff90\021\uff90\022\uff90\023\uff90\024\uff90\025\uff90\026\uff90" +
    "\027\uff90\030\uff90\031\uff90\032\uff90\033\uff90\034\uff90\043" +
    "\uff90\044\uff90\001\002\000\054\002\uff80\004\uff80\006\uff80" +
    "\007\uff80\010\uff80\012\uff80\014\uff80\021\uff80\022\uff80\023" +
    "\uff80\024\uff80\025\uff80\026\uff80\027\uff80\030\uff80\031\uff80" +
    "\032\uff80\033\uff80\034\uff80\043\uff80\044\uff80\001\002\000" +
    "\054\002\uff96\004\uff96\006\uff96\007\uff96\010\uff96\012\uff96" +
    "\014\uff96\021\uff96\022\uff96\023\uff96\024\uff96\025\uff96\026" +
    "\uff96\027\uff96\030\uff96\031\uff96\032\uff96\033\uff96\034\uff96" +
    "\043\uff96\044\uff96\001\002\000\054\002\uff7f\004\uff7f\006" +
    "\uff7f\007\uff7f\010\uff7f\012\uff7f\014\uff7f\021\uff7f\022\uff7f" +
    "\023\uff7f\024\uff7f\025\uff7f\026\uff7f\027\uff7f\030\uff7f\031" +
    "\uff7f\032\uff7f\033\uff7f\034\uff7f\043\uff7f\044\uff7f\001\002" +
    "\000\054\002\uffdb\004\uffdb\006\uffdb\007\uffdb\010\uffdb\012" +
    "\uffdb\014\uffdb\021\uffdb\022\uffdb\023\uffdb\024\uffdb\025\uffdb" +
    "\026\uffdb\027\uffdb\030\uffdb\031\uffdb\032\uffdb\033\uffdb\034" +
    "\uffdb\043\uffdb\044\uffdb\001\002\000\070\005\111\013\103" +
    "\016\066\017\106\032\031\033\040\036\034\037\113\040" +
    "\141\041\142\042\145\045\063\046\062\047\065\050\115" +
    "\051\123\052\136\053\077\054\143\055\131\056\125\057" +
    "\116\060\104\061\140\062\067\063\060\064\127\001\002" +
    "\000\070\005\111\013\103\016\066\017\106\032\031\033" +
    "\040\036\034\037\113\040\141\041\142\042\145\045\063" +
    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
    "\063\060\064\127\001\002\000\052\002\uffc0\004\153\007" +
    "\uffc0\010\uffc0\012\uffc0\014\uffc0\021\152\022\uffc0\023\uffc0" +
    "\024\uffc0\025\uffc0\026\uffc0\027\uffc0\030\uffc0\031\uffc0\032" +
    "\uffc0\033\uffc0\034\uffc0\043\uffc0\044\uffc0\001\002\000\052" +
    "\002\uffbf\004\153\007\uffbf\010\uffbf\012\uffbf\014\uffbf\021" +
    "\152\022\uffbf\023\uffbf\024\uffbf\025\uffbf\026\uffbf\027\uffbf" +
    "\030\uffbf\031\uffbf\032\uffbf\033\uffbf\034\uffbf\043\uffbf\044" +
    "\uffbf\001\002\000\106\004\061\005\111\011\071\013\103" +
    "\015\134\016\066\017\106\021\070\032\031\033\040\035" +
    "\057\036\034\037\113\040\141\041\142\042\145\045\063" +
    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
    "\063\060\064\127\065\132\066\072\001\002\000\044\002" +
    "\uffc3\007\uffc3\012\uffc3\014\uffc3\022\uffc3\023\uffc3\024\uffc3" +
    "\025\uffc3\026\uffc3\027\uffc3\030\uffc3\031\uffc3\032\uffc3\033" +
    "\uffc3\034\uffc3\043\uffc3\044\uffc3\001\002\000\052\002\uff9d" +
    "\004\uff9d\007\uff9d\010\uff9d\012\uff9d\014\uff9d\021\uff9d\022" +
    "\uff9d\023\uff9d\024\uff9d\025\uff9d\026\uff9d\027\uff9d\030\uff9d" +
    "\031\uff9d\032\uff9d\033\uff9d\034\uff9d\043\uff9d\044\uff9d\001" +
    "\002\000\112\004\061\005\111\011\071\012\202\013\103" +
    "\015\134\016\066\017\106\021\070\031\075\032\031\033" +
    "\040\035\057\036\034\037\113\040\141\041\142\042\145" +
    "\045\063\046\062\047\065\050\115\051\123\052\136\053" +
    "\077\054\143\055\131\056\125\057\116\060\104\061\140" +
    "\062\067\063\060\064\127\065\132\066\072\001\002\000" +
    "\054\002\uff95\004\uff95\006\uff95\007\uff95\010\uff95\012\uff95" +
    "\014\uff95\021\uff95\022\uff95\023\uff95\024\uff95\025\uff95\026" +
    "\uff95\027\uff95\030\uff95\031\uff95\032\uff95\033\uff95\034\uff95" +
    "\043\uff95\044\uff95\001\002\000\006\012\uff93\014\207\001" +
    "\002\000\006\012\uff8f\014\uff8f\001\002\000\004\012\206" +
    "\001\002\000\054\002\uff94\004\uff94\006\uff94\007\uff94\010" +
    "\uff94\012\uff94\014\uff94\021\uff94\022\uff94\023\uff94\024\uff94" +
    "\025\uff94\026\uff94\027\uff94\030\uff94\031\uff94\032\uff94\033" +
    "\uff94\034\uff94\043\uff94\044\uff94\001\002\000\110\004\061" +
    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
    "\132\066\072\001\002\000\004\012\uff92\001\002\000\110" +
    "\004\061\005\111\011\071\013\103\015\134\016\066\017" +
    "\106\021\070\031\075\032\031\033\040\035\057\036\034" +
    "\037\113\040\141\041\142\042\145\045\063\046\062\047" +
    "\065\050\115\051\123\052\136\053\077\054\143\055\131" +
    "\056\125\057\116\060\104\061\140\062\067\063\060\064" +
    "\127\065\132\066\072\001\002\000\110\004\061\005\111" +
    "\011\071\013\103\015\134\016\066\017\106\021\070\031" +
    "\075\032\031\033\040\035\057\036\034\037\113\040\141" +
    "\041\142\042\145\045\063\046\062\047\065\050\115\051" +
    "\123\052\136\053\077\054\143\055\131\056\125\057\116" +
    "\060\104\061\140\062\067\063\060\064\127\065\132\066" +
    "\072\001\002\000\044\002\uffcb\007\uffcb\012\uffcb\014\uffcb" +
    "\022\uffcb\023\uffcb\024\uffcb\025\uffcb\026\uffcb\027\uffcb\030" +
    "\uffcb\031\uffcb\032\161\033\157\034\160\043\uffcb\044\uffcb" +
    "\001\002\000\044\002\uffcc\007\uffcc\012\uffcc\014\uffcc\022" +
    "\uffcc\023\uffcc\024\uffcc\025\uffcc\026\uffcc\027\uffcc\030\uffcc" +
    "\031\uffcc\032\161\033\157\034\160\043\uffcc\044\uffcc\001" +
    "\002\000\052\002\uffb3\004\uffb3\007\uffb3\010\uffb3\012\uffb3" +
    "\014\uffb3\021\uffb3\022\uffb3\023\uffb3\024\uffb3\025\uffb3\026" +
    "\uffb3\027\uffb3\030\uffb3\031\uffb3\032\uffb3\033\uffb3\034\uffb3" +
    "\043\uffb3\044\uffb3\001\002\000\110\004\061\005\111\011" +
    "\071\013\103\015\134\016\066\017\106\021\070\031\075" +
    "\032\031\033\040\035\057\036\034\037\113\040\141\041" +
    "\142\042\145\045\063\046\062\047\065\050\115\051\123" +
    "\052\136\053\077\054\143\055\131\056\125\057\116\060" +
    "\104\061\140\062\067\063\060\064\127\065\132\066\072" +
    "\001\002\000\110\004\061\005\111\011\071\013\103\015" +
    "\134\016\066\017\106\021\070\031\075\032\031\033\040" +
    "\035\057\036\034\037\113\040\141\041\142\042\145\045" +
    "\063\046\062\047\065\050\115\051\123\052\136\053\077" +
    "\054\143\055\131\056\125\057\116\060\104\061\140\062" +
    "\067\063\060\064\127\065\132\066\072\001\002\000\032" +
    "\002\uffd3\007\uffd3\012\uffd3\014\uffd3\022\uffd3\023\uffd3\024" +
    "\221\025\222\026\223\027\224\043\uffd3\044\uffd3\001\002" +
    "\000\110\004\061\005\111\011\071\013\103\015\134\016" +
    "\066\017\106\021\070\031\075\032\031\033\040\035\057" +
    "\036\034\037\113\040\141\041\142\042\145\045\063\046" +
    "\062\047\065\050\115\051\123\052\136\053\077\054\143" +
    "\055\131\056\125\057\116\060\104\061\140\062\067\063" +
    "\060\064\127\065\132\066\072\001\002\000\110\004\061" +
    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
    "\132\066\072\001\002\000\110\004\061\005\111\011\071" +
    "\013\103\015\134\016\066\017\106\021\070\031\075\032" +
    "\031\033\040\035\057\036\034\037\113\040\141\041\142" +
    "\042\145\045\063\046\062\047\065\050\115\051\123\052" +
    "\136\053\077\054\143\055\131\056\125\057\116\060\104" +
    "\061\140\062\067\063\060\064\127\065\132\066\072\001" +
    "\002\000\110\004\061\005\111\011\071\013\103\015\134" +
    "\016\066\017\106\021\070\031\075\032\031\033\040\035" +
    "\057\036\034\037\113\040\141\041\142\042\145\045\063" +
    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
    "\063\060\064\127\065\132\066\072\001\002\000\036\002" +
    "\uffce\007\uffce\012\uffce\014\uffce\022\uffce\023\uffce\024\uffce" +
    "\025\uffce\026\uffce\027\uffce\030\211\031\212\043\uffce\044" +
    "\uffce\001\002\000\036\002\uffcf\007\uffcf\012\uffcf\014\uffcf" +
    "\022\uffcf\023\uffcf\024\uffcf\025\uffcf\026\uffcf\027\uffcf\030" +
    "\211\031\212\043\uffcf\044\uffcf\001\002\000\036\002\uffd0" +
    "\007\uffd0\012\uffd0\014\uffd0\022\uffd0\023\uffd0\024\uffd0\025" +
    "\uffd0\026\uffd0\027\uffd0\030\211\031\212\043\uffd0\044\uffd0" +
    "\001\002\000\036\002\uffd1\007\uffd1\012\uffd1\014\uffd1\022" +
    "\uffd1\023\uffd1\024\uffd1\025\uffd1\026\uffd1\027\uffd1\030\211" +
    "\031\212\043\uffd1\044\uffd1\001\002\000\032\002\uffd4\007" +
    "\uffd4\012\uffd4\014\uffd4\022\uffd4\023\uffd4\024\221\025\222" +
    "\026\223\027\224\043\uffd4\044\uffd4\001\002\000\110\004" +
    "\061\005\111\011\071\013\103\015\134\016\066\017\106" +
    "\021\070\031\075\032\031\033\040\035\057\036\034\037" +
    "\113\040\141\041\142\042\145\045\063\046\062\047\065" +
    "\050\115\051\123\052\136\053\077\054\143\055\131\056" +
    "\125\057\116\060\104\061\140\062\067\063\060\064\127" +
    "\065\132\066\072\001\002\000\016\002\uffd8\007\uffd8\012" +
    "\uffd8\014\uffd8\043\uffd8\044\234\001\002\000\110\004\061" +
    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
    "\132\066\072\001\002\000\022\002\uffd6\007\uffd6\012\uffd6" +
    "\014\uffd6\022\216\023\217\043\uffd6\044\uffd6\001\002\000" +
    "\062\013\uffaf\032\uffaf\033\uffaf\036\uffaf\037\uffaf\040\uffaf" +
    "\041\uffaf\042\uffaf\045\uffaf\046\uffaf\047\uffaf\050\uffaf\051" +
    "\uffaf\052\uffaf\053\uffaf\054\uffaf\055\uffaf\056\uffaf\057\uffaf" +
    "\060\uffaf\061\uffaf\062\uffaf\063\uffaf\064\uffaf\001\002\000" +
    "\054\002\uffb1\004\uffb1\006\055\007\uffb1\010\uffb1\012\uffb1" +
    "\014\uffb1\021\uffb1\022\uffb1\023\uffb1\024\uffb1\025\uffb1\026" +
    "\uffb1\027\uffb1\030\uffb1\031\uffb1\032\uffb1\033\uffb1\034\uffb1" +
    "\043\uffb1\044\uffb1\001\002\000\052\002\uffb2\004\uffb2\007" +
    "\uffb2\010\uffb2\012\uffb2\014\uffb2\021\uffb2\022\uffb2\023\uffb2" +
    "\024\uffb2\025\uffb2\026\uffb2\027\uffb2\030\uffb2\031\uffb2\032" +
    "\uffb2\033\uffb2\034\uffb2\043\uffb2\044\uffb2\001\002\000\044" +
    "\002\uffc5\007\uffc5\012\uffc5\014\uffc5\022\uffc5\023\uffc5\024" +
    "\uffc5\025\uffc5\026\uffc5\027\uffc5\030\uffc5\031\uffc5\032\uffc5" +
    "\033\uffc5\034\uffc5\043\uffc5\044\uffc5\001\002\000\004\012" +
    "\243\001\002\000\054\002\uff9b\004\uff9b\006\uff9b\007\uff9b" +
    "\010\uff9b\012\uff9b\014\uff9b\021\uff9b\022\uff9b\023\uff9b\024" +
    "\uff9b\025\uff9b\026\uff9b\027\uff9b\030\uff9b\031\uff9b\032\uff9b" +
    "\033\uff9b\034\uff9b\043\uff9b\044\uff9b\001\002\000\052\002" +
    "\uffb5\004\153\007\uffb5\010\uffb5\012\uffb5\014\uffb5\021\152" +
    "\022\uffb5\023\uffb5\024\uffb5\025\uffb5\026\uffb5\027\uffb5\030" +
    "\uffb5\031\uffb5\032\uffb5\033\uffb5\034\uffb5\043\uffb5\044\uffb5" +
    "\001\002\000\004\035\246\001\002\000\004\012\247\001" +
    "\002\000\054\002\uff8a\004\uff8a\006\uff8a\007\uff8a\010\uff8a" +
    "\012\uff8a\014\uff8a\021\uff8a\022\uff8a\023\uff8a\024\uff8a\025" +
    "\uff8a\026\uff8a\027\uff8a\030\uff8a\031\uff8a\032\uff8a\033\uff8a" +
    "\034\uff8a\043\uff8a\044\uff8a\001\002\000\052\002\uffb8\004" +
    "\153\007\uffb8\010\uffb8\012\uffb8\014\uffb8\021\152\022\uffb8" +
    "\023\uffb8\024\uffb8\025\uffb8\026\uffb8\027\uffb8\030\uffb8\031" +
    "\uffb8\032\uffb8\033\uffb8\034\uffb8\043\uffb8\044\uffb8\001\002" +
    "\000\052\002\uffdc\004\uffdc\007\uffdc\010\uffdc\012\uffdc\014" +
    "\uffdc\021\uffdc\022\uffdc\023\uffdc\024\uffdc\025\uffdc\026\uffdc" +
    "\027\uffdc\030\uffdc\031\uffdc\032\uffdc\033\uffdc\034\uffdc\043" +
    "\uffdc\044\uffdc\001\002\000\062\013\uffde\032\uffde\033\uffde" +
    "\036\uffde\037\uffde\040\uffde\041\uffde\042\uffde\045\uffde\046" +
    "\uffde\047\uffde\050\uffde\051\uffde\052\uffde\053\uffde\054\uffde" +
    "\055\uffde\056\uffde\057\uffde\060\uffde\061\uffde\062\uffde\063" +
    "\uffde\064\uffde\001\002\000\004\035\254\001\002\000\004" +
    "\014\255\001\002\000\004\035\256\001\002\000\004\012" +
    "\257\001\002\000\012\002\ufff4\004\ufff4\010\ufff4\021\ufff4" +
    "\001\002\000\004\035\261\001\002\000\004\012\262\001" +
    "\002\000\012\002\ufff5\004\ufff5\010\ufff5\021\ufff5\001\002" +
    "\000\012\002\uffec\004\uffec\010\uffec\021\uffec\001\002\000" +
    "\062\013\uffdf\032\uffdf\033\uffdf\036\uffdf\037\uffdf\040\uffdf" +
    "\041\uffdf\042\uffdf\045\uffdf\046\uffdf\047\uffdf\050\uffdf\051" +
    "\uffdf\052\uffdf\053\uffdf\054\uffdf\055\uffdf\056\uffdf\057\uffdf" +
    "\060\uffdf\061\uffdf\062\uffdf\063\uffdf\064\uffdf\001\002\000" +
    "\064\013\027\016\020\032\031\033\040\036\034\037\113" +
    "\040\141\041\047\042\051\045\015\046\014\047\016\050" +
    "\036\051\037\052\044\053\025\054\050\055\043\056\041" +
    "\057\035\060\030\061\045\062\021\063\012\064\042\001" +
    "\002\000\064\013\027\016\020\032\031\033\040\036\034" +
    "\037\113\040\141\041\047\042\051\045\015\046\014\047" +
    "\016\050\036\051\037\052\044\053\025\054\050\055\043" +
    "\056\041\057\035\060\030\061\045\062\021\063\012\064" +
    "\042\001\002\000\006\002\ufff1\010\ufff1\001\002\000\006" +
    "\002\ufff0\010\ufff0\001\002\000\006\002\ufff7\010\ufff7\001" +
    "\002\000\014\002\uffe9\004\uffe9\006\055\010\uffe9\021\uffe9" +
    "\001\002\000\014\002\uffeb\004\uffeb\006\055\010\uffeb\021" +
    "\uffeb\001\002\000\012\002\uffea\004\uffea\010\uffea\021\uffea" +
    "\001\002\000\012\002\uffe8\004\uffe8\010\uffe8\021\uffe8\001" +
    "\002\000\064\013\027\016\020\032\031\033\040\036\034" +
    "\037\113\040\141\041\047\042\051\045\015\046\014\047" +
    "\016\050\036\051\037\052\044\053\025\054\050\055\043" +
    "\056\041\057\035\060\030\061\045\062\021\063\012\064" +
    "\042\001\002\000\064\013\027\016\020\032\031\033\040" +
    "\036\034\037\113\040\141\041\047\042\051\045\015\046" +
    "\014\047\016\050\036\051\037\052\044\053\025\054\050" +
    "\055\043\056\041\057\035\060\030\061\045\062\021\063" +
    "\012\064\042\001\002\000\006\002\ufff9\010\ufff9\001\002" +
    "\000\006\002\ufff8\010\ufff8\001\002\000\004\035\303\001" +
    "\002\000\004\012\304\001\002\000\014\002\ufff3\004\ufff3" +
    "\006\ufff3\010\ufff3\021\ufff3\001\002\000\006\002\ufffb\010" +
    "\ufffb\001\002\000\070\004\013\013\027\016\020\021\023" +
    "\032\031\033\040\036\034\037\033\040\046\041\047\042" +
    "\051\045\015\046\014\047\016\050\036\051\037\052\044" +
    "\053\025\054\050\055\043\056\041\057\035\060\030\061" +
    "\045\062\021\063\012\064\042\001\002\000\004\002\ufffd" +
    "\001\002\000\004\002\uffff\001\002\000\004\002\001\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\307\000\004\003\003\001\001\000\002\001\001\000" +
    "\070\004\307\006\120\010\127\011\117\012\101\013\075" +
    "\014\104\015\063\016\111\017\145\020\113\021\125\022" +
    "\073\023\121\024\143\025\123\026\136\027\146\030\134" +
    "\031\107\032\072\033\106\034\147\047\150\050\116\052" +
    "\100\053\077\001\001\000\026\035\016\036\007\037\006" +
    "\040\031\041\025\042\023\043\052\044\010\047\051\054" +
    "\021\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\020\040\031\041\304\042" +
    "\023\043\052\044\010\047\051\054\021\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\040\271" +
    "\043\272\044\010\047\051\001\001\000\020\040\031\041" +
    "\270\042\023\043\052\044\010\047\051\054\021\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\006" +
    "\007\053\045\262\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\006\007\053\045\055\001\001" +
    "\000\006\007\053\045\250\001\001\000\070\004\132\006" +
    "\120\010\127\011\117\012\101\013\075\014\104\015\063" +
    "\016\111\017\145\020\113\021\125\022\073\023\121\024" +
    "\143\025\123\026\136\027\146\030\134\031\107\032\072" +
    "\033\106\034\147\047\150\050\116\052\100\053\077\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\024\011\117\026\136\027\247\030\134\033\106\034" +
    "\147\047\153\052\100\053\077\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\024\011\117\026\136" +
    "\027\243\030\134\033\106\034\147\047\153\052\100\053" +
    "\077\001\001\000\070\004\241\006\120\010\127\011\117" +
    "\012\101\013\075\014\104\015\063\016\111\017\145\020" +
    "\113\021\125\022\073\023\121\024\143\025\123\026\136" +
    "\027\146\030\134\031\107\032\072\033\106\034\147\047" +
    "\150\050\116\052\100\053\077\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\052\006\120\010" +
    "\127\011\117\020\240\021\125\022\073\023\121\024\143" +
    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
    "\106\034\147\047\150\050\116\052\100\053\077\001\001" +
    "\000\002\001\001\000\002\001\001\000\010\033\236\034" +
    "\147\047\153\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\006\007\053\045\214\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" +
    "\006\007\053\045\177\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\006\047\164\051\166\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\020\011\155\026\136\033\106\034\147\047\153\052\100" +
    "\053\077\001\001\000\020\011\154\026\136\033\106\034" +
    "\147\047\153\052\100\053\077\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\052\006\120\010" +
    "\127\011\117\020\163\021\125\022\073\023\121\024\143" +
    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
    "\106\034\147\047\150\050\116\052\100\053\077\001\001" +
    "\000\052\006\120\010\127\011\117\020\162\021\125\022" +
    "\073\023\121\024\143\025\123\026\136\027\146\030\134" +
    "\031\107\032\072\033\106\034\147\047\150\050\116\052" +
    "\100\053\077\001\001\000\052\006\120\010\127\011\117" +
    "\020\161\021\125\022\073\023\121\024\143\025\123\026" +
    "\136\027\146\030\134\031\107\032\072\033\106\034\147" +
    "\047\150\050\116\052\100\053\077\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\024\011\117\026\136\027\174\030\134" +
    "\033\106\034\147\047\153\052\100\053\077\001\001\000" +
    "\024\011\117\026\136\027\173\030\134\033\106\034\147" +
    "\047\153\052\100\053\077\001\001\000\002\001\001\000" +
    "\002\001\001\000\050\006\120\010\127\011\117\021\125" +
    "\022\073\023\121\024\176\025\123\026\136\027\146\030" +
    "\134\031\107\032\072\033\106\034\147\047\150\050\116" +
    "\052\100\053\077\001\001\000\002\001\001\000\002\001" +
    "\001\000\074\004\203\005\202\006\120\010\127\011\117" +
    "\012\101\013\075\014\104\015\063\016\111\017\145\020" +
    "\113\021\125\022\073\023\121\024\143\025\123\026\136" +
    "\027\146\030\134\031\107\032\072\033\106\034\147\046" +
    "\204\047\150\050\116\052\100\053\077\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\074\004\203\005\202\006\120" +
    "\010\127\011\117\012\101\013\075\014\104\015\063\016" +
    "\111\017\145\020\113\021\125\022\073\023\121\024\143" +
    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
    "\106\034\147\046\207\047\150\050\116\052\100\053\077" +
    "\001\001\000\002\001\001\000\054\006\120\010\127\011" +
    "\117\017\213\020\113\021\125\022\073\023\121\024\143" +
    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
    "\106\034\147\047\150\050\116\052\100\053\077\001\001" +
    "\000\054\006\120\010\127\011\117\017\212\020\113\021" +
    "\125\022\073\023\121\024\143\025\123\026\136\027\146" +
    "\030\134\031\107\032\072\033\106\034\147\047\150\050" +
    "\116\052\100\053\077\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\060\006\120\010\127\011" +
    "\117\015\230\016\111\017\145\020\113\021\125\022\073" +
    "\023\121\024\143\025\123\026\136\027\146\030\134\031" +
    "\107\032\072\033\106\034\147\047\150\050\116\052\100" +
    "\053\077\001\001\000\060\006\120\010\127\011\117\015" +
    "\217\016\111\017\145\020\113\021\125\022\073\023\121" +
    "\024\143\025\123\026\136\027\146\030\134\031\107\032" +
    "\072\033\106\034\147\047\150\050\116\052\100\053\077" +
    "\001\001\000\002\001\001\000\056\006\120\010\127\011" +
    "\117\016\227\017\145\020\113\021\125\022\073\023\121" +
    "\024\143\025\123\026\136\027\146\030\134\031\107\032" +
    "\072\033\106\034\147\047\150\050\116\052\100\053\077" +
    "\001\001\000\056\006\120\010\127\011\117\016\226\017" +
    "\145\020\113\021\125\022\073\023\121\024\143\025\123" +
    "\026\136\027\146\030\134\031\107\032\072\033\106\034" +
    "\147\047\150\050\116\052\100\053\077\001\001\000\056" +
    "\006\120\010\127\011\117\016\225\017\145\020\113\021" +
    "\125\022\073\023\121\024\143\025\123\026\136\027\146" +
    "\030\134\031\107\032\072\033\106\034\147\047\150\050" +
    "\116\052\100\053\077\001\001\000\056\006\120\010\127" +
    "\011\117\016\224\017\145\020\113\021\125\022\073\023" +
    "\121\024\143\025\123\026\136\027\146\030\134\031\107" +
    "\032\072\033\106\034\147\047\150\050\116\052\100\053" +
    "\077\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\064\006" +
    "\120\010\127\011\117\013\232\014\104\015\063\016\111" +
    "\017\145\020\113\021\125\022\073\023\121\024\143\025" +
    "\123\026\136\027\146\030\134\031\107\032\072\033\106" +
    "\034\147\047\150\050\116\052\100\053\077\001\001\000" +
    "\002\001\001\000\062\006\120\010\127\011\117\014\234" +
    "\015\063\016\111\017\145\020\113\021\125\022\073\023" +
    "\121\024\143\025\123\026\136\027\146\030\134\031\107" +
    "\032\072\033\106\034\147\047\150\050\116\052\100\053" +
    "\077\001\001\000\002\001\001\000\002\001\001\000\006" +
    "\007\053\045\237\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\020\040\031\041\267\042\023\043\052\044\010\047\051" +
    "\054\021\001\001\000\020\040\031\041\266\042\023\043" +
    "\052\044\010\047\051\054\021\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\006\007\053\045" +
    "\274\001\001\000\006\007\053\045\273\001\001\000\002" +
    "\001\001\000\002\001\001\000\020\040\031\041\300\042" +
    "\023\043\052\044\010\047\051\054\021\001\001\000\020" +
    "\040\031\041\277\042\023\043\052\044\010\047\051\054" +
    "\021\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\026\035\016\036\306\037\006\040\031\041\025" +
    "\042\023\043\052\044\010\047\051\054\021\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$XPathParser$actions action_obj;

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



    /**
     * Used by function calls with no args.
     */
    static public final Vector EmptyArgs = new Vector(0);

    /**
     * Reference to non-existing variable.
     */
    static public final VariableRef DummyVarRef = null;

    /**
     * Reference to the Parser class.
     */
    private Parser _parser;
    private XSLTC  _xsltc;

    /**
     * String representation of the expression being parsed.
     */
    private String _expression;

    /**
     * Line number where this expression/pattern was declared.
     */
    private int _lineNumber = 0;

    /**
     * Reference to the symbol table.
     */
    public SymbolTable _symbolTable;

    public XPathParser(Parser parser) {
        _parser = parser;
	_xsltc = parser.getXSLTC();
        _symbolTable = parser.getSymbolTable();
    }

    public int getLineNumber() {
        return _lineNumber;
    }

    public QName getQNameIgnoreDefaultNs(String name) {
          return _parser.getQNameIgnoreDefaultNs(name);
    }    

    public QName getQName(String namespace, String prefix, String localname) {
        return _parser.getQName(namespace, prefix, localname);
    }        

    public void setMultiDocument(boolean flag) {
          _xsltc.setMultiDocument(flag);
    }

    public void setCallsNodeset(boolean flag) {
          _xsltc.setCallsNodeset(flag);
    }

    public void setHasIdCall(boolean flag) {
          _xsltc.setHasIdCall(flag); 
    }
    

    /**
     * This method is similar to findNodeType(int, Object) except that it
     * creates a StepPattern instead of just returning a node type. It also 
     * differs in the way it handles "{uri}:*" and "{uri}:@*". The last two 
     * patterns are expanded as "*[namespace-uri() = 'uri']" and 
     * "@*[namespace-uri() = 'uri']", respectively. This expansion considerably 
     * simplifies the grouping of patterns in the Mode class. For this
     * expansion to be correct, the priority of the pattern/template must be
     * set to -0.25 (when no other predicates are present).
     */
    public StepPattern createStepPattern(int axis, Object test, Vector predicates) {
	int nodeType;

	if (test == null) {  // "*"
	    nodeType = (axis == Axis.ATTRIBUTE) ? NodeTest.ATTRIBUTE : 
		(axis == Axis.NAMESPACE) ? -1 : NodeTest.ELEMENT;

	    return new StepPattern(axis, nodeType, predicates);
        }
        else if (test instanceof Integer) {
	    nodeType = ((Integer) test).intValue();

	    return new StepPattern(axis, nodeType, predicates);
        }
        else {
	    QName name = (QName)test;
	    boolean setPriority = false;

	    if (axis == Axis.NAMESPACE) {
		nodeType = (name.toString().equals("*")) ? -1
				: _xsltc.registerNamespacePrefix(name);;
            }
	    else {
		final String uri = name.getNamespace();
		final String local = name.getLocalPart();
		final QName namespace_uri = 
		    _parser.getQNameIgnoreDefaultNs("namespace-uri");

		// Expand {uri}:* to *[namespace-uri() = 'uri'] - same for @*
		if (uri != null && (local.equals("*") || local.equals("@*"))) {
		    if (predicates == null) {
			predicates = new Vector(2);
		    }

		    // Priority is set by hand if no other predicates exist
		    setPriority = (predicates.size() == 0);

		    predicates.add(
			new Predicate(
			    new EqualityExpr(Operators.EQ, 
				new NamespaceUriCall(namespace_uri), 
				new LiteralExpr(uri))));
		}

		if (local.equals("*")) {
		    nodeType = (axis == Axis.ATTRIBUTE) ? NodeTest.ATTRIBUTE
			: NodeTest.ELEMENT;
		}
		else if (local.equals("@*")) {
		    nodeType = NodeTest.ATTRIBUTE;
		}
		else {
		    nodeType = (axis == Axis.ATTRIBUTE) ? _xsltc.registerAttribute(name)
			: _xsltc.registerElement(name); 
		}
	    }

	    final StepPattern result = new StepPattern(axis, nodeType, predicates); 

	    // Set priority for case prefix:* and prefix:@* (no predicates)
	    if (setPriority) {
		result.setPriority(-0.25);
	    }

	    return result;
	}
    }

    public int findNodeType(int axis, Object test) {
	if (test == null) {  // *
	    return (axis == Axis.ATTRIBUTE) ? 
		NodeTest.ATTRIBUTE :
		(axis == Axis.NAMESPACE) ? -1 : NodeTest.ELEMENT;
        }
        else if (test instanceof Integer) {
            return ((Integer)test).intValue();
        }
        else {
	    QName name = (QName)test;

	    if (axis == Axis.NAMESPACE) {
		return (name.toString().equals("*")) ? -1
		    : _xsltc.registerNamespacePrefix(name);
            }

	    if (name.getNamespace() == null) {
		final String local = name.getLocalPart();

		if (local.equals("*")) {
		    return (axis == Axis.ATTRIBUTE) ? NodeTest.ATTRIBUTE
			: NodeTest.ELEMENT;
		}
		else if (local.equals("@*")) {
		    return NodeTest.ATTRIBUTE;
		}
	    }

	    return (axis == Axis.ATTRIBUTE) ? _xsltc.registerAttribute(name)
		: _xsltc.registerElement(name); 
        }
    }

    /**
     * Parse the expression passed to the current scanner. If this
     * expression contains references to local variables and it will be 
     * compiled in an external module (not in the main class) request 
     * the current template to create a new variable stack frame.
     *
     * @param lineNumber Line where the current expression is defined.
     * @param external   Set to <tt>true</tt> if this expression is
     *                   compiled in a separate module.
     * 
     */
    public Symbol parse(String expression, int lineNumber) throws Exception {
        try {
	    _expression = expression;
	    _lineNumber = lineNumber;
	    return super.parse();
        }
        catch (IllegalCharException e) {
            ErrorMsg err = new ErrorMsg(ErrorMsg.ILLEGAL_CHAR_ERR,
                                        lineNumber, e.getMessage());
            _parser.reportError(Constants.FATAL, err);
        }
        return null;
    }

    /**
     * Lookup a variable or parameter in the symbol table given its name. 
     *
     * @param name Name of the symbol being looked up.
     */
    final SyntaxTreeNode lookupName(QName name) {
        // Is it a local var or param ?
        final SyntaxTreeNode result = _parser.lookupVariable(name);
	if (result != null)
            return(result);
        else
	    return(_symbolTable.lookupName(name));
    }

    public final void addError(ErrorMsg error) {
	_parser.reportError(Constants.ERROR, error);
    } 
           
    public void report_error(String message, Object info) {
	final ErrorMsg err = new ErrorMsg(ErrorMsg.SYNTAX_ERR, _lineNumber, 
	    _expression);
	_parser.reportError(Constants.FATAL, err);
    }

    public void report_fatal_error(String message, Object info) {
        // empty
    }
    
    public RelativeLocationPath insertStep(Step step, RelativeLocationPath rlp) {
	if (rlp instanceof Step) {
	    return new ParentLocationPath(step, (Step) rlp);
	}
	else if (rlp instanceof ParentLocationPath) {
	    final ParentLocationPath plp = (ParentLocationPath) rlp;
	    final RelativeLocationPath newrlp = insertStep(step, plp.getPath());
	    return new ParentLocationPath(newrlp, plp.getStep());
	}
	else {
	    addError(new ErrorMsg(ErrorMsg.INTERNAL_ERR, "XPathParser.insertStep"));
	    return rlp;
	}
    }

    /**
     * Returns true if the axis applies to elements only. The axes
     * child, attribute, namespace, descendant result in non-empty
     * nodesets only if the context node is of type element.
     */
    public boolean isElementAxis(int axis) {
	return (axis == Axis.CHILD || axis == Axis.ATTRIBUTE ||
		axis == Axis.NAMESPACE || axis == Axis.DESCENDANT);
    }

}

/** Cup generated class to encapsulate user supplied action code.*/
class CUP$XPathParser$actions {
  private final XPathParser parser;

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

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

      /* select the action based on the action number */
      switch (CUP$XPathParser$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 140: // QName ::= ID 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("id"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 139: // QName ::= SELF 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("self"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 138: // QName ::= PRECEDINGSIBLING 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("preceding-sibling"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 137: // QName ::= PRECEDING 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("preceding"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 136: // QName ::= PARENT 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("parent"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 135: // QName ::= NAMESPACE 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("namespace"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 134: // QName ::= FOLLOWINGSIBLING 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("following-sibling"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 133: // QName ::= FOLLOWING 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("following"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 132: // QName ::= DESCENDANTORSELF 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("decendant-or-self"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 131: // QName ::= DESCENDANT 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("decendant"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 130: // QName ::= CHILD 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("child"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 129: // QName ::= ATTRIBUTE 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("attribute"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 128: // QName ::= ANCESTORORSELF 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("ancestor-or-self"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 127: // QName ::= ANCESTOR 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("child"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 126: // QName ::= KEY 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("key"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 125: // QName ::= MOD 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("mod"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 124: // QName ::= DIV 
            {
              QName RESULT = null;
		 RESULT = parser.getQNameIgnoreDefaultNs("div"); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 123: // QName ::= QNAME 
            {
              QName RESULT = null;
		int qnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int qnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		String qname = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = parser.getQNameIgnoreDefaultNs(qname); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 122: // NameTest ::= QName 
            {
              Object RESULT = null;
		int qnleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int qnright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		QName qn = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = qn; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(26/*NameTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 121: // NameTest ::= STAR 
            {
              Object RESULT = null;
		 RESULT = null; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(26/*NameTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 120: // NodeTest ::= PI 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.PI); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 119: // NodeTest ::= PIPARAM LPAREN Literal RPAREN 
            {
              Object RESULT = null;
		int lleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		String l = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		
           QName name = parser.getQNameIgnoreDefaultNs("name");
           Expression exp = new EqualityExpr(Operators.EQ,
                                             new NameCall(name),
                                             new LiteralExpr(l));
           Vector predicates = new Vector();
           predicates.addElement(new Predicate(exp));
           RESULT = new Step(Axis.CHILD, NodeTest.PI, predicates);
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 118: // NodeTest ::= COMMENT 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.COMMENT); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 117: // NodeTest ::= TEXT 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.TEXT); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 116: // NodeTest ::= NODE 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.ANODE); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 115: // NodeTest ::= NameTest 
            {
              Object RESULT = null;
		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = nt; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 114: // Argument ::= Expr 
            {
              Expression RESULT = null;
		int exleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int exright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ex = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = ex; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(3/*Argument*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 113: // VariableName ::= QName 
            {
              QName RESULT = null;
		int vnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int vnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		QName vname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	    RESULT = vname; 
	
              CUP$XPathParser$result = new java_cup.runtime.Symbol(39/*VariableName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 112: // FunctionName ::= QName 
            {
              QName RESULT = null;
		int fnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int fnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		QName fname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	    RESULT = fname; 
	
              CUP$XPathParser$result = new java_cup.runtime.Symbol(38/*FunctionName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 111: // NonemptyArgumentList ::= Argument COMMA NonemptyArgumentList 
            {
              Vector RESULT = null;
		int argleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int argright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression arg = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int arglleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int arglright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector argl = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 argl.insertElementAt(arg, 0); RESULT = argl; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(36/*NonemptyArgumentList*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 110: // NonemptyArgumentList ::= Argument 
            {
              Vector RESULT = null;
		int argleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int argright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression arg = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
            Vector temp = new Vector();
            temp.addElement(arg);
            RESULT = temp;
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(36/*NonemptyArgumentList*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 109: // FunctionCall ::= FunctionName LPAREN NonemptyArgumentList RPAREN 
            {
              Expression RESULT = null;
		int fnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left;
		int fnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).right;
		QName fname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).value;
		int arglleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int arglright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Vector argl = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		
          if (parser.getQNameIgnoreDefaultNs("concat").equals(fname)) {
            RESULT = new ConcatCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("number").equals(fname)) {
            RESULT = new NumberCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("document").equals(fname)) {
	    parser.setMultiDocument(true);
            RESULT = new DocumentCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("string").equals(fname)) {
            RESULT = new StringCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("boolean").equals(fname)) {
            RESULT = new BooleanCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("name").equals(fname)) {
            RESULT = new NameCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("generate-id").equals(fname)) {
            RESULT = new GenerateIdCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("not").equals(fname)) {
            RESULT = new NotCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("format-number").equals(fname)) {
            RESULT = new FormatNumberCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("unparsed-entity-uri").equals(fname)) {
            RESULT = new UnparsedEntityUriCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("key").equals(fname)) {
            RESULT = new KeyCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("id").equals(fname)) {
            RESULT = new KeyCall(fname, argl);
            parser.setHasIdCall(true);
	  }
          else if (parser.getQNameIgnoreDefaultNs("ceiling").equals(fname)) {
            RESULT = new CeilingCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("round").equals(fname)) {
            RESULT = new RoundCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("floor").equals(fname)) {
            RESULT = new FloorCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("contains").equals(fname)) {
            RESULT = new ContainsCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("string-length").equals(fname)) {
            RESULT = new StringLengthCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("starts-with").equals(fname)) {
            RESULT = new StartsWithCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("function-available").equals(fname)) {
            RESULT = new FunctionAvailableCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("element-available").equals(fname)) {
            RESULT = new ElementAvailableCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("local-name").equals(fname)) {
            RESULT = new LocalNameCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("lang").equals(fname)) {
            RESULT = new LangCall(fname, argl);
	  }
          else if (parser.getQNameIgnoreDefaultNs("namespace-uri").equals(fname)) {
            RESULT = new NamespaceUriCall(fname, argl);
	  }
          else if (parser.getQName(Constants.TRANSLET_URI, "xsltc", "cast").equals(fname)) {
            RESULT = new CastCall(fname, argl);
	  }
	  // Special case for extension function nodeset()
          else if (fname.getLocalPart().equals("nodeset") || fname.getLocalPart().equals("node-set")) {
	    parser.setCallsNodeset(true);  // implies MultiDOM
            RESULT = new FunctionCall(fname, argl);
	  }
          else {
            RESULT = new FunctionCall(fname, argl);
	  }
    
              CUP$XPathParser$result = new java_cup.runtime.Symbol(16/*FunctionCall*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 108: // FunctionCall ::= FunctionName LPAREN RPAREN 
            {
              Expression RESULT = null;
		int fnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int fnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		QName fname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		 

          if (parser.getQNameIgnoreDefaultNs("current").equals(fname)) {
            RESULT = new CurrentCall(fname);
	  }
          else if (parser.getQNameIgnoreDefaultNs("number").equals(fname)) {
            RESULT = new NumberCall(fname, parser.EmptyArgs);
	  }
          else if (parser.getQNameIgnoreDefaultNs("string").equals(fname)) {
            RESULT = new StringCall(fname, parser.EmptyArgs);
	  }
          else if (parser.getQNameIgnoreDefaultNs("concat").equals(fname)) {
            RESULT = new ConcatCall(fname, parser.EmptyArgs);
	  }
          else if (parser.getQNameIgnoreDefaultNs("true").equals(fname)) {
            RESULT = new BooleanExpr(true);
	  }
          else if (parser.getQNameIgnoreDefaultNs("false").equals(fname)) {
            RESULT = new BooleanExpr(false);
	  }
          else if (parser.getQNameIgnoreDefaultNs("name").equals(fname)) {
            RESULT = new NameCall(fname);
	  }
          else if (parser.getQNameIgnoreDefaultNs("generate-id").equals(fname)) {
            RESULT = new GenerateIdCall(fname, parser.EmptyArgs);
	  }
          else if (parser.getQNameIgnoreDefaultNs("string-length").equals(fname)) {
            RESULT = new StringLengthCall(fname, parser.EmptyArgs);
	  }
          else if (parser.getQNameIgnoreDefaultNs("position").equals(fname)) {
            RESULT = new PositionCall(fname);
	  }
          else if (parser.getQNameIgnoreDefaultNs("last").equals(fname)) {
            RESULT = new LastCall(fname);
	  }
          else if (parser.getQNameIgnoreDefaultNs("local-name").equals(fname)) {
            RESULT = new LocalNameCall(fname);
	  }
          else if (parser.getQNameIgnoreDefaultNs("namespace-uri").equals(fname)) {
            RESULT = new NamespaceUriCall(fname);
	  }
          else {
            RESULT = new FunctionCall(fname, parser.EmptyArgs);
	  }
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(16/*FunctionCall*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 107: // VariableReference ::= DOLLAR VariableName 
            {
              Expression RESULT = null;
		int varNameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int varNameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		QName varName = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
            // An empty qname prefix for a variable or parameter reference
            // should map to the null namespace and not the default URI.
            SyntaxTreeNode node = parser.lookupName(varName);

            if (node != null) {
                if (node instanceof Variable) {
                    RESULT = new VariableRef((Variable)node);
                }
                else if (node instanceof Param) {
                    RESULT = new ParameterRef((Param)node);
                } 
                else {
                    RESULT = new UnresolvedRef(varName);
                }
            }

            if (node == null) {
                RESULT = new UnresolvedRef(varName);
            }
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(15/*VariableReference*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 106: // PrimaryExpr ::= FunctionCall 
            {
              Expression RESULT = null;
		int fcleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int fcright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression fc = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = fc; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 105: // PrimaryExpr ::= REAL 
            {
              Expression RESULT = null;
		int numleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int numright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Double num = (Double)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new RealExpr(num.doubleValue()); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 104: // PrimaryExpr ::= INT 
            {
              Expression RESULT = null;
		int numleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int numright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Long num = (Long)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	   long value = num.longValue();
	   if (value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
		RESULT = new RealExpr(value);
	   }
	   else {
               if (num.doubleValue() == -0)
                   RESULT = new RealExpr(num.doubleValue());
               else if (num.intValue() == 0)
                   RESULT = new IntExpr(num.intValue());
               else if (num.doubleValue() == 0.0)
                   RESULT = new RealExpr(num.doubleValue());
               else 
                   RESULT = new IntExpr(num.intValue());
	   }
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 103: // PrimaryExpr ::= Literal 
            {
              Expression RESULT = null;
		int stringleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int stringright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		String string = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	/*
	* If the string appears to have the syntax of a QName, store 
	* namespace info in the literal expression. This is used for
	* element-available and function-available functions, among
	* others. Also, the default namespace must be ignored.
	*/
	String namespace = null;
	final int index = string.lastIndexOf(':');

	if (index > 0) {
	    final String prefix = string.substring(0, index);
	    namespace = parser._symbolTable.lookupNamespace(prefix);
	}
	RESULT = (namespace == null) ? new LiteralExpr(string)
		     : new LiteralExpr(string, namespace); 
	
              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 102: // PrimaryExpr ::= LPAREN Expr RPAREN 
            {
              Expression RESULT = null;
		int exleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int exright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Expression ex = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		 RESULT = ex; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 101: // PrimaryExpr ::= VariableReference 
            {
              Expression RESULT = null;
		int vrleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int vrright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression vr = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = vr; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 100: // FilterExpr ::= PrimaryExpr Predicates 
            {
              Expression RESULT = null;
		int primaryleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int primaryright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Expression primary = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new FilterExpr(primary, pp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(6/*FilterExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 99: // FilterExpr ::= PrimaryExpr 
            {
              Expression RESULT = null;
		int primaryleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int primaryright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression primary = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = primary; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(6/*FilterExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 98: // AbbreviatedStep ::= DDOT 
            {
              Expression RESULT = null;
		 RESULT = new Step(Axis.PARENT, NodeTest.ANODE, null); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(20/*AbbreviatedStep*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 97: // AbbreviatedStep ::= DOT 
            {
              Expression RESULT = null;
		 RESULT = new Step(Axis.SELF, NodeTest.ANODE, null); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(20/*AbbreviatedStep*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 96: // AxisName ::= SELF 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.SELF); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 95: // AxisName ::= PRECEDINGSIBLING 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.PRECEDINGSIBLING); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 94: // AxisName ::= PRECEDING 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.PRECEDING); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 93: // AxisName ::= PARENT 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.PARENT); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 92: // AxisName ::= NAMESPACE 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.NAMESPACE); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 91: // AxisName ::= FOLLOWINGSIBLING 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.FOLLOWINGSIBLING); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 90: // AxisName ::= FOLLOWING 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.FOLLOWING); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 89: // AxisName ::= DESCENDANTORSELF 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.DESCENDANTORSELF); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 88: // AxisName ::= DESCENDANT 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.DESCENDANT); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 87: // AxisName ::= CHILD 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.CHILD); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 86: // AxisName ::= ATTRIBUTE 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.ATTRIBUTE); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 85: // AxisName ::= ANCESTORORSELF 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.ANCESTORORSELF); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 84: // AxisName ::= ANCESTOR 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.ANCESTOR); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 83: // AxisSpecifier ::= ATSIGN 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.ATTRIBUTE); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(41/*AxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 82: // AxisSpecifier ::= AxisName DCOLON 
            {
              Integer RESULT = null;
		int anleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int anright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Integer an = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		 RESULT = an; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(41/*AxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 81: // Step ::= AbbreviatedStep 
            {
              Expression RESULT = null;
		int abbrevleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int abbrevright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression abbrev = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = abbrev; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 80: // Step ::= AxisSpecifier NodeTest 
            {
              Expression RESULT = null;
		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new Step(axis.intValue(),
                             parser.findNodeType(axis.intValue(), ntest),
                             null);
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 79: // Step ::= AxisSpecifier NodeTest Predicates 
            {
              Expression RESULT = null;
		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new Step(axis.intValue(),
                             parser.findNodeType(axis.intValue(), ntest),
                             pp);
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 78: // Step ::= NodeTest Predicates 
            {
              Expression RESULT = null;
		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
            if (ntest instanceof Step) {
                Step step = (Step)ntest;
                step.addPredicates(pp);
                RESULT = (Step)ntest;
            }
            else {
                RESULT = new Step(Axis.CHILD,
                             parser.findNodeType(Axis.CHILD, ntest), pp);
            }
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 77: // Step ::= NodeTest 
            {
              Expression RESULT = null;
		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		
            if (ntest instanceof Step) {
                RESULT = (Step)ntest;
            }
            else {
		RESULT = new Step(Axis.CHILD,
                             parser.findNodeType(Axis.CHILD, ntest),
                             null);
            }
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 76: // AbbreviatedAbsoluteLocationPath ::= DSLASH RelativeLocationPath 
            {
              Expression RESULT = null;
		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		
           // 
	   // Expand '//' into '/descendant-or-self::node()/' or
	   // into /descendant-or-self::*/
	   //
	   int nodeType = DOM.NO_TYPE;
	   if (rlp instanceof Step && 
	       parser.isElementAxis(((Step) rlp).getAxis())) 
	   {
	       nodeType = DTM.ELEMENT_NODE;
	   }
	   final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
	   RESULT = new AbsoluteLocationPath(parser.insertStep(step, 
				(RelativeLocationPath) rlp));
	
              CUP$XPathParser$result = new java_cup.runtime.Symbol(24/*AbbreviatedAbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 75: // AbbreviatedRelativeLocationPath ::= RelativeLocationPath DSLASH Step 
            {
              Expression RESULT = null;
		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int stepleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int stepright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression step = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	   final Step right  = (Step)step;
           final int  axis   = right.getAxis();
           final int  type   = right.getNodeType();
           final Vector predicates = right.getPredicates();

           if ((axis == Axis.CHILD) && (type != NodeTest.ATTRIBUTE)) {
               // Compress './/child:E' into 'descendant::E' - if possible
               if (predicates == null) {
                   right.setAxis(Axis.DESCENDANT);
                   if (rlp instanceof Step && ((Step)rlp).isAbbreviatedDot()) {
	               RESULT = right;
                   }
                   else {
                       // Expand 'rlp//child::E' into 'rlp/descendant::E'
                       RelativeLocationPath left = (RelativeLocationPath)rlp;
	               RESULT = new ParentLocationPath(left, right);
                   }
               }
               else {
                   // Expand './/step' -> 'descendant-or-self::*/step'
                   if (rlp instanceof Step && ((Step)rlp).isAbbreviatedDot()) {
                       Step left = new Step(Axis.DESCENDANTORSELF, 
			    DTM.ELEMENT_NODE, null);
                       RESULT = new ParentLocationPath(left, right);
                   }
                   else {
                       // Expand 'rlp//step' -> 'rlp/descendant-or-self::*/step'
                       RelativeLocationPath left = (RelativeLocationPath)rlp;
                       Step mid = new Step(Axis.DESCENDANTORSELF, 
			    DTM.ELEMENT_NODE, null);
                       ParentLocationPath ppl = new ParentLocationPath(mid, right);
                       RESULT = new ParentLocationPath(left, ppl);
                   }
               }
           }
           else if ((axis == Axis.ATTRIBUTE) || (type == NodeTest.ATTRIBUTE)) {
               // Expand 'rlp//step' -> 'rlp/descendant-or-self::*/step'
               RelativeLocationPath left = (RelativeLocationPath)rlp;
               Step middle = new Step(Axis.DESCENDANTORSELF, 
		    DTM.ELEMENT_NODE, null);
               ParentLocationPath ppl = new ParentLocationPath(middle, right);
               RESULT = new ParentLocationPath(left, ppl);
	   }
	   else {
	       // Expand 'rlp//step' -> 'rlp/descendant-or-self::node()/step'
               RelativeLocationPath left = (RelativeLocationPath)rlp;
	       Step middle = new Step(Axis.DESCENDANTORSELF, 
		    DOM.NO_TYPE, null); 
               ParentLocationPath ppl = new ParentLocationPath(middle, right);
	       RESULT = new ParentLocationPath(left, ppl);
	   }
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(22/*AbbreviatedRelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 74: // AbsoluteLocationPath ::= AbbreviatedAbsoluteLocationPath 
            {
              Expression RESULT = null;
		int aalpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aalpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression aalp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = aalp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(23/*AbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 73: // AbsoluteLocationPath ::= SLASH RelativeLocationPath 
            {
              Expression RESULT = null;
		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new AbsoluteLocationPath(rlp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(23/*AbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 72: // AbsoluteLocationPath ::= SLASH 
            {
              Expression RESULT = null;
		 RESULT = new AbsoluteLocationPath(); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(23/*AbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 71: // RelativeLocationPath ::= AbbreviatedRelativeLocationPath 
            {
              Expression RESULT = null;
		int arlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int arlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression arlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = arlp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(21/*RelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 70: // RelativeLocationPath ::= RelativeLocationPath SLASH Step 
            {
              Expression RESULT = null;
		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int stepleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int stepright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression step = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		     
        if (rlp instanceof Step && ((Step) rlp).isAbbreviatedDot()) {
              RESULT = step;       // Remove './' from the middle
        }
        else if (((Step) step).isAbbreviatedDot()) {
              RESULT = rlp;        // Remove '/.' from the end
        }
        else {
             RESULT =
                new ParentLocationPath((RelativeLocationPath) rlp, step); 
           }
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(21/*RelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 69: // RelativeLocationPath ::= Step 
            {
              Expression RESULT = null;
		int stepleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int stepright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression step = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = step; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(21/*RelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 68: // LocationPath ::= AbsoluteLocationPath 
            {
              Expression RESULT = null;
		int alpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int alpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression alp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = alp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(4/*LocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 67: // LocationPath ::= RelativeLocationPath 
            {
              Expression RESULT = null;
		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = rlp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(4/*LocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 66: // PathExpr ::= FilterExpr DSLASH RelativeLocationPath 
            {
              Expression RESULT = null;
		int fexpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int fexpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression fexp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		
           // 
	   // Expand '//' into '/descendant-or-self::node()/' or
	   // into /descendant-or-self::*/
	   //
	   int nodeType = DOM.NO_TYPE;
	   if (rlp instanceof Step && 
	       parser.isElementAxis(((Step) rlp).getAxis())) 
	   {
	       nodeType = DTM.ELEMENT_NODE;
	   }
           final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
           FilterParentPath fpp = new FilterParentPath(fexp, step);
           fpp = new FilterParentPath(fpp, rlp);
           if (fexp instanceof KeyCall == false) {
               fpp.setDescendantAxis();
	   }
           RESULT = fpp;
        
              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 65: // PathExpr ::= FilterExpr SLASH RelativeLocationPath 
            {
              Expression RESULT = null;
		int fexpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int fexpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression fexp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new FilterParentPath(fexp, rlp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 64: // PathExpr ::= FilterExpr 
            {
              Expression RESULT = null;
		int fexpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int fexpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression fexp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = fexp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 63: // PathExpr ::= LocationPath 
            {
              Expression RESULT = null;
		int lpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int lpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression lp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = lp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 62: // UnionExpr ::= PathExpr VBAR UnionExpr 
            {
              Expression RESULT = null;
		int peleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int peright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression pe = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int restleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int restright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression rest = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new UnionPathExpr(pe, rest); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(18/*UnionExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 61: // UnionExpr ::= PathExpr 
            {
              Expression RESULT = null;
		int peleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int peright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression pe = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = pe; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(18/*UnionExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 60: // UnaryExpr ::= MINUS UnaryExpr 
            {
              Expression RESULT = null;
		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new UnaryOpExpr(ue); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(14/*UnaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 59: // UnaryExpr ::= UnionExpr 
            {
              Expression RESULT = null;
		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = ue; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(14/*UnaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 58: // MultiplicativeExpr ::= MultiplicativeExpr MOD UnaryExpr 
            {
              Expression RESULT = null;
		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new BinOpExpr(BinOpExpr.MOD, me, ue); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 57: // MultiplicativeExpr ::= MultiplicativeExpr DIV UnaryExpr 
            {
              Expression RESULT = null;
		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new BinOpExpr(BinOpExpr.DIV, me, ue); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 56: // MultiplicativeExpr ::= MultiplicativeExpr MULT UnaryExpr 
            {
              Expression RESULT = null;
		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new BinOpExpr(BinOpExpr.TIMES, me, ue); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 55: // MultiplicativeExpr ::= UnaryExpr 
            {
              Expression RESULT = null;
		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = ue; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 54: // AdditiveExpr ::= AdditiveExpr MINUS MultiplicativeExpr 
            {
              Expression RESULT = null;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new BinOpExpr(BinOpExpr.MINUS, ae, me); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(12/*AdditiveExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 53: // AdditiveExpr ::= AdditiveExpr PLUS MultiplicativeExpr 
            {
              Expression RESULT = null;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new BinOpExpr(BinOpExpr.PLUS, ae, me); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(12/*AdditiveExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 52: // AdditiveExpr ::= MultiplicativeExpr 
            {
              Expression RESULT = null;
		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = me; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(12/*AdditiveExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 51: // RelationalExpr ::= RelationalExpr GE AdditiveExpr 
            {
              Expression RESULT = null;
		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new RelationalExpr(Operators.GE, re, ae); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 50: // RelationalExpr ::= RelationalExpr LE AdditiveExpr 
            {
              Expression RESULT = null;
		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new RelationalExpr(Operators.LE, re, ae); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 49: // RelationalExpr ::= RelationalExpr GT AdditiveExpr 
            {
              Expression RESULT = null;
		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new RelationalExpr(Operators.GT, re, ae); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 48: // RelationalExpr ::= RelationalExpr LT AdditiveExpr 
            {
              Expression RESULT = null;
		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new RelationalExpr(Operators.LT, re, ae); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 47: // RelationalExpr ::= AdditiveExpr 
            {
              Expression RESULT = null;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = ae; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 46: // EqualityExpr ::= EqualityExpr NE RelationalExpr 
            {
              Expression RESULT = null;
		int eeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int eeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression ee = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new EqualityExpr(Operators.NE, ee, re); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(10/*EqualityExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 45: // EqualityExpr ::= EqualityExpr EQ RelationalExpr 
            {
              Expression RESULT = null;
		int eeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int eeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression ee = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new EqualityExpr(Operators.EQ, ee, re); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(10/*EqualityExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 44: // EqualityExpr ::= RelationalExpr 
            {
              Expression RESULT = null;
		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = re; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(10/*EqualityExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 43: // AndExpr ::= AndExpr AND EqualityExpr 
            {
              Expression RESULT = null;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int eeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int eeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ee = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new LogicalExpr(LogicalExpr.AND, ae, ee); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(9/*AndExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 42: // AndExpr ::= EqualityExpr 
            {
              Expression RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression e = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = e; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(9/*AndExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 41: // OrExpr ::= OrExpr OR AndExpr 
            {
              Expression RESULT = null;
		int oeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int oeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Expression oe = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new LogicalExpr(LogicalExpr.OR, oe, ae); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(8/*OrExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 40: // OrExpr ::= AndExpr 
            {
              Expression RESULT = null;
		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = ae; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(8/*OrExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 39: // Expr ::= OrExpr 
            {
              Expression RESULT = null;
		int exleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int exright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression ex = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = ex; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(2/*Expr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // Predicate ::= LBRACK Expr RBRACK 
            {
              Expression RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Expression e = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		
		RESULT = new Predicate(e);
	    
              CUP$XPathParser$result = new java_cup.runtime.Symbol(5/*Predicate*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 37: // Predicates ::= Predicate Predicates 
            {
              Vector RESULT = null;
		int pleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int pright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Expression p = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 pp.insertElementAt(p, 0); RESULT = pp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(35/*Predicates*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 36: // Predicates ::= Predicate 
            {
              Vector RESULT = null;
		int pleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int pright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression p = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
		Vector temp = new Vector();
		temp.addElement(p);
		RESULT = temp;     
            
              CUP$XPathParser$result = new java_cup.runtime.Symbol(35/*Predicates*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // ChildOrAttributeAxisSpecifier ::= ATTRIBUTE DCOLON 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.ATTRIBUTE); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // ChildOrAttributeAxisSpecifier ::= CHILD DCOLON 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.CHILD); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // ChildOrAttributeAxisSpecifier ::= ATSIGN 
            {
              Integer RESULT = null;
		 RESULT = new Integer(Axis.ATTRIBUTE); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // NameTestPattern ::= QName 
            {
              Object RESULT = null;
		int qnleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int qnright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		QName qn = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = qn; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(34/*NameTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 31: // NameTestPattern ::= STAR 
            {
              Object RESULT = null;
		 RESULT = null; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(34/*NameTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // NodeTestPattern ::= PI 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.PI); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // NodeTestPattern ::= COMMENT 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.COMMENT); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 28: // NodeTestPattern ::= TEXT 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.TEXT); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 27: // NodeTestPattern ::= NODE 
            {
              Object RESULT = null;
		 RESULT = new Integer(NodeTest.ANODE); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 26: // NodeTestPattern ::= NameTestPattern 
            {
              Object RESULT = null;
		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = nt; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 25: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern Predicates 
            {
              StepPattern RESULT = null;
		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	       // TODO: report error if axis is attribute	
	       RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp); 
	    
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern 
            {
              StepPattern RESULT = null;
		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	       RESULT = pip; 	// TODO: report error if axis is attribute
	    
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern Predicates 
            {
              StepPattern RESULT = null;
		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	       RESULT = parser.createStepPattern(axis.intValue(), nt, pp);
            
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern 
            {
              StepPattern RESULT = null;
		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
	       RESULT = parser.createStepPattern(axis.intValue(), nt, null);
            
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // StepPattern ::= ProcessingInstructionPattern Predicates 
            {
              StepPattern RESULT = null;
		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // StepPattern ::= ProcessingInstructionPattern 
            {
              StepPattern RESULT = null;
		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = pip; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // StepPattern ::= NodeTestPattern Predicates 
            {
              StepPattern RESULT = null;
		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
		RESULT = parser.createStepPattern(Axis.CHILD, nt, pp);
            
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // StepPattern ::= NodeTestPattern 
            {
              StepPattern RESULT = null;
		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 
		RESULT = parser.createStepPattern(Axis.CHILD, nt, null);
            
              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // RelativePathPattern ::= StepPattern DSLASH RelativePathPattern 
            {
              RelativePathPattern RESULT = null;
		int spleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int spright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		StepPattern sp = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new AncestorPattern(sp, rpp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(31/*RelativePathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 16: // RelativePathPattern ::= StepPattern SLASH RelativePathPattern 
            {
              RelativePathPattern RESULT = null;
		int spleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int spright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		StepPattern sp = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new ParentPattern(sp, rpp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(31/*RelativePathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 15: // RelativePathPattern ::= StepPattern 
            {
              RelativePathPattern RESULT = null;
		int spleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int spright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		StepPattern sp = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = sp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(31/*RelativePathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // ProcessingInstructionPattern ::= PIPARAM LPAREN Literal RPAREN 
            {
              StepPattern RESULT = null;
		int lleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		String l = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		 RESULT = new ProcessingInstructionPattern(l); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(30/*ProcessingInstructionPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 13: // IdKeyPattern ::= KEY LPAREN Literal COMMA Literal RPAREN 
            {
              IdKeyPattern RESULT = null;
		int l1left = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left;
		int l1right = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).right;
		String l1 = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).value;
		int l2left = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int l2right = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		String l2 = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		 RESULT = new KeyPattern(l1, l2); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(27/*IdKeyPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-5)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // IdKeyPattern ::= ID LPAREN Literal RPAREN 
            {
              IdKeyPattern RESULT = null;
		int lleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		String l = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		 RESULT = new IdPattern(l);
               parser.setHasIdCall(true);
            
              CUP$XPathParser$result = new java_cup.runtime.Symbol(27/*IdKeyPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // LocationPathPattern ::= RelativePathPattern 
            {
              Pattern RESULT = null;
		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = rpp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // LocationPathPattern ::= DSLASH RelativePathPattern 
            {
              Pattern RESULT = null;
		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new AncestorPattern(rpp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 9: // LocationPathPattern ::= IdKeyPattern DSLASH RelativePathPattern 
            {
              Pattern RESULT = null;
		int ikpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int ikpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		IdKeyPattern ikp = (IdKeyPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new AncestorPattern(ikp, rpp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 8: // LocationPathPattern ::= IdKeyPattern SLASH RelativePathPattern 
            {
              Pattern RESULT = null;
		int ikpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int ikpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		IdKeyPattern ikp = (IdKeyPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new ParentPattern(ikp, rpp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 7: // LocationPathPattern ::= IdKeyPattern 
            {
              Pattern RESULT = null;
		int ikpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int ikpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		IdKeyPattern ikp = (IdKeyPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = ikp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 6: // LocationPathPattern ::= SLASH RelativePathPattern 
            {
              Pattern RESULT = null;
		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new AbsolutePathPattern(rpp); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 5: // LocationPathPattern ::= SLASH 
            {
              Pattern RESULT = null;
		 RESULT = new AbsolutePathPattern(null); 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 4: // Pattern ::= LocationPathPattern VBAR Pattern 
            {
              Pattern RESULT = null;
		int lppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
		int lppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
		Pattern lpp = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
		int pleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int pright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Pattern p = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = new AlternativePattern(lpp, p);  
              CUP$XPathParser$result = new java_cup.runtime.Symbol(28/*Pattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 3: // Pattern ::= LocationPathPattern 
            {
              Pattern RESULT = null;
		int lppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int lppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Pattern lpp = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = lpp; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(28/*Pattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // TopLevel ::= EXPRESSION Expr 
            {
              SyntaxTreeNode RESULT = null;
		int exprleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int exprright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Expression expr = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = expr; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(1/*TopLevel*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 1: // TopLevel ::= PATTERN Pattern 
            {
              SyntaxTreeNode RESULT = null;
		int patternleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
		int patternright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
		Pattern pattern = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
		 RESULT = pattern; 
              CUP$XPathParser$result = new java_cup.runtime.Symbol(1/*TopLevel*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          return CUP$XPathParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 0: // $START ::= TopLevel EOF 
            {
              Object RESULT = null;
		int start_valleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
		int start_valright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
		SyntaxTreeNode start_val = (SyntaxTreeNode)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
		RESULT = start_val;
              CUP$XPathParser$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
            }
          /* ACCEPT */
          CUP$XPathParser$parser.done_parsing();
          return CUP$XPathParser$result;

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

        }
    }
}

