changeset 2086:bbaa1d8d7979 jdk8u282-b04 jdk8u292-b00

Merge
author andrew
date Fri, 27 Nov 2020 03:51:46 +0000
parents 79bb1bbadb44 (current diff) 6b34545c0bc1 (diff)
children f9651f512384
files
diffstat 2 files changed, 2235 insertions(+), 2601 deletions(-) [+]
line wrap: on
line diff
--- a/THIRD_PARTY_README	Tue Nov 24 05:05:31 2020 +0000
+++ b/THIRD_PARTY_README	Fri Nov 27 03:51:46 2020 +0000
@@ -155,11 +155,11 @@
 -------------------------------------------------------------------------------
 
 %% This notice is provided with respect to CUP Parser Generator for 
-Java 0.10k, which may be included with JRE 8, JDK 8, and OpenJDK 8.
+Java 0.10b, which may be included with JRE 8, JDK 8, and OpenJDK 8.
 
 --- begin of LICENSE ---
 
-Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian
+Copyright 1996-2015 by Scott Hudson, Frank Flannery, C. Scott Ananian, Michael Petter
 
 Permission to use, copy, modify, and distribute this software and its
 documentation for any purpose and without fee is hereby granted, provided
@@ -3028,7 +3028,7 @@
   Apache Commons Math 3.2
   Apache Derby 10.11.1.2
   Apache Jakarta BCEL 5.1 
-  Apache Santuario XML Security for Java 2.1.1
+  Apache Santuario XML Security for Java 2.1.3
   Apache Xalan-Java 2.7.2
   Apache Xerces Java 2.10.0 
   Apache XML Resolver 1.1 
--- a/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java	Tue Nov 24 05:05:31 2020 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java	Fri Nov 27 03:51:46 2020 +0000
@@ -16,843 +16,887 @@
 import com.sun.org.apache.xalan.internal.xsltc.runtime.Operators;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
 
-/** CUP v0.10j generated parser.
-  */
+/**
+ * CUP v0.11b generated parser.
+ * This class was generated by CUP v0.11b on Nov 12, 2019.
+ *
+ * @LastModified: Nov 2019
+ */
 public class XPathParser extends com.sun.java_cup.internal.runtime.lr_parser {
 
-  /** Default constructor. */
-  public XPathParser() {super();}
-
-  /** Constructor which sets the default scanner. */
-  public XPathParser(com.sun.java_cup.internal.runtime.Scanner s) {super(s);}
+    /** Default constructor. */
+    public XPathParser() {
+        super();
+    }
 
-  /** 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;}
+    /** Constructor which sets the default scanner. */
+    public XPathParser(com.sun.java_cup.internal.runtime.Scanner s) {
+        super(s);
+    }
 
-  /** Parse-action table. */
-  protected static final short[][] _action_table =
-    unpackFromStrings(new String[] {
-    "\000\307\000\006\066\006\067\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\034\057\035\034\036\113\037\141\040\142\041\145" +
-    "\044\063\045\062\046\065\047\115\050\123\051\136\052" +
-    "\077\053\143\054\131\055\125\056\116\057\104\060\140" +
-    "\061\067\062\060\063\127\064\132\065\072\001\002\000" +
-    "\070\004\013\013\027\016\020\021\023\032\031\033\040" +
-    "\035\034\036\033\037\046\040\047\041\051\044\015\045" +
-    "\014\046\016\047\036\050\037\051\044\052\025\053\050" +
-    "\054\043\055\041\056\035\057\030\060\045\061\021\062" +
-    "\012\063\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\013\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\042\uff7a\043\uff7a\001" +
-    "\002\000\070\002\ufffc\010\ufffc\013\027\016\020\032\031" +
-    "\033\040\035\034\036\113\037\141\040\047\041\051\044" +
-    "\015\045\014\046\016\047\036\050\037\051\044\052\025" +
-    "\053\050\054\043\055\041\056\035\057\030\060\045\061" +
-    "\021\062\012\063\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\035\uffe0\036\uffe0" +
-    "\037\uffe0\040\uffe0\041\uffe0\044\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\001" +
-    "\002\000\054\002\uff7b\004\uff7b\006\uff7b\007\uff7b\010\uff7b" +
-    "\012\uff7b\013\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\042\uff7b\043\uff7b\001\002\000\062\013\027\032" +
-    "\031\033\040\035\034\036\113\037\141\040\047\041\051" +
-    "\044\015\045\014\046\016\047\036\050\037\051\044\052" +
-    "\170\053\166\054\043\055\041\056\035\057\030\060\045" +
-    "\061\021\062\012\063\042\001\002\000\064\013\027\016" +
-    "\020\032\031\033\040\035\034\036\113\037\141\040\047" +
-    "\041\051\044\015\045\014\046\016\047\036\050\037\051" +
-    "\044\052\025\053\050\054\043\055\041\056\035\057\030" +
-    "\060\045\061\021\062\012\063\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\013\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\042\uff7d\043\uff7d" +
-    "\001\002\000\056\002\uff85\004\uff85\006\uff85\007\uff85\010" +
-    "\uff85\011\uff85\012\uff85\013\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\042\uff85\043\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\013\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\042\uff86\043\uff86\001\002\000\054" +
-    "\002\uff7e\004\uff7e\006\uff7e\007\uff7e\010\uff7e\012\uff7e\013" +
-    "\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\042" +
-    "\uff7e\043\uff7e\001\002\000\054\002\uff77\004\uff77\006\uff77" +
-    "\007\uff77\010\uff77\012\uff77\013\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\042\uff77\043\uff77\001\002\000" +
-    "\054\002\uff76\004\uff76\006\uff76\007\uff76\010\uff76\012\uff76" +
-    "\013\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" +
-    "\042\uff76\043\uff76\001\002\000\056\002\uff84\004\uff84\006" +
-    "\uff84\007\uff84\010\uff84\011\uff84\012\uff84\013\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\042\uff84\043\uff84" +
-    "\001\002\000\054\002\uff81\004\uff81\006\uff81\007\uff81\010" +
-    "\uff81\012\uff81\013\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\042\uff81\043\uff81\001\002\000\054\002\uff78" +
-    "\004\uff78\006\uff78\007\uff78\010\uff78\012\uff78\013\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\042\uff78\043" +
-    "\uff78\001\002\000\054\002\uff82\004\uff82\006\uff82\007\uff82" +
-    "\010\uff82\012\uff82\013\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\042\uff82\043\uff82\001\002\000\054\002" +
-    "\uff79\004\uff79\006\uff79\007\uff79\010\uff79\012\uff79\013\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\042\uff79" +
-    "\043\uff79\001\002\000\054\002\uff7c\004\uff7c\006\uff7c\007" +
-    "\uff7c\010\uff7c\012\uff7c\013\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\042\uff7c\043\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\013\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\042\uffdd\043\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" +
-    "\034\057\035\034\036\113\037\141\040\142\041\145\044" +
-    "\063\045\062\046\065\047\115\050\123\051\136\052\077" +
-    "\053\143\054\131\055\125\056\116\057\104\060\140\061" +
-    "\067\062\060\063\127\064\132\065\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\013\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\042\uff9a" +
-    "\043\uff9a\001\002\000\060\002\uff7a\004\uff7a\006\uff7a\007" +
-    "\uff7a\010\uff7a\011\uff7a\012\uff7a\013\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\042\uff7a\043\uff7a" +
-    "\001\002\000\126\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\035\034\036\113\037\141\040\142\041\145" +
-    "\042\uffb9\043\uffb9\044\063\045\062\046\065\047\115\050" +
-    "\123\051\136\052\077\053\143\054\131\055\125\056\116" +
-    "\057\104\060\140\061\067\062\060\063\127\001\002\000" +
-    "\054\002\uff89\004\uff89\006\uff89\007\uff89\010\uff89\012\uff89" +
-    "\013\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" +
-    "\042\uff89\043\uff89\001\002\000\054\002\uff8b\004\uff8b\006" +
-    "\uff8b\007\uff8b\010\uff8b\012\uff8b\013\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\042\uff8b\043\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\042\uffd5\043\uffd5" +
-    "\001\002\000\004\011\245\001\002\000\062\013\uffae\032" +
-    "\uffae\033\uffae\035\uffae\036\uffae\037\uffae\040\uffae\041\uffae" +
-    "\044\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\001\002\000\060\002\uff7b\004" +
-    "\uff7b\006\uff7b\007\uff7b\010\uff7b\011\uff7b\012\uff7b\013\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" +
-    "\042\uff7b\043\uff7b\001\002\000\070\005\111\013\103\016" +
-    "\066\017\106\032\031\033\040\035\034\036\113\037\141" +
-    "\040\142\041\145\044\063\045\062\046\065\047\115\050" +
-    "\123\051\136\052\077\053\143\054\131\055\125\056\116" +
-    "\057\104\060\140\061\067\062\060\063\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\034\057\035" +
-    "\034\036\113\037\141\040\142\041\145\044\063\045\062" +
-    "\046\065\047\115\050\123\051\136\052\077\053\143\054" +
-    "\131\055\125\056\116\057\104\060\140\061\067\062\060" +
-    "\063\127\064\132\065\072\001\002\000\054\002\uff99\004" +
-    "\uff99\006\uff99\007\uff99\010\uff99\012\uff99\013\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\042\uff99\043\uff99" +
-    "\001\002\000\046\002\uffb7\007\uffb7\010\uffb7\012\uffb7\013" +
-    "\uffb7\014\uffb7\022\uffb7\023\uffb7\024\uffb7\025\uffb7\026\uffb7" +
-    "\027\uffb7\030\uffb7\031\uffb7\032\uffb7\033\uffb7\042\uffb7\043" +
-    "\uffb7\001\002\000\054\002\uff97\004\uff97\006\uff97\007\uff97" +
-    "\010\uff97\012\uff97\013\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\042\uff97\043\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\034\057\035\034\036" +
-    "\113\037\141\040\142\041\145\044\063\045\062\046\065" +
-    "\047\115\050\123\051\136\052\077\053\143\054\131\055" +
-    "\125\056\116\057\104\060\140\061\067\062\060\063\127" +
-    "\064\132\065\072\001\002\000\016\002\uffd9\007\uffd9\012" +
-    "\uffd9\014\uffd9\042\uffd9\043\234\001\002\000\060\002\uff7f" +
-    "\004\uff7f\006\uff7f\007\uff7f\010\uff7f\011\uff7f\012\uff7f\013" +
-    "\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\042\uff7f\043\uff7f\001\002\000\062\013\103\032\031" +
-    "\033\040\035\034\036\113\037\141\040\142\041\145\044" +
-    "\063\045\062\046\065\047\036\050\037\051\044\052\170" +
-    "\053\166\054\043\055\041\056\035\057\030\060\045\061" +
-    "\021\062\012\063\042\001\002\000\004\020\236\001\002" +
-    "\000\014\002\uffda\007\uffda\012\uffda\014\uffda\042\232\001" +
-    "\002\000\054\002\uff88\004\uff88\006\uff88\007\uff88\010\uff88" +
-    "\012\uff88\013\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\042\uff88\043\uff88\001\002\000\060\002\uff7d\004" +
-    "\uff7d\006\uff7d\007\uff7d\010\uff7d\011\uff7d\012\uff7d\013\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" +
-    "\042\uff7d\043\uff7d\001\002\000\022\002\uffd7\007\uffd7\012" +
-    "\uffd7\014\uffd7\022\216\023\217\042\uffd7\043\uffd7\001\002" +
-    "\000\052\002\uff9f\004\uff9f\007\uff9f\010\uff9f\012\uff9f\013" +
-    "\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\042" +
-    "\uff9f\043\uff9f\001\002\000\054\002\uffb4\004\uffb4\006\055" +
-    "\007\uffb4\010\uffb4\012\uffb4\013\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\042\uffb4\043\uffb4\001\002\000" +
-    "\046\002\uffbd\007\uffbd\010\uffbd\012\uffbd\013\uffbd\014\uffbd" +
-    "\022\uffbd\023\uffbd\024\uffbd\025\uffbd\026\uffbd\027\uffbd\030" +
-    "\uffbd\031\uffbd\032\uffbd\033\uffbd\042\uffbd\043\uffbd\001\002" +
-    "\000\052\002\uffa0\004\uffa0\007\uffa0\010\uffa0\012\uffa0\013" +
-    "\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\042" +
-    "\uffa0\043\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\042\uffd2\043\uffd2\001\002\000\056" +
-    "\002\uff75\004\uff75\006\uff75\007\uff75\010\uff75\011\uff75\012" +
-    "\uff75\013\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\042\uff75\043\uff75\001\002\000\044\002\uffca\007\uffca" +
-    "\012\uffca\013\uffca\014\uffca\022\uffca\023\uffca\024\uffca\025" +
-    "\uffca\026\uffca\027\uffca\030\uffca\031\uffca\032\uffca\033\uffca" +
-    "\042\uffca\043\uffca\001\002\000\060\002\uff77\004\uff77\006" +
-    "\uff77\007\uff77\010\uff77\011\uff77\012\uff77\013\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\042\uff77" +
-    "\043\uff77\001\002\000\060\002\uff7e\004\uff7e\006\uff7e\007" +
-    "\uff7e\010\uff7e\011\uff7e\012\uff7e\013\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\042\uff7e\043\uff7e" +
-    "\001\002\000\004\011\201\001\002\000\052\002\uffbc\004" +
-    "\uffbc\007\uffbc\010\uffbc\012\uffbc\013\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\042\uffbc\043\uffbc\001\002" +
-    "\000\046\002\uffc2\007\uffc2\010\uffc2\012\uffc2\013\uffc2\014" +
-    "\uffc2\022\uffc2\023\uffc2\024\uffc2\025\uffc2\026\uffc2\027\uffc2" +
-    "\030\uffc2\031\uffc2\032\uffc2\033\uffc2\042\uffc2\043\uffc2\001" +
-    "\002\000\054\002\uff9e\004\uff9e\006\055\007\uff9e\010\uff9e" +
-    "\012\uff9e\013\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\042\uff9e\043\uff9e\001\002\000\060\002\uff76\004" +
-    "\uff76\006\uff76\007\uff76\010\uff76\011\uff76\012\uff76\013\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" +
-    "\042\uff76\043\uff76\001\002\000\046\002\uffc4\007\uffc4\010" +
-    "\176\012\uffc4\013\uffc4\014\uffc4\022\uffc4\023\uffc4\024\uffc4" +
-    "\025\uffc4\026\uffc4\027\uffc4\030\uffc4\031\uffc4\032\uffc4\033" +
-    "\uffc4\042\uffc4\043\uffc4\001\002\000\060\002\uff81\004\uff81" +
-    "\006\uff81\007\uff81\010\uff81\011\uff81\012\uff81\013\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\042" +
-    "\uff81\043\uff81\001\002\000\054\002\uff9c\004\uff9c\006\uff9c" +
-    "\007\uff9c\010\uff9c\012\uff9c\013\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\042\uff9c\043\uff9c\001\002\000" +
-    "\060\002\uff78\004\uff78\006\uff78\007\uff78\010\uff78\011\uff78" +
-    "\012\uff78\013\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\042\uff78\043\uff78\001\002\000\052\002" +
-    "\uffc1\004\173\007\uffc1\010\uffc1\012\uffc1\013\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\042\uffc1\043\uffc1" +
-    "\001\002\000\060\002\uff82\004\uff82\006\uff82\007\uff82\010" +
-    "\uff82\011\uff82\012\uff82\013\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\042\uff82\043\uff82\001\002" +
-    "\000\054\002\uff98\004\uff98\006\uff98\007\uff98\010\uff98\012" +
-    "\uff98\013\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\042\uff98\043\uff98\001\002\000\004\007\171\001\002" +
-    "\000\046\032\031\033\040\035\034\036\113\037\141\047" +
-    "\036\050\037\051\044\052\170\053\166\054\043\055\041" +
-    "\056\035\057\030\060\045\061\021\062\012\063\042\001" +
-    "\002\000\052\002\uffba\004\uffba\007\uffba\010\uffba\012\uffba" +
-    "\013\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" +
-    "\042\uffba\043\uffba\001\002\000\060\002\uff79\004\uff79\006" +
-    "\uff79\007\uff79\010\uff79\011\uff79\012\uff79\013\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\042\uff79" +
-    "\043\uff79\001\002\000\052\002\uffb0\004\uffb0\007\uffb0\010" +
-    "\uffb0\012\uffb0\013\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\042\uffb0\043\uffb0\001\002\000\060\002\uff7c" +
-    "\004\uff7c\006\uff7c\007\uff7c\010\uff7c\011\uff7c\012\uff7c\013" +
-    "\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\042\uff7c\043\uff7c\001\002\000\056\002\uff83\004\uff83" +
-    "\006\uff83\007\uff83\010\uff83\011\uff83\012\uff83\013\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\042\uff83\043" +
-    "\uff83\001\002\000\054\002\uff8c\004\uff8c\006\uff8c\007\uff8c" +
-    "\010\uff8c\012\uff8c\013\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\042\uff8c\043\uff8c\001\002\000\060\002" +
-    "\uff80\004\uff80\006\uff80\007\uff80\010\uff80\011\uff80\012\uff80" +
-    "\013\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\042\uff80\043\uff80\001\002\000\044\002\uffc6\007" +
-    "\uffc6\012\uffc6\013\uffc6\014\uffc6\022\uffc6\023\uffc6\024\uffc6" +
-    "\025\uffc6\026\uffc6\027\uffc6\030\uffc6\031\uffc6\032\uffc6\033" +
-    "\uffc6\042\uffc6\043\uffc6\001\002\000\054\002\uff8d\004\uff8d" +
-    "\006\uff8d\007\uff8d\010\uff8d\012\uff8d\013\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\042\uff8d\043\uff8d\001" +
-    "\002\000\044\002\uffcd\007\uffcd\012\uffcd\013\160\014\uffcd" +
-    "\022\uffcd\023\uffcd\024\uffcd\025\uffcd\026\uffcd\027\uffcd\030" +
-    "\uffcd\031\uffcd\032\161\033\157\042\uffcd\043\uffcd\001\002" +
-    "\000\052\002\uffbe\004\153\007\uffbe\010\uffbe\012\uffbe\013" +
-    "\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\042" +
-    "\uffbe\043\uffbe\001\002\000\054\002\uff8e\004\uff8e\006\uff8e" +
-    "\007\uff8e\010\uff8e\012\uff8e\013\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\042\uff8e\043\uff8e\001\002\000" +
-    "\056\002\uff87\004\uff87\006\uff87\007\uff87\010\uff87\011\uff91" +
-    "\012\uff87\013\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\042\uff87\043\uff87\001\002\000\070\005\111\013" +
-    "\103\016\066\017\106\032\031\033\040\035\034\036\113" +
-    "\037\141\040\142\041\145\044\063\045\062\046\065\047" +
-    "\115\050\123\051\136\052\077\053\143\054\131\055\125" +
-    "\056\116\057\104\060\140\061\067\062\060\063\127\001" +
-    "\002\000\070\005\111\013\103\016\066\017\106\032\031" +
-    "\033\040\035\034\036\113\037\141\040\142\041\145\044" +
-    "\063\045\062\046\065\047\115\050\123\051\136\052\077" +
-    "\053\143\054\131\055\125\056\116\057\104\060\140\061" +
-    "\067\062\060\063\127\001\002\000\054\002\uff87\004\uff87" +
-    "\006\uff87\007\uff87\010\uff87\012\uff87\013\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\042\uff87\043\uff87\001" +
-    "\002\000\052\002\uffbb\004\uffbb\007\uffbb\010\uffbb\012\uffbb" +
-    "\013\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" +
-    "\042\uffbb\043\uffbb\001\002\000\052\002\uffb6\004\uffb6\007" +
-    "\uffb6\010\uffb6\012\uffb6\013\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\042\uffb6\043\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\034\057\035\034" +
-    "\036\113\037\141\040\142\041\145\044\063\045\062\046" +
-    "\065\047\115\050\123\051\136\052\077\053\143\054\131" +
-    "\055\125\056\116\057\104\060\140\061\067\062\060\063" +
-    "\127\064\132\065\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\034\057\035\034\036\113\037\141" +
-    "\040\142\041\145\044\063\045\062\046\065\047\115\050" +
-    "\123\051\136\052\077\053\143\054\131\055\125\056\116" +
-    "\057\104\060\140\061\067\062\060\063\127\064\132\065" +
-    "\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\034\057\035\034\036\113\037\141\040\142\041\145" +
-    "\044\063\045\062\046\065\047\115\050\123\051\136\052" +
-    "\077\053\143\054\131\055\125\056\116\057\104\060\140" +
-    "\061\067\062\060\063\127\064\132\065\072\001\002\000" +
-    "\044\002\uffc8\007\uffc8\012\uffc8\013\uffc8\014\uffc8\022\uffc8" +
-    "\023\uffc8\024\uffc8\025\uffc8\026\uffc8\027\uffc8\030\uffc8\031" +
-    "\uffc8\032\uffc8\033\uffc8\042\uffc8\043\uffc8\001\002\000\044" +
-    "\002\uffc9\007\uffc9\012\uffc9\013\uffc9\014\uffc9\022\uffc9\023" +
-    "\uffc9\024\uffc9\025\uffc9\026\uffc9\027\uffc9\030\uffc9\031\uffc9" +
-    "\032\uffc9\033\uffc9\042\uffc9\043\uffc9\001\002\000\044\002" +
-    "\uffc7\007\uffc7\012\uffc7\013\uffc7\014\uffc7\022\uffc7\023\uffc7" +
-    "\024\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031\uffc7\032" +
-    "\uffc7\033\uffc7\042\uffc7\043\uffc7\001\002\000\054\002\uff90" +
-    "\004\uff90\006\uff90\007\uff90\010\uff90\012\uff90\013\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\042\uff90\043" +
-    "\uff90\001\002\000\054\002\uff80\004\uff80\006\uff80\007\uff80" +
-    "\010\uff80\012\uff80\013\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\042\uff80\043\uff80\001\002\000\054\002" +
-    "\uff96\004\uff96\006\uff96\007\uff96\010\uff96\012\uff96\013\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\042\uff96" +
-    "\043\uff96\001\002\000\054\002\uff7f\004\uff7f\006\uff7f\007" +
-    "\uff7f\010\uff7f\012\uff7f\013\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\042\uff7f\043\uff7f\001\002\000\054" +
-    "\002\uffdb\004\uffdb\006\uffdb\007\uffdb\010\uffdb\012\uffdb\013" +
-    "\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\042" +
-    "\uffdb\043\uffdb\001\002\000\070\005\111\013\103\016\066" +
-    "\017\106\032\031\033\040\035\034\036\113\037\141\040" +
-    "\142\041\145\044\063\045\062\046\065\047\115\050\123" +
-    "\051\136\052\077\053\143\054\131\055\125\056\116\057" +
-    "\104\060\140\061\067\062\060\063\127\001\002\000\070" +
-    "\005\111\013\103\016\066\017\106\032\031\033\040\035" +
-    "\034\036\113\037\141\040\142\041\145\044\063\045\062" +
-    "\046\065\047\115\050\123\051\136\052\077\053\143\054" +
-    "\131\055\125\056\116\057\104\060\140\061\067\062\060" +
-    "\063\127\001\002\000\052\002\uffc0\004\153\007\uffc0\010" +
-    "\uffc0\012\uffc0\013\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\042\uffc0\043\uffc0\001\002\000\052\002\uffbf" +
-    "\004\153\007\uffbf\010\uffbf\012\uffbf\013\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\042\uffbf\043\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\034\057\035" +
-    "\034\036\113\037\141\040\142\041\145\044\063\045\062" +
-    "\046\065\047\115\050\123\051\136\052\077\053\143\054" +
-    "\131\055\125\056\116\057\104\060\140\061\067\062\060" +
-    "\063\127\064\132\065\072\001\002\000\044\002\uffc3\007" +
-    "\uffc3\012\uffc3\013\uffc3\014\uffc3\022\uffc3\023\uffc3\024\uffc3" +
-    "\025\uffc3\026\uffc3\027\uffc3\030\uffc3\031\uffc3\032\uffc3\033" +
-    "\uffc3\042\uffc3\043\uffc3\001\002\000\052\002\uff9d\004\uff9d" +
-    "\007\uff9d\010\uff9d\012\uff9d\013\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\042\uff9d\043\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\034" +
-    "\057\035\034\036\113\037\141\040\142\041\145\044\063" +
-    "\045\062\046\065\047\115\050\123\051\136\052\077\053" +
-    "\143\054\131\055\125\056\116\057\104\060\140\061\067" +
-    "\062\060\063\127\064\132\065\072\001\002\000\054\002" +
-    "\uff95\004\uff95\006\uff95\007\uff95\010\uff95\012\uff95\013\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\042\uff95" +
-    "\043\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\013\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\042\uff94\043\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\034\057\035\034\036\113\037\141" +
-    "\040\142\041\145\044\063\045\062\046\065\047\115\050" +
-    "\123\051\136\052\077\053\143\054\131\055\125\056\116" +
-    "\057\104\060\140\061\067\062\060\063\127\064\132\065" +
-    "\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\034\057\035\034\036\113" +
-    "\037\141\040\142\041\145\044\063\045\062\046\065\047" +
-    "\115\050\123\051\136\052\077\053\143\054\131\055\125" +
-    "\056\116\057\104\060\140\061\067\062\060\063\127\064" +
-    "\132\065\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\034\057\035\034\036\113\037\141\040\142" +
-    "\041\145\044\063\045\062\046\065\047\115\050\123\051" +
-    "\136\052\077\053\143\054\131\055\125\056\116\057\104" +
-    "\060\140\061\067\062\060\063\127\064\132\065\072\001" +
-    "\002\000\044\002\uffcb\007\uffcb\012\uffcb\013\160\014\uffcb" +
-    "\022\uffcb\023\uffcb\024\uffcb\025\uffcb\026\uffcb\027\uffcb\030" +
-    "\uffcb\031\uffcb\032\161\033\157\042\uffcb\043\uffcb\001\002" +
-    "\000\044\002\uffcc\007\uffcc\012\uffcc\013\160\014\uffcc\022" +
-    "\uffcc\023\uffcc\024\uffcc\025\uffcc\026\uffcc\027\uffcc\030\uffcc" +
-    "\031\uffcc\032\161\033\157\042\uffcc\043\uffcc\001\002\000" +
-    "\052\002\uffb3\004\uffb3\007\uffb3\010\uffb3\012\uffb3\013\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\042\uffb3" +
-    "\043\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\034\057\035\034\036\113\037\141\040\142\041" +
-    "\145\044\063\045\062\046\065\047\115\050\123\051\136" +
-    "\052\077\053\143\054\131\055\125\056\116\057\104\060" +
-    "\140\061\067\062\060\063\127\064\132\065\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\034\057" +
-    "\035\034\036\113\037\141\040\142\041\145\044\063\045" +
-    "\062\046\065\047\115\050\123\051\136\052\077\053\143" +
-    "\054\131\055\125\056\116\057\104\060\140\061\067\062" +
-    "\060\063\127\064\132\065\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\042\uffd3\043\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\034\057\035\034" +
-    "\036\113\037\141\040\142\041\145\044\063\045\062\046" +
-    "\065\047\115\050\123\051\136\052\077\053\143\054\131" +
-    "\055\125\056\116\057\104\060\140\061\067\062\060\063" +
-    "\127\064\132\065\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\034\057\035\034\036\113\037\141" +
-    "\040\142\041\145\044\063\045\062\046\065\047\115\050" +
-    "\123\051\136\052\077\053\143\054\131\055\125\056\116" +
-    "\057\104\060\140\061\067\062\060\063\127\064\132\065" +
-    "\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\034\057\035\034\036\113\037\141\040\142\041\145" +
-    "\044\063\045\062\046\065\047\115\050\123\051\136\052" +
-    "\077\053\143\054\131\055\125\056\116\057\104\060\140" +
-    "\061\067\062\060\063\127\064\132\065\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\034\057\035" +
-    "\034\036\113\037\141\040\142\041\145\044\063\045\062" +
-    "\046\065\047\115\050\123\051\136\052\077\053\143\054" +
-    "\131\055\125\056\116\057\104\060\140\061\067\062\060" +
-    "\063\127\064\132\065\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\042\uffce\043\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\042\uffcf\043\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\042\uffd0\043\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" +
-    "\042\uffd1\043\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\042\uffd4\043\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\034\057\035\034\036\113\037" +
-    "\141\040\142\041\145\044\063\045\062\046\065\047\115" +
-    "\050\123\051\136\052\077\053\143\054\131\055\125\056" +
-    "\116\057\104\060\140\061\067\062\060\063\127\064\132" +
-    "\065\072\001\002\000\016\002\uffd8\007\uffd8\012\uffd8\014" +
-    "\uffd8\042\uffd8\043\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\034\057\035\034\036\113\037\141" +
-    "\040\142\041\145\044\063\045\062\046\065\047\115\050" +
-    "\123\051\136\052\077\053\143\054\131\055\125\056\116" +
-    "\057\104\060\140\061\067\062\060\063\127\064\132\065" +
-    "\072\001\002\000\022\002\uffd6\007\uffd6\012\uffd6\014\uffd6" +
-    "\022\216\023\217\042\uffd6\043\uffd6\001\002\000\062\013" +
-    "\uffaf\032\uffaf\033\uffaf\035\uffaf\036\uffaf\037\uffaf\040\uffaf" +
-    "\041\uffaf\044\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\001\002\000\054\002" +
-    "\uffb1\004\uffb1\006\055\007\uffb1\010\uffb1\012\uffb1\013\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\042\uffb1" +
-    "\043\uffb1\001\002\000\052\002\uffb2\004\uffb2\007\uffb2\010" +
-    "\uffb2\012\uffb2\013\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\042\uffb2\043\uffb2\001\002\000\044\002\uffc5" +
-    "\007\uffc5\012\uffc5\013\uffc5\014\uffc5\022\uffc5\023\uffc5\024" +
-    "\uffc5\025\uffc5\026\uffc5\027\uffc5\030\uffc5\031\uffc5\032\uffc5" +
-    "\033\uffc5\042\uffc5\043\uffc5\001\002\000\004\012\243\001" +
-    "\002\000\054\002\uff9b\004\uff9b\006\uff9b\007\uff9b\010\uff9b" +
-    "\012\uff9b\013\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\042\uff9b\043\uff9b\001\002\000\052\002\uffb5\004" +
-    "\153\007\uffb5\010\uffb5\012\uffb5\013\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\042\uffb5\043\uffb5\001\002" +
-    "\000\004\034\246\001\002\000\004\012\247\001\002\000" +
-    "\054\002\uff8a\004\uff8a\006\uff8a\007\uff8a\010\uff8a\012\uff8a" +
-    "\013\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" +
-    "\042\uff8a\043\uff8a\001\002\000\052\002\uffb8\004\153\007" +
-    "\uffb8\010\uffb8\012\uffb8\013\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\042\uffb8\043\uffb8\001\002\000\052" +
-    "\002\uffdc\004\uffdc\007\uffdc\010\uffdc\012\uffdc\013\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\042\uffdc\043" +
-    "\uffdc\001\002\000\062\013\uffde\032\uffde\033\uffde\035\uffde" +
-    "\036\uffde\037\uffde\040\uffde\041\uffde\044\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\001\002\000\004\034\254\001\002\000\004\014\255" +
-    "\001\002\000\004\034\256\001\002\000\004\012\257\001" +
-    "\002\000\012\002\ufff4\004\ufff4\010\ufff4\021\ufff4\001\002" +
-    "\000\004\034\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\035\uffdf\036\uffdf\037\uffdf\040\uffdf" +
-    "\041\uffdf\044\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\001\002\000\064\013" +
-    "\027\016\020\032\031\033\040\035\034\036\113\037\141" +
-    "\040\047\041\051\044\015\045\014\046\016\047\036\050" +
-    "\037\051\044\052\025\053\050\054\043\055\041\056\035" +
-    "\057\030\060\045\061\021\062\012\063\042\001\002\000" +
-    "\064\013\027\016\020\032\031\033\040\035\034\036\113" +
-    "\037\141\040\047\041\051\044\015\045\014\046\016\047" +
-    "\036\050\037\051\044\052\025\053\050\054\043\055\041" +
-    "\056\035\057\030\060\045\061\021\062\012\063\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\035\034\036\113" +
-    "\037\141\040\047\041\051\044\015\045\014\046\016\047" +
-    "\036\050\037\051\044\052\025\053\050\054\043\055\041" +
-    "\056\035\057\030\060\045\061\021\062\012\063\042\001" +
-    "\002\000\064\013\027\016\020\032\031\033\040\035\034" +
-    "\036\113\037\141\040\047\041\051\044\015\045\014\046" +
-    "\016\047\036\050\037\051\044\052\025\053\050\054\043" +
-    "\055\041\056\035\057\030\060\045\061\021\062\012\063" +
-    "\042\001\002\000\006\002\ufff9\010\ufff9\001\002\000\006" +
-    "\002\ufff8\010\ufff8\001\002\000\004\034\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\035\034\036\033\037\046\040\047\041\051\044" +
-    "\015\045\014\046\016\047\036\050\037\051\044\052\025" +
-    "\053\050\054\043\055\041\056\035\057\030\060\045\061" +
-    "\021\062\012\063\042\001\002\000\004\002\ufffd\001\002" +
-    "\000\004\002\uffff\001\002\000\004\002\001\001\002" });
+    /**
+     * 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 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);
+    /**
+     * Access to production table.
+     */
+    public short[][] production_table() {
+      return _production_table;
     }
 
-  /** Invoke a user supplied parse action. */
-  public com.sun.java_cup.internal.runtime.Symbol do_action(
-    int                        act_num,
-    com.sun.java_cup.internal.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);
-  }
+    /**
+     * Parse-action table.
+     */
+    protected static final short[][] _action_table
+            = unpackFromStrings(new String[]{
+        "\000\307\000\006\066\006\067\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\034\057\035\034\036\113\037\141\040\142\041\145"
+        + "\044\063\045\062\046\065\047\115\050\123\051\136\052"
+        + "\077\053\143\054\131\055\125\056\116\057\104\060\140"
+        + "\061\067\062\060\063\127\064\132\065\072\001\002\000"
+        + "\070\004\013\013\027\016\020\021\023\032\031\033\040"
+        + "\035\034\036\033\037\046\040\047\041\051\044\015\045"
+        + "\014\046\016\047\036\050\037\051\044\052\025\053\050"
+        + "\054\043\055\041\056\035\057\030\060\045\061\021\062"
+        + "\012\063\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\013\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\042\uff7a\043\uff7a\001"
+        + "\002\000\070\002\ufffc\010\ufffc\013\027\016\020\032\031"
+        + "\033\040\035\034\036\113\037\141\040\047\041\051\044"
+        + "\015\045\014\046\016\047\036\050\037\051\044\052\025"
+        + "\053\050\054\043\055\041\056\035\057\030\060\045\061"
+        + "\021\062\012\063\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\035\uffe0\036\uffe0"
+        + "\037\uffe0\040\uffe0\041\uffe0\044\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\001"
+        + "\002\000\054\002\uff7b\004\uff7b\006\uff7b\007\uff7b\010\uff7b"
+        + "\012\uff7b\013\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\042\uff7b\043\uff7b\001\002\000\062\013\027\032"
+        + "\031\033\040\035\034\036\113\037\141\040\047\041\051"
+        + "\044\015\045\014\046\016\047\036\050\037\051\044\052"
+        + "\170\053\166\054\043\055\041\056\035\057\030\060\045"
+        + "\061\021\062\012\063\042\001\002\000\064\013\027\016"
+        + "\020\032\031\033\040\035\034\036\113\037\141\040\047"
+        + "\041\051\044\015\045\014\046\016\047\036\050\037\051"
+        + "\044\052\025\053\050\054\043\055\041\056\035\057\030"
+        + "\060\045\061\021\062\012\063\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\013\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\042\uff7d\043\uff7d"
+        + "\001\002\000\056\002\uff85\004\uff85\006\uff85\007\uff85\010"
+        + "\uff85\011\uff85\012\uff85\013\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\042\uff85\043\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\013\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\042\uff86\043\uff86\001\002\000\054"
+        + "\002\uff7e\004\uff7e\006\uff7e\007\uff7e\010\uff7e\012\uff7e\013"
+        + "\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\042"
+        + "\uff7e\043\uff7e\001\002\000\054\002\uff77\004\uff77\006\uff77"
+        + "\007\uff77\010\uff77\012\uff77\013\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\042\uff77\043\uff77\001\002\000"
+        + "\054\002\uff76\004\uff76\006\uff76\007\uff76\010\uff76\012\uff76"
+        + "\013\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"
+        + "\042\uff76\043\uff76\001\002\000\056\002\uff84\004\uff84\006"
+        + "\uff84\007\uff84\010\uff84\011\uff84\012\uff84\013\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\042\uff84\043\uff84"
+        + "\001\002\000\054\002\uff81\004\uff81\006\uff81\007\uff81\010"
+        + "\uff81\012\uff81\013\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\042\uff81\043\uff81\001\002\000\054\002\uff78"
+        + "\004\uff78\006\uff78\007\uff78\010\uff78\012\uff78\013\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\042\uff78\043"
+        + "\uff78\001\002\000\054\002\uff82\004\uff82\006\uff82\007\uff82"
+        + "\010\uff82\012\uff82\013\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\042\uff82\043\uff82\001\002\000\054\002"
+        + "\uff79\004\uff79\006\uff79\007\uff79\010\uff79\012\uff79\013\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\042\uff79"
+        + "\043\uff79\001\002\000\054\002\uff7c\004\uff7c\006\uff7c\007"
+        + "\uff7c\010\uff7c\012\uff7c\013\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\042\uff7c\043\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\013\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\042\uffdd\043\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"
+        + "\034\057\035\034\036\113\037\141\040\142\041\145\044"
+        + "\063\045\062\046\065\047\115\050\123\051\136\052\077"
+        + "\053\143\054\131\055\125\056\116\057\104\060\140\061"
+        + "\067\062\060\063\127\064\132\065\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\013\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\042\uff9a"
+        + "\043\uff9a\001\002\000\060\002\uff7a\004\uff7a\006\uff7a\007"
+        + "\uff7a\010\uff7a\011\uff7a\012\uff7a\013\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\042\uff7a\043\uff7a"
+        + "\001\002\000\126\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\035\034\036\113\037\141\040\142\041\145"
+        + "\042\uffb9\043\uffb9\044\063\045\062\046\065\047\115\050"
+        + "\123\051\136\052\077\053\143\054\131\055\125\056\116"
+        + "\057\104\060\140\061\067\062\060\063\127\001\002\000"
+        + "\054\002\uff89\004\uff89\006\uff89\007\uff89\010\uff89\012\uff89"
+        + "\013\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"
+        + "\042\uff89\043\uff89\001\002\000\054\002\uff8b\004\uff8b\006"
+        + "\uff8b\007\uff8b\010\uff8b\012\uff8b\013\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\042\uff8b\043\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\042\uffd5\043\uffd5"
+        + "\001\002\000\004\011\245\001\002\000\062\013\uffae\032"
+        + "\uffae\033\uffae\035\uffae\036\uffae\037\uffae\040\uffae\041\uffae"
+        + "\044\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\001\002\000\060\002\uff7b\004"
+        + "\uff7b\006\uff7b\007\uff7b\010\uff7b\011\uff7b\012\uff7b\013\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"
+        + "\042\uff7b\043\uff7b\001\002\000\070\005\111\013\103\016"
+        + "\066\017\106\032\031\033\040\035\034\036\113\037\141"
+        + "\040\142\041\145\044\063\045\062\046\065\047\115\050"
+        + "\123\051\136\052\077\053\143\054\131\055\125\056\116"
+        + "\057\104\060\140\061\067\062\060\063\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\034\057\035"
+        + "\034\036\113\037\141\040\142\041\145\044\063\045\062"
+        + "\046\065\047\115\050\123\051\136\052\077\053\143\054"
+        + "\131\055\125\056\116\057\104\060\140\061\067\062\060"
+        + "\063\127\064\132\065\072\001\002\000\054\002\uff99\004"
+        + "\uff99\006\uff99\007\uff99\010\uff99\012\uff99\013\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\042\uff99\043\uff99"
+        + "\001\002\000\046\002\uffb7\007\uffb7\010\uffb7\012\uffb7\013"
+        + "\uffb7\014\uffb7\022\uffb7\023\uffb7\024\uffb7\025\uffb7\026\uffb7"
+        + "\027\uffb7\030\uffb7\031\uffb7\032\uffb7\033\uffb7\042\uffb7\043"
+        + "\uffb7\001\002\000\054\002\uff97\004\uff97\006\uff97\007\uff97"
+        + "\010\uff97\012\uff97\013\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\042\uff97\043\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\034\057\035\034\036"
+        + "\113\037\141\040\142\041\145\044\063\045\062\046\065"
+        + "\047\115\050\123\051\136\052\077\053\143\054\131\055"
+        + "\125\056\116\057\104\060\140\061\067\062\060\063\127"
+        + "\064\132\065\072\001\002\000\016\002\uffd9\007\uffd9\012"
+        + "\uffd9\014\uffd9\042\uffd9\043\234\001\002\000\060\002\uff7f"
+        + "\004\uff7f\006\uff7f\007\uff7f\010\uff7f\011\uff7f\012\uff7f\013"
+        + "\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\042\uff7f\043\uff7f\001\002\000\062\013\103\032\031"
+        + "\033\040\035\034\036\113\037\141\040\142\041\145\044"
+        + "\063\045\062\046\065\047\036\050\037\051\044\052\170"
+        + "\053\166\054\043\055\041\056\035\057\030\060\045\061"
+        + "\021\062\012\063\042\001\002\000\004\020\236\001\002"
+        + "\000\014\002\uffda\007\uffda\012\uffda\014\uffda\042\232\001"
+        + "\002\000\054\002\uff88\004\uff88\006\uff88\007\uff88\010\uff88"
+        + "\012\uff88\013\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\042\uff88\043\uff88\001\002\000\060\002\uff7d\004"
+        + "\uff7d\006\uff7d\007\uff7d\010\uff7d\011\uff7d\012\uff7d\013\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"
+        + "\042\uff7d\043\uff7d\001\002\000\022\002\uffd7\007\uffd7\012"
+        + "\uffd7\014\uffd7\022\216\023\217\042\uffd7\043\uffd7\001\002"
+        + "\000\052\002\uff9f\004\uff9f\007\uff9f\010\uff9f\012\uff9f\013"
+        + "\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\042"
+        + "\uff9f\043\uff9f\001\002\000\054\002\uffb4\004\uffb4\006\055"
+        + "\007\uffb4\010\uffb4\012\uffb4\013\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\042\uffb4\043\uffb4\001\002\000"
+        + "\046\002\uffbd\007\uffbd\010\uffbd\012\uffbd\013\uffbd\014\uffbd"
+        + "\022\uffbd\023\uffbd\024\uffbd\025\uffbd\026\uffbd\027\uffbd\030"
+        + "\uffbd\031\uffbd\032\uffbd\033\uffbd\042\uffbd\043\uffbd\001\002"
+        + "\000\052\002\uffa0\004\uffa0\007\uffa0\010\uffa0\012\uffa0\013"
+        + "\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\042"
+        + "\uffa0\043\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\042\uffd2\043\uffd2\001\002\000\056"
+        + "\002\uff75\004\uff75\006\uff75\007\uff75\010\uff75\011\uff75\012"
+        + "\uff75\013\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\042\uff75\043\uff75\001\002\000\044\002\uffca\007\uffca"
+        + "\012\uffca\013\uffca\014\uffca\022\uffca\023\uffca\024\uffca\025"
+        + "\uffca\026\uffca\027\uffca\030\uffca\031\uffca\032\uffca\033\uffca"
+        + "\042\uffca\043\uffca\001\002\000\060\002\uff77\004\uff77\006"
+        + "\uff77\007\uff77\010\uff77\011\uff77\012\uff77\013\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\042\uff77"
+        + "\043\uff77\001\002\000\060\002\uff7e\004\uff7e\006\uff7e\007"
+        + "\uff7e\010\uff7e\011\uff7e\012\uff7e\013\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\042\uff7e\043\uff7e"
+        + "\001\002\000\004\011\201\001\002\000\052\002\uffbc\004"
+        + "\uffbc\007\uffbc\010\uffbc\012\uffbc\013\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\042\uffbc\043\uffbc\001\002"
+        + "\000\046\002\uffc2\007\uffc2\010\uffc2\012\uffc2\013\uffc2\014"
+        + "\uffc2\022\uffc2\023\uffc2\024\uffc2\025\uffc2\026\uffc2\027\uffc2"
+        + "\030\uffc2\031\uffc2\032\uffc2\033\uffc2\042\uffc2\043\uffc2\001"
+        + "\002\000\054\002\uff9e\004\uff9e\006\055\007\uff9e\010\uff9e"
+        + "\012\uff9e\013\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\042\uff9e\043\uff9e\001\002\000\060\002\uff76\004"
+        + "\uff76\006\uff76\007\uff76\010\uff76\011\uff76\012\uff76\013\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"
+        + "\042\uff76\043\uff76\001\002\000\046\002\uffc4\007\uffc4\010"
+        + "\176\012\uffc4\013\uffc4\014\uffc4\022\uffc4\023\uffc4\024\uffc4"
+        + "\025\uffc4\026\uffc4\027\uffc4\030\uffc4\031\uffc4\032\uffc4\033"
+        + "\uffc4\042\uffc4\043\uffc4\001\002\000\060\002\uff81\004\uff81"
+        + "\006\uff81\007\uff81\010\uff81\011\uff81\012\uff81\013\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\042"
+        + "\uff81\043\uff81\001\002\000\054\002\uff9c\004\uff9c\006\uff9c"
+        + "\007\uff9c\010\uff9c\012\uff9c\013\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\042\uff9c\043\uff9c\001\002\000"
+        + "\060\002\uff78\004\uff78\006\uff78\007\uff78\010\uff78\011\uff78"
+        + "\012\uff78\013\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\042\uff78\043\uff78\001\002\000\052\002"
+        + "\uffc1\004\173\007\uffc1\010\uffc1\012\uffc1\013\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\042\uffc1\043\uffc1"
+        + "\001\002\000\060\002\uff82\004\uff82\006\uff82\007\uff82\010"
+        + "\uff82\011\uff82\012\uff82\013\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\042\uff82\043\uff82\001\002"
+        + "\000\054\002\uff98\004\uff98\006\uff98\007\uff98\010\uff98\012"
+        + "\uff98\013\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\042\uff98\043\uff98\001\002\000\004\007\171\001\002"
+        + "\000\046\032\031\033\040\035\034\036\113\037\141\047"
+        + "\036\050\037\051\044\052\170\053\166\054\043\055\041"
+        + "\056\035\057\030\060\045\061\021\062\012\063\042\001"
+        + "\002\000\052\002\uffba\004\uffba\007\uffba\010\uffba\012\uffba"
+        + "\013\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"
+        + "\042\uffba\043\uffba\001\002\000\060\002\uff79\004\uff79\006"
+        + "\uff79\007\uff79\010\uff79\011\uff79\012\uff79\013\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\042\uff79"
+        + "\043\uff79\001\002\000\052\002\uffb0\004\uffb0\007\uffb0\010"
+        + "\uffb0\012\uffb0\013\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\042\uffb0\043\uffb0\001\002\000\060\002\uff7c"
+        + "\004\uff7c\006\uff7c\007\uff7c\010\uff7c\011\uff7c\012\uff7c\013"
+        + "\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\042\uff7c\043\uff7c\001\002\000\056\002\uff83\004\uff83"
+        + "\006\uff83\007\uff83\010\uff83\011\uff83\012\uff83\013\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\042\uff83\043"
+        + "\uff83\001\002\000\054\002\uff8c\004\uff8c\006\uff8c\007\uff8c"
+        + "\010\uff8c\012\uff8c\013\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\042\uff8c\043\uff8c\001\002\000\060\002"
+        + "\uff80\004\uff80\006\uff80\007\uff80\010\uff80\011\uff80\012\uff80"
+        + "\013\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\042\uff80\043\uff80\001\002\000\044\002\uffc6\007"
+        + "\uffc6\012\uffc6\013\uffc6\014\uffc6\022\uffc6\023\uffc6\024\uffc6"
+        + "\025\uffc6\026\uffc6\027\uffc6\030\uffc6\031\uffc6\032\uffc6\033"
+        + "\uffc6\042\uffc6\043\uffc6\001\002\000\054\002\uff8d\004\uff8d"
+        + "\006\uff8d\007\uff8d\010\uff8d\012\uff8d\013\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\042\uff8d\043\uff8d\001"
+        + "\002\000\044\002\uffcd\007\uffcd\012\uffcd\013\160\014\uffcd"
+        + "\022\uffcd\023\uffcd\024\uffcd\025\uffcd\026\uffcd\027\uffcd\030"
+        + "\uffcd\031\uffcd\032\161\033\157\042\uffcd\043\uffcd\001\002"
+        + "\000\052\002\uffbe\004\153\007\uffbe\010\uffbe\012\uffbe\013"
+        + "\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\042"
+        + "\uffbe\043\uffbe\001\002\000\054\002\uff8e\004\uff8e\006\uff8e"
+        + "\007\uff8e\010\uff8e\012\uff8e\013\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\042\uff8e\043\uff8e\001\002\000"
+        + "\056\002\uff87\004\uff87\006\uff87\007\uff87\010\uff87\011\uff91"
+        + "\012\uff87\013\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\042\uff87\043\uff87\001\002\000\070\005\111\013"
+        + "\103\016\066\017\106\032\031\033\040\035\034\036\113"
+        + "\037\141\040\142\041\145\044\063\045\062\046\065\047"
+        + "\115\050\123\051\136\052\077\053\143\054\131\055\125"
+        + "\056\116\057\104\060\140\061\067\062\060\063\127\001"
+        + "\002\000\070\005\111\013\103\016\066\017\106\032\031"
+        + "\033\040\035\034\036\113\037\141\040\142\041\145\044"
+        + "\063\045\062\046\065\047\115\050\123\051\136\052\077"
+        + "\053\143\054\131\055\125\056\116\057\104\060\140\061"
+        + "\067\062\060\063\127\001\002\000\054\002\uff87\004\uff87"
+        + "\006\uff87\007\uff87\010\uff87\012\uff87\013\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\042\uff87\043\uff87\001"
+        + "\002\000\052\002\uffbb\004\uffbb\007\uffbb\010\uffbb\012\uffbb"
+        + "\013\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"
+        + "\042\uffbb\043\uffbb\001\002\000\052\002\uffb6\004\uffb6\007"
+        + "\uffb6\010\uffb6\012\uffb6\013\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\042\uffb6\043\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\034\057\035\034"
+        + "\036\113\037\141\040\142\041\145\044\063\045\062\046"
+        + "\065\047\115\050\123\051\136\052\077\053\143\054\131"
+        + "\055\125\056\116\057\104\060\140\061\067\062\060\063"
+        + "\127\064\132\065\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\034\057\035\034\036\113\037\141"
+        + "\040\142\041\145\044\063\045\062\046\065\047\115\050"
+        + "\123\051\136\052\077\053\143\054\131\055\125\056\116"
+        + "\057\104\060\140\061\067\062\060\063\127\064\132\065"
+        + "\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\034\057\035\034\036\113\037\141\040\142\041\145"
+        + "\044\063\045\062\046\065\047\115\050\123\051\136\052"
+        + "\077\053\143\054\131\055\125\056\116\057\104\060\140"
+        + "\061\067\062\060\063\127\064\132\065\072\001\002\000"
+        + "\044\002\uffc8\007\uffc8\012\uffc8\013\uffc8\014\uffc8\022\uffc8"
+        + "\023\uffc8\024\uffc8\025\uffc8\026\uffc8\027\uffc8\030\uffc8\031"
+        + "\uffc8\032\uffc8\033\uffc8\042\uffc8\043\uffc8\001\002\000\044"
+        + "\002\uffc9\007\uffc9\012\uffc9\013\uffc9\014\uffc9\022\uffc9\023"
+        + "\uffc9\024\uffc9\025\uffc9\026\uffc9\027\uffc9\030\uffc9\031\uffc9"
+        + "\032\uffc9\033\uffc9\042\uffc9\043\uffc9\001\002\000\044\002"
+        + "\uffc7\007\uffc7\012\uffc7\013\uffc7\014\uffc7\022\uffc7\023\uffc7"
+        + "\024\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031\uffc7\032"
+        + "\uffc7\033\uffc7\042\uffc7\043\uffc7\001\002\000\054\002\uff90"
+        + "\004\uff90\006\uff90\007\uff90\010\uff90\012\uff90\013\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\042\uff90\043"
+        + "\uff90\001\002\000\054\002\uff80\004\uff80\006\uff80\007\uff80"
+        + "\010\uff80\012\uff80\013\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\042\uff80\043\uff80\001\002\000\054\002"
+        + "\uff96\004\uff96\006\uff96\007\uff96\010\uff96\012\uff96\013\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\042\uff96"
+        + "\043\uff96\001\002\000\054\002\uff7f\004\uff7f\006\uff7f\007"
+        + "\uff7f\010\uff7f\012\uff7f\013\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\042\uff7f\043\uff7f\001\002\000\054"
+        + "\002\uffdb\004\uffdb\006\uffdb\007\uffdb\010\uffdb\012\uffdb\013"
+        + "\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\042"
+        + "\uffdb\043\uffdb\001\002\000\070\005\111\013\103\016\066"
+        + "\017\106\032\031\033\040\035\034\036\113\037\141\040"
+        + "\142\041\145\044\063\045\062\046\065\047\115\050\123"
+        + "\051\136\052\077\053\143\054\131\055\125\056\116\057"
+        + "\104\060\140\061\067\062\060\063\127\001\002\000\070"
+        + "\005\111\013\103\016\066\017\106\032\031\033\040\035"
+        + "\034\036\113\037\141\040\142\041\145\044\063\045\062"
+        + "\046\065\047\115\050\123\051\136\052\077\053\143\054"
+        + "\131\055\125\056\116\057\104\060\140\061\067\062\060"
+        + "\063\127\001\002\000\052\002\uffc0\004\153\007\uffc0\010"
+        + "\uffc0\012\uffc0\013\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\042\uffc0\043\uffc0\001\002\000\052\002\uffbf"
+        + "\004\153\007\uffbf\010\uffbf\012\uffbf\013\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\042\uffbf\043\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\034\057\035"
+        + "\034\036\113\037\141\040\142\041\145\044\063\045\062"
+        + "\046\065\047\115\050\123\051\136\052\077\053\143\054"
+        + "\131\055\125\056\116\057\104\060\140\061\067\062\060"
+        + "\063\127\064\132\065\072\001\002\000\044\002\uffc3\007"
+        + "\uffc3\012\uffc3\013\uffc3\014\uffc3\022\uffc3\023\uffc3\024\uffc3"
+        + "\025\uffc3\026\uffc3\027\uffc3\030\uffc3\031\uffc3\032\uffc3\033"
+        + "\uffc3\042\uffc3\043\uffc3\001\002\000\052\002\uff9d\004\uff9d"
+        + "\007\uff9d\010\uff9d\012\uff9d\013\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\042\uff9d\043\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\034"
+        + "\057\035\034\036\113\037\141\040\142\041\145\044\063"
+        + "\045\062\046\065\047\115\050\123\051\136\052\077\053"
+        + "\143\054\131\055\125\056\116\057\104\060\140\061\067"
+        + "\062\060\063\127\064\132\065\072\001\002\000\054\002"
+        + "\uff95\004\uff95\006\uff95\007\uff95\010\uff95\012\uff95\013\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\042\uff95"
+        + "\043\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\013\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\042\uff94\043\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\034\057\035\034\036\113\037\141"
+        + "\040\142\041\145\044\063\045\062\046\065\047\115\050"
+        + "\123\051\136\052\077\053\143\054\131\055\125\056\116"
+        + "\057\104\060\140\061\067\062\060\063\127\064\132\065"
+        + "\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\034\057\035\034\036\113"
+        + "\037\141\040\142\041\145\044\063\045\062\046\065\047"
+        + "\115\050\123\051\136\052\077\053\143\054\131\055\125"
+        + "\056\116\057\104\060\140\061\067\062\060\063\127\064"
+        + "\132\065\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\034\057\035\034\036\113\037\141\040\142"
+        + "\041\145\044\063\045\062\046\065\047\115\050\123\051"
+        + "\136\052\077\053\143\054\131\055\125\056\116\057\104"
+        + "\060\140\061\067\062\060\063\127\064\132\065\072\001"
+        + "\002\000\044\002\uffcb\007\uffcb\012\uffcb\013\160\014\uffcb"
+        + "\022\uffcb\023\uffcb\024\uffcb\025\uffcb\026\uffcb\027\uffcb\030"
+        + "\uffcb\031\uffcb\032\161\033\157\042\uffcb\043\uffcb\001\002"
+        + "\000\044\002\uffcc\007\uffcc\012\uffcc\013\160\014\uffcc\022"
+        + "\uffcc\023\uffcc\024\uffcc\025\uffcc\026\uffcc\027\uffcc\030\uffcc"
+        + "\031\uffcc\032\161\033\157\042\uffcc\043\uffcc\001\002\000"
+        + "\052\002\uffb3\004\uffb3\007\uffb3\010\uffb3\012\uffb3\013\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\042\uffb3"
+        + "\043\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\034\057\035\034\036\113\037\141\040\142\041"
+        + "\145\044\063\045\062\046\065\047\115\050\123\051\136"
+        + "\052\077\053\143\054\131\055\125\056\116\057\104\060"
+        + "\140\061\067\062\060\063\127\064\132\065\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\034\057"
+        + "\035\034\036\113\037\141\040\142\041\145\044\063\045"
+        + "\062\046\065\047\115\050\123\051\136\052\077\053\143"
+        + "\054\131\055\125\056\116\057\104\060\140\061\067\062"
+        + "\060\063\127\064\132\065\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\042\uffd3\043\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\034\057\035\034"
+        + "\036\113\037\141\040\142\041\145\044\063\045\062\046"
+        + "\065\047\115\050\123\051\136\052\077\053\143\054\131"
+        + "\055\125\056\116\057\104\060\140\061\067\062\060\063"
+        + "\127\064\132\065\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\034\057\035\034\036\113\037\141"
+        + "\040\142\041\145\044\063\045\062\046\065\047\115\050"
+        + "\123\051\136\052\077\053\143\054\131\055\125\056\116"
+        + "\057\104\060\140\061\067\062\060\063\127\064\132\065"
+        + "\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\034\057\035\034\036\113\037\141\040\142\041\145"
+        + "\044\063\045\062\046\065\047\115\050\123\051\136\052"
+        + "\077\053\143\054\131\055\125\056\116\057\104\060\140"
+        + "\061\067\062\060\063\127\064\132\065\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\034\057\035"
+        + "\034\036\113\037\141\040\142\041\145\044\063\045\062"
+        + "\046\065\047\115\050\123\051\136\052\077\053\143\054"
+        + "\131\055\125\056\116\057\104\060\140\061\067\062\060"
+        + "\063\127\064\132\065\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\042\uffce\043\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\042\uffcf\043\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\042\uffd0\043\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"
+        + "\042\uffd1\043\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\042\uffd4\043\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\034\057\035\034\036\113\037"
+        + "\141\040\142\041\145\044\063\045\062\046\065\047\115"
+        + "\050\123\051\136\052\077\053\143\054\131\055\125\056"
+        + "\116\057\104\060\140\061\067\062\060\063\127\064\132"
+        + "\065\072\001\002\000\016\002\uffd8\007\uffd8\012\uffd8\014"
+        + "\uffd8\042\uffd8\043\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\034\057\035\034\036\113\037\141"
+        + "\040\142\041\145\044\063\045\062\046\065\047\115\050"
+        + "\123\051\136\052\077\053\143\054\131\055\125\056\116"
+        + "\057\104\060\140\061\067\062\060\063\127\064\132\065"
+        + "\072\001\002\000\022\002\uffd6\007\uffd6\012\uffd6\014\uffd6"
+        + "\022\216\023\217\042\uffd6\043\uffd6\001\002\000\062\013"
+        + "\uffaf\032\uffaf\033\uffaf\035\uffaf\036\uffaf\037\uffaf\040\uffaf"
+        + "\041\uffaf\044\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\001\002\000\054\002"
+        + "\uffb1\004\uffb1\006\055\007\uffb1\010\uffb1\012\uffb1\013\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\042\uffb1"
+        + "\043\uffb1\001\002\000\052\002\uffb2\004\uffb2\007\uffb2\010"
+        + "\uffb2\012\uffb2\013\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\042\uffb2\043\uffb2\001\002\000\044\002\uffc5"
+        + "\007\uffc5\012\uffc5\013\uffc5\014\uffc5\022\uffc5\023\uffc5\024"
+        + "\uffc5\025\uffc5\026\uffc5\027\uffc5\030\uffc5\031\uffc5\032\uffc5"
+        + "\033\uffc5\042\uffc5\043\uffc5\001\002\000\004\012\243\001"
+        + "\002\000\054\002\uff9b\004\uff9b\006\uff9b\007\uff9b\010\uff9b"
+        + "\012\uff9b\013\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\042\uff9b\043\uff9b\001\002\000\052\002\uffb5\004"
+        + "\153\007\uffb5\010\uffb5\012\uffb5\013\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\042\uffb5\043\uffb5\001\002"
+        + "\000\004\034\246\001\002\000\004\012\247\001\002\000"
+        + "\054\002\uff8a\004\uff8a\006\uff8a\007\uff8a\010\uff8a\012\uff8a"
+        + "\013\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"
+        + "\042\uff8a\043\uff8a\001\002\000\052\002\uffb8\004\153\007"
+        + "\uffb8\010\uffb8\012\uffb8\013\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\042\uffb8\043\uffb8\001\002\000\052"
+        + "\002\uffdc\004\uffdc\007\uffdc\010\uffdc\012\uffdc\013\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\042\uffdc\043"
+        + "\uffdc\001\002\000\062\013\uffde\032\uffde\033\uffde\035\uffde"
+        + "\036\uffde\037\uffde\040\uffde\041\uffde\044\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\001\002\000\004\034\254\001\002\000\004\014\255"
+        + "\001\002\000\004\034\256\001\002\000\004\012\257\001"
+        + "\002\000\012\002\ufff4\004\ufff4\010\ufff4\021\ufff4\001\002"
+        + "\000\004\034\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\035\uffdf\036\uffdf\037\uffdf\040\uffdf"
+        + "\041\uffdf\044\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\001\002\000\064\013"
+        + "\027\016\020\032\031\033\040\035\034\036\113\037\141"
+        + "\040\047\041\051\044\015\045\014\046\016\047\036\050"
+        + "\037\051\044\052\025\053\050\054\043\055\041\056\035"
+        + "\057\030\060\045\061\021\062\012\063\042\001\002\000"
+        + "\064\013\027\016\020\032\031\033\040\035\034\036\113"
+        + "\037\141\040\047\041\051\044\015\045\014\046\016\047"
+        + "\036\050\037\051\044\052\025\053\050\054\043\055\041"
+        + "\056\035\057\030\060\045\061\021\062\012\063\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\035\034\036\113"
+        + "\037\141\040\047\041\051\044\015\045\014\046\016\047"
+        + "\036\050\037\051\044\052\025\053\050\054\043\055\041"
+        + "\056\035\057\030\060\045\061\021\062\012\063\042\001"
+        + "\002\000\064\013\027\016\020\032\031\033\040\035\034"
+        + "\036\113\037\141\040\047\041\051\044\015\045\014\046"
+        + "\016\047\036\050\037\051\044\052\025\053\050\054\043"
+        + "\055\041\056\035\057\030\060\045\061\021\062\012\063"
+        + "\042\001\002\000\006\002\ufff9\010\ufff9\001\002\000\006"
+        + "\002\ufff8\010\ufff8\001\002\000\004\034\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\035\034\036\033\037\046\040\047\041\051\044"
+        + "\015\045\014\046\016\047\036\050\037\051\044\052\025"
+        + "\053\050\054\043\055\041\056\035\057\030\060\045\061"
+        + "\021\062\012\063\042\001\002\000\004\002\ufffd\001\002"
+        + "\000\004\002\uffff\001\002\000\004\002\001\001\002"});
 
-  /** Indicates start state. */
-  public int start_state() {return 0;}
-  /** Indicates start production. */
-  public int start_production() {return 0;}
+    /**
+     * Access to parse-action table.
+     */
+    public short[][] action_table() {
+      return _action_table;
+    }
 
-  /** <code>EOF</code> Symbol index. */
-  public int EOF_sym() {return 0;}
+    /**
+     * <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"});
 
-  /** <code>error</code> Symbol index. */
-  public int error_sym() {return 1;}
+     /**
+      * Access to <code>reduce_goto</code> table.
+      */
+    public short[][] reduce_table() {
+        return _reduce_table;
+    }
+
+    /**
+     * Instance of action encapsulation class.
+     */
+    protected parser_actions action_obj;
+
+    /**
+     * Action encapsulation object initializer.
+     */
+    protected void init_actions() {
+        action_obj = new parser_actions(this);
+    }
 
+    /** Invoke a user supplied parse action. */
+    public com.sun.java_cup.internal.runtime.Symbol do_action(
+        int                        act_num,
+        com.sun.java_cup.internal.runtime.lr_parser parser,
+        java.util.Stack            stack,
+        int                        top)
+        throws java.lang.Exception
+    {
+        /* call code in generated class */
+        return action_obj.parser_do_action(act_num, parser, stack, top);
+    }
 
+    /**
+     * Indicates start state.
+     */
+    public int start_state() {
+        return 0;
+    }
+
+    /**
+     * Indicates start production.
+     */
+    public int start_production() {
+        return 0;
+    }
+
+    /**
+     * <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.
@@ -868,7 +912,7 @@
      * Reference to the Parser class.
      */
     private Parser _parser;
-    private XSLTC  _xsltc;
+    private XSLTC _xsltc;
 
     /**
      * String representation of the expression being parsed.
@@ -896,7 +940,7 @@
     }
 
     public QName getQNameIgnoreDefaultNs(String name) {
-          return _parser.getQNameIgnoreDefaultNs(name);
+        return _parser.getQNameIgnoreDefaultNs(name);
     }
 
     public QName getQName(String namespace, String prefix, String localname) {
@@ -904,15 +948,15 @@
     }
 
     public void setMultiDocument(boolean flag) {
-          _xsltc.setMultiDocument(flag);
+        _xsltc.setMultiDocument(flag);
     }
 
     public void setCallsNodeset(boolean flag) {
-          _xsltc.setCallsNodeset(flag);
+        _xsltc.setCallsNodeset(flag);
     }
 
     public void setHasIdCall(boolean flag) {
-          _xsltc.setHasIdCall(flag);
+        _xsltc.setHasIdCall(flag);
     }
 
 
@@ -922,37 +966,34 @@
      * 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).
+     * 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;
+            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();
+        } else if (test instanceof Integer) {
+            nodeType = ((Integer) test);
 
             return new StepPattern(axis, nodeType, predicates);
-        }
-        else {
-            QName name = (QName)test;
+        } else {
+            QName name = (QName) test;
             boolean setPriority = false;
 
             if (axis == Axis.NAMESPACE) {
                 nodeType = (name.toString().equals("*")) ? -1
-                                : _xsltc.registerNamespacePrefix(name);;
-            }
-            else {
+                        : _xsltc.registerNamespacePrefix(name);;
+            } else {
                 final String uri = name.getNamespace();
                 final String local = name.getLocalPart();
-                final QName namespace_uri =
-                    _parser.getQNameIgnoreDefaultNs("namespace-uri");
+                final QName namespace_uri
+                        = _parser.getQNameIgnoreDefaultNs("namespace-uri");
 
                 // Expand {uri}:* to *[namespace-uri() = 'uri'] - same for @*
                 if (uri != null && (local.equals("*") || local.equals("@*"))) {
@@ -964,22 +1005,20 @@
                     setPriority = (predicates.size() == 0);
 
                     predicates.add(
-                        new Predicate(
-                            new EqualityExpr(Operators.EQ,
-                                new NamespaceUriCall(namespace_uri),
-                                new LiteralExpr(uri))));
+                            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("@*")) {
+                            : NodeTest.ELEMENT;
+                } else if (local.equals("@*")) {
                     nodeType = NodeTest.ATTRIBUTE;
-                }
-                else {
+                } else {
                     nodeType = (axis == Axis.ATTRIBUTE) ? _xsltc.registerAttribute(name)
-                        : _xsltc.registerElement(name);
+                            : _xsltc.registerElement(name);
                 }
             }
 
@@ -996,19 +1035,17 @@
 
     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;
+            return (axis == Axis.ATTRIBUTE)
+                    ? NodeTest.ATTRIBUTE
+                    : (axis == Axis.NAMESPACE) ? -1 : NodeTest.ELEMENT;
+        } else if (test instanceof Integer) {
+            return ((Integer) test);
+        } else {
+            QName name = (QName) test;
 
             if (axis == Axis.NAMESPACE) {
                 return (name.toString().equals("*")) ? -1
-                    : _xsltc.registerNamespacePrefix(name);
+                        : _xsltc.registerNamespacePrefix(name);
             }
 
             if (name.getNamespace() == null) {
@@ -1016,27 +1053,25 @@
 
                 if (local.equals("*")) {
                     return (axis == Axis.ATTRIBUTE) ? NodeTest.ATTRIBUTE
-                        : NodeTest.ELEMENT;
-                }
-                else if (local.equals("@*")) {
+                            : NodeTest.ELEMENT;
+                } else if (local.equals("@*")) {
                     return NodeTest.ATTRIBUTE;
                 }
             }
 
             return (axis == Axis.ATTRIBUTE) ? _xsltc.registerAttribute(name)
-                : _xsltc.registerElement(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.
+     * 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 expression the expression to be parsed
      * @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 {
@@ -1044,10 +1079,9 @@
             _expression = expression;
             _lineNumber = lineNumber;
             return super.parse();
-        }
-        catch (IllegalCharException e) {
+        } catch (IllegalCharException e) {
             ErrorMsg err = new ErrorMsg(ErrorMsg.ILLEGAL_CHAR_ERR,
-                                        lineNumber, e.getMessage());
+                    lineNumber, e.getMessage());
             _parser.reportError(Constants.FATAL, err);
         }
         return null;
@@ -1061,10 +1095,11 @@
     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));
+        if (result != null) {
+            return (result);
+        } else {
+            return (_symbolTable.lookupName(name));
+        }
     }
 
     public final void addError(ErrorMsg error) {
@@ -1073,7 +1108,7 @@
 
     public void report_error(String message, Object info) {
         final ErrorMsg err = new ErrorMsg(ErrorMsg.SYNTAX_ERR, _lineNumber,
-            _expression);
+                _expression);
         _parser.reportError(Constants.FATAL, err);
     }
 
@@ -1084,2062 +1119,1661 @@
     public RelativeLocationPath insertStep(Step step, RelativeLocationPath rlp) {
         if (rlp instanceof Step) {
             return new ParentLocationPath(step, (Step) rlp);
-        }
-        else if (rlp instanceof ParentLocationPath) {
+        } else if (rlp instanceof ParentLocationPath) {
             final ParentLocationPath plp = (ParentLocationPath) rlp;
             final RelativeLocationPath newrlp = insertStep(step, plp.getPath());
             return new ParentLocationPath(newrlp, plp.getStep());
-        }
-        else {
+        } 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.
+     * 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);
+        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;
+/**
+ * Cup generated class to encapsulate user supplied action code.
+ */
+class parser_actions {
+
+    private final XPathParser parser;
 
-  /** Constructor */
-  CUP$XPathParser$actions(XPathParser parser) {
-    this.parser = parser;
-  }
+    /**
+     * Constructor
+     */
+    parser_actions(XPathParser parser) {
+        this.parser = parser;
+    }
 
-  /** Method with the actual generated action code. */
-  public final com.sun.java_cup.internal.runtime.Symbol CUP$XPathParser$do_action(
-    int                        CUP$XPathParser$act_num,
-    com.sun.java_cup.internal.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 */
-      com.sun.java_cup.internal.runtime.Symbol CUP$XPathParser$result;
+    /**
+     * Method with the actual generated action code.
+     */
+    public final Symbol parser_do_action(
+        int parser_act_num,
+        lr_parser parser_parser,
+        Stack<Symbol> parser_stack,
+        int parser_top)
+        throws java.lang.Exception {
+        /* Symbol object for return from actions */
+        Symbol parser_result;
 
-      /* select the action based on the action number */
-      switch (CUP$XPathParser$act_num)
-        {
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 140: // QName ::= ID
+        /* select the action based on the action number */
+        switch (parser_act_num) {
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 0: // $START ::= TopLevel EOF
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("id");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                SyntaxTreeNode start_val = (SyntaxTreeNode) (parser_stack.get(parser_top - 1)).value;
+                parser_result = new Symbol(0, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, start_val);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 139: // QName ::= SELF
-            {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("self");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            /* ACCEPT */
+            parser_parser.done_parsing();
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 138: // QName ::= PRECEDINGSIBLING
-            {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("preceding-sibling");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 136: // QName ::= PARENT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 1: // TopLevel ::= PATTERN Pattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("parent");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Pattern pattern = (Pattern) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(1, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, pattern);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 135: // QName ::= NAMESPACE
-            {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("namespace");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 134: // QName ::= FOLLOWINGSIBLING
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 2: // TopLevel ::= EXPRESSION Expr
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("following-sibling");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression expr = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(1, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, expr);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 133: // QName ::= FOLLOWING
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 3: // Pattern ::= LocationPathPattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("following");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Pattern lpp = (Pattern) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(28, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, lpp);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 132: // QName ::= DESCENDANTORSELF
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 4: // Pattern ::= LocationPathPattern VBAR Pattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("decendant-or-self");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Pattern lpp = (Pattern) (parser_stack.get(parser_top - 2)).value;
+                Pattern p = (Pattern) (parser_stack.get(parser_top - 0)).value;
+                Pattern result = new AlternativePattern(lpp, p);
+                parser_result = new Symbol(28, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 131: // QName ::= DESCENDANT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 5: // LocationPathPattern ::= SLASH
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("decendant");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Pattern result = new AbsolutePathPattern(null);
+                parser_result = new Symbol(29, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 130: // QName ::= CHILD
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 6: // LocationPathPattern ::= SLASH RelativePathPattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("child");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
+                Pattern result = new AbsolutePathPattern(rpp);
+                parser_result = new Symbol(29, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 129: // QName ::= ATTRIBUTE
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 7: // LocationPathPattern ::= IdKeyPattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("attribute");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                IdKeyPattern ikp = (IdKeyPattern) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(29, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, ikp);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 127: // QName ::= ANCESTOR
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 8: // LocationPathPattern ::= IdKeyPattern SLASH RelativePathPattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("child");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                IdKeyPattern ikp = (IdKeyPattern) (parser_stack.get(parser_top - 2)).value;
+                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
+                Pattern result = new ParentPattern(ikp, rpp);
+                parser_result = new Symbol(29, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 126: // QName ::= KEY
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 9: // LocationPathPattern ::= IdKeyPattern DSLASH RelativePathPattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("key");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                IdKeyPattern ikp = (IdKeyPattern) (parser_stack.get(parser_top - 2)).value;
+                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
+                Pattern result = new AncestorPattern(ikp, rpp);
+                parser_result = new Symbol(29, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 125: // QName ::= MOD
-            {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("mod");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 124: // QName ::= DIV
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 10: // LocationPathPattern ::= DSLASH RelativePathPattern
             {
-              QName RESULT = null;
-                 RESULT = parser.getQNameIgnoreDefaultNs("div");
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
+                Pattern result = new AncestorPattern(rpp);
+                parser_result = new Symbol(29, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 123: // QName ::= QNAME
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 11: // LocationPathPattern ::= RelativePathPattern
             {
-              QName RESULT = null;
-                int qnameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int qnameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                String qname = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = parser.getQNameIgnoreDefaultNs(qname);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(37/*QName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(29, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, rpp);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 122: // NameTest ::= QName
-            {
-              Object RESULT = null;
-                int qnleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int qnright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                QName qn = (QName)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = qn;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(26/*NameTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 121: // NameTest ::= STAR
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 12: // IdKeyPattern ::= ID LPAREN Literal RPAREN
             {
-              Object RESULT = null;
-                 RESULT = null;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(26/*NameTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                String l = (String) (parser_stack.get(parser_top - 1)).value;
+                IdKeyPattern result = new IdPattern(l);
+                parser.setHasIdCall(true);
+                parser_result = new Symbol(27, (parser_stack.get(parser_top - 3)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 120: // NodeTest ::= PI
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 13: // IdKeyPattern ::= KEY LPAREN Literal COMMA Literal RPAREN
             {
-              Object RESULT = null;
-                 RESULT = new Integer(NodeTest.PI);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(25/*NodeTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                String l1 = (String) (parser_stack.get(parser_top - 3)).value;
+                String l2 = (String) (parser_stack.get(parser_top - 1)).value;
+                IdKeyPattern result = new KeyPattern(l1, l2);
+                parser_result = new Symbol(27, (parser_stack.get(parser_top - 5)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 119: // NodeTest ::= PIPARAM LPAREN Literal RPAREN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 14: // ProcessingInstructionPattern ::= PIPARAM LPAREN Literal RPAREN
             {
-              Object RESULT = null;
-                int lleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int lright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                String l = (String)((com.sun.java_cup.internal.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);
+                String l = (String) (parser_stack.get(parser_top - 1)).value;
+                StepPattern result = new ProcessingInstructionPattern(l);
+                parser_result = new Symbol(30, (parser_stack.get(parser_top - 3)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(25/*NodeTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 118: // NodeTest ::= COMMENT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 15: // RelativePathPattern ::= StepPattern
             {
-              Object RESULT = null;
-                 RESULT = new Integer(NodeTest.COMMENT);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(25/*NodeTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                StepPattern sp = (StepPattern) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(31, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, sp);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 117: // NodeTest ::= TEXT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 16: // RelativePathPattern ::= StepPattern SLASH RelativePathPattern
+            {
+                StepPattern sp = (StepPattern) (parser_stack.get(parser_top - 2)).value;
+                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
+                RelativePathPattern result = new ParentPattern(sp, rpp);
+                parser_result = new Symbol(31, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 17: // RelativePathPattern ::= StepPattern DSLASH RelativePathPattern
             {
-              Object RESULT = null;
-                 RESULT = new Integer(NodeTest.TEXT);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(25/*NodeTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                StepPattern sp = (StepPattern) (parser_stack.get(parser_top - 2)).value;
+                RelativePathPattern rpp = (RelativePathPattern) (parser_stack.get(parser_top - 0)).value;
+                RelativePathPattern result = new AncestorPattern(sp, rpp);
+                parser_result = new Symbol(31, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 116: // NodeTest ::= NODE
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 18: // StepPattern ::= NodeTestPattern
             {
-              Object RESULT = null;
-                 RESULT = new Integer(NodeTest.ANODE);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(25/*NodeTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ntright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Object nt = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = nt;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(25/*NodeTest*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Object nt = parser_stack.get(parser_top - 0).value;
+                StepPattern result = parser.createStepPattern(Axis.CHILD, nt, null);
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 114: // Argument ::= Expr
-            {
-              Expression RESULT = null;
-                int exleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int exright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ex = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = ex;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(3/*Argument*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 113: // VariableName ::= QName
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 19: // StepPattern ::= NodeTestPattern Predicates
             {
-              QName RESULT = null;
-                int vnameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int vnameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                QName vname = (QName)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+                Object nt = parser_stack.get(parser_top - 1).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
+                StepPattern result = parser.createStepPattern(Axis.CHILD, nt, pp);
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-            RESULT = vname;
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(39/*VariableName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 20: // StepPattern ::= ProcessingInstructionPattern
+            {
+                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, pip);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 112: // FunctionName ::= QName
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 21: // StepPattern ::= ProcessingInstructionPattern Predicates
             {
-              QName RESULT = null;
-                int fnameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int fnameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                QName fname = (QName)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-
-            RESULT = fname;
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(38/*FunctionName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 1)).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
+                StepPattern result = (ProcessingInstructionPattern) pip.setPredicates(pp);
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 111: // NonemptyArgumentList ::= Argument COMMA NonemptyArgumentList
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 22: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern
             {
-              Vector RESULT = null;
-                int argleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int argright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression arg = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int arglleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int arglright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector argl = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 argl.insertElementAt(arg, 0); RESULT = argl;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(36/*NonemptyArgumentList*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer axis = (Integer) (parser_stack.get(parser_top - 1)).value;
+                Object nt = parser_stack.get(parser_top - 0).value;
+                StepPattern result = parser.createStepPattern(axis, nt, null);
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 110: // NonemptyArgumentList ::= Argument
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 23: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern Predicates
             {
-              Vector RESULT = null;
-                int argleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int argright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression arg = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-
-            Vector temp = new Vector();
-            temp.addElement(arg);
-            RESULT = temp;
+                Integer axis = (Integer) (parser_stack.get(parser_top - 2)).value;
+                Object nt = parser_stack.get(parser_top - 1).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
+                StepPattern result = parser.createStepPattern(axis, nt, pp);
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(36/*NonemptyArgumentList*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 109: // FunctionCall ::= FunctionName LPAREN NonemptyArgumentList RPAREN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 24: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern
             {
-              Expression RESULT = null;
-                int fnameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left;
-                int fnameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).right;
-                QName fname = (QName)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).value;
-                int arglleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int arglright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Vector argl = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 0)).value;
+                StepPattern result = pip;    // TODO: report error if axis is attribute
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 25: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern Predicates
+            {
+                StepPattern pip = (StepPattern) (parser_stack.get(parser_top - 1)).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
+                // TODO: report error if axis is attribute
+                StepPattern result = (ProcessingInstructionPattern) pip.setPredicates(pp);
+                parser_result = new Symbol(32, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-          if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
-            RESULT = new ConcatCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
-            RESULT = new NumberCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("document")) {
-            parser.setMultiDocument(true);
-            RESULT = new DocumentCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
-            RESULT = new StringCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("boolean")) {
-            RESULT = new BooleanCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
-            RESULT = new NameCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
-            RESULT = new GenerateIdCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("not")) {
-            RESULT = new NotCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("format-number")) {
-            RESULT = new FormatNumberCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("unparsed-entity-uri")) {
-            RESULT = new UnparsedEntityUriCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("key")) {
-            RESULT = new KeyCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("id")) {
-            RESULT = new KeyCall(fname, argl);
-            parser.setHasIdCall(true);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("ceiling")) {
-            RESULT = new CeilingCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("round")) {
-            RESULT = new RoundCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("floor")) {
-            RESULT = new FloorCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("contains")) {
-            RESULT = new ContainsCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("string-length")) {
-            RESULT = new StringLengthCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("starts-with")) {
-            RESULT = new StartsWithCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("function-available")) {
-            RESULT = new FunctionAvailableCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("element-available")) {
-            RESULT = new ElementAvailableCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
-            RESULT = new LocalNameCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("lang")) {
-            RESULT = new LangCall(fname, argl);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
-            RESULT = new NamespaceUriCall(fname, argl);
-          }
-          else if (fname == parser.getQName(Constants.TRANSLET_URI, "xsltc", "cast")) {
-            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);
-          }
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 26: // NodeTestPattern ::= NameTestPattern
+            {
+                Object nt = parser_stack.get(parser_top - 0).value;
+                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, nt);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 27: // NodeTestPattern ::= NODE
+            {
+                Object result = NodeTest.ANODE;
+                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 28: // NodeTestPattern ::= TEXT
+            {
+                Object result = NodeTest.TEXT;
+                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 29: // NodeTestPattern ::= COMMENT
+            {
+                Object result = NodeTest.COMMENT;
+                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 30: // NodeTestPattern ::= PI
+            {
+                Object result = NodeTest.PI;
+                parser_result = new Symbol(33, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(16/*FunctionCall*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 31: // NameTestPattern ::= STAR
+            {
+                Object result = null;
+                parser_result = new Symbol(34, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 108: // FunctionCall ::= FunctionName LPAREN RPAREN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 32: // NameTestPattern ::= QName
             {
-              Expression RESULT = null;
-                int fnameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int fnameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                QName fname = (QName)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+                QName qn = (QName) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(34, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, qn);
+            }
+            return parser_result;
 
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 33: // ChildOrAttributeAxisSpecifier ::= ATSIGN
+            {
+                Integer result = Axis.ATTRIBUTE;
+                parser_result = new Symbol(42, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-          if (fname == parser.getQNameIgnoreDefaultNs("current")) {
-            RESULT = new CurrentCall(fname);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
-            RESULT = new NumberCall(fname, parser.EmptyArgs);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
-            RESULT = new StringCall(fname, parser.EmptyArgs);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
-            RESULT = new ConcatCall(fname, parser.EmptyArgs);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("true")) {
-            RESULT = new BooleanExpr(true);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("false")) {
-            RESULT = new BooleanExpr(false);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
-            RESULT = new NameCall(fname);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
-            RESULT = new GenerateIdCall(fname, parser.EmptyArgs);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("string-length")) {
-            RESULT = new StringLengthCall(fname, parser.EmptyArgs);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("position")) {
-            RESULT = new PositionCall(fname);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("last")) {
-            RESULT = new LastCall(fname);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
-            RESULT = new LocalNameCall(fname);
-          }
-          else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
-            RESULT = new NamespaceUriCall(fname);
-          }
-          else {
-            RESULT = new FunctionCall(fname, parser.EmptyArgs);
-          }
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 34: // ChildOrAttributeAxisSpecifier ::= CHILD DCOLON
+            {
+                Integer result = Axis.CHILD;
+                parser_result = new Symbol(42, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(16/*FunctionCall*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 35: // ChildOrAttributeAxisSpecifier ::= ATTRIBUTE DCOLON
+            {
+                Integer result = Axis.ATTRIBUTE;
+                parser_result = new Symbol(42, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 107: // VariableReference ::= DOLLAR VariableName
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 36: // Predicates ::= Predicate
+            {
+                Expression p = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Vector temp = new Vector();
+                temp.add(p);
+                parser_result = new Symbol(35, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, temp);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 37: // Predicates ::= Predicate Predicates
             {
-              Expression RESULT = null;
-                int varNameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int varNameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                QName varName = (QName)((com.sun.java_cup.internal.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);
-                }
+                Expression p = (Expression) (parser_stack.get(parser_top - 1)).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
+                pp.add(0, p);
+                parser_result = new Symbol(35, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, pp);
             }
-
-            if (node == null) {
-                RESULT = new UnresolvedRef(varName);
-            }
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(15/*VariableReference*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 106: // PrimaryExpr ::= FunctionCall
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 38: // Predicate ::= LBRACK Expr RBRACK
             {
-              Expression RESULT = null;
-                int fcleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int fcright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression fc = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = fc;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(17/*PrimaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression e = (Expression) (parser_stack.get(parser_top - 1)).value;
+                Expression result = new Predicate(e);
+                parser_result = new Symbol(5, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 105: // PrimaryExpr ::= REAL
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 39: // Expr ::= OrExpr
             {
-              Expression RESULT = null;
-                int numleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int numright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Double num = (Double)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new RealExpr(num.doubleValue());
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(17/*PrimaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ex = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(2, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, ex);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 104: // PrimaryExpr ::= INT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 40: // OrExpr ::= AndExpr
             {
-              Expression RESULT = null;
-                int numleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int numright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Long num = (Long)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(8, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, ae);
+            }
+            return parser_result;
 
-           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());
-           }
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 41: // OrExpr ::= OrExpr OR AndExpr
+            {
+                Expression oe = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new LogicalExpr(LogicalExpr.OR, oe, ae);
+                parser_result = new Symbol(8, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(17/*PrimaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 42: // AndExpr ::= EqualityExpr
+            {
+                Expression e = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(9, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, e);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 103: // PrimaryExpr ::= Literal
-            {
-              Expression RESULT = null;
-                int stringleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int stringright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                String string = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+            return parser_result;
 
-        /*
-        * 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);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 43: // AndExpr ::= AndExpr AND EqualityExpr
+            {
+                Expression ae = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ee = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new LogicalExpr(LogicalExpr.AND, ae, ee);
+                parser_result = new Symbol(9, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(17/*PrimaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 102: // PrimaryExpr ::= LPAREN Expr RPAREN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 44: // EqualityExpr ::= RelationalExpr
             {
-              Expression RESULT = null;
-                int exleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int exright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Expression ex = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                 RESULT = ex;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(17/*PrimaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression re = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(10, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, re);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 101: // PrimaryExpr ::= VariableReference
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 45: // EqualityExpr ::= EqualityExpr EQ RelationalExpr
+            {
+                Expression ee = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression re = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new EqualityExpr(Operators.EQ, ee, re);
+                parser_result = new Symbol(10, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 46: // EqualityExpr ::= EqualityExpr NE RelationalExpr
             {
-              Expression RESULT = null;
-                int vrleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int vrright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression vr = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = vr;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(17/*PrimaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ee = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression re = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new EqualityExpr(Operators.NE, ee, re);
+                parser_result = new Symbol(10, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 100: // FilterExpr ::= PrimaryExpr Predicates
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 47: // RelationalExpr ::= AdditiveExpr
             {
-              Expression RESULT = null;
-                int primaryleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int primaryright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Expression primary = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new FilterExpr(primary, pp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(6/*FilterExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(11, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, ae);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 99: // FilterExpr ::= PrimaryExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 48: // RelationalExpr ::= RelationalExpr LT AdditiveExpr
             {
-              Expression RESULT = null;
-                int primaryleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int primaryright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression primary = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = primary;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(6/*FilterExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new RelationalExpr(Operators.LT, re, ae);
+                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_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 com.sun.java_cup.internal.runtime.Symbol(20/*AbbreviatedStep*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 97: // AbbreviatedStep ::= DOT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 49: // RelationalExpr ::= RelationalExpr GT AdditiveExpr
             {
-              Expression RESULT = null;
-                 RESULT = new Step(Axis.SELF, NodeTest.ANODE, null);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(20/*AbbreviatedStep*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new RelationalExpr(Operators.GT, re, ae);
+                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 96: // AxisName ::= SELF
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 50: // RelationalExpr ::= RelationalExpr LE AdditiveExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.SELF);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new RelationalExpr(Operators.LE, re, ae);
+                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 95: // AxisName ::= PRECEDINGSIBLING
-            {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.PRECEDINGSIBLING);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 94: // AxisName ::= PRECEDING
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 51: // RelationalExpr ::= RelationalExpr GE AdditiveExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.PRECEDING);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression re = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ae = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new RelationalExpr(Operators.GE, re, ae);
+                parser_result = new Symbol(11, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 93: // AxisName ::= PARENT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 52: // AdditiveExpr ::= MultiplicativeExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.PARENT);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression me = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(12, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, me);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 92: // AxisName ::= NAMESPACE
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 53: // AdditiveExpr ::= AdditiveExpr PLUS MultiplicativeExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.NAMESPACE);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ae = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression me = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new BinOpExpr(BinOpExpr.PLUS, ae, me);
+                parser_result = new Symbol(12, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 91: // AxisName ::= FOLLOWINGSIBLING
-            {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.FOLLOWINGSIBLING);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 90: // AxisName ::= FOLLOWING
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 54: // AdditiveExpr ::= AdditiveExpr MINUS MultiplicativeExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.FOLLOWING);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ae = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression me = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new BinOpExpr(BinOpExpr.MINUS, ae, me);
+                parser_result = new Symbol(12, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 89: // AxisName ::= DESCENDANTORSELF
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 55: // MultiplicativeExpr ::= UnaryExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.DESCENDANTORSELF);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(13, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, ue);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 88: // AxisName ::= DESCENDANT
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 56: // MultiplicativeExpr ::= MultiplicativeExpr STAR UnaryExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.DESCENDANT);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression me = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new BinOpExpr(BinOpExpr.TIMES, me, ue);
+                parser_result = new Symbol(13, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 86: // AxisName ::= ATTRIBUTE
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 57: // MultiplicativeExpr ::= MultiplicativeExpr DIV UnaryExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.ATTRIBUTE);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression me = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new BinOpExpr(BinOpExpr.DIV, me, ue);
+                parser_result = new Symbol(13, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 85: // AxisName ::= ANCESTORORSELF
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 58: // MultiplicativeExpr ::= MultiplicativeExpr MOD UnaryExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.ANCESTORORSELF);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression me = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new BinOpExpr(BinOpExpr.MOD, me, ue);
+                parser_result = new Symbol(13, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 84: // AxisName ::= ANCESTOR
-            {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.ANCESTOR);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(40/*AxisName*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 83: // AxisSpecifier ::= ATSIGN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 59: // UnaryExpr ::= UnionExpr
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.ATTRIBUTE);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(41/*AxisSpecifier*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(14, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, ue);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 82: // AxisSpecifier ::= AxisName DCOLON
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 60: // UnaryExpr ::= MINUS UnaryExpr
             {
-              Integer RESULT = null;
-                int anleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int anright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Integer an = (Integer)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                 RESULT = an;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(41/*AxisSpecifier*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ue = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new UnaryOpExpr(ue);
+                parser_result = new Symbol(14, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 81: // Step ::= AbbreviatedStep
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 61: // UnionExpr ::= PathExpr
             {
-              Expression RESULT = null;
-                int abbrevleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int abbrevright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression abbrev = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = abbrev;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(7/*Step*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression pe = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(18, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, pe);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 80: // Step ::= AxisSpecifier NodeTest
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 62: // UnionExpr ::= PathExpr VBAR UnionExpr
             {
-              Expression RESULT = null;
-                int axisleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int axisright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Integer axis = (Integer)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ntestleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ntestright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Object ntest = (Object)((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(7/*Step*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression pe = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression rest = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new UnionPathExpr(pe, rest);
+                parser_result = new Symbol(18, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 79: // Step ::= AxisSpecifier NodeTest Predicates
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 63: // PathExpr ::= LocationPath
+            {
+                Expression lp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(19, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, lp);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 64: // PathExpr ::= FilterExpr
             {
-              Expression RESULT = null;
-                int axisleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int axisright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Integer axis = (Integer)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int ntestleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int ntestright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Object ntest = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new Step(axis.intValue(),
-                             parser.findNodeType(axis.intValue(), ntest),
-                             pp);
+                Expression fexp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(19, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, fexp);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(7/*Step*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 78: // Step ::= NodeTest Predicates
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 65: // PathExpr ::= FilterExpr SLASH RelativeLocationPath
             {
-              Expression RESULT = null;
-                int ntestleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int ntestright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Object ntest = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+                Expression fexp = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new FilterParentPath(fexp, rlp);
+                parser_result = new Symbol(19, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-            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 com.sun.java_cup.internal.runtime.Symbol(7/*Step*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 66: // PathExpr ::= FilterExpr DSLASH RelativeLocationPath
+            {
+                Expression fexp = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression rlp = (Expression) (parser_stack.get(parser_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();
+                }
+                parser_result = new Symbol(19, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, fpp);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 77: // Step ::= NodeTest
-            {
-              Expression RESULT = null;
-                int ntestleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ntestright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Object ntest = (Object)((com.sun.java_cup.internal.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);
-            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(7/*Step*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 67: // LocationPath ::= RelativeLocationPath
+            {
+                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(4, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, rlp);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 76: // AbbreviatedAbsoluteLocationPath ::= DSLASH RelativeLocationPath
-            {
-              Expression RESULT = null;
-                int rlpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression rlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+            return parser_result;
 
-           //
-           // 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));
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 68: // LocationPath ::= AbsoluteLocationPath
+            {
+                Expression alp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(4, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, alp);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(24/*AbbreviatedAbsoluteLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 69: // RelativeLocationPath ::= Step
+            {
+                Expression step = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(21, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, step);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 75: // AbbreviatedRelativeLocationPath ::= RelativeLocationPath DSLASH Step
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 70: // RelativeLocationPath ::= RelativeLocationPath SLASH Step
             {
-              Expression RESULT = null;
-                int rlpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int rlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression rlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int stepleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int stepright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression step = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+                Expression result = null;
+                Expression rlp = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression step = (Expression) (parser_stack.get(parser_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);
+                }
+                parser_result = new Symbol(21, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-           final Step right  = (Step)step;
-           final int  axis   = right.getAxis();
-           final int  type   = right.getNodeType();
-           final Vector predicates = right.getPredicates();
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 71: // RelativeLocationPath ::= AbbreviatedRelativeLocationPath
+            {
+                Expression arlp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(21, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, arlp);
+            }
+            return parser_result;
 
-           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);
-           }
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 72: // AbsoluteLocationPath ::= SLASH
+            {
+                Expression result = new AbsoluteLocationPath();
+                parser_result = new Symbol(23, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(22/*AbbreviatedRelativeLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 73: // AbsoluteLocationPath ::= SLASH RelativeLocationPath
+            {
+                Expression rlp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new AbsoluteLocationPath(rlp);
+                parser_result = new Symbol(23, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 74: // AbsoluteLocationPath ::= AbbreviatedAbsoluteLocationPath
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 74: // AbsoluteLocationPath ::= AbbreviatedAbsoluteLocationPath
+            {
+                Expression aalp = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(23, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, aalp);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 75: // AbbreviatedRelativeLocationPath ::= RelativeLocationPath DSLASH Step
             {
-              Expression RESULT = null;
-                int aalpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aalpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression aalp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = aalp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(23/*AbsoluteLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression rlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new AbsoluteLocationPath(rlp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(23/*AbsoluteLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = null;
+                Expression rlp = (Expression) (parser_stack.get(parser_top - 2)).value;
+                Expression step = (Expression) (parser_stack.get(parser_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);
+                }
+                parser_result = new Symbol(22, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 72: // AbsoluteLocationPath ::= SLASH
-            {
-              Expression RESULT = null;
-                 RESULT = new AbsoluteLocationPath();
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(23/*AbsoluteLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int arlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression arlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = arlp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(21/*RelativeLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int rlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression rlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int stepleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int stepright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression step = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+            return parser_result;
 
-        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 com.sun.java_cup.internal.runtime.Symbol(21/*RelativeLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.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 = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int stepright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression step = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = step;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(21/*RelativeLocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 68: // LocationPath ::= AbsoluteLocationPath
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 76: // AbbreviatedAbsoluteLocationPath ::= DSLASH RelativeLocationPath
             {
-              Expression RESULT = null;
-                int alpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int alpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression alp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = alp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(4/*LocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression rlp = (Expression) (parser_stack.get(parser_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);
+                Expression result = new AbsoluteLocationPath(parser.insertStep(step,
+                    (RelativeLocationPath) rlp));
+                parser_result = new Symbol(24, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 67: // LocationPath ::= RelativeLocationPath
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 77: // Step ::= NodeTest
             {
-              Expression RESULT = null;
-                int rlpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression rlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = rlp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(4/*LocationPath*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = null;
+                Object ntest = parser_stack.get(parser_top - 0).value;
+                if (ntest instanceof Step) {
+                    result = (Step) ntest;
+                } else {
+                    result = new Step(Axis.CHILD,
+                        parser.findNodeType(Axis.CHILD, ntest),
+                        null);
+                }
+                parser_result = new Symbol(7, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 66: // PathExpr ::= FilterExpr DSLASH RelativeLocationPath
-            {
-              Expression RESULT = null;
-                int fexpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int fexpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression fexp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int rlpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression rlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+            return parser_result;
 
-           //
-           // 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;
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 78: // Step ::= NodeTest Predicates
+            {
+                Expression result = null;
+                Object ntest = parser_stack.get(parser_top - 1).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_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);
+                }
+                parser_result = new Symbol(7, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(19/*PathExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 65: // PathExpr ::= FilterExpr SLASH RelativeLocationPath
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 79: // Step ::= AxisSpecifier NodeTest Predicates
             {
-              Expression RESULT = null;
-                int fexpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int fexpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression fexp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int rlpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rlpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression rlp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new FilterParentPath(fexp, rlp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(19/*PathExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer axis = (Integer) (parser_stack.get(parser_top - 2)).value;
+                Object ntest = parser_stack.get(parser_top - 1).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new Step(axis, parser.findNodeType(axis, ntest), pp);
+                parser_result = new Symbol(7, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 64: // PathExpr ::= FilterExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 80: // Step ::= AxisSpecifier NodeTest
             {
-              Expression RESULT = null;
-                int fexpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int fexpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression fexp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = fexp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(19/*PathExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer axis = (Integer) (parser_stack.get(parser_top - 1)).value;
+                Object ntest = parser_stack.get(parser_top - 0).value;
+                Expression result = new Step(axis, parser.findNodeType(axis, ntest), null);
+                parser_result = new Symbol(7, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 63: // PathExpr ::= LocationPath
-            {
-              Expression RESULT = null;
-                int lpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int lpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression lp = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = lp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(19/*PathExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 62: // UnionExpr ::= PathExpr VBAR UnionExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 81: // Step ::= AbbreviatedStep
             {
-              Expression RESULT = null;
-                int peleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int peright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression pe = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int restleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int restright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression rest = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new UnionPathExpr(pe, rest);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(18/*UnionExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression abbrev = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(7, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, abbrev);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 61: // UnionExpr ::= PathExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 82: // AxisSpecifier ::= AxisName DCOLON
             {
-              Expression RESULT = null;
-                int peleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int peright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression pe = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = pe;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(18/*UnionExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer an = (Integer) (parser_stack.get(parser_top - 1)).value;
+                parser_result = new Symbol(41, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, an);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 60: // UnaryExpr ::= MINUS UnaryExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 83: // AxisSpecifier ::= ATSIGN
+            {
+                Integer result = Axis.ATTRIBUTE;
+                parser_result = new Symbol(41, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 84: // AxisName ::= ANCESTOR
             {
-              Expression RESULT = null;
-                int ueleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ueright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ue = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new UnaryOpExpr(ue);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(14/*UnaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.ANCESTOR;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 59: // UnaryExpr ::= UnionExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 85: // AxisName ::= ANCESTORORSELF
             {
-              Expression RESULT = null;
-                int ueleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ueright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ue = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = ue;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(14/*UnaryExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.ANCESTORORSELF;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 58: // MultiplicativeExpr ::= MultiplicativeExpr MOD UnaryExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 86: // AxisName ::= ATTRIBUTE
             {
-              Expression RESULT = null;
-                int meleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int meright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression me = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int ueleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ueright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ue = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new BinOpExpr(BinOpExpr.MOD, me, ue);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(13/*MultiplicativeExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.ATTRIBUTE;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 57: // MultiplicativeExpr ::= MultiplicativeExpr DIV UnaryExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 87: // AxisName ::= CHILD
+            {
+                Integer result = Axis.CHILD;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 88: // AxisName ::= DESCENDANT
             {
-              Expression RESULT = null;
-                int meleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int meright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression me = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int ueleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ueright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ue = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new BinOpExpr(BinOpExpr.DIV, me, ue);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(13/*MultiplicativeExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.DESCENDANT;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 56: // MultiplicativeExpr ::= MultiplicativeExpr STAR UnaryExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 89: // AxisName ::= DESCENDANTORSELF
             {
-              Expression RESULT = null;
-                int meleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int meright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression me = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int ueleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ueright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ue = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new BinOpExpr(BinOpExpr.TIMES, me, ue);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(13/*MultiplicativeExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.DESCENDANTORSELF;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 55: // MultiplicativeExpr ::= UnaryExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 90: // AxisName ::= FOLLOWING
             {
-              Expression RESULT = null;
-                int ueleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ueright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ue = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = ue;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(13/*MultiplicativeExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.FOLLOWING;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 54: // AdditiveExpr ::= AdditiveExpr MINUS MultiplicativeExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 91: // AxisName ::= FOLLOWINGSIBLING
             {
-              Expression RESULT = null;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int meleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int meright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression me = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new BinOpExpr(BinOpExpr.MINUS, ae, me);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(12/*AdditiveExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.FOLLOWINGSIBLING;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 53: // AdditiveExpr ::= AdditiveExpr PLUS MultiplicativeExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 92: // AxisName ::= NAMESPACE
+            {
+                Integer result = Axis.NAMESPACE;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 93: // AxisName ::= PARENT
             {
-              Expression RESULT = null;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int meleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int meright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression me = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new BinOpExpr(BinOpExpr.PLUS, ae, me);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(12/*AdditiveExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.PARENT;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 52: // AdditiveExpr ::= MultiplicativeExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 94: // AxisName ::= PRECEDING
             {
-              Expression RESULT = null;
-                int meleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int meright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression me = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = me;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(12/*AdditiveExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.PRECEDING;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 51: // RelationalExpr ::= RelationalExpr GE AdditiveExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 95: // AxisName ::= PRECEDINGSIBLING
+            {
+                Integer result = Axis.PRECEDINGSIBLING;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 96: // AxisName ::= SELF
             {
-              Expression RESULT = null;
-                int releft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int reright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression re = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new RelationalExpr(Operators.GE, re, ae);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(11/*RelationalExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Integer result = Axis.SELF;
+                parser_result = new Symbol(40, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 50: // RelationalExpr ::= RelationalExpr LE AdditiveExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 97: // AbbreviatedStep ::= DOT
             {
-              Expression RESULT = null;
-                int releft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int reright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression re = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new RelationalExpr(Operators.LE, re, ae);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(11/*RelationalExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = new Step(Axis.SELF, NodeTest.ANODE, null);
+                parser_result = new Symbol(20, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 49: // RelationalExpr ::= RelationalExpr GT AdditiveExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 98: // AbbreviatedStep ::= DDOT
             {
-              Expression RESULT = null;
-                int releft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int reright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression re = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new RelationalExpr(Operators.GT, re, ae);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(11/*RelationalExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = new Step(Axis.PARENT, NodeTest.ANODE, null);
+                parser_result = new Symbol(20, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 48: // RelationalExpr ::= RelationalExpr LT AdditiveExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 99: // FilterExpr ::= PrimaryExpr
             {
-              Expression RESULT = null;
-                int releft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int reright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression re = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new RelationalExpr(Operators.LT, re, ae);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(11/*RelationalExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression primary = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(6, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, primary);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 47: // RelationalExpr ::= AdditiveExpr
-            {
-              Expression RESULT = null;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = ae;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(11/*RelationalExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 46: // EqualityExpr ::= EqualityExpr NE RelationalExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 100: // FilterExpr ::= PrimaryExpr Predicates
             {
-              Expression RESULT = null;
-                int eeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int eeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression ee = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int releft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int reright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression re = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new EqualityExpr(Operators.NE, ee, re);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(10/*EqualityExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression primary = (Expression) (parser_stack.get(parser_top - 1)).value;
+                @SuppressWarnings("unchecked")
+                Vector pp = (Vector) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new FilterExpr(primary, pp);
+                parser_result = new Symbol(6, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 45: // EqualityExpr ::= EqualityExpr EQ RelationalExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 101: // PrimaryExpr ::= VariableReference
             {
-              Expression RESULT = null;
-                int eeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int eeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression ee = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int releft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int reright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression re = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new EqualityExpr(Operators.EQ, ee, re);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(10/*EqualityExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression vr = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, vr);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 44: // EqualityExpr ::= RelationalExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 102: // PrimaryExpr ::= LPAREN Expr RPAREN
             {
-              Expression RESULT = null;
-                int releft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int reright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression re = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = re;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(10/*EqualityExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression ex = (Expression) (parser_stack.get(parser_top - 1)).value;
+                parser_result = new Symbol(17, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, ex);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 43: // AndExpr ::= AndExpr AND EqualityExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 103: // PrimaryExpr ::= Literal
             {
-              Expression RESULT = null;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int eeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int eeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ee = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new LogicalExpr(LogicalExpr.AND, ae, ee);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(9/*AndExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                String string = (String) (parser_stack.get(parser_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);
+                }
+                Expression result = (namespace == null) ? new LiteralExpr(string)
+                    : new LiteralExpr(string, namespace);
+                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 42: // AndExpr ::= EqualityExpr
-            {
-              Expression RESULT = null;
-                int eleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int eright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression e = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = e;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(9/*AndExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 41: // OrExpr ::= OrExpr OR AndExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 104: // PrimaryExpr ::= INT
             {
-              Expression RESULT = null;
-                int oeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int oeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Expression oe = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new LogicalExpr(LogicalExpr.OR, oe, ae);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(8/*OrExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = null;
+                Long num = (Long) (parser_stack.get(parser_top - 0)).value;
+                if (num < Integer.MIN_VALUE || num > Integer.MAX_VALUE) {
+                    result = new RealExpr(num);
+                } 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());
+                }
+                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 40: // OrExpr ::= AndExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 105: // PrimaryExpr ::= REAL
             {
-              Expression RESULT = null;
-                int aeleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int aeright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ae = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = ae;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(8/*OrExpr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Double num = (Double) (parser_stack.get(parser_top - 0)).value;
+                Expression result = new RealExpr(num);
+                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 39: // Expr ::= OrExpr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 106: // PrimaryExpr ::= FunctionCall
             {
-              Expression RESULT = null;
-                int exleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int exright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression ex = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = ex;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(2/*Expr*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression fc = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(17, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, fc);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 38: // Predicate ::= LBRACK Expr RBRACK
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 107: // VariableReference ::= DOLLAR VariableName
             {
-              Expression RESULT = null;
-                int eleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int eright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Expression e = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-
-                RESULT = new Predicate(e);
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(5/*Predicate*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = null;
+                QName varName = (QName) (parser_stack.get(parser_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);
+                }
+                parser_result = new Symbol(15, (parser_stack.get(parser_top - 1)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 37: // Predicates ::= Predicate Predicates
-            {
-              Vector RESULT = null;
-                int pleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int pright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Expression p = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 pp.insertElementAt(p, 0); RESULT = pp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(35/*Predicates*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 36: // Predicates ::= Predicate
-            {
-              Vector RESULT = null;
-                int pleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int pright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression p = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-
-                Vector temp = new Vector();
-                temp.addElement(p);
-                RESULT = temp;
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(35/*Predicates*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 33: // ChildOrAttributeAxisSpecifier ::= ATSIGN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 108: // FunctionCall ::= FunctionName LPAREN RPAREN
             {
-              Integer RESULT = null;
-                 RESULT = new Integer(Axis.ATTRIBUTE);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int qnright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                QName qn = (QName)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = qn;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(34/*NameTestPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(34/*NameTestPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = null;
+                QName fname = (QName) (parser_stack.get(parser_top - 2)).value;
+                if (fname == parser.getQNameIgnoreDefaultNs("current")) {
+                    result = new CurrentCall(fname);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
+                    result = new NumberCall(fname, XPathParser.EmptyArgs);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
+                    result = new StringCall(fname, XPathParser.EmptyArgs);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
+                    result = new ConcatCall(fname, XPathParser.EmptyArgs);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("true")) {
+                    result = new BooleanExpr(true);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("false")) {
+                    result = new BooleanExpr(false);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
+                    result = new NameCall(fname);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
+                    result = new GenerateIdCall(fname, XPathParser.EmptyArgs);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("string-length")) {
+                    result = new StringLengthCall(fname, XPathParser.EmptyArgs);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("position")) {
+                    result = new PositionCall(fname);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("last")) {
+                    result = new LastCall(fname);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
+                    result = new LocalNameCall(fname);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
+                    result = new NamespaceUriCall(fname);
+                } else {
+                    result = new FunctionCall(fname, XPathParser.EmptyArgs);
+                }
+                parser_result = new Symbol(16, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 30: // NodeTestPattern ::= PI
-            {
-              Object RESULT = null;
-                 RESULT = new Integer(NodeTest.PI);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(33/*NodeTestPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(33/*NodeTestPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(33/*NodeTestPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(33/*NodeTestPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 26: // NodeTestPattern ::= NameTestPattern
-            {
-              Object RESULT = null;
-                int ntleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ntright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Object nt = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = nt;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(33/*NodeTestPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 25: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern Predicates
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 109: // FunctionCall ::= FunctionName LPAREN NonemptyArgumentList RPAREN
             {
-              StepPattern RESULT = null;
-                int axisleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int axisright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Integer axis = (Integer)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int pipleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int pipright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                StepPattern pip = (StepPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.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 com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Expression result = null;
+                QName fname = (QName) (parser_stack.get(parser_top - 3)).value;
+                @SuppressWarnings("unchecked")
+                Vector argl = (Vector) (parser_stack.get(parser_top - 1)).value;
+                if (fname == parser.getQNameIgnoreDefaultNs("concat")) {
+                    result = new ConcatCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("number")) {
+                    result = new NumberCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("document")) {
+                    parser.setMultiDocument(true);
+                    result = new DocumentCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("string")) {
+                    result = new StringCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("boolean")) {
+                    result = new BooleanCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("name")) {
+                    result = new NameCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("generate-id")) {
+                    result = new GenerateIdCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("not")) {
+                    result = new NotCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("format-number")) {
+                    result = new FormatNumberCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("unparsed-entity-uri")) {
+                    result = new UnparsedEntityUriCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("key")) {
+                    result = new KeyCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("id")) {
+                    result = new KeyCall(fname, argl);
+                    parser.setHasIdCall(true);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("ceiling")) {
+                    result = new CeilingCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("round")) {
+                    result = new RoundCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("floor")) {
+                    result = new FloorCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("contains")) {
+                    result = new ContainsCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("string-length")) {
+                    result = new StringLengthCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("starts-with")) {
+                    result = new StartsWithCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("function-available")) {
+                    result = new FunctionAvailableCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("element-available")) {
+                    result = new ElementAvailableCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("local-name")) {
+                    result = new LocalNameCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("lang")) {
+                    result = new LangCall(fname, argl);
+                } else if (fname == parser.getQNameIgnoreDefaultNs("namespace-uri")) {
+                    result = new NamespaceUriCall(fname, argl);
+                } else if (fname == parser.getQName(Constants.TRANSLET_URI, "xsltc", "cast")) {
+                    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);
+                }
+                parser_result = new Symbol(16, (parser_stack.get(parser_top - 3)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 24: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern
-            {
-              StepPattern RESULT = null;
-                int axisleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int axisright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Integer axis = (Integer)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int pipleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int pipright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                StepPattern pip = (StepPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-
-               RESULT = pip;    // TODO: report error if axis is attribute
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.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 = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int axisright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Integer axis = (Integer)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int ntleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int ntright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Object nt = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+            return parser_result;
 
-               RESULT = parser.createStepPattern(axis.intValue(), nt, pp);
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 110: // NonemptyArgumentList ::= Argument
+            {
+                Expression arg = (Expression) (parser_stack.get(parser_top - 0)).value;
+                Vector temp = new Vector();
+                temp.add(arg);
+                parser_result = new Symbol(36, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, temp);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 22: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 111: // NonemptyArgumentList ::= Argument COMMA NonemptyArgumentList
             {
-              StepPattern RESULT = null;
-                int axisleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int axisright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Integer axis = (Integer)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ntleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ntright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Object nt = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+                Expression arg = (Expression) (parser_stack.get(parser_top - 2)).value;
+                @SuppressWarnings("unchecked")
+                Vector argl = (Vector) (parser_stack.get(parser_top - 0)).value;
+                argl.add(0, arg);
+                parser_result = new Symbol(36, (parser_stack.get(parser_top - 2)).left,
+                    (parser_stack.get(parser_top - 0)).right, argl);
+            }
+            return parser_result;
 
-               RESULT = parser.createStepPattern(axis.intValue(), nt, null);
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 112: // FunctionName ::= QName
+            {
+                QName fname = (QName) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(38, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, fname);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 21: // StepPattern ::= ProcessingInstructionPattern Predicates
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 113: // VariableName ::= QName
             {
-              StepPattern RESULT = null;
-                int pipleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int pipright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                StepPattern pip = (StepPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName vname = (QName) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(39, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, vname);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 20: // StepPattern ::= ProcessingInstructionPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 114: // Argument ::= Expr
+            {
+                Expression ex = (Expression) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(3, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, ex);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 115: // NodeTest ::= NameTest
             {
-              StepPattern RESULT = null;
-                int pipleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int pipright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                StepPattern pip = (StepPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = pip;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Object nt = parser_stack.get(parser_top - 0).value;
+                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, nt);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 19: // StepPattern ::= NodeTestPattern Predicates
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 116: // NodeTest ::= NODE
             {
-              StepPattern RESULT = null;
-                int ntleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int ntright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                Object nt = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                int ppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Vector pp = (Vector)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+                Object result = NodeTest.ANODE;
+                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-                RESULT = parser.createStepPattern(Axis.CHILD, nt, pp);
-
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 117: // NodeTest ::= TEXT
+            {
+                Object result = NodeTest.TEXT;
+                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 18: // StepPattern ::= NodeTestPattern
-            {
-              StepPattern RESULT = null;
-                int ntleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ntright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Object nt = (Object)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-
-                RESULT = parser.createStepPattern(Axis.CHILD, nt, null);
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(32/*StepPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
-            }
-          return CUP$XPathParser$result;
-
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 17: // RelativePathPattern ::= StepPattern DSLASH RelativePathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 118: // NodeTest ::= COMMENT
             {
-              RelativePathPattern RESULT = null;
-                int spleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int spright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                StepPattern sp = (StepPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int rppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                RelativePathPattern rpp = (RelativePathPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new AncestorPattern(sp, rpp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(31/*RelativePathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Object result = NodeTest.COMMENT;
+                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 16: // RelativePathPattern ::= StepPattern SLASH RelativePathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 119: // NodeTest ::= PIPARAM LPAREN Literal RPAREN
             {
-              RelativePathPattern RESULT = null;
-                int spleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int spright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                StepPattern sp = (StepPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int rppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                RelativePathPattern rpp = (RelativePathPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new ParentPattern(sp, rpp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(31/*RelativePathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                String l = (String) (parser_stack.get(parser_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.add(new Predicate(exp));
+                Object result = new Step(Axis.CHILD, NodeTest.PI, predicates);
+                parser_result = new Symbol(25, (parser_stack.get(parser_top - 3)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 15: // RelativePathPattern ::= StepPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 120: // NodeTest ::= PI
             {
-              RelativePathPattern RESULT = null;
-                int spleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int spright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                StepPattern sp = (StepPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = sp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(31/*RelativePathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                Object result = NodeTest.PI;
+                parser_result = new Symbol(25, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 14: // ProcessingInstructionPattern ::= PIPARAM LPAREN Literal RPAREN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 121: // NameTest ::= STAR
+            {
+                Object result = null;
+                parser_result = new Symbol(26, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 122: // NameTest ::= QName
             {
-              StepPattern RESULT = null;
-                int lleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int lright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                String l = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                 RESULT = new ProcessingInstructionPattern(l);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(30/*ProcessingInstructionPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName qn = (QName) (parser_stack.get(parser_top - 0)).value;
+                parser_result = new Symbol(26, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, qn);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 13: // IdKeyPattern ::= KEY LPAREN Literal COMMA Literal RPAREN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 123: // QName ::= QNAME
             {
-              IdKeyPattern RESULT = null;
-                int l1left = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left;
-                int l1right = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).right;
-                String l1 = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).value;
-                int l2left = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int l2right = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                String l2 = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                 RESULT = new KeyPattern(l1, l2);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(27/*IdKeyPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-5)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                String qname = (String) (parser_stack.get(parser_top - 0)).value;
+                QName result = parser.getQNameIgnoreDefaultNs(qname);
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 12: // IdKeyPattern ::= ID LPAREN Literal RPAREN
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 124: // QName ::= DIV
             {
-              IdKeyPattern RESULT = null;
-                int lleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int lright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                String l = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                 RESULT = new IdPattern(l);
-               parser.setHasIdCall(true);
+                QName result = parser.getQNameIgnoreDefaultNs("div");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
 
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(27/*IdKeyPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 125: // QName ::= MOD
+            {
+                QName result = parser.getQNameIgnoreDefaultNs("mod");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 11: // LocationPathPattern ::= RelativePathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 126: // QName ::= KEY
             {
-              Pattern RESULT = null;
-                int rppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                RelativePathPattern rpp = (RelativePathPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = rpp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(29/*LocationPathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("key");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 10: // LocationPathPattern ::= DSLASH RelativePathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 127: // QName ::= ANCESTOR
             {
-              Pattern RESULT = null;
-                int rppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                RelativePathPattern rpp = (RelativePathPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new AncestorPattern(rpp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(29/*LocationPathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("child");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 9: // LocationPathPattern ::= IdKeyPattern DSLASH RelativePathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 128: // QName ::= ANCESTORORSELF
             {
-              Pattern RESULT = null;
-                int ikpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int ikpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                IdKeyPattern ikp = (IdKeyPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int rppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                RelativePathPattern rpp = (RelativePathPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new AncestorPattern(ikp, rpp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(29/*LocationPathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("ancestor-or-self");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 8: // LocationPathPattern ::= IdKeyPattern SLASH RelativePathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 129: // QName ::= ATTRIBUTE
             {
-              Pattern RESULT = null;
-                int ikpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int ikpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                IdKeyPattern ikp = (IdKeyPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int rppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                RelativePathPattern rpp = (RelativePathPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new ParentPattern(ikp, rpp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(29/*LocationPathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("attribute");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 7: // LocationPathPattern ::= IdKeyPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 130: // QName ::= CHILD
+            {
+                QName result = parser.getQNameIgnoreDefaultNs("child");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 131: // QName ::= DESCENDANT
             {
-              Pattern RESULT = null;
-                int ikpleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int ikpright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                IdKeyPattern ikp = (IdKeyPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = ikp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(29/*LocationPathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("decendant");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 6: // LocationPathPattern ::= SLASH RelativePathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 132: // QName ::= DESCENDANTORSELF
             {
-              Pattern RESULT = null;
-                int rppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int rppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                RelativePathPattern rpp = (RelativePathPattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new AbsolutePathPattern(rpp);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(29/*LocationPathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("decendant-or-self");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 5: // LocationPathPattern ::= SLASH
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 133: // QName ::= FOLLOWING
             {
-              Pattern RESULT = null;
-                 RESULT = new AbsolutePathPattern(null);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(29/*LocationPathPattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("following");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 4: // Pattern ::= LocationPathPattern VBAR Pattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 134: // QName ::= FOLLOWINGSIBLING
             {
-              Pattern RESULT = null;
-                int lppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
-                int lppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
-                Pattern lpp = (Pattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
-                int pleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int pright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Pattern p = (Pattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = new AlternativePattern(lpp, p);
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(28/*Pattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("following-sibling");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 3: // Pattern ::= LocationPathPattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 135: // QName ::= NAMESPACE
             {
-              Pattern RESULT = null;
-                int lppleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int lppright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Pattern lpp = (Pattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = lpp;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(28/*Pattern*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("namespace");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 2: // TopLevel ::= EXPRESSION Expr
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 136: // QName ::= PARENT
+            {
+                QName result = parser.getQNameIgnoreDefaultNs("parent");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 137: // QName ::= PRECEDING
             {
-              SyntaxTreeNode RESULT = null;
-                int exprleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int exprright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Expression expr = (Expression)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = expr;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(1/*TopLevel*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("preceding");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 1: // TopLevel ::= PATTERN Pattern
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 138: // QName ::= PRECEDINGSIBLING
             {
-              SyntaxTreeNode RESULT = null;
-                int patternleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
-                int patternright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
-                Pattern pattern = (Pattern)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
-                 RESULT = pattern;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(1/*TopLevel*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("preceding-sibling");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /*. . . . . . . . . . . . . . . . . . . .*/
-          case 0: // $START ::= TopLevel EOF
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 139: // QName ::= SELF
             {
-              Object RESULT = null;
-                int start_valleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
-                int start_valright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
-                SyntaxTreeNode start_val = (SyntaxTreeNode)((com.sun.java_cup.internal.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
-                RESULT = start_val;
-              CUP$XPathParser$result = new com.sun.java_cup.internal.runtime.Symbol(0/*$START*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+                QName result = parser.getQNameIgnoreDefaultNs("self");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
             }
-          /* ACCEPT */
-          CUP$XPathParser$parser.done_parsing();
-          return CUP$XPathParser$result;
+            return parser_result;
 
-          /* . . . . . .*/
-          default:
-            throw new Exception(
-               "Invalid action number found in internal parse table");
+            /*. . . . . . . . . . . . . . . . . . . .*/
+            case 140: // QName ::= ID
+            {
+                QName result = parser.getQNameIgnoreDefaultNs("id");
+                parser_result = new Symbol(37, (parser_stack.get(parser_top - 0)).left,
+                    (parser_stack.get(parser_top - 0)).right, result);
+            }
+            return parser_result;
+
+            /* . . . . . .*/
+            default:
+                throw new Exception(
+                    "Invalid action number found in internal parse table");
 
         }
     }