You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2019/05/14 05:15:28 UTC

[xalan-java] branch master updated: committing XPath implementation source files generated by tools, that are required to compile Xalan sources. committing these files on 'master' as well

This is an automated email from the ASF dual-hosted git repository.

mukulg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/xalan-java.git


The following commit(s) were added to refs/heads/master by this push:
     new da1e2d4  committing XPath implementation source files generated by tools, that are required to compile Xalan sources. committing these files on 'master' as well
da1e2d4 is described below

commit da1e2d4693a35d4e9571b2b0034a3d694a9a92f9
Author: Mukul Gandhi <mu...@apache.org>
AuthorDate: Tue May 14 10:43:52 2019 +0530

    committing XPath implementation source files generated by tools, that
    are required to compile Xalan sources. committing these files on
    'master' as well
---
 .../apache/xalan/xsltc/compiler/XPathLexer.java    | 1643 ++++++++++
 .../apache/xalan/xsltc/compiler/XPathParser.java   | 3149 ++++++++++++++++++++
 src/org/apache/xalan/xsltc/compiler/sym.java       |   68 +
 3 files changed, 4860 insertions(+)

diff --git a/src/org/apache/xalan/xsltc/compiler/XPathLexer.java b/src/org/apache/xalan/xsltc/compiler/XPathLexer.java
new file mode 100644
index 0000000..1db26b2
--- /dev/null
+++ b/src/org/apache/xalan/xsltc/compiler/XPathLexer.java
@@ -0,0 +1,1643 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id$
+ */
+/*
+ * @author Jacek Ambroziak
+ * @author Santiago Pericas-Geertsen
+ * @author Morten Jorgensen
+ *
+ */
+package org.apache.xalan.xsltc.compiler;
+import java_cup.runtime.Symbol;
+
+
+class XPathLexer implements java_cup.runtime.Scanner {
+	private final int YY_BUFFER_SIZE = 512;
+	private final int YY_F = -1;
+	private final int YY_NO_STATE = -1;
+	private final int YY_NOT_ACCEPT = 0;
+	private final int YY_START = 1;
+	private final int YY_END = 2;
+	private final int YY_NO_ANCHOR = 4;
+	private final int YY_BOL = 65536;
+	private final int YY_EOF = 65537;
+	public final int YYEOF = -1;
+
+        int last;
+        void initialize() {
+            last = -1;
+        }
+        static boolean isWhitespace(int c) {
+            return (c == ' ' || c == '\t' || c == '\r' || c == '\n'  || c == '\f');
+        }
+        /**
+         * If symbol is not followed by '::' or '(', then treat it as a
+         * name instead of an axis or function (Jira-1912).
+         */ 
+        Symbol disambiguateAxisOrFunction(int ss) throws Exception {
+            // Peek in the input buffer without changing the internal state
+            int index = yy_buffer_index;
+            // Skip whitespace
+            while (index < yy_buffer_read && isWhitespace(yy_buffer[index])) {
+                index++;
+            }
+            // If end of buffer, can't disambiguate :(
+            if (index >= yy_buffer_read) {
+                // Can't disambiguate, so return as symbol
+                return new Symbol(ss);
+            }
+            // Return symbol if next token is '::' or '('
+            return (yy_buffer[index] == ':' && yy_buffer[index+1] == ':' ||
+                    yy_buffer[index] == '(') ?
+                    newSymbol(ss) : newSymbol(sym.QNAME, yytext());
+        }
+        /**
+         * If symbol is first token or if it follows any of the operators
+         * listed in http://www.w3.org/TR/xpath#exprlex then treat as a 
+         * name instead of a keyword (Jira-1912).
+         */ 
+        Symbol disambiguateOperator(int ss) throws Exception {
+            switch (last) {
+            case -1:    // first token
+            case sym.ATSIGN:
+            case sym.DCOLON:
+            case sym.LPAREN:
+            case sym.LBRACK:
+            case sym.COMMA:
+            case sym.AND:
+            case sym.OR:
+            case sym.MOD:
+            case sym.DIV:
+            case sym.MULT:
+            case sym.SLASH:
+            case sym.DSLASH:
+            case sym.VBAR:
+            case sym.PLUS:
+            case sym.MINUS:
+            case sym.EQ:
+            case sym.NE:
+            case sym.LT:
+            case sym.LE:
+            case sym.GT:
+            case sym.GE:
+                return newSymbol(sym.QNAME, yytext());
+            }
+            return newSymbol(ss);
+        }
+        /**
+         * If symbol is first token or if it follows any of the operators
+         * listed in http://www.w3.org/TR/xpath#exprlex then treat as a
+         * wildcard instead of a multiplication operator
+         */
+        Symbol disambiguateStar() throws Exception {
+            switch (last) {
+            case -1:    // first token
+            case sym.ATSIGN:
+            case sym.DCOLON:
+            case sym.LPAREN:
+            case sym.LBRACK:
+            case sym.COMMA:
+            case sym.AND:
+            case sym.OR:
+            case sym.MOD:
+            case sym.DIV:
+            case sym.MULT:
+            case sym.SLASH:
+            case sym.DSLASH:
+            case sym.VBAR:
+            case sym.PLUS:
+            case sym.MINUS:
+            case sym.EQ:
+            case sym.NE:
+            case sym.LT:
+            case sym.LE:
+            case sym.GT:
+            case sym.GE:
+                return newSymbol(sym.STAR);
+            }
+            return newSymbol(sym.MULT);
+        }
+        Symbol newSymbol(int ss) {
+            last = ss;
+            return new Symbol(ss);
+        }
+        Symbol newSymbol(int ss, String value) {
+            last = ss;
+            return new Symbol(ss, value);
+        }
+        Symbol newSymbol(int ss, Long value) {
+            last = ss;
+            return new Symbol(ss, value);
+        }
+        Symbol newSymbol(int ss, Double value) {
+            last = ss;
+            return new Symbol(ss, value);
+        }
+	private java.io.BufferedReader yy_reader;
+	private int yy_buffer_index;
+	private int yy_buffer_read;
+	private int yy_buffer_start;
+	private int yy_buffer_end;
+	private char yy_buffer[];
+	private boolean yy_at_bol;
+	private int yy_lexical_state;
+
+	XPathLexer (java.io.Reader reader) {
+		this ();
+		if (null == reader) {
+			throw (new Error("Error: Bad input stream initializer."));
+		}
+		yy_reader = new java.io.BufferedReader(reader);
+	}
+
+	XPathLexer (java.io.InputStream instream) {
+		this ();
+		if (null == instream) {
+			throw (new Error("Error: Bad input stream initializer."));
+		}
+		yy_reader = new java.io.BufferedReader(new java.io.InputStreamReader(instream));
+	}
+
+	private XPathLexer () {
+		yy_buffer = new char[YY_BUFFER_SIZE];
+		yy_buffer_read = 0;
+		yy_buffer_index = 0;
+		yy_buffer_start = 0;
+		yy_buffer_end = 0;
+		yy_at_bol = true;
+		yy_lexical_state = YYINITIAL;
+	}
+
+	private boolean yy_eof_done = false;
+	private final int YYINITIAL = 0;
+	private final int yy_state_dtrans[] = {
+		0
+	};
+	private void yybegin (int state) {
+		yy_lexical_state = state;
+	}
+	private int yy_advance ()
+		throws java.io.IOException {
+		int next_read;
+		int i;
+		int j;
+
+		if (yy_buffer_index < yy_buffer_read) {
+			return yy_buffer[yy_buffer_index++];
+		}
+
+		if (0 != yy_buffer_start) {
+			i = yy_buffer_start;
+			j = 0;
+			while (i < yy_buffer_read) {
+				yy_buffer[j] = yy_buffer[i];
+				++i;
+				++j;
+			}
+			yy_buffer_end = yy_buffer_end - yy_buffer_start;
+			yy_buffer_start = 0;
+			yy_buffer_read = j;
+			yy_buffer_index = j;
+			next_read = yy_reader.read(yy_buffer,
+					yy_buffer_read,
+					yy_buffer.length - yy_buffer_read);
+			if (-1 == next_read) {
+				return YY_EOF;
+			}
+			yy_buffer_read = yy_buffer_read + next_read;
+		}
+
+		while (yy_buffer_index >= yy_buffer_read) {
+			if (yy_buffer_index >= yy_buffer.length) {
+				yy_buffer = yy_double(yy_buffer);
+			}
+			next_read = yy_reader.read(yy_buffer,
+					yy_buffer_read,
+					yy_buffer.length - yy_buffer_read);
+			if (-1 == next_read) {
+				return YY_EOF;
+			}
+			yy_buffer_read = yy_buffer_read + next_read;
+		}
+		return yy_buffer[yy_buffer_index++];
+	}
+	private void yy_move_end () {
+		if (yy_buffer_end > yy_buffer_start &&
+		    '\n' == yy_buffer[yy_buffer_end-1])
+			yy_buffer_end--;
+		if (yy_buffer_end > yy_buffer_start &&
+		    '\r' == yy_buffer[yy_buffer_end-1])
+			yy_buffer_end--;
+	}
+	private boolean yy_last_was_cr=false;
+	private void yy_mark_start () {
+		yy_buffer_start = yy_buffer_index;
+	}
+	private void yy_mark_end () {
+		yy_buffer_end = yy_buffer_index;
+	}
+	private void yy_to_mark () {
+		yy_buffer_index = yy_buffer_end;
+		yy_at_bol = (yy_buffer_end > yy_buffer_start) &&
+		            ('\r' == yy_buffer[yy_buffer_end-1] ||
+		             '\n' == yy_buffer[yy_buffer_end-1] ||
+		             2028/*LS*/ == yy_buffer[yy_buffer_end-1] ||
+		             2029/*PS*/ == yy_buffer[yy_buffer_end-1]);
+	}
+	private java.lang.String yytext () {
+		return (new java.lang.String(yy_buffer,
+			yy_buffer_start,
+			yy_buffer_end - yy_buffer_start));
+	}
+	private int yylength () {
+		return yy_buffer_end - yy_buffer_start;
+	}
+	private char[] yy_double (char buf[]) {
+		int i;
+		char newbuf[];
+		newbuf = new char[2*buf.length];
+		for (i = 0; i < buf.length; ++i) {
+			newbuf[i] = buf[i];
+		}
+		return newbuf;
+	}
+	private final int YY_E_INTERNAL = 0;
+	private final int YY_E_MATCH = 1;
+	private java.lang.String yy_error_string[] = {
+		"Error: Internal error.\n",
+		"Error: Unmatched input.\n"
+	};
+	private void yy_error (int code,boolean fatal) {
+		java.lang.System.out.print(yy_error_string[code]);
+		java.lang.System.out.flush();
+		if (fatal) {
+			throw new Error("Fatal Error.\n");
+		}
+	}
+	static private int[][] unpackFromString(int size1, int size2, String st) {
+		int colonIndex = -1;
+		String lengthString;
+		int sequenceLength = 0;
+		int sequenceInteger = 0;
+
+		int commaIndex;
+		String workString;
+
+		int res[][] = new int[size1][size2];
+		for (int i= 0; i < size1; i++) {
+			for (int j= 0; j < size2; j++) {
+				if (sequenceLength != 0) {
+					res[i][j] = sequenceInteger;
+					sequenceLength--;
+					continue;
+				}
+				commaIndex = st.indexOf(',');
+				workString = (commaIndex==-1) ? st :
+					st.substring(0, commaIndex);
+				st = st.substring(commaIndex+1);
+				colonIndex = workString.indexOf(':');
+				if (colonIndex == -1) {
+					res[i][j]=Integer.parseInt(workString);
+					continue;
+				}
+				lengthString =
+					workString.substring(colonIndex+1);
+				sequenceLength=Integer.parseInt(lengthString);
+				workString=workString.substring(0,colonIndex);
+				sequenceInteger=Integer.parseInt(workString);
+				res[i][j] = sequenceInteger;
+				sequenceLength--;
+			}
+		}
+		return res;
+	}
+	private int yy_acpt[] = {
+		/* 0 */ YY_NOT_ACCEPT,
+		/* 1 */ YY_NO_ANCHOR,
+		/* 2 */ YY_NO_ANCHOR,
+		/* 3 */ YY_NO_ANCHOR,
+		/* 4 */ YY_NO_ANCHOR,
+		/* 5 */ YY_NO_ANCHOR,
+		/* 6 */ YY_NO_ANCHOR,
+		/* 7 */ YY_NO_ANCHOR,
+		/* 8 */ YY_NO_ANCHOR,
+		/* 9 */ YY_NO_ANCHOR,
+		/* 10 */ YY_NO_ANCHOR,
+		/* 11 */ YY_NO_ANCHOR,
+		/* 12 */ YY_NO_ANCHOR,
+		/* 13 */ YY_NO_ANCHOR,
+		/* 14 */ YY_NO_ANCHOR,
+		/* 15 */ YY_NO_ANCHOR,
+		/* 16 */ YY_NO_ANCHOR,
+		/* 17 */ YY_NO_ANCHOR,
+		/* 18 */ YY_NO_ANCHOR,
+		/* 19 */ YY_NO_ANCHOR,
+		/* 20 */ YY_NO_ANCHOR,
+		/* 21 */ YY_NO_ANCHOR,
+		/* 22 */ YY_NO_ANCHOR,
+		/* 23 */ YY_NO_ANCHOR,
+		/* 24 */ YY_NO_ANCHOR,
+		/* 25 */ YY_NO_ANCHOR,
+		/* 26 */ YY_NO_ANCHOR,
+		/* 27 */ YY_NO_ANCHOR,
+		/* 28 */ YY_NO_ANCHOR,
+		/* 29 */ YY_NO_ANCHOR,
+		/* 30 */ YY_NO_ANCHOR,
+		/* 31 */ YY_NO_ANCHOR,
+		/* 32 */ YY_NO_ANCHOR,
+		/* 33 */ YY_NO_ANCHOR,
+		/* 34 */ YY_NO_ANCHOR,
+		/* 35 */ YY_NO_ANCHOR,
+		/* 36 */ YY_NO_ANCHOR,
+		/* 37 */ YY_NO_ANCHOR,
+		/* 38 */ YY_NO_ANCHOR,
+		/* 39 */ YY_NO_ANCHOR,
+		/* 40 */ YY_NO_ANCHOR,
+		/* 41 */ YY_NO_ANCHOR,
+		/* 42 */ YY_NO_ANCHOR,
+		/* 43 */ YY_NO_ANCHOR,
+		/* 44 */ YY_NO_ANCHOR,
+		/* 45 */ YY_NO_ANCHOR,
+		/* 46 */ YY_NO_ANCHOR,
+		/* 47 */ YY_NO_ANCHOR,
+		/* 48 */ YY_NO_ANCHOR,
+		/* 49 */ YY_NO_ANCHOR,
+		/* 50 */ YY_NO_ANCHOR,
+		/* 51 */ YY_NO_ANCHOR,
+		/* 52 */ YY_NO_ANCHOR,
+		/* 53 */ YY_NO_ANCHOR,
+		/* 54 */ YY_NO_ANCHOR,
+		/* 55 */ YY_NO_ANCHOR,
+		/* 56 */ YY_NO_ANCHOR,
+		/* 57 */ YY_NO_ANCHOR,
+		/* 58 */ YY_NO_ANCHOR,
+		/* 59 */ YY_NO_ANCHOR,
+		/* 60 */ YY_NO_ANCHOR,
+		/* 61 */ YY_NO_ANCHOR,
+		/* 62 */ YY_NO_ANCHOR,
+		/* 63 */ YY_NO_ANCHOR,
+		/* 64 */ YY_NOT_ACCEPT,
+		/* 65 */ YY_NO_ANCHOR,
+		/* 66 */ YY_NO_ANCHOR,
+		/* 67 */ YY_NO_ANCHOR,
+		/* 68 */ YY_NO_ANCHOR,
+		/* 69 */ YY_NOT_ACCEPT,
+		/* 70 */ YY_NO_ANCHOR,
+		/* 71 */ YY_NO_ANCHOR,
+		/* 72 */ YY_NOT_ACCEPT,
+		/* 73 */ YY_NO_ANCHOR,
+		/* 74 */ YY_NO_ANCHOR,
+		/* 75 */ YY_NOT_ACCEPT,
+		/* 76 */ YY_NO_ANCHOR,
+		/* 77 */ YY_NO_ANCHOR,
+		/* 78 */ YY_NOT_ACCEPT,
+		/* 79 */ YY_NO_ANCHOR,
+		/* 80 */ YY_NOT_ACCEPT,
+		/* 81 */ YY_NO_ANCHOR,
+		/* 82 */ YY_NOT_ACCEPT,
+		/* 83 */ YY_NO_ANCHOR,
+		/* 84 */ YY_NOT_ACCEPT,
+		/* 85 */ YY_NO_ANCHOR,
+		/* 86 */ YY_NOT_ACCEPT,
+		/* 87 */ YY_NO_ANCHOR,
+		/* 88 */ YY_NOT_ACCEPT,
+		/* 89 */ YY_NO_ANCHOR,
+		/* 90 */ YY_NOT_ACCEPT,
+		/* 91 */ YY_NO_ANCHOR,
+		/* 92 */ YY_NOT_ACCEPT,
+		/* 93 */ YY_NO_ANCHOR,
+		/* 94 */ YY_NOT_ACCEPT,
+		/* 95 */ YY_NO_ANCHOR,
+		/* 96 */ YY_NOT_ACCEPT,
+		/* 97 */ YY_NO_ANCHOR,
+		/* 98 */ YY_NOT_ACCEPT,
+		/* 99 */ YY_NO_ANCHOR,
+		/* 100 */ YY_NOT_ACCEPT,
+		/* 101 */ YY_NO_ANCHOR,
+		/* 102 */ YY_NOT_ACCEPT,
+		/* 103 */ YY_NO_ANCHOR,
+		/* 104 */ YY_NOT_ACCEPT,
+		/* 105 */ YY_NO_ANCHOR,
+		/* 106 */ YY_NOT_ACCEPT,
+		/* 107 */ YY_NO_ANCHOR,
+		/* 108 */ YY_NOT_ACCEPT,
+		/* 109 */ YY_NO_ANCHOR,
+		/* 110 */ YY_NOT_ACCEPT,
+		/* 111 */ YY_NO_ANCHOR,
+		/* 112 */ YY_NOT_ACCEPT,
+		/* 113 */ YY_NO_ANCHOR,
+		/* 114 */ YY_NOT_ACCEPT,
+		/* 115 */ YY_NO_ANCHOR,
+		/* 116 */ YY_NOT_ACCEPT,
+		/* 117 */ YY_NO_ANCHOR,
+		/* 118 */ YY_NOT_ACCEPT,
+		/* 119 */ YY_NO_ANCHOR,
+		/* 120 */ YY_NOT_ACCEPT,
+		/* 121 */ YY_NO_ANCHOR,
+		/* 122 */ YY_NOT_ACCEPT,
+		/* 123 */ YY_NO_ANCHOR,
+		/* 124 */ YY_NOT_ACCEPT,
+		/* 125 */ YY_NO_ANCHOR,
+		/* 126 */ YY_NOT_ACCEPT,
+		/* 127 */ YY_NO_ANCHOR,
+		/* 128 */ YY_NO_ANCHOR,
+		/* 129 */ YY_NO_ANCHOR,
+		/* 130 */ YY_NO_ANCHOR,
+		/* 131 */ YY_NO_ANCHOR,
+		/* 132 */ YY_NO_ANCHOR,
+		/* 133 */ YY_NO_ANCHOR,
+		/* 134 */ YY_NO_ANCHOR,
+		/* 135 */ YY_NO_ANCHOR,
+		/* 136 */ YY_NO_ANCHOR,
+		/* 137 */ YY_NO_ANCHOR,
+		/* 138 */ YY_NO_ANCHOR,
+		/* 139 */ YY_NO_ANCHOR,
+		/* 140 */ YY_NO_ANCHOR,
+		/* 141 */ YY_NO_ANCHOR,
+		/* 142 */ YY_NO_ANCHOR,
+		/* 143 */ YY_NO_ANCHOR,
+		/* 144 */ YY_NO_ANCHOR,
+		/* 145 */ YY_NO_ANCHOR,
+		/* 146 */ YY_NO_ANCHOR,
+		/* 147 */ YY_NO_ANCHOR,
+		/* 148 */ YY_NO_ANCHOR,
+		/* 149 */ YY_NO_ANCHOR,
+		/* 150 */ YY_NO_ANCHOR,
+		/* 151 */ YY_NO_ANCHOR,
+		/* 152 */ YY_NO_ANCHOR,
+		/* 153 */ YY_NO_ANCHOR,
+		/* 154 */ YY_NO_ANCHOR,
+		/* 155 */ YY_NO_ANCHOR,
+		/* 156 */ YY_NO_ANCHOR,
+		/* 157 */ YY_NO_ANCHOR,
+		/* 158 */ YY_NO_ANCHOR,
+		/* 159 */ YY_NO_ANCHOR,
+		/* 160 */ YY_NO_ANCHOR,
+		/* 161 */ YY_NO_ANCHOR,
+		/* 162 */ YY_NO_ANCHOR,
+		/* 163 */ YY_NO_ANCHOR,
+		/* 164 */ YY_NO_ANCHOR,
+		/* 165 */ YY_NO_ANCHOR,
+		/* 166 */ YY_NO_ANCHOR,
+		/* 167 */ YY_NO_ANCHOR,
+		/* 168 */ YY_NO_ANCHOR,
+		/* 169 */ YY_NO_ANCHOR,
+		/* 170 */ YY_NO_ANCHOR,
+		/* 171 */ YY_NO_ANCHOR,
+		/* 172 */ YY_NO_ANCHOR,
+		/* 173 */ YY_NO_ANCHOR,
+		/* 174 */ YY_NO_ANCHOR,
+		/* 175 */ YY_NO_ANCHOR,
+		/* 176 */ YY_NO_ANCHOR,
+		/* 177 */ YY_NO_ANCHOR,
+		/* 178 */ YY_NO_ANCHOR,
+		/* 179 */ YY_NO_ANCHOR,
+		/* 180 */ YY_NO_ANCHOR,
+		/* 181 */ YY_NO_ANCHOR,
+		/* 182 */ YY_NO_ANCHOR,
+		/* 183 */ YY_NO_ANCHOR,
+		/* 184 */ YY_NO_ANCHOR,
+		/* 185 */ YY_NOT_ACCEPT,
+		/* 186 */ YY_NOT_ACCEPT,
+		/* 187 */ YY_NO_ANCHOR,
+		/* 188 */ YY_NOT_ACCEPT,
+		/* 189 */ YY_NO_ANCHOR,
+		/* 190 */ YY_NOT_ACCEPT,
+		/* 191 */ YY_NO_ANCHOR,
+		/* 192 */ YY_NO_ANCHOR,
+		/* 193 */ YY_NO_ANCHOR,
+		/* 194 */ YY_NO_ANCHOR,
+		/* 195 */ YY_NO_ANCHOR,
+		/* 196 */ YY_NO_ANCHOR,
+		/* 197 */ YY_NO_ANCHOR,
+		/* 198 */ YY_NO_ANCHOR,
+		/* 199 */ YY_NO_ANCHOR,
+		/* 200 */ YY_NO_ANCHOR,
+		/* 201 */ YY_NO_ANCHOR,
+		/* 202 */ YY_NO_ANCHOR,
+		/* 203 */ YY_NO_ANCHOR,
+		/* 204 */ YY_NO_ANCHOR,
+		/* 205 */ YY_NO_ANCHOR,
+		/* 206 */ YY_NO_ANCHOR,
+		/* 207 */ YY_NO_ANCHOR,
+		/* 208 */ YY_NO_ANCHOR,
+		/* 209 */ YY_NO_ANCHOR,
+		/* 210 */ YY_NO_ANCHOR,
+		/* 211 */ YY_NO_ANCHOR,
+		/* 212 */ YY_NO_ANCHOR,
+		/* 213 */ YY_NO_ANCHOR,
+		/* 214 */ YY_NO_ANCHOR,
+		/* 215 */ YY_NO_ANCHOR,
+		/* 216 */ YY_NO_ANCHOR,
+		/* 217 */ YY_NO_ANCHOR,
+		/* 218 */ YY_NO_ANCHOR,
+		/* 219 */ YY_NO_ANCHOR,
+		/* 220 */ YY_NO_ANCHOR,
+		/* 221 */ YY_NO_ANCHOR,
+		/* 222 */ YY_NO_ANCHOR,
+		/* 223 */ YY_NO_ANCHOR,
+		/* 224 */ YY_NO_ANCHOR,
+		/* 225 */ YY_NO_ANCHOR,
+		/* 226 */ YY_NO_ANCHOR,
+		/* 227 */ YY_NO_ANCHOR,
+		/* 228 */ YY_NO_ANCHOR,
+		/* 229 */ YY_NO_ANCHOR,
+		/* 230 */ YY_NO_ANCHOR,
+		/* 231 */ YY_NO_ANCHOR,
+		/* 232 */ YY_NO_ANCHOR,
+		/* 233 */ YY_NO_ANCHOR
+	};
+	static private int yy_cmap[] = unpackFromString(1,65538,
+"54:9,27:2,54,27:2,54:18,27,17,53,54,15,54:2,55,25,26,1,3,11,4,13,2,56:10,10" +
+",54,18,16,19,54,12,44,57:3,46,57:3,51,57:4,48,52,43,57,47,50,45,57:3,49,57:" +
+"2,41,54,42,54,58,54,35,38,29,5,21,39,33,36,6,57,20,37,8,28,9,30,57,31,32,23" +
+",34,7,40,24,22,57,54,14,54:58,60,54:8,57:23,54,57:31,54,57:58,58:2,57:11,58" +
+":2,57:8,58,57:53,58,57:68,58:9,57:36,58:3,57:2,58:4,57:30,58:56,57:89,58:18" +
+",57:7,58:62,60:70,54:26,60:2,54:14,58:14,54,58:7,57,58,57:3,58,57,58,57:20," +
+"58,57:44,58,57:7,58:3,57,58,57,58,57,58,57,58,57:18,58:13,57:12,58,57:66,58" +
+",57:12,58,57:36,58:14,57:53,58:2,57:2,58:2,57:2,58:3,57:28,58:2,57:8,58:2,5" +
+"7:2,58:55,57:38,58:2,57,58:7,57:38,58:73,57:27,58:5,57:3,58:46,57:26,58:6,5" +
+"7:10,58:21,59:10,58:7,57:71,58:2,57:5,58,57:15,58,57:4,58,57,58:15,57:2,58:" +
+"9,59:10,58:523,57:53,58:3,57,58:26,57:10,58:4,59:10,58:21,57:8,58:2,57:2,58" +
+":2,57:22,58,57:7,58,57,58:3,57:4,58:34,57:2,58,57:3,58:4,59:10,57:2,58:19,5" +
+"7:6,58:4,57:2,58:2,57:22,58,57:7,58,57:2,58,57:2,58,57:2,58:31,57:4,58,57,5" +
+"8:7,59:10,58:2,57:3,58:16,57:7,58,57,58,57:3,58,57:22,58,57:7,58,57:2,58,57" +
+":5,58:3,57,58:34,57,58:5,59:10,58:21,57:8,58:2,57:2,58:2,57:22,58,57:7,58,5" +
+"7:2,58:2,57:4,58:3,57,58:30,57:2,58,57:3,58:4,59:10,58:21,57:6,58:3,57:3,58" +
+",57:4,58:3,57:2,58,57,58,57:2,58:3,57:2,58:3,57:3,58:3,57:8,58,57:3,58:45,5" +
+"9:9,58:21,57:8,58,57:3,58,57:23,58,57:10,58,57:5,58:38,57:2,58:4,59:10,58:2" +
+"1,57:8,58,57:3,58,57:23,58,57:10,58,57:5,58:36,57,58,57:2,58:4,59:10,58:21," +
+"57:8,58,57:3,58,57:23,58,57:16,58:38,57:2,58:4,59:10,58:145,57:46,58,57,58," +
+"57:2,58:12,57:6,58:10,59:10,58:39,57:2,58,57,58:2,57:2,58,57,58:2,57,58:6,5" +
+"7:4,58,57:7,58,57:3,58,57,58,57,58:2,57:2,58,57:2,58,57,58,57:2,58:9,57,58:" +
+"2,57:5,58:11,59:10,58:70,59:10,58:22,57:8,58,57:33,58:310,57:38,58:10,57:39" +
+",58:9,57,58,57:2,58,57:3,58,57,58,57:2,58,57:5,58:41,57,58,57,58,57,58:11,5" +
+"7,58,57,58,57,58:3,57:2,58:3,57,58:5,57:3,58,57,58,57,58,57,58,57,58:3,57:2" +
+",58:3,57:2,58,57,58:40,57,58:9,57,58:2,57,58:2,57:2,58:7,57:2,58,57,58,57:7" +
+",58:40,57,58:4,57,58:8,57,58:3078,57:156,58:4,57:90,58:6,57:22,58:2,57:6,58" +
+":2,57:38,58:2,57:6,58:2,57:8,58,57,58,57,58,57,58,57:31,58:2,57:53,58,57:7," +
+"58,57,58:3,57:3,58,57:7,58:3,57:4,58:2,57:6,58:4,57:13,58:5,57:3,58,57:7,58" +
+":3,54:12,58:2,54:98,58:182,57,58:3,57:2,58:2,57,58:81,57:3,58:13,54:2672,58" +
+":1008,54:17,58:64,57:84,58:12,57:90,58:10,57:40,58:31443,57:11172,58:92,54:" +
+"8448,58:1232,54:32,58:526,54:2,0:2")[0];
+
+	static private int yy_rmap[] = unpackFromString(1,234,
+"0,1:2,2,1:2,3,4,1,5,6,1:3,7,8,1:5,9,1,10:2,1:3,11,1:5,12,10,1,10:5,1:2,10,1" +
+":2,13,1,10,1,14,10,15,16,1:2,10:4,17,1:2,18,19,20,21,22,23,24,25,26,27,1,25" +
+",10,28:2,29,5,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,5" +
+"0,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,7" +
+"5,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,1" +
+"00,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118," +
+"119,120,121,122,123,124,125,126,127,128,129,130,131,132,10,133,134,135,136," +
+"137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155" +
+",156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,17" +
+"4,175,176,177,178,179,180,181")[0];
+
+	static private int yy_nxt[][] = unpackFromString(182,61,
+"1,2,3,4,5,6,65,184,204,70,7,8,9,10,11,12,13,66,14,15,211,184:2,215,184,16,1" +
+"7,18,218,220,221,184,222,184:2,223,184:3,224,184,19,20,184:10,71,74,77,21,1" +
+"84:2,67,74,-1:63,22,-1:62,184:2,73,184:3,64,-1:2,76,-1:6,184,79,184:3,-1:3," +
+"184:13,-1:2,184:10,-1:3,76,184,76:3,-1:10,25,-1:51,26,-1:72,27,-1:42,28,-1:" +
+"2,28,-1:17,30,-1:26,69,-1:2,72,-1:30,31,-1:57,34,-1:42,21,-1:2,21,-1:5,184:" +
+"6,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:56,28,-" +
+"1:2,28,-1:57,34,-1:2,34,-1:5,155,184:5,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1" +
+":2,184:10,-1:3,76,184,76:3,-1:4,209,184:5,64,-1:2,76,-1:6,184:5,-1:3,184:13" +
+",-1:2,184:10,-1:3,76,184,76:3,-1:4,233,184:5,64,-1:2,76,-1:6,184:5,-1:3,184" +
+":13,-1:2,184:10,-1:3,76,184,76:3,-1:4,158,184:5,64,-1:2,76,-1:6,184:5,-1:3," +
+"184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,122,-1" +
+",124,183,184:12,-1:2,184:10,-1:3,76,184,76:3,-1,36,-1:3,103:5,-1:2,80,-1:7," +
+"103:5,-1:3,103:13,-1:2,103:10,-1:4,103:3,-1:5,184,23,184:4,64,-1:2,76,-1:6," +
+"184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:16,29,-1:48,184:6,64,-1:2" +
+",68,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,67,184,76,67,76,-1:4,184:6,64,-" +
+"1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,68,184,76,68,76,-1:44,82,-1:" +
+"20,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:3,24,184:9,-1:2,184:10,-1:3,76,184," +
+"76:3,-1,75:52,32,75:7,-1:49,84,-1:15,184:3,35,184:2,64,-1:2,76,-1:6,184:5,-" +
+"1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1,78:54,33,78:5,-1:4,184:6,64,-1:2" +
+",76,-1:6,184:5,-1:3,184:4,105,184:8,-1:2,184:10,-1:3,76,184,76:3,-1:4,184,3" +
+"7,184:4,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4" +
+"5,185,-1:19,184:6,64,-1:2,76,-1:6,184:2,38,184:2,-1:3,184:13,-1:2,184:10,-1" +
+":3,76,184,76:3,-1:43,86,-1:21,184:6,64,-1:2,76,-1:6,184:4,191,-1:3,184:13,-" +
+"1:2,184:10,-1:3,76,184,76:3,-1:47,186,-1:17,184,107,184:4,64,-1:2,76,-1:6,1" +
+"84:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:46,96,-1:18,184:4,193,184," +
+"64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:26,42,-1:" +
+"38,184:2,205,184:3,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,18" +
+"4,76:3,-1:25,100,-1,92,-1:37,184:5,192,64,-1:2,76,-1:6,184,228,184:3,-1:3,1" +
+"84:13,-1:2,184:10,-1:3,76,184,76:3,-1:26,43,-1:38,184:6,64,-1:2,76,-1:6,184" +
+":5,-1:3,184:3,206,184:9,-1:2,184:10,-1:3,76,184,76:3,-1:47,104,-1:17,184:6," +
+"64,-1:2,76,-1:6,184:5,-1:3,184:9,111,184:3,-1:2,184:10,-1:3,76,184,76:3,-1:" +
+"50,190,-1:14,184:6,64,-1:2,76,-1:6,184:3,113,184,-1:3,184:13,-1:2,184:10,-1" +
+":3,76,184,76:3,-1:26,45,-1:38,184,39,184:4,64,-1:2,76,-1:6,184:5,-1:3,184,2" +
+"12,184:11,-1:2,184:10,-1:3,76,184,76:3,-1:26,46,-1:38,103:6,-1:3,103,-1:6,1" +
+"03:5,-1:3,103:13,-1:2,103:10,-1:3,103:5,-1:48,106,-1:16,184:6,64,-1:2,76,-1" +
+":6,184:5,-1:3,184,216,184:11,-1:2,184:10,-1:3,76,184,76:3,-1:19,48,-1:45,18" +
+"4:6,64,-1:2,76,-1:6,184,119,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3," +
+"-1:51,114,-1:13,184:4,123,184,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10" +
+",-1:3,76,184,76:3,-1:26,50,-1:38,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:11,40" +
+",184,-1:2,184:10,-1:3,76,184,76:3,-1:25,116,-1,112,-1:37,184:6,64,-1:2,76,-" +
+"1:6,184:5,-1:3,184:3,128,184:9,-1:2,184:10,-1:3,76,184,76:3,-1:52,118,-1:12" +
+",184:6,64,-1:2,76,-1:6,184:5,-1:3,184:9,129,184:3,-1:2,184:10,-1:3,76,184,7" +
+"6:3,-1:26,55,-1:38,184:6,64,-1:2,76,-1:6,184:3,130,184,90,-1,92,184:13,-1:2" +
+",184:10,-1:3,76,184,76:3,-1:48,120,-1:16,184:6,64,-1:2,76,-1:6,184,131,184:" +
+"3,94,-1,188,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:19,56,-1:45,184:6,64,-1:" +
+"2,76,-1:6,184:5,-1:3,184:4,132,184:8,-1:2,184:10,-1:3,76,184,76:3,-1:26,62," +
+"-1:38,184:6,64,-1:2,76,-1:6,184,208,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,1" +
+"84,76:3,-1:25,126,-1,124,-1:37,184,41,184:4,64,-1:2,76,-1:6,184:5,-1:3,184:" +
+"13,-1:2,184:10,-1:3,76,184,76:3,-1:26,63,-1:38,184:6,64,-1:2,76,-1:6,184:5," +
+"-1:3,135,184:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:2,136,184:3,64,-1:2,7" +
+"6,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:5,138,64,-1:" +
+"2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2" +
+",76,-1:6,184:3,130,184,-1:2,92,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184" +
+":6,64,-1:2,76,-1:6,184,131,184:3,-1:2,188,184:13,-1:2,184:10,-1:3,76,184,76" +
+":3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:2,139,184:10,-1:2,184:10,-1:3," +
+"76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:4,197,184:8,-1:2,184:" +
+"10,-1:3,76,184,76:3,-1:4,184,140,184:4,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1" +
+":2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,44,184,-1:3,184" +
+":13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:" +
+"10,141,184:2,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3," +
+"142,184,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6" +
+",184:5,-1:3,184:12,225,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-" +
+"1:6,184:5,-1:3,184:7,143,184:5,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:2,145," +
+"184:3,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,1" +
+"84:6,64,-1:2,76,-1:6,184:5,-1:3,184:6,146,184:6,-1:2,184:10,-1:3,76,184,76:" +
+"3,-1:4,184:5,147,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184," +
+"76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184,148,184:11,-1:2,184:10,-1:3," +
+"76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,149,184,110,-1,112,184:13,-1:2" +
+",184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,150,184:12,-" +
+"1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,151,184,-1:3,1" +
+"84:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,18" +
+"4:3,47,184:9,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184,49" +
+",184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6," +
+"184:3,149,184,-1:2,112,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1" +
+":2,76,-1:6,184:5,-1:3,184:5,51,184:7,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:" +
+"6,64,-1:2,76,-1:6,184,52,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:" +
+"4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:5,53,184:7,-1:2,184:10,-1:3,76,184,7" +
+"6:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,54,184,-1:3,184:13,-1:2,184:10,-1:3,76" +
+",184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:5,156,184:7,-1:2,184:10" +
+",-1:3,76,184,76:3,-1:4,184:5,157,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184" +
+":10,-1:3,76,184,76:3,-1:4,159,184:5,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2," +
+"184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:3,160,184" +
+":9,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:5,161,64,-1:2,76,-1:6,184:5,-1:3,1" +
+"84:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:2,162,184:3,64,-1:2,76,-1:6,184" +
+":5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,213,184:5,64,-1:2,76,-1:6," +
+"184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,1" +
+"84:5,-1:3,184:3,226,184:9,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,7" +
+"6,-1:6,184:5,-1:3,217,184:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:" +
+"2,76,-1:6,184:5,-1:3,184:10,164,184:2,-1:2,184:10,-1:3,76,184,76:3,-1:4,184" +
+":6,64,-1:2,76,-1:6,184:5,-1:3,184:9,167,184:3,-1:2,184:10,-1:3,76,184,76:3," +
+"-1:4,184:6,64,-1:2,76,-1:6,184,168,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,18" +
+"4,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,170,184,-1:3,184:13,-1:2,184:10,-1:" +
+"3,76,184,76:3,-1:4,184:2,171,184:3,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,1" +
+"84:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:9,172,184:" +
+"3,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184,173,184:3,-1:" +
+"3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3" +
+",184:3,174,184:9,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,18" +
+"4:5,-1:3,175,184:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6" +
+",184:5,-1:3,184:11,57,184,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,7" +
+"6,-1:6,184:5,-1:3,184:9,177,184:3,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,6" +
+"4,-1:2,76,-1:6,184:5,-1:3,184:6,178,184:6,-1:2,184:10,-1:3,76,184,76:3,-1:4" +
+",184:6,64,-1:2,76,-1:6,184:5,-1:3,184:5,58,184:7,-1:2,184:10,-1:3,76,184,76" +
+":3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:5,59,184:7,-1:2,184:10,-1:3,76" +
+",184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:11,60,184,-1:2,184:10,-" +
+"1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184,179,184:11,-1:2,1" +
+"84:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,180,184,-1:3,184:13" +
+",-1:2,184:10,-1:3,76,184,76:3,-1:4,184:2,181,184:3,64,-1:2,76,-1:6,184:5,-1" +
+":3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:5,182,64,-1:2,76,-1:6,184:5" +
+",-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5," +
+"-1:3,61,184:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:" +
+"5,-1:2,124,183,184:12,-1:2,184:10,-1:3,76,184,76:3,-1:45,88,-1:61,98,-1:18," +
+"184:4,109,184,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:" +
+"3,-1:25,102,-1,188,-1:37,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:9,115,184:3,-" +
+"1:2,184:10,-1:3,76,184,76:3,-1:50,108,-1:14,184:6,64,-1:2,76,-1:6,184:3,117" +
+",184,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,18" +
+"4:5,-1:3,184,195,184:11,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76," +
+"-1:6,184,121,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-" +
+"1:2,76,-1:6,184:5,-1:3,184:4,137,184:8,-1:2,184:10,-1:3,76,184,76:3,-1:4,18" +
+"4:6,64,-1:2,76,-1:6,184,133,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3," +
+"-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,198,184:12,-1:2,184:10,-1:3,76,184,76" +
+":3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:4,229,184:8,-1:2,184:10,-1:3,7" +
+"6,184,76:3,-1:4,184,200,184:4,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10" +
+",-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,144,184,-1:3,184:13,-1:2" +
+",184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:7,210,18" +
+"4:5,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,152," +
+"184:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:2,163,184:3,64,-1:2,76,-1:6,18" +
+"4:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184" +
+":5,-1:3,176,184:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:5,81,64,-1:2,76,-1" +
+":6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:" +
+"6,184:5,-1:3,184:9,125,184:3,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:" +
+"2,76,-1:6,184,127,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6" +
+",64,-1:2,76,-1:6,184,134,184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:" +
+"4,184:6,64,-1:2,76,-1:6,184:5,-1:3,199,184:12,-1:2,184:10,-1:3,76,184,76:3," +
+"-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:4,202,184:8,-1:2,184:10,-1:3,76,1" +
+"84,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,153,184:12,-1:2,184:10,-1:3,7" +
+"6,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184,83,184:3,-1:3,184:13,-1:2,184:10," +
+"-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184,194,184:3,-1:3,184:13,-1:2," +
+"184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:4,165,184" +
+":8,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,154,1" +
+"84:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184,85,184:3," +
+"-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184,196" +
+",184:3,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6," +
+"184:5,-1:3,184:4,166,184:8,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:5,87,64,-1" +
+":2,76,-1:6,184:5,-1:3,184:7,89,184:5,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:" +
+"6,64,-1:2,76,-1:6,184:5,-1:3,184:4,169,184:8,-1:2,184:10,-1:3,76,184,76:3,-" +
+"1:4,184:5,187,64,-1:2,76,-1:6,184:5,-1:3,184:8,91,184:4,-1:2,184:10,-1:3,76" +
+",184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:3,93,184:3,95,184:5,-1:" +
+"2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184,97,184:3,-1:3,184:" +
+"13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:3,99,184,-1:" +
+"3,101,184:12,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:5,189,64,-1:2,76,-1:6,18" +
+"4:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:2,201,184:3,64,-1:2,7" +
+"6,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,219,184:5,64,-1:" +
+"2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:2,203,184" +
+":3,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:" +
+"6,64,-1:2,76,-1:6,184:5,-1:3,184,207,184:11,-1:2,184:10,-1:3,76,184,76:3,-1" +
+":4,184:2,214,184:3,64,-1:2,76,-1:6,184:5,-1:3,184:13,-1:2,184:10,-1:3,76,18" +
+"4,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:9,227,184:3,-1:2,184:10,-1" +
+":3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:10,230,184:2,-1:2," +
+"184:10,-1:3,76,184,76:3,-1:4,184:2,231,184:3,64,-1:2,76,-1:6,184:5,-1:3,184" +
+":13,-1:2,184:10,-1:3,76,184,76:3,-1:4,184:6,64,-1:2,76,-1:6,184:5,-1:3,184:" +
+"4,232,184:8,-1:2,184:10,-1:3,76,184,76:3");
+
+	public java_cup.runtime.Symbol next_token ()
+		throws java.io.IOException, 
+Exception
+
+		{
+		int yy_lookahead;
+		int yy_anchor = YY_NO_ANCHOR;
+		int yy_state = yy_state_dtrans[yy_lexical_state];
+		int yy_next_state = YY_NO_STATE;
+		int yy_last_accept_state = YY_NO_STATE;
+		boolean yy_initial = true;
+		int yy_this_accept;
+
+		yy_mark_start();
+		yy_this_accept = yy_acpt[yy_state];
+		if (YY_NOT_ACCEPT != yy_this_accept) {
+			yy_last_accept_state = yy_state;
+			yy_mark_end();
+		}
+		while (true) {
+			if (yy_initial && yy_at_bol) yy_lookahead = YY_BOL;
+			else yy_lookahead = yy_advance();
+			yy_next_state = YY_F;
+			yy_next_state = yy_nxt[yy_rmap[yy_state]][yy_cmap[yy_lookahead]];
+			if (YY_EOF == yy_lookahead && true == yy_initial) {
+
+return newSymbol(sym.EOF);
+			}
+			if (YY_F != yy_next_state) {
+				yy_state = yy_next_state;
+				yy_initial = false;
+				yy_this_accept = yy_acpt[yy_state];
+				if (YY_NOT_ACCEPT != yy_this_accept) {
+					yy_last_accept_state = yy_state;
+					yy_mark_end();
+				}
+			}
+			else {
+				if (YY_NO_STATE == yy_last_accept_state) {
+					throw (new Error("Lexical Error: Unmatched Input."));
+				}
+				else {
+					yy_anchor = yy_acpt[yy_last_accept_state];
+					if (0 != (YY_END & yy_anchor)) {
+						yy_move_end();
+					}
+					yy_to_mark();
+					switch (yy_last_accept_state) {
+					case 1:
+						
+					case -2:
+						break;
+					case 2:
+						{ return disambiguateStar(); }
+					case -3:
+						break;
+					case 3:
+						{ return newSymbol(sym.SLASH); }
+					case -4:
+						break;
+					case 4:
+						{ return newSymbol(sym.PLUS); }
+					case -5:
+						break;
+					case 5:
+						{ return newSymbol(sym.MINUS); }
+					case -6:
+						break;
+					case 6:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -7:
+						break;
+					case 7:
+						{ throw new Exception(yytext()); }
+					case -8:
+						break;
+					case 8:
+						{ return newSymbol(sym.COMMA); }
+					case -9:
+						break;
+					case 9:
+						{ return newSymbol(sym.ATSIGN); }
+					case -10:
+						break;
+					case 10:
+						{ return newSymbol(sym.DOT); }
+					case -11:
+						break;
+					case 11:
+						{ return newSymbol(sym.VBAR); }
+					case -12:
+						break;
+					case 12:
+						{ return newSymbol(sym.DOLLAR); }
+					case -13:
+						break;
+					case 13:
+						{ return newSymbol(sym.EQ); }
+					case -14:
+						break;
+					case 14:
+						{ return newSymbol(sym.LT); }
+					case -15:
+						break;
+					case 15:
+						{ return newSymbol(sym.GT); }
+					case -16:
+						break;
+					case 16:
+						{ return newSymbol(sym.LPAREN); }
+					case -17:
+						break;
+					case 17:
+						{ return newSymbol(sym.RPAREN); }
+					case -18:
+						break;
+					case 18:
+						{ /* ignore white space. */ }
+					case -19:
+						break;
+					case 19:
+						{ return newSymbol(sym.LBRACK); }
+					case -20:
+						break;
+					case 20:
+						{ return newSymbol(sym.RBRACK); }
+					case -21:
+						break;
+					case 21:
+						{ return newSymbol(sym.INT, new Long(yytext())); }
+					case -22:
+						break;
+					case 22:
+						{ return newSymbol(sym.DSLASH); }
+					case -23:
+						break;
+					case 23:
+						{ return disambiguateAxisOrFunction(sym.ID); }
+					case -24:
+						break;
+					case 24:
+						{ return disambiguateOperator(sym.OR); }
+					case -25:
+						break;
+					case 25:
+						{ return newSymbol(sym.DCOLON); }
+					case -26:
+						break;
+					case 26:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -27:
+						break;
+					case 27:
+						{ return newSymbol(sym.DDOT); }
+					case -28:
+						break;
+					case 28:
+						{ return newSymbol(sym.REAL, new Double(yytext())); }
+					case -29:
+						break;
+					case 29:
+						{ return newSymbol(sym.NE); }
+					case -30:
+						break;
+					case 30:
+						{ return newSymbol(sym.LE); }
+					case -31:
+						break;
+					case 31:
+						{ return newSymbol(sym.GE); }
+					case -32:
+						break;
+					case 32:
+						{ return newSymbol(sym.Literal,
+			      yytext().substring(1, yytext().length() - 1)); }
+					case -33:
+						break;
+					case 33:
+						{ return newSymbol(sym.Literal,
+			      yytext().substring(1, yytext().length() - 1)); }
+					case -34:
+						break;
+					case 34:
+						{ return newSymbol(sym.REAL, new Double(yytext())); }
+					case -35:
+						break;
+					case 35:
+						{ return disambiguateOperator(sym.DIV); }
+					case -36:
+						break;
+					case 36:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -37:
+						break;
+					case 37:
+						{ return disambiguateOperator(sym.MOD); }
+					case -38:
+						break;
+					case 38:
+						{ return disambiguateAxisOrFunction(sym.KEY); }
+					case -39:
+						break;
+					case 39:
+						{ return disambiguateOperator(sym.AND); }
+					case -40:
+						break;
+					case 40:
+						{ return disambiguateAxisOrFunction(sym.SELF); }
+					case -41:
+						break;
+					case 41:
+						{ return disambiguateAxisOrFunction(sym.CHILD); }
+					case -42:
+						break;
+					case 42:
+						{ return newSymbol(sym.TEXT); }
+					case -43:
+						break;
+					case 43:
+						{ return newSymbol(sym.NODE); }
+					case -44:
+						break;
+					case 44:
+						{ return disambiguateAxisOrFunction(sym.PARENT); }
+					case -45:
+						break;
+					case 45:
+						{ return newSymbol(sym.TEXT); }
+					case -46:
+						break;
+					case 46:
+						{ return newSymbol(sym.NODE); }
+					case -47:
+						break;
+					case 47:
+						{ return disambiguateAxisOrFunction(sym.ANCESTOR); }
+					case -48:
+						break;
+					case 48:
+						{ initialize(); return new Symbol(sym.PATTERN); }
+					case -49:
+						break;
+					case 49:
+						{ return disambiguateAxisOrFunction(sym.NAMESPACE); }
+					case -50:
+						break;
+					case 50:
+						{ return newSymbol(sym.COMMENT); }
+					case -51:
+						break;
+					case 51:
+						{ return disambiguateAxisOrFunction(sym.PRECEDING); }
+					case -52:
+						break;
+					case 52:
+						{ return disambiguateAxisOrFunction(sym.ATTRIBUTE); }
+					case -53:
+						break;
+					case 53:
+						{ return disambiguateAxisOrFunction(sym.FOLLOWING); }
+					case -54:
+						break;
+					case 54:
+						{ return disambiguateAxisOrFunction(sym.DESCENDANT); }
+					case -55:
+						break;
+					case 55:
+						{ return newSymbol(sym.COMMENT); }
+					case -56:
+						break;
+					case 56:
+						{ initialize(); return new Symbol(sym.EXPRESSION); }
+					case -57:
+						break;
+					case 57:
+						{ return disambiguateAxisOrFunction(sym.ANCESTORORSELF); }
+					case -58:
+						break;
+					case 58:
+						{ return disambiguateAxisOrFunction(sym.PRECEDINGSIBLING); }
+					case -59:
+						break;
+					case 59:
+						{ return disambiguateAxisOrFunction(sym.FOLLOWINGSIBLING); }
+					case -60:
+						break;
+					case 60:
+						{ return disambiguateAxisOrFunction(sym.DESCENDANTORSELF); }
+					case -61:
+						break;
+					case 61:
+						{ return disambiguateAxisOrFunction(sym.PIPARAM); }
+					case -62:
+						break;
+					case 62:
+						{ return newSymbol(sym.PI); }
+					case -63:
+						break;
+					case 63:
+						{ return newSymbol(sym.PI); }
+					case -64:
+						break;
+					case 65:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -65:
+						break;
+					case 66:
+						{ throw new Exception(yytext()); }
+					case -66:
+						break;
+					case 67:
+						{ return newSymbol(sym.INT, new Long(yytext())); }
+					case -67:
+						break;
+					case 68:
+						{ return newSymbol(sym.REAL, new Double(yytext())); }
+					case -68:
+						break;
+					case 70:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -69:
+						break;
+					case 71:
+						{ throw new Exception(yytext()); }
+					case -70:
+						break;
+					case 73:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -71:
+						break;
+					case 74:
+						{ throw new Exception(yytext()); }
+					case -72:
+						break;
+					case 76:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -73:
+						break;
+					case 77:
+						{ throw new Exception(yytext()); }
+					case -74:
+						break;
+					case 79:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -75:
+						break;
+					case 81:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -76:
+						break;
+					case 83:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -77:
+						break;
+					case 85:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -78:
+						break;
+					case 87:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -79:
+						break;
+					case 89:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -80:
+						break;
+					case 91:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -81:
+						break;
+					case 93:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -82:
+						break;
+					case 95:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -83:
+						break;
+					case 97:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -84:
+						break;
+					case 99:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -85:
+						break;
+					case 101:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -86:
+						break;
+					case 103:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -87:
+						break;
+					case 105:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -88:
+						break;
+					case 107:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -89:
+						break;
+					case 109:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -90:
+						break;
+					case 111:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -91:
+						break;
+					case 113:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -92:
+						break;
+					case 115:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -93:
+						break;
+					case 117:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -94:
+						break;
+					case 119:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -95:
+						break;
+					case 121:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -96:
+						break;
+					case 123:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -97:
+						break;
+					case 125:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -98:
+						break;
+					case 127:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -99:
+						break;
+					case 128:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -100:
+						break;
+					case 129:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -101:
+						break;
+					case 130:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -102:
+						break;
+					case 131:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -103:
+						break;
+					case 132:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -104:
+						break;
+					case 133:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -105:
+						break;
+					case 134:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -106:
+						break;
+					case 135:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -107:
+						break;
+					case 136:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -108:
+						break;
+					case 137:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -109:
+						break;
+					case 138:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -110:
+						break;
+					case 139:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -111:
+						break;
+					case 140:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -112:
+						break;
+					case 141:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -113:
+						break;
+					case 142:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -114:
+						break;
+					case 143:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -115:
+						break;
+					case 144:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -116:
+						break;
+					case 145:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -117:
+						break;
+					case 146:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -118:
+						break;
+					case 147:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -119:
+						break;
+					case 148:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -120:
+						break;
+					case 149:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -121:
+						break;
+					case 150:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -122:
+						break;
+					case 151:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -123:
+						break;
+					case 152:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -124:
+						break;
+					case 153:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -125:
+						break;
+					case 154:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -126:
+						break;
+					case 155:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -127:
+						break;
+					case 156:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -128:
+						break;
+					case 157:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -129:
+						break;
+					case 158:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -130:
+						break;
+					case 159:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -131:
+						break;
+					case 160:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -132:
+						break;
+					case 161:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -133:
+						break;
+					case 162:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -134:
+						break;
+					case 163:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -135:
+						break;
+					case 164:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -136:
+						break;
+					case 165:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -137:
+						break;
+					case 166:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -138:
+						break;
+					case 167:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -139:
+						break;
+					case 168:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -140:
+						break;
+					case 169:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -141:
+						break;
+					case 170:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -142:
+						break;
+					case 171:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -143:
+						break;
+					case 172:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -144:
+						break;
+					case 173:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -145:
+						break;
+					case 174:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -146:
+						break;
+					case 175:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -147:
+						break;
+					case 176:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -148:
+						break;
+					case 177:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -149:
+						break;
+					case 178:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -150:
+						break;
+					case 179:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -151:
+						break;
+					case 180:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -152:
+						break;
+					case 181:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -153:
+						break;
+					case 182:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -154:
+						break;
+					case 183:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -155:
+						break;
+					case 184:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -156:
+						break;
+					case 187:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -157:
+						break;
+					case 189:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -158:
+						break;
+					case 191:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -159:
+						break;
+					case 192:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -160:
+						break;
+					case 193:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -161:
+						break;
+					case 194:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -162:
+						break;
+					case 195:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -163:
+						break;
+					case 196:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -164:
+						break;
+					case 197:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -165:
+						break;
+					case 198:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -166:
+						break;
+					case 199:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -167:
+						break;
+					case 200:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -168:
+						break;
+					case 201:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -169:
+						break;
+					case 202:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -170:
+						break;
+					case 203:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -171:
+						break;
+					case 204:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -172:
+						break;
+					case 205:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -173:
+						break;
+					case 206:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -174:
+						break;
+					case 207:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -175:
+						break;
+					case 208:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -176:
+						break;
+					case 209:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -177:
+						break;
+					case 210:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -178:
+						break;
+					case 211:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -179:
+						break;
+					case 212:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -180:
+						break;
+					case 213:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -181:
+						break;
+					case 214:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -182:
+						break;
+					case 215:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -183:
+						break;
+					case 216:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -184:
+						break;
+					case 217:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -185:
+						break;
+					case 218:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -186:
+						break;
+					case 219:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -187:
+						break;
+					case 220:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -188:
+						break;
+					case 221:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -189:
+						break;
+					case 222:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -190:
+						break;
+					case 223:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -191:
+						break;
+					case 224:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -192:
+						break;
+					case 225:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -193:
+						break;
+					case 226:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -194:
+						break;
+					case 227:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -195:
+						break;
+					case 228:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -196:
+						break;
+					case 229:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -197:
+						break;
+					case 230:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -198:
+						break;
+					case 231:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -199:
+						break;
+					case 232:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -200:
+						break;
+					case 233:
+						{ return newSymbol(sym.QNAME, yytext()); }
+					case -201:
+						break;
+					default:
+						yy_error(YY_E_INTERNAL,false);
+					case -1:
+					}
+					yy_initial = true;
+					yy_state = yy_state_dtrans[yy_lexical_state];
+					yy_next_state = YY_NO_STATE;
+					yy_last_accept_state = YY_NO_STATE;
+					yy_mark_start();
+					yy_this_accept = yy_acpt[yy_state];
+					if (YY_NOT_ACCEPT != yy_this_accept) {
+						yy_last_accept_state = yy_state;
+						yy_mark_end();
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/src/org/apache/xalan/xsltc/compiler/XPathParser.java b/src/org/apache/xalan/xsltc/compiler/XPathParser.java
new file mode 100644
index 0000000..ae866bb
--- /dev/null
+++ b/src/org/apache/xalan/xsltc/compiler/XPathParser.java
@@ -0,0 +1,3149 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.10k
+// Tue May 14 05:05:47 GMT 2019
+//----------------------------------------------------
+
+package org.apache.xalan.xsltc.compiler;
+
+import java.util.Stack;
+import java.util.Vector;
+import java.io.StringReader;
+import java_cup.runtime.*;
+import org.apache.xml.dtm.DTM;
+import org.apache.xalan.xsltc.DOM;
+import org.apache.xml.dtm.Axis;
+import org.apache.xalan.xsltc.runtime.Operators;
+import org.apache.xalan.xsltc.compiler.util.ErrorMsg;
+
+/** CUP v0.10k generated parser.
+  * @version Tue May 14 05:05:47 GMT 2019
+  */
+public class XPathParser extends java_cup.runtime.lr_parser {
+
+  /** Default constructor. */
+  public XPathParser() {super();}
+
+  /** Constructor which sets the default scanner. */
+  public XPathParser(java_cup.runtime.Scanner s) {super(s);}
+
+  /** Production table. */
+  protected static final short _production_table[][] = 
+    unpackFromStrings(new String[] {
+    "\000\215\000\002\002\004\000\002\003\004\000\002\003" +
+    "\004\000\002\036\003\000\002\036\005\000\002\037\003" +
+    "\000\002\037\004\000\002\037\003\000\002\037\005\000" +
+    "\002\037\005\000\002\037\004\000\002\037\003\000\002" +
+    "\035\006\000\002\035\010\000\002\040\006\000\002\041" +
+    "\003\000\002\041\005\000\002\041\005\000\002\042\003" +
+    "\000\002\042\004\000\002\042\003\000\002\042\004\000" +
+    "\002\042\004\000\002\042\005\000\002\042\004\000\002" +
+    "\042\005\000\002\043\003\000\002\043\003\000\002\043" +
+    "\003\000\002\043\003\000\002\043\003\000\002\044\003" +
+    "\000\002\044\003\000\002\054\003\000\002\054\004\000" +
+    "\002\054\004\000\002\045\003\000\002\045\004\000\002" +
+    "\007\005\000\002\004\003\000\002\012\003\000\002\012" +
+    "\005\000\002\013\003\000\002\013\005\000\002\014\003" +
+    "\000\002\014\005\000\002\014\005\000\002\015\003\000" +
+    "\002\015\005\000\002\015\005\000\002\015\005\000\002" +
+    "\015\005\000\002\016\003\000\002\016\005\000\002\016" +
+    "\005\000\002\017\003\000\002\017\005\000\002\017\005" +
+    "\000\002\017\005\000\002\020\003\000\002\020\004\000" +
+    "\002\024\003\000\002\024\005\000\002\025\003\000\002" +
+    "\025\003\000\002\025\005\000\002\025\005\000\002\006" +
+    "\003\000\002\006\003\000\002\027\003\000\002\027\005" +
+    "\000\002\027\003\000\002\031\003\000\002\031\004\000" +
+    "\002\031\003\000\002\030\005\000\002\032\004\000\002" +
+    "\011\003\000\002\011\004\000\002\011\005\000\002\011" +
+    "\004\000\002\011\003\000\002\053\004\000\002\053\003" +
+    "\000\002\052\003\000\002\052\003\000\002\052\003\000" +
+    "\002\052\003\000\002\052\003\000\002\052\003\000\002" +
+    "\052\003\000\002\052\003\000\002\052\003\000\002\052" +
+    "\003\000\002\052\003\000\002\052\003\000\002\052\003" +
+    "\000\002\026\003\000\002\026\003\000\002\010\003\000" +
+    "\002\010\004\000\002\023\003\000\002\023\005\000\002" +
+    "\023\003\000\002\023\003\000\002\023\003\000\002\023" +
+    "\003\000\002\021\004\000\002\022\005\000\002\022\006" +
+    "\000\002\046\003\000\002\046\005\000\002\050\003\000" +
+    "\002\051\003\000\002\005\003\000\002\033\003\000\002" +
+    "\033\003\000\002\033\003\000\002\033\003\000\002\033" +
+    "\006\000\002\033\003\000\002\034\003\000\002\034\003" +
+    "\000\002\047\003\000\002\047\003\000\002\047\003\000" +
+    "\002\047\003\000\002\047\003\000\002\047\003\000\002" +
+    "\047\003\000\002\047\003\000\002\047\003\000\002\047" +
+    "\003\000\002\047\003\000\002\047\003\000\002\047\003" +
+    "\000\002\047\003\000\002\047\003\000\002\047\003\000" +
+    "\002\047\003\000\002\047\003" });
+
+  /** Access to production table. */
+  public short[][] production_table() {return _production_table;}
+
+  /** Parse-action table. */
+  protected static final short[][] _action_table = 
+    unpackFromStrings(new String[] {
+    "\000\307\000\006\067\006\070\005\001\002\000\004\002" +
+    "\311\001\002\000\110\004\061\005\111\011\071\013\103" +
+    "\015\134\016\066\017\106\021\070\031\075\032\031\033" +
+    "\040\035\057\036\034\037\113\040\141\041\142\042\145" +
+    "\045\063\046\062\047\065\050\115\051\123\052\136\053" +
+    "\077\054\143\055\131\056\125\057\116\060\104\061\140" +
+    "\062\067\063\060\064\127\065\132\066\072\001\002\000" +
+    "\070\004\013\013\027\016\020\021\023\032\031\033\040" +
+    "\036\034\037\033\040\046\041\047\042\051\045\015\046" +
+    "\014\047\016\050\036\051\037\052\044\053\025\054\050" +
+    "\055\043\056\041\057\035\060\030\061\045\062\021\063" +
+    "\012\064\042\001\002\000\006\002\ufffe\010\306\001\002" +
+    "\000\004\002\000\001\002\000\014\002\uffe7\004\uffe7\006" +
+    "\uffe7\010\uffe7\021\uffe7\001\002\000\054\002\uff7a\004\uff7a" +
+    "\006\uff7a\007\uff7a\010\uff7a\012\uff7a\014\uff7a\021\uff7a\022" +
+    "\uff7a\023\uff7a\024\uff7a\025\uff7a\026\uff7a\027\uff7a\030\uff7a" +
+    "\031\uff7a\032\uff7a\033\uff7a\034\uff7a\043\uff7a\044\uff7a\001" +
+    "\002\000\070\002\ufffc\010\ufffc\013\027\016\020\032\031" +
+    "\033\040\036\034\037\113\040\141\041\047\042\051\045" +
+    "\015\046\014\047\016\050\036\051\037\052\044\053\025" +
+    "\054\050\055\043\056\041\057\035\060\030\061\045\062" +
+    "\021\063\012\064\042\001\002\000\014\002\uffe3\004\uffe3" +
+    "\006\uffe3\010\uffe3\021\uffe3\001\002\000\014\002\uffe4\004" +
+    "\uffe4\006\uffe4\010\uffe4\021\uffe4\001\002\000\004\011\302" +
+    "\001\002\000\012\002\ufffa\004\277\010\ufffa\021\276\001" +
+    "\002\000\062\013\uffe0\032\uffe0\033\uffe0\036\uffe0\037\uffe0" +
+    "\040\uffe0\041\uffe0\042\uffe0\045\uffe0\046\uffe0\047\uffe0\050" +
+    "\uffe0\051\uffe0\052\uffe0\053\uffe0\054\uffe0\055\uffe0\056\uffe0" +
+    "\057\uffe0\060\uffe0\061\uffe0\062\uffe0\063\uffe0\064\uffe0\001" +
+    "\002\000\054\002\uff7b\004\uff7b\006\uff7b\007\uff7b\010\uff7b" +
+    "\012\uff7b\014\uff7b\021\uff7b\022\uff7b\023\uff7b\024\uff7b\025" +
+    "\uff7b\026\uff7b\027\uff7b\030\uff7b\031\uff7b\032\uff7b\033\uff7b" +
+    "\034\uff7b\043\uff7b\044\uff7b\001\002\000\062\013\027\032" +
+    "\031\033\040\036\034\037\113\040\141\041\047\042\051" +
+    "\045\015\046\014\047\016\050\036\051\037\052\044\053" +
+    "\170\054\166\055\043\056\041\057\035\060\030\061\045" +
+    "\062\021\063\012\064\042\001\002\000\064\013\027\016" +
+    "\020\032\031\033\040\036\034\037\113\040\141\041\047" +
+    "\042\051\045\015\046\014\047\016\050\036\051\037\052" +
+    "\044\053\025\054\050\055\043\056\041\057\035\060\030" +
+    "\061\045\062\021\063\012\064\042\001\002\000\012\002" +
+    "\ufff2\004\266\010\ufff2\021\265\001\002\000\016\002\uff7f" +
+    "\004\uff7f\006\uff7f\010\uff7f\020\264\021\uff7f\001\002\000" +
+    "\006\002\ufff6\010\ufff6\001\002\000\014\002\uffe2\004\uffe2" +
+    "\006\uffe2\010\uffe2\021\uffe2\001\002\000\054\002\uff7d\004" +
+    "\uff7d\006\uff7d\007\uff7d\010\uff7d\012\uff7d\014\uff7d\021\uff7d" +
+    "\022\uff7d\023\uff7d\024\uff7d\025\uff7d\026\uff7d\027\uff7d\030" +
+    "\uff7d\031\uff7d\032\uff7d\033\uff7d\034\uff7d\043\uff7d\044\uff7d" +
+    "\001\002\000\056\002\uff85\004\uff85\006\uff85\007\uff85\010" +
+    "\uff85\011\uff85\012\uff85\014\uff85\021\uff85\022\uff85\023\uff85" +
+    "\024\uff85\025\uff85\026\uff85\027\uff85\030\uff85\031\uff85\032" +
+    "\uff85\033\uff85\034\uff85\043\uff85\044\uff85\001\002\000\014" +
+    "\002\uffed\004\uffed\006\055\010\uffed\021\uffed\001\002\000" +
+    "\016\002\uff75\004\uff75\006\uff75\010\uff75\011\260\021\uff75" +
+    "\001\002\000\056\002\uff86\004\uff86\006\uff86\007\uff86\010" +
+    "\uff86\011\uff86\012\uff86\014\uff86\021\uff86\022\uff86\023\uff86" +
+    "\024\uff86\025\uff86\026\uff86\027\uff86\030\uff86\031\uff86\032" +
+    "\uff86\033\uff86\034\uff86\043\uff86\044\uff86\001\002\000\054" +
+    "\002\uff7e\004\uff7e\006\uff7e\007\uff7e\010\uff7e\012\uff7e\014" +
+    "\uff7e\021\uff7e\022\uff7e\023\uff7e\024\uff7e\025\uff7e\026\uff7e" +
+    "\027\uff7e\030\uff7e\031\uff7e\032\uff7e\033\uff7e\034\uff7e\043" +
+    "\uff7e\044\uff7e\001\002\000\054\002\uff77\004\uff77\006\uff77" +
+    "\007\uff77\010\uff77\012\uff77\014\uff77\021\uff77\022\uff77\023" +
+    "\uff77\024\uff77\025\uff77\026\uff77\027\uff77\030\uff77\031\uff77" +
+    "\032\uff77\033\uff77\034\uff77\043\uff77\044\uff77\001\002\000" +
+    "\054\002\uff76\004\uff76\006\uff76\007\uff76\010\uff76\012\uff76" +
+    "\014\uff76\021\uff76\022\uff76\023\uff76\024\uff76\025\uff76\026" +
+    "\uff76\027\uff76\030\uff76\031\uff76\032\uff76\033\uff76\034\uff76" +
+    "\043\uff76\044\uff76\001\002\000\056\002\uff84\004\uff84\006" +
+    "\uff84\007\uff84\010\uff84\011\uff84\012\uff84\014\uff84\021\uff84" +
+    "\022\uff84\023\uff84\024\uff84\025\uff84\026\uff84\027\uff84\030" +
+    "\uff84\031\uff84\032\uff84\033\uff84\034\uff84\043\uff84\044\uff84" +
+    "\001\002\000\054\002\uff81\004\uff81\006\uff81\007\uff81\010" +
+    "\uff81\012\uff81\014\uff81\021\uff81\022\uff81\023\uff81\024\uff81" +
+    "\025\uff81\026\uff81\027\uff81\030\uff81\031\uff81\032\uff81\033" +
+    "\uff81\034\uff81\043\uff81\044\uff81\001\002\000\054\002\uff78" +
+    "\004\uff78\006\uff78\007\uff78\010\uff78\012\uff78\014\uff78\021" +
+    "\uff78\022\uff78\023\uff78\024\uff78\025\uff78\026\uff78\027\uff78" +
+    "\030\uff78\031\uff78\032\uff78\033\uff78\034\uff78\043\uff78\044" +
+    "\uff78\001\002\000\054\002\uff82\004\uff82\006\uff82\007\uff82" +
+    "\010\uff82\012\uff82\014\uff82\021\uff82\022\uff82\023\uff82\024" +
+    "\uff82\025\uff82\026\uff82\027\uff82\030\uff82\031\uff82\032\uff82" +
+    "\033\uff82\034\uff82\043\uff82\044\uff82\001\002\000\054\002" +
+    "\uff79\004\uff79\006\uff79\007\uff79\010\uff79\012\uff79\014\uff79" +
+    "\021\uff79\022\uff79\023\uff79\024\uff79\025\uff79\026\uff79\027" +
+    "\uff79\030\uff79\031\uff79\032\uff79\033\uff79\034\uff79\043\uff79" +
+    "\044\uff79\001\002\000\054\002\uff7c\004\uff7c\006\uff7c\007" +
+    "\uff7c\010\uff7c\012\uff7c\014\uff7c\021\uff7c\022\uff7c\023\uff7c" +
+    "\024\uff7c\025\uff7c\026\uff7c\027\uff7c\030\uff7c\031\uff7c\032" +
+    "\uff7c\033\uff7c\034\uff7c\043\uff7c\044\uff7c\001\002\000\016" +
+    "\002\uff83\004\uff83\006\uff83\010\uff83\011\253\021\uff83\001" +
+    "\002\000\014\002\uffe5\004\uffe5\006\uffe5\010\uffe5\021\uffe5" +
+    "\001\002\000\016\002\uff80\004\uff80\006\uff80\010\uff80\020" +
+    "\252\021\uff80\001\002\000\014\002\uffe6\004\uffe6\006\uffe6" +
+    "\010\uffe6\021\uffe6\001\002\000\014\002\uffe1\004\uffe1\006" +
+    "\uffe1\010\uffe1\021\uffe1\001\002\000\014\002\uffef\004\uffef" +
+    "\006\055\010\uffef\021\uffef\001\002\000\054\002\uffdd\004" +
+    "\uffdd\006\055\007\uffdd\010\uffdd\012\uffdd\014\uffdd\021\uffdd" +
+    "\022\uffdd\023\uffdd\024\uffdd\025\uffdd\026\uffdd\027\uffdd\030" +
+    "\uffdd\031\uffdd\032\uffdd\033\uffdd\034\uffdd\043\uffdd\044\uffdd" +
+    "\001\002\000\110\004\061\005\111\011\071\013\103\015" +
+    "\134\016\066\017\106\021\070\031\075\032\031\033\040" +
+    "\035\057\036\034\037\113\040\141\041\142\042\145\045" +
+    "\063\046\062\047\065\050\115\051\123\052\136\053\077" +
+    "\054\143\055\131\056\125\057\116\060\104\061\140\062" +
+    "\067\063\060\064\127\065\132\066\072\001\002\000\012" +
+    "\002\uffee\004\uffee\010\uffee\021\uffee\001\002\000\054\002" +
+    "\uff9a\004\uff9a\006\uff9a\007\uff9a\010\uff9a\012\uff9a\014\uff9a" +
+    "\021\uff9a\022\uff9a\023\uff9a\024\uff9a\025\uff9a\026\uff9a\027" +
+    "\uff9a\030\uff9a\031\uff9a\032\uff9a\033\uff9a\034\uff9a\043\uff9a" +
+    "\044\uff9a\001\002\000\060\002\uff7a\004\uff7a\006\uff7a\007" +
+    "\uff7a\010\uff7a\011\uff7a\012\uff7a\014\uff7a\020\uffa5\021\uff7a" +
+    "\022\uff7a\023\uff7a\024\uff7a\025\uff7a\026\uff7a\027\uff7a\030" +
+    "\uff7a\031\uff7a\032\uff7a\033\uff7a\034\uff7a\043\uff7a\044\uff7a" +
+    "\001\002\000\130\002\uffb9\005\111\007\uffb9\010\uffb9\012" +
+    "\uffb9\013\103\014\uffb9\016\066\017\106\022\uffb9\023\uffb9" +
+    "\024\uffb9\025\uffb9\026\uffb9\027\uffb9\030\uffb9\031\uffb9\032" +
+    "\031\033\040\034\uffb9\036\034\037\113\040\141\041\142" +
+    "\042\145\043\uffb9\044\uffb9\045\063\046\062\047\065\050" +
+    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
+    "\057\116\060\104\061\140\062\067\063\060\064\127\001" +
+    "\002\000\054\002\uff89\004\uff89\006\uff89\007\uff89\010\uff89" +
+    "\012\uff89\014\uff89\021\uff89\022\uff89\023\uff89\024\uff89\025" +
+    "\uff89\026\uff89\027\uff89\030\uff89\031\uff89\032\uff89\033\uff89" +
+    "\034\uff89\043\uff89\044\uff89\001\002\000\054\002\uff8b\004" +
+    "\uff8b\006\uff8b\007\uff8b\010\uff8b\012\uff8b\014\uff8b\021\uff8b" +
+    "\022\uff8b\023\uff8b\024\uff8b\025\uff8b\026\uff8b\027\uff8b\030" +
+    "\uff8b\031\uff8b\032\uff8b\033\uff8b\034\uff8b\043\uff8b\044\uff8b" +
+    "\001\002\000\032\002\uffd5\007\uffd5\012\uffd5\014\uffd5\022" +
+    "\uffd5\023\uffd5\024\221\025\222\026\223\027\224\043\uffd5" +
+    "\044\uffd5\001\002\000\004\011\245\001\002\000\062\013" +
+    "\uffae\032\uffae\033\uffae\036\uffae\037\uffae\040\uffae\041\uffae" +
+    "\042\uffae\045\uffae\046\uffae\047\uffae\050\uffae\051\uffae\052" +
+    "\uffae\053\uffae\054\uffae\055\uffae\056\uffae\057\uffae\060\uffae" +
+    "\061\uffae\062\uffae\063\uffae\064\uffae\001\002\000\060\002" +
+    "\uff7b\004\uff7b\006\uff7b\007\uff7b\010\uff7b\011\uff7b\012\uff7b" +
+    "\014\uff7b\020\uffa6\021\uff7b\022\uff7b\023\uff7b\024\uff7b\025" +
+    "\uff7b\026\uff7b\027\uff7b\030\uff7b\031\uff7b\032\uff7b\033\uff7b" +
+    "\034\uff7b\043\uff7b\044\uff7b\001\002\000\070\005\111\013" +
+    "\103\016\066\017\106\032\031\033\040\036\034\037\113" +
+    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
+    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
+    "\057\116\060\104\061\140\062\067\063\060\064\127\001" +
+    "\002\000\110\004\061\005\111\011\071\013\103\015\134" +
+    "\016\066\017\106\021\070\031\075\032\031\033\040\035" +
+    "\057\036\034\037\113\040\141\041\142\042\145\045\063" +
+    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
+    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
+    "\063\060\064\127\065\132\066\072\001\002\000\054\002" +
+    "\uff99\004\uff99\006\uff99\007\uff99\010\uff99\012\uff99\014\uff99" +
+    "\021\uff99\022\uff99\023\uff99\024\uff99\025\uff99\026\uff99\027" +
+    "\uff99\030\uff99\031\uff99\032\uff99\033\uff99\034\uff99\043\uff99" +
+    "\044\uff99\001\002\000\046\002\uffb7\007\uffb7\010\uffb7\012" +
+    "\uffb7\014\uffb7\022\uffb7\023\uffb7\024\uffb7\025\uffb7\026\uffb7" +
+    "\027\uffb7\030\uffb7\031\uffb7\032\uffb7\033\uffb7\034\uffb7\043" +
+    "\uffb7\044\uffb7\001\002\000\054\002\uff97\004\uff97\006\uff97" +
+    "\007\uff97\010\uff97\012\uff97\014\uff97\021\uff97\022\uff97\023" +
+    "\uff97\024\uff97\025\uff97\026\uff97\027\uff97\030\uff97\031\uff97" +
+    "\032\uff97\033\uff97\034\uff97\043\uff97\044\uff97\001\002\000" +
+    "\110\004\061\005\111\011\071\013\103\015\134\016\066" +
+    "\017\106\021\070\031\075\032\031\033\040\035\057\036" +
+    "\034\037\113\040\141\041\142\042\145\045\063\046\062" +
+    "\047\065\050\115\051\123\052\136\053\077\054\143\055" +
+    "\131\056\125\057\116\060\104\061\140\062\067\063\060" +
+    "\064\127\065\132\066\072\001\002\000\016\002\uffd9\007" +
+    "\uffd9\012\uffd9\014\uffd9\043\uffd9\044\234\001\002\000\060" +
+    "\002\uff7f\004\uff7f\006\uff7f\007\uff7f\010\uff7f\011\uff7f\012" +
+    "\uff7f\014\uff7f\020\uffaa\021\uff7f\022\uff7f\023\uff7f\024\uff7f" +
+    "\025\uff7f\026\uff7f\027\uff7f\030\uff7f\031\uff7f\032\uff7f\033" +
+    "\uff7f\034\uff7f\043\uff7f\044\uff7f\001\002\000\062\013\103" +
+    "\032\031\033\040\036\034\037\113\040\141\041\142\042" +
+    "\145\045\063\046\062\047\065\050\036\051\037\052\044" +
+    "\053\170\054\166\055\043\056\041\057\035\060\030\061" +
+    "\045\062\021\063\012\064\042\001\002\000\004\020\236" +
+    "\001\002\000\014\002\uffda\007\uffda\012\uffda\014\uffda\043" +
+    "\232\001\002\000\054\002\uff88\004\uff88\006\uff88\007\uff88" +
+    "\010\uff88\012\uff88\014\uff88\021\uff88\022\uff88\023\uff88\024" +
+    "\uff88\025\uff88\026\uff88\027\uff88\030\uff88\031\uff88\032\uff88" +
+    "\033\uff88\034\uff88\043\uff88\044\uff88\001\002\000\060\002" +
+    "\uff7d\004\uff7d\006\uff7d\007\uff7d\010\uff7d\011\uff7d\012\uff7d" +
+    "\014\uff7d\020\uffa8\021\uff7d\022\uff7d\023\uff7d\024\uff7d\025" +
+    "\uff7d\026\uff7d\027\uff7d\030\uff7d\031\uff7d\032\uff7d\033\uff7d" +
+    "\034\uff7d\043\uff7d\044\uff7d\001\002\000\022\002\uffd7\007" +
+    "\uffd7\012\uffd7\014\uffd7\022\216\023\217\043\uffd7\044\uffd7" +
+    "\001\002\000\052\002\uff9f\004\uff9f\007\uff9f\010\uff9f\012" +
+    "\uff9f\014\uff9f\021\uff9f\022\uff9f\023\uff9f\024\uff9f\025\uff9f" +
+    "\026\uff9f\027\uff9f\030\uff9f\031\uff9f\032\uff9f\033\uff9f\034" +
+    "\uff9f\043\uff9f\044\uff9f\001\002\000\054\002\uffb4\004\uffb4" +
+    "\006\055\007\uffb4\010\uffb4\012\uffb4\014\uffb4\021\uffb4\022" +
+    "\uffb4\023\uffb4\024\uffb4\025\uffb4\026\uffb4\027\uffb4\030\uffb4" +
+    "\031\uffb4\032\uffb4\033\uffb4\034\uffb4\043\uffb4\044\uffb4\001" +
+    "\002\000\046\002\uffbd\007\uffbd\010\uffbd\012\uffbd\014\uffbd" +
+    "\022\uffbd\023\uffbd\024\uffbd\025\uffbd\026\uffbd\027\uffbd\030" +
+    "\uffbd\031\uffbd\032\uffbd\033\uffbd\034\uffbd\043\uffbd\044\uffbd" +
+    "\001\002\000\052\002\uffa0\004\uffa0\007\uffa0\010\uffa0\012" +
+    "\uffa0\014\uffa0\021\uffa0\022\uffa0\023\uffa0\024\uffa0\025\uffa0" +
+    "\026\uffa0\027\uffa0\030\uffa0\031\uffa0\032\uffa0\033\uffa0\034" +
+    "\uffa0\043\uffa0\044\uffa0\001\002\000\036\002\uffd2\007\uffd2" +
+    "\012\uffd2\014\uffd2\022\uffd2\023\uffd2\024\uffd2\025\uffd2\026" +
+    "\uffd2\027\uffd2\030\211\031\212\043\uffd2\044\uffd2\001\002" +
+    "\000\056\002\uff75\004\uff75\006\uff75\007\uff75\010\uff75\011" +
+    "\uff75\012\uff75\014\uff75\021\uff75\022\uff75\023\uff75\024\uff75" +
+    "\025\uff75\026\uff75\027\uff75\030\uff75\031\uff75\032\uff75\033" +
+    "\uff75\034\uff75\043\uff75\044\uff75\001\002\000\044\002\uffca" +
+    "\007\uffca\012\uffca\014\uffca\022\uffca\023\uffca\024\uffca\025" +
+    "\uffca\026\uffca\027\uffca\030\uffca\031\uffca\032\uffca\033\uffca" +
+    "\034\uffca\043\uffca\044\uffca\001\002\000\060\002\uff77\004" +
+    "\uff77\006\uff77\007\uff77\010\uff77\011\uff77\012\uff77\014\uff77" +
+    "\020\uffa2\021\uff77\022\uff77\023\uff77\024\uff77\025\uff77\026" +
+    "\uff77\027\uff77\030\uff77\031\uff77\032\uff77\033\uff77\034\uff77" +
+    "\043\uff77\044\uff77\001\002\000\060\002\uff7e\004\uff7e\006" +
+    "\uff7e\007\uff7e\010\uff7e\011\uff7e\012\uff7e\014\uff7e\020\uffa9" +
+    "\021\uff7e\022\uff7e\023\uff7e\024\uff7e\025\uff7e\026\uff7e\027" +
+    "\uff7e\030\uff7e\031\uff7e\032\uff7e\033\uff7e\034\uff7e\043\uff7e" +
+    "\044\uff7e\001\002\000\004\011\201\001\002\000\052\002" +
+    "\uffbc\004\uffbc\007\uffbc\010\uffbc\012\uffbc\014\uffbc\021\uffbc" +
+    "\022\uffbc\023\uffbc\024\uffbc\025\uffbc\026\uffbc\027\uffbc\030" +
+    "\uffbc\031\uffbc\032\uffbc\033\uffbc\034\uffbc\043\uffbc\044\uffbc" +
+    "\001\002\000\046\002\uffc2\007\uffc2\010\uffc2\012\uffc2\014" +
+    "\uffc2\022\uffc2\023\uffc2\024\uffc2\025\uffc2\026\uffc2\027\uffc2" +
+    "\030\uffc2\031\uffc2\032\uffc2\033\uffc2\034\uffc2\043\uffc2\044" +
+    "\uffc2\001\002\000\054\002\uff9e\004\uff9e\006\055\007\uff9e" +
+    "\010\uff9e\012\uff9e\014\uff9e\021\uff9e\022\uff9e\023\uff9e\024" +
+    "\uff9e\025\uff9e\026\uff9e\027\uff9e\030\uff9e\031\uff9e\032\uff9e" +
+    "\033\uff9e\034\uff9e\043\uff9e\044\uff9e\001\002\000\060\002" +
+    "\uff76\004\uff76\006\uff76\007\uff76\010\uff76\011\uff76\012\uff76" +
+    "\014\uff76\020\uffa1\021\uff76\022\uff76\023\uff76\024\uff76\025" +
+    "\uff76\026\uff76\027\uff76\030\uff76\031\uff76\032\uff76\033\uff76" +
+    "\034\uff76\043\uff76\044\uff76\001\002\000\046\002\uffc4\007" +
+    "\uffc4\010\176\012\uffc4\014\uffc4\022\uffc4\023\uffc4\024\uffc4" +
+    "\025\uffc4\026\uffc4\027\uffc4\030\uffc4\031\uffc4\032\uffc4\033" +
+    "\uffc4\034\uffc4\043\uffc4\044\uffc4\001\002\000\060\002\uff81" +
+    "\004\uff81\006\uff81\007\uff81\010\uff81\011\uff81\012\uff81\014" +
+    "\uff81\020\uffac\021\uff81\022\uff81\023\uff81\024\uff81\025\uff81" +
+    "\026\uff81\027\uff81\030\uff81\031\uff81\032\uff81\033\uff81\034" +
+    "\uff81\043\uff81\044\uff81\001\002\000\054\002\uff9c\004\uff9c" +
+    "\006\uff9c\007\uff9c\010\uff9c\012\uff9c\014\uff9c\021\uff9c\022" +
+    "\uff9c\023\uff9c\024\uff9c\025\uff9c\026\uff9c\027\uff9c\030\uff9c" +
+    "\031\uff9c\032\uff9c\033\uff9c\034\uff9c\043\uff9c\044\uff9c\001" +
+    "\002\000\060\002\uff78\004\uff78\006\uff78\007\uff78\010\uff78" +
+    "\011\uff78\012\uff78\014\uff78\020\uffa3\021\uff78\022\uff78\023" +
+    "\uff78\024\uff78\025\uff78\026\uff78\027\uff78\030\uff78\031\uff78" +
+    "\032\uff78\033\uff78\034\uff78\043\uff78\044\uff78\001\002\000" +
+    "\052\002\uffc1\004\173\007\uffc1\010\uffc1\012\uffc1\014\uffc1" +
+    "\021\172\022\uffc1\023\uffc1\024\uffc1\025\uffc1\026\uffc1\027" +
+    "\uffc1\030\uffc1\031\uffc1\032\uffc1\033\uffc1\034\uffc1\043\uffc1" +
+    "\044\uffc1\001\002\000\060\002\uff82\004\uff82\006\uff82\007" +
+    "\uff82\010\uff82\011\uff82\012\uff82\014\uff82\020\uffad\021\uff82" +
+    "\022\uff82\023\uff82\024\uff82\025\uff82\026\uff82\027\uff82\030" +
+    "\uff82\031\uff82\032\uff82\033\uff82\034\uff82\043\uff82\044\uff82" +
+    "\001\002\000\054\002\uff98\004\uff98\006\uff98\007\uff98\010" +
+    "\uff98\012\uff98\014\uff98\021\uff98\022\uff98\023\uff98\024\uff98" +
+    "\025\uff98\026\uff98\027\uff98\030\uff98\031\uff98\032\uff98\033" +
+    "\uff98\034\uff98\043\uff98\044\uff98\001\002\000\004\007\171" +
+    "\001\002\000\046\032\031\033\040\036\034\037\113\040" +
+    "\141\050\036\051\037\052\044\053\170\054\166\055\043" +
+    "\056\041\057\035\060\030\061\045\062\021\063\012\064" +
+    "\042\001\002\000\052\002\uffba\004\uffba\007\uffba\010\uffba" +
+    "\012\uffba\014\uffba\021\uffba\022\uffba\023\uffba\024\uffba\025" +
+    "\uffba\026\uffba\027\uffba\030\uffba\031\uffba\032\uffba\033\uffba" +
+    "\034\uffba\043\uffba\044\uffba\001\002\000\060\002\uff79\004" +
+    "\uff79\006\uff79\007\uff79\010\uff79\011\uff79\012\uff79\014\uff79" +
+    "\020\uffa4\021\uff79\022\uff79\023\uff79\024\uff79\025\uff79\026" +
+    "\uff79\027\uff79\030\uff79\031\uff79\032\uff79\033\uff79\034\uff79" +
+    "\043\uff79\044\uff79\001\002\000\052\002\uffb0\004\uffb0\007" +
+    "\uffb0\010\uffb0\012\uffb0\014\uffb0\021\uffb0\022\uffb0\023\uffb0" +
+    "\024\uffb0\025\uffb0\026\uffb0\027\uffb0\030\uffb0\031\uffb0\032" +
+    "\uffb0\033\uffb0\034\uffb0\043\uffb0\044\uffb0\001\002\000\060" +
+    "\002\uff7c\004\uff7c\006\uff7c\007\uff7c\010\uff7c\011\uff7c\012" +
+    "\uff7c\014\uff7c\020\uffa7\021\uff7c\022\uff7c\023\uff7c\024\uff7c" +
+    "\025\uff7c\026\uff7c\027\uff7c\030\uff7c\031\uff7c\032\uff7c\033" +
+    "\uff7c\034\uff7c\043\uff7c\044\uff7c\001\002\000\056\002\uff83" +
+    "\004\uff83\006\uff83\007\uff83\010\uff83\011\uff83\012\uff83\014" +
+    "\uff83\021\uff83\022\uff83\023\uff83\024\uff83\025\uff83\026\uff83" +
+    "\027\uff83\030\uff83\031\uff83\032\uff83\033\uff83\034\uff83\043" +
+    "\uff83\044\uff83\001\002\000\054\002\uff8c\004\uff8c\006\uff8c" +
+    "\007\uff8c\010\uff8c\012\uff8c\014\uff8c\021\uff8c\022\uff8c\023" +
+    "\uff8c\024\uff8c\025\uff8c\026\uff8c\027\uff8c\030\uff8c\031\uff8c" +
+    "\032\uff8c\033\uff8c\034\uff8c\043\uff8c\044\uff8c\001\002\000" +
+    "\060\002\uff80\004\uff80\006\uff80\007\uff80\010\uff80\011\uff80" +
+    "\012\uff80\014\uff80\020\uffab\021\uff80\022\uff80\023\uff80\024" +
+    "\uff80\025\uff80\026\uff80\027\uff80\030\uff80\031\uff80\032\uff80" +
+    "\033\uff80\034\uff80\043\uff80\044\uff80\001\002\000\044\002" +
+    "\uffc6\007\uffc6\012\uffc6\014\uffc6\022\uffc6\023\uffc6\024\uffc6" +
+    "\025\uffc6\026\uffc6\027\uffc6\030\uffc6\031\uffc6\032\uffc6\033" +
+    "\uffc6\034\uffc6\043\uffc6\044\uffc6\001\002\000\054\002\uff8d" +
+    "\004\uff8d\006\uff8d\007\uff8d\010\uff8d\012\uff8d\014\uff8d\021" +
+    "\uff8d\022\uff8d\023\uff8d\024\uff8d\025\uff8d\026\uff8d\027\uff8d" +
+    "\030\uff8d\031\uff8d\032\uff8d\033\uff8d\034\uff8d\043\uff8d\044" +
+    "\uff8d\001\002\000\044\002\uffcd\007\uffcd\012\uffcd\014\uffcd" +
+    "\022\uffcd\023\uffcd\024\uffcd\025\uffcd\026\uffcd\027\uffcd\030" +
+    "\uffcd\031\uffcd\032\161\033\157\034\160\043\uffcd\044\uffcd" +
+    "\001\002\000\052\002\uffbe\004\153\007\uffbe\010\uffbe\012" +
+    "\uffbe\014\uffbe\021\152\022\uffbe\023\uffbe\024\uffbe\025\uffbe" +
+    "\026\uffbe\027\uffbe\030\uffbe\031\uffbe\032\uffbe\033\uffbe\034" +
+    "\uffbe\043\uffbe\044\uffbe\001\002\000\054\002\uff8e\004\uff8e" +
+    "\006\uff8e\007\uff8e\010\uff8e\012\uff8e\014\uff8e\021\uff8e\022" +
+    "\uff8e\023\uff8e\024\uff8e\025\uff8e\026\uff8e\027\uff8e\030\uff8e" +
+    "\031\uff8e\032\uff8e\033\uff8e\034\uff8e\043\uff8e\044\uff8e\001" +
+    "\002\000\056\002\uff87\004\uff87\006\uff87\007\uff87\010\uff87" +
+    "\011\uff91\012\uff87\014\uff87\021\uff87\022\uff87\023\uff87\024" +
+    "\uff87\025\uff87\026\uff87\027\uff87\030\uff87\031\uff87\032\uff87" +
+    "\033\uff87\034\uff87\043\uff87\044\uff87\001\002\000\070\005" +
+    "\111\013\103\016\066\017\106\032\031\033\040\036\034" +
+    "\037\113\040\141\041\142\042\145\045\063\046\062\047" +
+    "\065\050\115\051\123\052\136\053\077\054\143\055\131" +
+    "\056\125\057\116\060\104\061\140\062\067\063\060\064" +
+    "\127\001\002\000\070\005\111\013\103\016\066\017\106" +
+    "\032\031\033\040\036\034\037\113\040\141\041\142\042" +
+    "\145\045\063\046\062\047\065\050\115\051\123\052\136" +
+    "\053\077\054\143\055\131\056\125\057\116\060\104\061" +
+    "\140\062\067\063\060\064\127\001\002\000\054\002\uff87" +
+    "\004\uff87\006\uff87\007\uff87\010\uff87\012\uff87\014\uff87\021" +
+    "\uff87\022\uff87\023\uff87\024\uff87\025\uff87\026\uff87\027\uff87" +
+    "\030\uff87\031\uff87\032\uff87\033\uff87\034\uff87\043\uff87\044" +
+    "\uff87\001\002\000\052\002\uffbb\004\uffbb\007\uffbb\010\uffbb" +
+    "\012\uffbb\014\uffbb\021\uffbb\022\uffbb\023\uffbb\024\uffbb\025" +
+    "\uffbb\026\uffbb\027\uffbb\030\uffbb\031\uffbb\032\uffbb\033\uffbb" +
+    "\034\uffbb\043\uffbb\044\uffbb\001\002\000\052\002\uffb6\004" +
+    "\uffb6\007\uffb6\010\uffb6\012\uffb6\014\uffb6\021\uffb6\022\uffb6" +
+    "\023\uffb6\024\uffb6\025\uffb6\026\uffb6\027\uffb6\030\uffb6\031" +
+    "\uffb6\032\uffb6\033\uffb6\034\uffb6\043\uffb6\044\uffb6\001\002" +
+    "\000\110\004\061\005\111\011\071\013\103\015\134\016" +
+    "\066\017\106\021\070\031\075\032\031\033\040\035\057" +
+    "\036\034\037\113\040\141\041\142\042\145\045\063\046" +
+    "\062\047\065\050\115\051\123\052\136\053\077\054\143" +
+    "\055\131\056\125\057\116\060\104\061\140\062\067\063" +
+    "\060\064\127\065\132\066\072\001\002\000\110\004\061" +
+    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
+    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
+    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
+    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
+    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
+    "\132\066\072\001\002\000\110\004\061\005\111\011\071" +
+    "\013\103\015\134\016\066\017\106\021\070\031\075\032" +
+    "\031\033\040\035\057\036\034\037\113\040\141\041\142" +
+    "\042\145\045\063\046\062\047\065\050\115\051\123\052" +
+    "\136\053\077\054\143\055\131\056\125\057\116\060\104" +
+    "\061\140\062\067\063\060\064\127\065\132\066\072\001" +
+    "\002\000\044\002\uffc8\007\uffc8\012\uffc8\014\uffc8\022\uffc8" +
+    "\023\uffc8\024\uffc8\025\uffc8\026\uffc8\027\uffc8\030\uffc8\031" +
+    "\uffc8\032\uffc8\033\uffc8\034\uffc8\043\uffc8\044\uffc8\001\002" +
+    "\000\044\002\uffc9\007\uffc9\012\uffc9\014\uffc9\022\uffc9\023" +
+    "\uffc9\024\uffc9\025\uffc9\026\uffc9\027\uffc9\030\uffc9\031\uffc9" +
+    "\032\uffc9\033\uffc9\034\uffc9\043\uffc9\044\uffc9\001\002\000" +
+    "\044\002\uffc7\007\uffc7\012\uffc7\014\uffc7\022\uffc7\023\uffc7" +
+    "\024\uffc7\025\uffc7\026\uffc7\027\uffc7\030\uffc7\031\uffc7\032" +
+    "\uffc7\033\uffc7\034\uffc7\043\uffc7\044\uffc7\001\002\000\054" +
+    "\002\uff90\004\uff90\006\uff90\007\uff90\010\uff90\012\uff90\014" +
+    "\uff90\021\uff90\022\uff90\023\uff90\024\uff90\025\uff90\026\uff90" +
+    "\027\uff90\030\uff90\031\uff90\032\uff90\033\uff90\034\uff90\043" +
+    "\uff90\044\uff90\001\002\000\054\002\uff80\004\uff80\006\uff80" +
+    "\007\uff80\010\uff80\012\uff80\014\uff80\021\uff80\022\uff80\023" +
+    "\uff80\024\uff80\025\uff80\026\uff80\027\uff80\030\uff80\031\uff80" +
+    "\032\uff80\033\uff80\034\uff80\043\uff80\044\uff80\001\002\000" +
+    "\054\002\uff96\004\uff96\006\uff96\007\uff96\010\uff96\012\uff96" +
+    "\014\uff96\021\uff96\022\uff96\023\uff96\024\uff96\025\uff96\026" +
+    "\uff96\027\uff96\030\uff96\031\uff96\032\uff96\033\uff96\034\uff96" +
+    "\043\uff96\044\uff96\001\002\000\054\002\uff7f\004\uff7f\006" +
+    "\uff7f\007\uff7f\010\uff7f\012\uff7f\014\uff7f\021\uff7f\022\uff7f" +
+    "\023\uff7f\024\uff7f\025\uff7f\026\uff7f\027\uff7f\030\uff7f\031" +
+    "\uff7f\032\uff7f\033\uff7f\034\uff7f\043\uff7f\044\uff7f\001\002" +
+    "\000\054\002\uffdb\004\uffdb\006\uffdb\007\uffdb\010\uffdb\012" +
+    "\uffdb\014\uffdb\021\uffdb\022\uffdb\023\uffdb\024\uffdb\025\uffdb" +
+    "\026\uffdb\027\uffdb\030\uffdb\031\uffdb\032\uffdb\033\uffdb\034" +
+    "\uffdb\043\uffdb\044\uffdb\001\002\000\070\005\111\013\103" +
+    "\016\066\017\106\032\031\033\040\036\034\037\113\040" +
+    "\141\041\142\042\145\045\063\046\062\047\065\050\115" +
+    "\051\123\052\136\053\077\054\143\055\131\056\125\057" +
+    "\116\060\104\061\140\062\067\063\060\064\127\001\002" +
+    "\000\070\005\111\013\103\016\066\017\106\032\031\033" +
+    "\040\036\034\037\113\040\141\041\142\042\145\045\063" +
+    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
+    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
+    "\063\060\064\127\001\002\000\052\002\uffc0\004\153\007" +
+    "\uffc0\010\uffc0\012\uffc0\014\uffc0\021\152\022\uffc0\023\uffc0" +
+    "\024\uffc0\025\uffc0\026\uffc0\027\uffc0\030\uffc0\031\uffc0\032" +
+    "\uffc0\033\uffc0\034\uffc0\043\uffc0\044\uffc0\001\002\000\052" +
+    "\002\uffbf\004\153\007\uffbf\010\uffbf\012\uffbf\014\uffbf\021" +
+    "\152\022\uffbf\023\uffbf\024\uffbf\025\uffbf\026\uffbf\027\uffbf" +
+    "\030\uffbf\031\uffbf\032\uffbf\033\uffbf\034\uffbf\043\uffbf\044" +
+    "\uffbf\001\002\000\106\004\061\005\111\011\071\013\103" +
+    "\015\134\016\066\017\106\021\070\032\031\033\040\035" +
+    "\057\036\034\037\113\040\141\041\142\042\145\045\063" +
+    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
+    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
+    "\063\060\064\127\065\132\066\072\001\002\000\044\002" +
+    "\uffc3\007\uffc3\012\uffc3\014\uffc3\022\uffc3\023\uffc3\024\uffc3" +
+    "\025\uffc3\026\uffc3\027\uffc3\030\uffc3\031\uffc3\032\uffc3\033" +
+    "\uffc3\034\uffc3\043\uffc3\044\uffc3\001\002\000\052\002\uff9d" +
+    "\004\uff9d\007\uff9d\010\uff9d\012\uff9d\014\uff9d\021\uff9d\022" +
+    "\uff9d\023\uff9d\024\uff9d\025\uff9d\026\uff9d\027\uff9d\030\uff9d" +
+    "\031\uff9d\032\uff9d\033\uff9d\034\uff9d\043\uff9d\044\uff9d\001" +
+    "\002\000\112\004\061\005\111\011\071\012\202\013\103" +
+    "\015\134\016\066\017\106\021\070\031\075\032\031\033" +
+    "\040\035\057\036\034\037\113\040\141\041\142\042\145" +
+    "\045\063\046\062\047\065\050\115\051\123\052\136\053" +
+    "\077\054\143\055\131\056\125\057\116\060\104\061\140" +
+    "\062\067\063\060\064\127\065\132\066\072\001\002\000" +
+    "\054\002\uff95\004\uff95\006\uff95\007\uff95\010\uff95\012\uff95" +
+    "\014\uff95\021\uff95\022\uff95\023\uff95\024\uff95\025\uff95\026" +
+    "\uff95\027\uff95\030\uff95\031\uff95\032\uff95\033\uff95\034\uff95" +
+    "\043\uff95\044\uff95\001\002\000\006\012\uff93\014\207\001" +
+    "\002\000\006\012\uff8f\014\uff8f\001\002\000\004\012\206" +
+    "\001\002\000\054\002\uff94\004\uff94\006\uff94\007\uff94\010" +
+    "\uff94\012\uff94\014\uff94\021\uff94\022\uff94\023\uff94\024\uff94" +
+    "\025\uff94\026\uff94\027\uff94\030\uff94\031\uff94\032\uff94\033" +
+    "\uff94\034\uff94\043\uff94\044\uff94\001\002\000\110\004\061" +
+    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
+    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
+    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
+    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
+    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
+    "\132\066\072\001\002\000\004\012\uff92\001\002\000\110" +
+    "\004\061\005\111\011\071\013\103\015\134\016\066\017" +
+    "\106\021\070\031\075\032\031\033\040\035\057\036\034" +
+    "\037\113\040\141\041\142\042\145\045\063\046\062\047" +
+    "\065\050\115\051\123\052\136\053\077\054\143\055\131" +
+    "\056\125\057\116\060\104\061\140\062\067\063\060\064" +
+    "\127\065\132\066\072\001\002\000\110\004\061\005\111" +
+    "\011\071\013\103\015\134\016\066\017\106\021\070\031" +
+    "\075\032\031\033\040\035\057\036\034\037\113\040\141" +
+    "\041\142\042\145\045\063\046\062\047\065\050\115\051" +
+    "\123\052\136\053\077\054\143\055\131\056\125\057\116" +
+    "\060\104\061\140\062\067\063\060\064\127\065\132\066" +
+    "\072\001\002\000\044\002\uffcb\007\uffcb\012\uffcb\014\uffcb" +
+    "\022\uffcb\023\uffcb\024\uffcb\025\uffcb\026\uffcb\027\uffcb\030" +
+    "\uffcb\031\uffcb\032\161\033\157\034\160\043\uffcb\044\uffcb" +
+    "\001\002\000\044\002\uffcc\007\uffcc\012\uffcc\014\uffcc\022" +
+    "\uffcc\023\uffcc\024\uffcc\025\uffcc\026\uffcc\027\uffcc\030\uffcc" +
+    "\031\uffcc\032\161\033\157\034\160\043\uffcc\044\uffcc\001" +
+    "\002\000\052\002\uffb3\004\uffb3\007\uffb3\010\uffb3\012\uffb3" +
+    "\014\uffb3\021\uffb3\022\uffb3\023\uffb3\024\uffb3\025\uffb3\026" +
+    "\uffb3\027\uffb3\030\uffb3\031\uffb3\032\uffb3\033\uffb3\034\uffb3" +
+    "\043\uffb3\044\uffb3\001\002\000\110\004\061\005\111\011" +
+    "\071\013\103\015\134\016\066\017\106\021\070\031\075" +
+    "\032\031\033\040\035\057\036\034\037\113\040\141\041" +
+    "\142\042\145\045\063\046\062\047\065\050\115\051\123" +
+    "\052\136\053\077\054\143\055\131\056\125\057\116\060" +
+    "\104\061\140\062\067\063\060\064\127\065\132\066\072" +
+    "\001\002\000\110\004\061\005\111\011\071\013\103\015" +
+    "\134\016\066\017\106\021\070\031\075\032\031\033\040" +
+    "\035\057\036\034\037\113\040\141\041\142\042\145\045" +
+    "\063\046\062\047\065\050\115\051\123\052\136\053\077" +
+    "\054\143\055\131\056\125\057\116\060\104\061\140\062" +
+    "\067\063\060\064\127\065\132\066\072\001\002\000\032" +
+    "\002\uffd3\007\uffd3\012\uffd3\014\uffd3\022\uffd3\023\uffd3\024" +
+    "\221\025\222\026\223\027\224\043\uffd3\044\uffd3\001\002" +
+    "\000\110\004\061\005\111\011\071\013\103\015\134\016" +
+    "\066\017\106\021\070\031\075\032\031\033\040\035\057" +
+    "\036\034\037\113\040\141\041\142\042\145\045\063\046" +
+    "\062\047\065\050\115\051\123\052\136\053\077\054\143" +
+    "\055\131\056\125\057\116\060\104\061\140\062\067\063" +
+    "\060\064\127\065\132\066\072\001\002\000\110\004\061" +
+    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
+    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
+    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
+    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
+    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
+    "\132\066\072\001\002\000\110\004\061\005\111\011\071" +
+    "\013\103\015\134\016\066\017\106\021\070\031\075\032" +
+    "\031\033\040\035\057\036\034\037\113\040\141\041\142" +
+    "\042\145\045\063\046\062\047\065\050\115\051\123\052" +
+    "\136\053\077\054\143\055\131\056\125\057\116\060\104" +
+    "\061\140\062\067\063\060\064\127\065\132\066\072\001" +
+    "\002\000\110\004\061\005\111\011\071\013\103\015\134" +
+    "\016\066\017\106\021\070\031\075\032\031\033\040\035" +
+    "\057\036\034\037\113\040\141\041\142\042\145\045\063" +
+    "\046\062\047\065\050\115\051\123\052\136\053\077\054" +
+    "\143\055\131\056\125\057\116\060\104\061\140\062\067" +
+    "\063\060\064\127\065\132\066\072\001\002\000\036\002" +
+    "\uffce\007\uffce\012\uffce\014\uffce\022\uffce\023\uffce\024\uffce" +
+    "\025\uffce\026\uffce\027\uffce\030\211\031\212\043\uffce\044" +
+    "\uffce\001\002\000\036\002\uffcf\007\uffcf\012\uffcf\014\uffcf" +
+    "\022\uffcf\023\uffcf\024\uffcf\025\uffcf\026\uffcf\027\uffcf\030" +
+    "\211\031\212\043\uffcf\044\uffcf\001\002\000\036\002\uffd0" +
+    "\007\uffd0\012\uffd0\014\uffd0\022\uffd0\023\uffd0\024\uffd0\025" +
+    "\uffd0\026\uffd0\027\uffd0\030\211\031\212\043\uffd0\044\uffd0" +
+    "\001\002\000\036\002\uffd1\007\uffd1\012\uffd1\014\uffd1\022" +
+    "\uffd1\023\uffd1\024\uffd1\025\uffd1\026\uffd1\027\uffd1\030\211" +
+    "\031\212\043\uffd1\044\uffd1\001\002\000\032\002\uffd4\007" +
+    "\uffd4\012\uffd4\014\uffd4\022\uffd4\023\uffd4\024\221\025\222" +
+    "\026\223\027\224\043\uffd4\044\uffd4\001\002\000\110\004" +
+    "\061\005\111\011\071\013\103\015\134\016\066\017\106" +
+    "\021\070\031\075\032\031\033\040\035\057\036\034\037" +
+    "\113\040\141\041\142\042\145\045\063\046\062\047\065" +
+    "\050\115\051\123\052\136\053\077\054\143\055\131\056" +
+    "\125\057\116\060\104\061\140\062\067\063\060\064\127" +
+    "\065\132\066\072\001\002\000\016\002\uffd8\007\uffd8\012" +
+    "\uffd8\014\uffd8\043\uffd8\044\234\001\002\000\110\004\061" +
+    "\005\111\011\071\013\103\015\134\016\066\017\106\021" +
+    "\070\031\075\032\031\033\040\035\057\036\034\037\113" +
+    "\040\141\041\142\042\145\045\063\046\062\047\065\050" +
+    "\115\051\123\052\136\053\077\054\143\055\131\056\125" +
+    "\057\116\060\104\061\140\062\067\063\060\064\127\065" +
+    "\132\066\072\001\002\000\022\002\uffd6\007\uffd6\012\uffd6" +
+    "\014\uffd6\022\216\023\217\043\uffd6\044\uffd6\001\002\000" +
+    "\062\013\uffaf\032\uffaf\033\uffaf\036\uffaf\037\uffaf\040\uffaf" +
+    "\041\uffaf\042\uffaf\045\uffaf\046\uffaf\047\uffaf\050\uffaf\051" +
+    "\uffaf\052\uffaf\053\uffaf\054\uffaf\055\uffaf\056\uffaf\057\uffaf" +
+    "\060\uffaf\061\uffaf\062\uffaf\063\uffaf\064\uffaf\001\002\000" +
+    "\054\002\uffb1\004\uffb1\006\055\007\uffb1\010\uffb1\012\uffb1" +
+    "\014\uffb1\021\uffb1\022\uffb1\023\uffb1\024\uffb1\025\uffb1\026" +
+    "\uffb1\027\uffb1\030\uffb1\031\uffb1\032\uffb1\033\uffb1\034\uffb1" +
+    "\043\uffb1\044\uffb1\001\002\000\052\002\uffb2\004\uffb2\007" +
+    "\uffb2\010\uffb2\012\uffb2\014\uffb2\021\uffb2\022\uffb2\023\uffb2" +
+    "\024\uffb2\025\uffb2\026\uffb2\027\uffb2\030\uffb2\031\uffb2\032" +
+    "\uffb2\033\uffb2\034\uffb2\043\uffb2\044\uffb2\001\002\000\044" +
+    "\002\uffc5\007\uffc5\012\uffc5\014\uffc5\022\uffc5\023\uffc5\024" +
+    "\uffc5\025\uffc5\026\uffc5\027\uffc5\030\uffc5\031\uffc5\032\uffc5" +
+    "\033\uffc5\034\uffc5\043\uffc5\044\uffc5\001\002\000\004\012" +
+    "\243\001\002\000\054\002\uff9b\004\uff9b\006\uff9b\007\uff9b" +
+    "\010\uff9b\012\uff9b\014\uff9b\021\uff9b\022\uff9b\023\uff9b\024" +
+    "\uff9b\025\uff9b\026\uff9b\027\uff9b\030\uff9b\031\uff9b\032\uff9b" +
+    "\033\uff9b\034\uff9b\043\uff9b\044\uff9b\001\002\000\052\002" +
+    "\uffb5\004\153\007\uffb5\010\uffb5\012\uffb5\014\uffb5\021\152" +
+    "\022\uffb5\023\uffb5\024\uffb5\025\uffb5\026\uffb5\027\uffb5\030" +
+    "\uffb5\031\uffb5\032\uffb5\033\uffb5\034\uffb5\043\uffb5\044\uffb5" +
+    "\001\002\000\004\035\246\001\002\000\004\012\247\001" +
+    "\002\000\054\002\uff8a\004\uff8a\006\uff8a\007\uff8a\010\uff8a" +
+    "\012\uff8a\014\uff8a\021\uff8a\022\uff8a\023\uff8a\024\uff8a\025" +
+    "\uff8a\026\uff8a\027\uff8a\030\uff8a\031\uff8a\032\uff8a\033\uff8a" +
+    "\034\uff8a\043\uff8a\044\uff8a\001\002\000\052\002\uffb8\004" +
+    "\153\007\uffb8\010\uffb8\012\uffb8\014\uffb8\021\152\022\uffb8" +
+    "\023\uffb8\024\uffb8\025\uffb8\026\uffb8\027\uffb8\030\uffb8\031" +
+    "\uffb8\032\uffb8\033\uffb8\034\uffb8\043\uffb8\044\uffb8\001\002" +
+    "\000\052\002\uffdc\004\uffdc\007\uffdc\010\uffdc\012\uffdc\014" +
+    "\uffdc\021\uffdc\022\uffdc\023\uffdc\024\uffdc\025\uffdc\026\uffdc" +
+    "\027\uffdc\030\uffdc\031\uffdc\032\uffdc\033\uffdc\034\uffdc\043" +
+    "\uffdc\044\uffdc\001\002\000\062\013\uffde\032\uffde\033\uffde" +
+    "\036\uffde\037\uffde\040\uffde\041\uffde\042\uffde\045\uffde\046" +
+    "\uffde\047\uffde\050\uffde\051\uffde\052\uffde\053\uffde\054\uffde" +
+    "\055\uffde\056\uffde\057\uffde\060\uffde\061\uffde\062\uffde\063" +
+    "\uffde\064\uffde\001\002\000\004\035\254\001\002\000\004" +
+    "\014\255\001\002\000\004\035\256\001\002\000\004\012" +
+    "\257\001\002\000\012\002\ufff4\004\ufff4\010\ufff4\021\ufff4" +
+    "\001\002\000\004\035\261\001\002\000\004\012\262\001" +
+    "\002\000\012\002\ufff5\004\ufff5\010\ufff5\021\ufff5\001\002" +
+    "\000\012\002\uffec\004\uffec\010\uffec\021\uffec\001\002\000" +
+    "\062\013\uffdf\032\uffdf\033\uffdf\036\uffdf\037\uffdf\040\uffdf" +
+    "\041\uffdf\042\uffdf\045\uffdf\046\uffdf\047\uffdf\050\uffdf\051" +
+    "\uffdf\052\uffdf\053\uffdf\054\uffdf\055\uffdf\056\uffdf\057\uffdf" +
+    "\060\uffdf\061\uffdf\062\uffdf\063\uffdf\064\uffdf\001\002\000" +
+    "\064\013\027\016\020\032\031\033\040\036\034\037\113" +
+    "\040\141\041\047\042\051\045\015\046\014\047\016\050" +
+    "\036\051\037\052\044\053\025\054\050\055\043\056\041" +
+    "\057\035\060\030\061\045\062\021\063\012\064\042\001" +
+    "\002\000\064\013\027\016\020\032\031\033\040\036\034" +
+    "\037\113\040\141\041\047\042\051\045\015\046\014\047" +
+    "\016\050\036\051\037\052\044\053\025\054\050\055\043" +
+    "\056\041\057\035\060\030\061\045\062\021\063\012\064" +
+    "\042\001\002\000\006\002\ufff1\010\ufff1\001\002\000\006" +
+    "\002\ufff0\010\ufff0\001\002\000\006\002\ufff7\010\ufff7\001" +
+    "\002\000\014\002\uffe9\004\uffe9\006\055\010\uffe9\021\uffe9" +
+    "\001\002\000\014\002\uffeb\004\uffeb\006\055\010\uffeb\021" +
+    "\uffeb\001\002\000\012\002\uffea\004\uffea\010\uffea\021\uffea" +
+    "\001\002\000\012\002\uffe8\004\uffe8\010\uffe8\021\uffe8\001" +
+    "\002\000\064\013\027\016\020\032\031\033\040\036\034" +
+    "\037\113\040\141\041\047\042\051\045\015\046\014\047" +
+    "\016\050\036\051\037\052\044\053\025\054\050\055\043" +
+    "\056\041\057\035\060\030\061\045\062\021\063\012\064" +
+    "\042\001\002\000\064\013\027\016\020\032\031\033\040" +
+    "\036\034\037\113\040\141\041\047\042\051\045\015\046" +
+    "\014\047\016\050\036\051\037\052\044\053\025\054\050" +
+    "\055\043\056\041\057\035\060\030\061\045\062\021\063" +
+    "\012\064\042\001\002\000\006\002\ufff9\010\ufff9\001\002" +
+    "\000\006\002\ufff8\010\ufff8\001\002\000\004\035\303\001" +
+    "\002\000\004\012\304\001\002\000\014\002\ufff3\004\ufff3" +
+    "\006\ufff3\010\ufff3\021\ufff3\001\002\000\006\002\ufffb\010" +
+    "\ufffb\001\002\000\070\004\013\013\027\016\020\021\023" +
+    "\032\031\033\040\036\034\037\033\040\046\041\047\042" +
+    "\051\045\015\046\014\047\016\050\036\051\037\052\044" +
+    "\053\025\054\050\055\043\056\041\057\035\060\030\061" +
+    "\045\062\021\063\012\064\042\001\002\000\004\002\ufffd" +
+    "\001\002\000\004\002\uffff\001\002\000\004\002\001\001" +
+    "\002" });
+
+  /** Access to parse-action table. */
+  public short[][] action_table() {return _action_table;}
+
+  /** <code>reduce_goto</code> table. */
+  protected static final short[][] _reduce_table = 
+    unpackFromStrings(new String[] {
+    "\000\307\000\004\003\003\001\001\000\002\001\001\000" +
+    "\070\004\307\006\120\010\127\011\117\012\101\013\075" +
+    "\014\104\015\063\016\111\017\145\020\113\021\125\022" +
+    "\073\023\121\024\143\025\123\026\136\027\146\030\134" +
+    "\031\107\032\072\033\106\034\147\047\150\050\116\052" +
+    "\100\053\077\001\001\000\026\035\016\036\007\037\006" +
+    "\040\031\041\025\042\023\043\052\044\010\047\051\054" +
+    "\021\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\020\040\031\041\304\042" +
+    "\023\043\052\044\010\047\051\054\021\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\012\040\271" +
+    "\043\272\044\010\047\051\001\001\000\020\040\031\041" +
+    "\270\042\023\043\052\044\010\047\051\054\021\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\006" +
+    "\007\053\045\262\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\006\007\053\045\055\001\001" +
+    "\000\006\007\053\045\250\001\001\000\070\004\132\006" +
+    "\120\010\127\011\117\012\101\013\075\014\104\015\063" +
+    "\016\111\017\145\020\113\021\125\022\073\023\121\024" +
+    "\143\025\123\026\136\027\146\030\134\031\107\032\072" +
+    "\033\106\034\147\047\150\050\116\052\100\053\077\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\024\011\117\026\136\027\247\030\134\033\106\034" +
+    "\147\047\153\052\100\053\077\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\024\011\117\026\136" +
+    "\027\243\030\134\033\106\034\147\047\153\052\100\053" +
+    "\077\001\001\000\070\004\241\006\120\010\127\011\117" +
+    "\012\101\013\075\014\104\015\063\016\111\017\145\020" +
+    "\113\021\125\022\073\023\121\024\143\025\123\026\136" +
+    "\027\146\030\134\031\107\032\072\033\106\034\147\047" +
+    "\150\050\116\052\100\053\077\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\052\006\120\010" +
+    "\127\011\117\020\240\021\125\022\073\023\121\024\143" +
+    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
+    "\106\034\147\047\150\050\116\052\100\053\077\001\001" +
+    "\000\002\001\001\000\002\001\001\000\010\033\236\034" +
+    "\147\047\153\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\006\007\053\045\214\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\006\007\053\045\177\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\006\047\164\051\166\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\020\011\155\026\136\033\106\034\147\047\153\052\100" +
+    "\053\077\001\001\000\020\011\154\026\136\033\106\034" +
+    "\147\047\153\052\100\053\077\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\052\006\120\010" +
+    "\127\011\117\020\163\021\125\022\073\023\121\024\143" +
+    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
+    "\106\034\147\047\150\050\116\052\100\053\077\001\001" +
+    "\000\052\006\120\010\127\011\117\020\162\021\125\022" +
+    "\073\023\121\024\143\025\123\026\136\027\146\030\134" +
+    "\031\107\032\072\033\106\034\147\047\150\050\116\052" +
+    "\100\053\077\001\001\000\052\006\120\010\127\011\117" +
+    "\020\161\021\125\022\073\023\121\024\143\025\123\026" +
+    "\136\027\146\030\134\031\107\032\072\033\106\034\147" +
+    "\047\150\050\116\052\100\053\077\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\024\011\117\026\136\027\174\030\134" +
+    "\033\106\034\147\047\153\052\100\053\077\001\001\000" +
+    "\024\011\117\026\136\027\173\030\134\033\106\034\147" +
+    "\047\153\052\100\053\077\001\001\000\002\001\001\000" +
+    "\002\001\001\000\050\006\120\010\127\011\117\021\125" +
+    "\022\073\023\121\024\176\025\123\026\136\027\146\030" +
+    "\134\031\107\032\072\033\106\034\147\047\150\050\116" +
+    "\052\100\053\077\001\001\000\002\001\001\000\002\001" +
+    "\001\000\074\004\203\005\202\006\120\010\127\011\117" +
+    "\012\101\013\075\014\104\015\063\016\111\017\145\020" +
+    "\113\021\125\022\073\023\121\024\143\025\123\026\136" +
+    "\027\146\030\134\031\107\032\072\033\106\034\147\046" +
+    "\204\047\150\050\116\052\100\053\077\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\074\004\203\005\202\006\120" +
+    "\010\127\011\117\012\101\013\075\014\104\015\063\016" +
+    "\111\017\145\020\113\021\125\022\073\023\121\024\143" +
+    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
+    "\106\034\147\046\207\047\150\050\116\052\100\053\077" +
+    "\001\001\000\002\001\001\000\054\006\120\010\127\011" +
+    "\117\017\213\020\113\021\125\022\073\023\121\024\143" +
+    "\025\123\026\136\027\146\030\134\031\107\032\072\033" +
+    "\106\034\147\047\150\050\116\052\100\053\077\001\001" +
+    "\000\054\006\120\010\127\011\117\017\212\020\113\021" +
+    "\125\022\073\023\121\024\143\025\123\026\136\027\146" +
+    "\030\134\031\107\032\072\033\106\034\147\047\150\050" +
+    "\116\052\100\053\077\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\060\006\120\010\127\011" +
+    "\117\015\230\016\111\017\145\020\113\021\125\022\073" +
+    "\023\121\024\143\025\123\026\136\027\146\030\134\031" +
+    "\107\032\072\033\106\034\147\047\150\050\116\052\100" +
+    "\053\077\001\001\000\060\006\120\010\127\011\117\015" +
+    "\217\016\111\017\145\020\113\021\125\022\073\023\121" +
+    "\024\143\025\123\026\136\027\146\030\134\031\107\032" +
+    "\072\033\106\034\147\047\150\050\116\052\100\053\077" +
+    "\001\001\000\002\001\001\000\056\006\120\010\127\011" +
+    "\117\016\227\017\145\020\113\021\125\022\073\023\121" +
+    "\024\143\025\123\026\136\027\146\030\134\031\107\032" +
+    "\072\033\106\034\147\047\150\050\116\052\100\053\077" +
+    "\001\001\000\056\006\120\010\127\011\117\016\226\017" +
+    "\145\020\113\021\125\022\073\023\121\024\143\025\123" +
+    "\026\136\027\146\030\134\031\107\032\072\033\106\034" +
+    "\147\047\150\050\116\052\100\053\077\001\001\000\056" +
+    "\006\120\010\127\011\117\016\225\017\145\020\113\021" +
+    "\125\022\073\023\121\024\143\025\123\026\136\027\146" +
+    "\030\134\031\107\032\072\033\106\034\147\047\150\050" +
+    "\116\052\100\053\077\001\001\000\056\006\120\010\127" +
+    "\011\117\016\224\017\145\020\113\021\125\022\073\023" +
+    "\121\024\143\025\123\026\136\027\146\030\134\031\107" +
+    "\032\072\033\106\034\147\047\150\050\116\052\100\053" +
+    "\077\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\064\006" +
+    "\120\010\127\011\117\013\232\014\104\015\063\016\111" +
+    "\017\145\020\113\021\125\022\073\023\121\024\143\025" +
+    "\123\026\136\027\146\030\134\031\107\032\072\033\106" +
+    "\034\147\047\150\050\116\052\100\053\077\001\001\000" +
+    "\002\001\001\000\062\006\120\010\127\011\117\014\234" +
+    "\015\063\016\111\017\145\020\113\021\125\022\073\023" +
+    "\121\024\143\025\123\026\136\027\146\030\134\031\107" +
+    "\032\072\033\106\034\147\047\150\050\116\052\100\053" +
+    "\077\001\001\000\002\001\001\000\002\001\001\000\006" +
+    "\007\053\045\237\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\020\040\031\041\267\042\023\043\052\044\010\047\051" +
+    "\054\021\001\001\000\020\040\031\041\266\042\023\043" +
+    "\052\044\010\047\051\054\021\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\006\007\053\045" +
+    "\274\001\001\000\006\007\053\045\273\001\001\000\002" +
+    "\001\001\000\002\001\001\000\020\040\031\041\300\042" +
+    "\023\043\052\044\010\047\051\054\021\001\001\000\020" +
+    "\040\031\041\277\042\023\043\052\044\010\047\051\054" +
+    "\021\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\026\035\016\036\306\037\006\040\031\041\025" +
+    "\042\023\043\052\044\010\047\051\054\021\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001" });
+
+  /** Access to <code>reduce_goto</code> table. */
+  public short[][] reduce_table() {return _reduce_table;}
+
+  /** Instance of action encapsulation class. */
+  protected CUP$XPathParser$actions action_obj;
+
+  /** Action encapsulation object initializer. */
+  protected void init_actions()
+    {
+      action_obj = new CUP$XPathParser$actions(this);
+    }
+
+  /** Invoke a user supplied parse action. */
+  public java_cup.runtime.Symbol do_action(
+    int                        act_num,
+    java_cup.runtime.lr_parser parser,
+    java.util.Stack            stack,
+    int                        top)
+    throws java.lang.Exception
+  {
+    /* call code in generated class */
+    return action_obj.CUP$XPathParser$do_action(act_num, parser, stack, top);
+  }
+
+  /** Indicates start state. */
+  public int start_state() {return 0;}
+  /** Indicates start production. */
+  public int start_production() {return 0;}
+
+  /** <code>EOF</code> Symbol index. */
+  public int EOF_sym() {return 0;}
+
+  /** <code>error</code> Symbol index. */
+  public int error_sym() {return 1;}
+
+
+
+    /**
+     * Used by function calls with no args.
+     */
+    static public final Vector EmptyArgs = new Vector(0);
+
+    /**
+     * Reference to non-existing variable.
+     */
+    static public final VariableRef DummyVarRef = null;
+
+    /**
+     * Reference to the Parser class.
+     */
+    private Parser _parser;
+    private XSLTC  _xsltc;
+
+    /**
+     * String representation of the expression being parsed.
+     */
+    private String _expression;
+
+    /**
+     * Line number where this expression/pattern was declared.
+     */
+    private int _lineNumber = 0;
+
+    /**
+     * Reference to the symbol table.
+     */
+    public SymbolTable _symbolTable;
+
+    public XPathParser(Parser parser) {
+        _parser = parser;
+	_xsltc = parser.getXSLTC();
+        _symbolTable = parser.getSymbolTable();
+    }
+
+    public int getLineNumber() {
+        return _lineNumber;
+    }
+
+    public QName getQNameIgnoreDefaultNs(String name) {
+          return _parser.getQNameIgnoreDefaultNs(name);
+    }    
+
+    public QName getQName(String namespace, String prefix, String localname) {
+        return _parser.getQName(namespace, prefix, localname);
+    }        
+
+    public void setMultiDocument(boolean flag) {
+          _xsltc.setMultiDocument(flag);
+    }
+
+    public void setCallsNodeset(boolean flag) {
+          _xsltc.setCallsNodeset(flag);
+    }
+
+    public void setHasIdCall(boolean flag) {
+          _xsltc.setHasIdCall(flag); 
+    }
+    
+
+    /**
+     * This method is similar to findNodeType(int, Object) except that it
+     * creates a StepPattern instead of just returning a node type. It also 
+     * differs in the way it handles "{uri}:*" and "{uri}:@*". The last two 
+     * patterns are expanded as "*[namespace-uri() = 'uri']" and 
+     * "@*[namespace-uri() = 'uri']", respectively. This expansion considerably 
+     * simplifies the grouping of patterns in the Mode class. For this
+     * expansion to be correct, the priority of the pattern/template must be
+     * set to -0.25 (when no other predicates are present).
+     */
+    public StepPattern createStepPattern(int axis, Object test, Vector predicates) {
+	int nodeType;
+
+	if (test == null) {  // "*"
+	    nodeType = (axis == Axis.ATTRIBUTE) ? NodeTest.ATTRIBUTE : 
+		(axis == Axis.NAMESPACE) ? -1 : NodeTest.ELEMENT;
+
+	    return new StepPattern(axis, nodeType, predicates);
+        }
+        else if (test instanceof Integer) {
+	    nodeType = ((Integer) test).intValue();
+
+	    return new StepPattern(axis, nodeType, predicates);
+        }
+        else {
+	    QName name = (QName)test;
+	    boolean setPriority = false;
+
+	    if (axis == Axis.NAMESPACE) {
+		nodeType = (name.toString().equals("*")) ? -1
+				: _xsltc.registerNamespacePrefix(name);;
+            }
+	    else {
+		final String uri = name.getNamespace();
+		final String local = name.getLocalPart();
+		final QName namespace_uri = 
+		    _parser.getQNameIgnoreDefaultNs("namespace-uri");
+
+		// Expand {uri}:* to *[namespace-uri() = 'uri'] - same for @*
+		if (uri != null && (local.equals("*") || local.equals("@*"))) {
+		    if (predicates == null) {
+			predicates = new Vector(2);
+		    }
+
+		    // Priority is set by hand if no other predicates exist
+		    setPriority = (predicates.size() == 0);
+
+		    predicates.add(
+			new Predicate(
+			    new EqualityExpr(Operators.EQ, 
+				new NamespaceUriCall(namespace_uri), 
+				new LiteralExpr(uri))));
+		}
+
+		if (local.equals("*")) {
+		    nodeType = (axis == Axis.ATTRIBUTE) ? NodeTest.ATTRIBUTE
+			: NodeTest.ELEMENT;
+		}
+		else if (local.equals("@*")) {
+		    nodeType = NodeTest.ATTRIBUTE;
+		}
+		else {
+		    nodeType = (axis == Axis.ATTRIBUTE) ? _xsltc.registerAttribute(name)
+			: _xsltc.registerElement(name); 
+		}
+	    }
+
+	    final StepPattern result = new StepPattern(axis, nodeType, predicates); 
+
+	    // Set priority for case prefix:* and prefix:@* (no predicates)
+	    if (setPriority) {
+		result.setPriority(-0.25);
+	    }
+
+	    return result;
+	}
+    }
+
+    public int findNodeType(int axis, Object test) {
+	if (test == null) {  // *
+	    return (axis == Axis.ATTRIBUTE) ? 
+		NodeTest.ATTRIBUTE :
+		(axis == Axis.NAMESPACE) ? -1 : NodeTest.ELEMENT;
+        }
+        else if (test instanceof Integer) {
+            return ((Integer)test).intValue();
+        }
+        else {
+	    QName name = (QName)test;
+
+	    if (axis == Axis.NAMESPACE) {
+		return (name.toString().equals("*")) ? -1
+		    : _xsltc.registerNamespacePrefix(name);
+            }
+
+	    if (name.getNamespace() == null) {
+		final String local = name.getLocalPart();
+
+		if (local.equals("*")) {
+		    return (axis == Axis.ATTRIBUTE) ? NodeTest.ATTRIBUTE
+			: NodeTest.ELEMENT;
+		}
+		else if (local.equals("@*")) {
+		    return NodeTest.ATTRIBUTE;
+		}
+	    }
+
+	    return (axis == Axis.ATTRIBUTE) ? _xsltc.registerAttribute(name)
+		: _xsltc.registerElement(name); 
+        }
+    }
+
+    /**
+     * Parse the expression passed to the current scanner. If this
+     * expression contains references to local variables and it will be 
+     * compiled in an external module (not in the main class) request 
+     * the current template to create a new variable stack frame.
+     *
+     * @param lineNumber Line where the current expression is defined.
+     * @param external   Set to <tt>true</tt> if this expression is
+     *                   compiled in a separate module.
+     * 
+     */
+    public Symbol parse(String expression, int lineNumber) throws Exception {
+        try {
+	    _expression = expression;
+	    _lineNumber = lineNumber;
+	    return super.parse();
+        }
+        catch (IllegalCharException e) {
+            ErrorMsg err = new ErrorMsg(ErrorMsg.ILLEGAL_CHAR_ERR,
+                                        lineNumber, e.getMessage());
+            _parser.reportError(Constants.FATAL, err);
+        }
+        return null;
+    }
+
+    /**
+     * Lookup a variable or parameter in the symbol table given its name. 
+     *
+     * @param name Name of the symbol being looked up.
+     */
+    final SyntaxTreeNode lookupName(QName name) {
+        // Is it a local var or param ?
+        final SyntaxTreeNode result = _parser.lookupVariable(name);
+	if (result != null)
+            return(result);
+        else
+	    return(_symbolTable.lookupName(name));
+    }
+
+    public final void addError(ErrorMsg error) {
+	_parser.reportError(Constants.ERROR, error);
+    } 
+           
+    public void report_error(String message, Object info) {
+	final ErrorMsg err = new ErrorMsg(ErrorMsg.SYNTAX_ERR, _lineNumber, 
+	    _expression);
+	_parser.reportError(Constants.FATAL, err);
+    }
+
+    public void report_fatal_error(String message, Object info) {
+        // empty
+    }
+    
+    public RelativeLocationPath insertStep(Step step, RelativeLocationPath rlp) {
+	if (rlp instanceof Step) {
+	    return new ParentLocationPath(step, (Step) rlp);
+	}
+	else if (rlp instanceof ParentLocationPath) {
+	    final ParentLocationPath plp = (ParentLocationPath) rlp;
+	    final RelativeLocationPath newrlp = insertStep(step, plp.getPath());
+	    return new ParentLocationPath(newrlp, plp.getStep());
+	}
+	else {
+	    addError(new ErrorMsg(ErrorMsg.INTERNAL_ERR, "XPathParser.insertStep"));
+	    return rlp;
+	}
+    }
+
+    /**
+     * Returns true if the axis applies to elements only. The axes
+     * child, attribute, namespace, descendant result in non-empty
+     * nodesets only if the context node is of type element.
+     */
+    public boolean isElementAxis(int axis) {
+	return (axis == Axis.CHILD || axis == Axis.ATTRIBUTE ||
+		axis == Axis.NAMESPACE || axis == Axis.DESCENDANT);
+    }
+
+}
+
+/** Cup generated class to encapsulate user supplied action code.*/
+class CUP$XPathParser$actions {
+  private final XPathParser parser;
+
+  /** Constructor */
+  CUP$XPathParser$actions(XPathParser parser) {
+    this.parser = parser;
+  }
+
+  /** Method with the actual generated action code. */
+  public final java_cup.runtime.Symbol CUP$XPathParser$do_action(
+    int                        CUP$XPathParser$act_num,
+    java_cup.runtime.lr_parser CUP$XPathParser$parser,
+    java.util.Stack            CUP$XPathParser$stack,
+    int                        CUP$XPathParser$top)
+    throws java.lang.Exception
+    {
+      /* Symbol object for return from actions */
+      java_cup.runtime.Symbol CUP$XPathParser$result;
+
+      /* select the action based on the action number */
+      switch (CUP$XPathParser$act_num)
+        {
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 140: // QName ::= ID 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("id"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 139: // QName ::= SELF 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("self"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 138: // QName ::= PRECEDINGSIBLING 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("preceding-sibling"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 137: // QName ::= PRECEDING 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("preceding"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 136: // QName ::= PARENT 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("parent"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 135: // QName ::= NAMESPACE 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("namespace"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 134: // QName ::= FOLLOWINGSIBLING 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("following-sibling"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 133: // QName ::= FOLLOWING 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("following"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 132: // QName ::= DESCENDANTORSELF 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("decendant-or-self"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 131: // QName ::= DESCENDANT 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("decendant"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 130: // QName ::= CHILD 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("child"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 129: // QName ::= ATTRIBUTE 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("attribute"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 128: // QName ::= ANCESTORORSELF 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("ancestor-or-self"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 127: // QName ::= ANCESTOR 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("child"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 126: // QName ::= KEY 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("key"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 125: // QName ::= MOD 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("mod"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 124: // QName ::= DIV 
+            {
+              QName RESULT = null;
+		 RESULT = parser.getQNameIgnoreDefaultNs("div"); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 123: // QName ::= QNAME 
+            {
+              QName RESULT = null;
+		int qnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int qnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		String qname = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = parser.getQNameIgnoreDefaultNs(qname); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(37/*QName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 122: // NameTest ::= QName 
+            {
+              Object RESULT = null;
+		int qnleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int qnright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		QName qn = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = qn; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(26/*NameTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 121: // NameTest ::= STAR 
+            {
+              Object RESULT = null;
+		 RESULT = null; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(26/*NameTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 120: // NodeTest ::= PI 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.PI); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 119: // NodeTest ::= PIPARAM LPAREN Literal RPAREN 
+            {
+              Object RESULT = null;
+		int lleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int lright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		String l = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		
+           QName name = parser.getQNameIgnoreDefaultNs("name");
+           Expression exp = new EqualityExpr(Operators.EQ,
+                                             new NameCall(name),
+                                             new LiteralExpr(l));
+           Vector predicates = new Vector();
+           predicates.addElement(new Predicate(exp));
+           RESULT = new Step(Axis.CHILD, NodeTest.PI, predicates);
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 118: // NodeTest ::= COMMENT 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.COMMENT); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 117: // NodeTest ::= TEXT 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.TEXT); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 116: // NodeTest ::= NODE 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.ANODE); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 115: // NodeTest ::= NameTest 
+            {
+              Object RESULT = null;
+		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = nt; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(25/*NodeTest*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 114: // Argument ::= Expr 
+            {
+              Expression RESULT = null;
+		int exleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int exright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ex = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = ex; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(3/*Argument*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 113: // VariableName ::= QName 
+            {
+              QName RESULT = null;
+		int vnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int vnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		QName vname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	    RESULT = vname; 
+	
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(39/*VariableName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 112: // FunctionName ::= QName 
+            {
+              QName RESULT = null;
+		int fnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int fnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		QName fname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	    RESULT = fname; 
+	
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(38/*FunctionName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 111: // NonemptyArgumentList ::= Argument COMMA NonemptyArgumentList 
+            {
+              Vector RESULT = null;
+		int argleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int argright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression arg = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int arglleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int arglright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector argl = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 argl.insertElementAt(arg, 0); RESULT = argl; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(36/*NonemptyArgumentList*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 110: // NonemptyArgumentList ::= Argument 
+            {
+              Vector RESULT = null;
+		int argleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int argright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression arg = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+            Vector temp = new Vector();
+            temp.addElement(arg);
+            RESULT = temp;
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(36/*NonemptyArgumentList*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 109: // FunctionCall ::= FunctionName LPAREN NonemptyArgumentList RPAREN 
+            {
+              Expression RESULT = null;
+		int fnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left;
+		int fnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).right;
+		QName fname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).value;
+		int arglleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int arglright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Vector argl = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		
+          if (parser.getQNameIgnoreDefaultNs("concat").equals(fname)) {
+            RESULT = new ConcatCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("number").equals(fname)) {
+            RESULT = new NumberCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("document").equals(fname)) {
+	    parser.setMultiDocument(true);
+            RESULT = new DocumentCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("string").equals(fname)) {
+            RESULT = new StringCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("boolean").equals(fname)) {
+            RESULT = new BooleanCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("name").equals(fname)) {
+            RESULT = new NameCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("generate-id").equals(fname)) {
+            RESULT = new GenerateIdCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("not").equals(fname)) {
+            RESULT = new NotCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("format-number").equals(fname)) {
+            RESULT = new FormatNumberCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("unparsed-entity-uri").equals(fname)) {
+            RESULT = new UnparsedEntityUriCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("key").equals(fname)) {
+            RESULT = new KeyCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("id").equals(fname)) {
+            RESULT = new KeyCall(fname, argl);
+            parser.setHasIdCall(true);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("ceiling").equals(fname)) {
+            RESULT = new CeilingCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("round").equals(fname)) {
+            RESULT = new RoundCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("floor").equals(fname)) {
+            RESULT = new FloorCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("contains").equals(fname)) {
+            RESULT = new ContainsCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("string-length").equals(fname)) {
+            RESULT = new StringLengthCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("starts-with").equals(fname)) {
+            RESULT = new StartsWithCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("function-available").equals(fname)) {
+            RESULT = new FunctionAvailableCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("element-available").equals(fname)) {
+            RESULT = new ElementAvailableCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("local-name").equals(fname)) {
+            RESULT = new LocalNameCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("lang").equals(fname)) {
+            RESULT = new LangCall(fname, argl);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("namespace-uri").equals(fname)) {
+            RESULT = new NamespaceUriCall(fname, argl);
+	  }
+          else if (parser.getQName(Constants.TRANSLET_URI, "xsltc", "cast").equals(fname)) {
+            RESULT = new CastCall(fname, argl);
+	  }
+	  // Special case for extension function nodeset()
+          else if (fname.getLocalPart().equals("nodeset") || fname.getLocalPart().equals("node-set")) {
+	    parser.setCallsNodeset(true);  // implies MultiDOM
+            RESULT = new FunctionCall(fname, argl);
+	  }
+          else {
+            RESULT = new FunctionCall(fname, argl);
+	  }
+    
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(16/*FunctionCall*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 108: // FunctionCall ::= FunctionName LPAREN RPAREN 
+            {
+              Expression RESULT = null;
+		int fnameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int fnameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		QName fname = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		 
+
+          if (parser.getQNameIgnoreDefaultNs("current").equals(fname)) {
+            RESULT = new CurrentCall(fname);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("number").equals(fname)) {
+            RESULT = new NumberCall(fname, parser.EmptyArgs);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("string").equals(fname)) {
+            RESULT = new StringCall(fname, parser.EmptyArgs);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("concat").equals(fname)) {
+            RESULT = new ConcatCall(fname, parser.EmptyArgs);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("true").equals(fname)) {
+            RESULT = new BooleanExpr(true);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("false").equals(fname)) {
+            RESULT = new BooleanExpr(false);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("name").equals(fname)) {
+            RESULT = new NameCall(fname);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("generate-id").equals(fname)) {
+            RESULT = new GenerateIdCall(fname, parser.EmptyArgs);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("string-length").equals(fname)) {
+            RESULT = new StringLengthCall(fname, parser.EmptyArgs);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("position").equals(fname)) {
+            RESULT = new PositionCall(fname);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("last").equals(fname)) {
+            RESULT = new LastCall(fname);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("local-name").equals(fname)) {
+            RESULT = new LocalNameCall(fname);
+	  }
+          else if (parser.getQNameIgnoreDefaultNs("namespace-uri").equals(fname)) {
+            RESULT = new NamespaceUriCall(fname);
+	  }
+          else {
+            RESULT = new FunctionCall(fname, parser.EmptyArgs);
+	  }
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(16/*FunctionCall*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 107: // VariableReference ::= DOLLAR VariableName 
+            {
+              Expression RESULT = null;
+		int varNameleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int varNameright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		QName varName = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+            // An empty qname prefix for a variable or parameter reference
+            // should map to the null namespace and not the default URI.
+            SyntaxTreeNode node = parser.lookupName(varName);
+
+            if (node != null) {
+                if (node instanceof Variable) {
+                    RESULT = new VariableRef((Variable)node);
+                }
+                else if (node instanceof Param) {
+                    RESULT = new ParameterRef((Param)node);
+                } 
+                else {
+                    RESULT = new UnresolvedRef(varName);
+                }
+            }
+
+            if (node == null) {
+                RESULT = new UnresolvedRef(varName);
+            }
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(15/*VariableReference*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 106: // PrimaryExpr ::= FunctionCall 
+            {
+              Expression RESULT = null;
+		int fcleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int fcright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression fc = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = fc; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 105: // PrimaryExpr ::= REAL 
+            {
+              Expression RESULT = null;
+		int numleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int numright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Double num = (Double)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new RealExpr(num.doubleValue()); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 104: // PrimaryExpr ::= INT 
+            {
+              Expression RESULT = null;
+		int numleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int numright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Long num = (Long)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	   long value = num.longValue();
+	   if (value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
+		RESULT = new RealExpr(value);
+	   }
+	   else {
+               if (num.doubleValue() == -0)
+                   RESULT = new RealExpr(num.doubleValue());
+               else if (num.intValue() == 0)
+                   RESULT = new IntExpr(num.intValue());
+               else if (num.doubleValue() == 0.0)
+                   RESULT = new RealExpr(num.doubleValue());
+               else 
+                   RESULT = new IntExpr(num.intValue());
+	   }
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 103: // PrimaryExpr ::= Literal 
+            {
+              Expression RESULT = null;
+		int stringleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int stringright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		String string = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	/*
+	* If the string appears to have the syntax of a QName, store 
+	* namespace info in the literal expression. This is used for
+	* element-available and function-available functions, among
+	* others. Also, the default namespace must be ignored.
+	*/
+	String namespace = null;
+	final int index = string.lastIndexOf(':');
+
+	if (index > 0) {
+	    final String prefix = string.substring(0, index);
+	    namespace = parser._symbolTable.lookupNamespace(prefix);
+	}
+	RESULT = (namespace == null) ? new LiteralExpr(string)
+		     : new LiteralExpr(string, namespace); 
+	
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 102: // PrimaryExpr ::= LPAREN Expr RPAREN 
+            {
+              Expression RESULT = null;
+		int exleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int exright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Expression ex = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		 RESULT = ex; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 101: // PrimaryExpr ::= VariableReference 
+            {
+              Expression RESULT = null;
+		int vrleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int vrright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression vr = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = vr; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(17/*PrimaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 100: // FilterExpr ::= PrimaryExpr Predicates 
+            {
+              Expression RESULT = null;
+		int primaryleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int primaryright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Expression primary = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new FilterExpr(primary, pp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(6/*FilterExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 99: // FilterExpr ::= PrimaryExpr 
+            {
+              Expression RESULT = null;
+		int primaryleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int primaryright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression primary = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = primary; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(6/*FilterExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 98: // AbbreviatedStep ::= DDOT 
+            {
+              Expression RESULT = null;
+		 RESULT = new Step(Axis.PARENT, NodeTest.ANODE, null); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(20/*AbbreviatedStep*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 97: // AbbreviatedStep ::= DOT 
+            {
+              Expression RESULT = null;
+		 RESULT = new Step(Axis.SELF, NodeTest.ANODE, null); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(20/*AbbreviatedStep*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 96: // AxisName ::= SELF 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.SELF); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 95: // AxisName ::= PRECEDINGSIBLING 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.PRECEDINGSIBLING); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 94: // AxisName ::= PRECEDING 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.PRECEDING); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 93: // AxisName ::= PARENT 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.PARENT); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 92: // AxisName ::= NAMESPACE 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.NAMESPACE); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 91: // AxisName ::= FOLLOWINGSIBLING 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.FOLLOWINGSIBLING); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 90: // AxisName ::= FOLLOWING 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.FOLLOWING); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 89: // AxisName ::= DESCENDANTORSELF 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.DESCENDANTORSELF); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 88: // AxisName ::= DESCENDANT 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.DESCENDANT); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 87: // AxisName ::= CHILD 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.CHILD); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 86: // AxisName ::= ATTRIBUTE 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.ATTRIBUTE); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 85: // AxisName ::= ANCESTORORSELF 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.ANCESTORORSELF); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 84: // AxisName ::= ANCESTOR 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.ANCESTOR); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(40/*AxisName*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 83: // AxisSpecifier ::= ATSIGN 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.ATTRIBUTE); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(41/*AxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 82: // AxisSpecifier ::= AxisName DCOLON 
+            {
+              Integer RESULT = null;
+		int anleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int anright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Integer an = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		 RESULT = an; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(41/*AxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 81: // Step ::= AbbreviatedStep 
+            {
+              Expression RESULT = null;
+		int abbrevleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int abbrevright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression abbrev = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = abbrev; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 80: // Step ::= AxisSpecifier NodeTest 
+            {
+              Expression RESULT = null;
+		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new Step(axis.intValue(),
+                             parser.findNodeType(axis.intValue(), ntest),
+                             null);
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 79: // Step ::= AxisSpecifier NodeTest Predicates 
+            {
+              Expression RESULT = null;
+		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new Step(axis.intValue(),
+                             parser.findNodeType(axis.intValue(), ntest),
+                             pp);
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 78: // Step ::= NodeTest Predicates 
+            {
+              Expression RESULT = null;
+		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+            if (ntest instanceof Step) {
+                Step step = (Step)ntest;
+                step.addPredicates(pp);
+                RESULT = (Step)ntest;
+            }
+            else {
+                RESULT = new Step(Axis.CHILD,
+                             parser.findNodeType(Axis.CHILD, ntest), pp);
+            }
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 77: // Step ::= NodeTest 
+            {
+              Expression RESULT = null;
+		int ntestleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ntestright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Object ntest = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		
+            if (ntest instanceof Step) {
+                RESULT = (Step)ntest;
+            }
+            else {
+		RESULT = new Step(Axis.CHILD,
+                             parser.findNodeType(Axis.CHILD, ntest),
+                             null);
+            }
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(7/*Step*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 76: // AbbreviatedAbsoluteLocationPath ::= DSLASH RelativeLocationPath 
+            {
+              Expression RESULT = null;
+		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		
+           // 
+	   // Expand '//' into '/descendant-or-self::node()/' or
+	   // into /descendant-or-self::*/
+	   //
+	   int nodeType = DOM.NO_TYPE;
+	   if (rlp instanceof Step && 
+	       parser.isElementAxis(((Step) rlp).getAxis())) 
+	   {
+	       nodeType = DTM.ELEMENT_NODE;
+	   }
+	   final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
+	   RESULT = new AbsoluteLocationPath(parser.insertStep(step, 
+				(RelativeLocationPath) rlp));
+	
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(24/*AbbreviatedAbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 75: // AbbreviatedRelativeLocationPath ::= RelativeLocationPath DSLASH Step 
+            {
+              Expression RESULT = null;
+		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int stepleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int stepright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression step = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	   final Step right  = (Step)step;
+           final int  axis   = right.getAxis();
+           final int  type   = right.getNodeType();
+           final Vector predicates = right.getPredicates();
+
+           if ((axis == Axis.CHILD) && (type != NodeTest.ATTRIBUTE)) {
+               // Compress './/child:E' into 'descendant::E' - if possible
+               if (predicates == null) {
+                   right.setAxis(Axis.DESCENDANT);
+                   if (rlp instanceof Step && ((Step)rlp).isAbbreviatedDot()) {
+	               RESULT = right;
+                   }
+                   else {
+                       // Expand 'rlp//child::E' into 'rlp/descendant::E'
+                       RelativeLocationPath left = (RelativeLocationPath)rlp;
+	               RESULT = new ParentLocationPath(left, right);
+                   }
+               }
+               else {
+                   // Expand './/step' -> 'descendant-or-self::*/step'
+                   if (rlp instanceof Step && ((Step)rlp).isAbbreviatedDot()) {
+                       Step left = new Step(Axis.DESCENDANTORSELF, 
+			    DTM.ELEMENT_NODE, null);
+                       RESULT = new ParentLocationPath(left, right);
+                   }
+                   else {
+                       // Expand 'rlp//step' -> 'rlp/descendant-or-self::*/step'
+                       RelativeLocationPath left = (RelativeLocationPath)rlp;
+                       Step mid = new Step(Axis.DESCENDANTORSELF, 
+			    DTM.ELEMENT_NODE, null);
+                       ParentLocationPath ppl = new ParentLocationPath(mid, right);
+                       RESULT = new ParentLocationPath(left, ppl);
+                   }
+               }
+           }
+           else if ((axis == Axis.ATTRIBUTE) || (type == NodeTest.ATTRIBUTE)) {
+               // Expand 'rlp//step' -> 'rlp/descendant-or-self::*/step'
+               RelativeLocationPath left = (RelativeLocationPath)rlp;
+               Step middle = new Step(Axis.DESCENDANTORSELF, 
+		    DTM.ELEMENT_NODE, null);
+               ParentLocationPath ppl = new ParentLocationPath(middle, right);
+               RESULT = new ParentLocationPath(left, ppl);
+	   }
+	   else {
+	       // Expand 'rlp//step' -> 'rlp/descendant-or-self::node()/step'
+               RelativeLocationPath left = (RelativeLocationPath)rlp;
+	       Step middle = new Step(Axis.DESCENDANTORSELF, 
+		    DOM.NO_TYPE, null); 
+               ParentLocationPath ppl = new ParentLocationPath(middle, right);
+	       RESULT = new ParentLocationPath(left, ppl);
+	   }
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(22/*AbbreviatedRelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 74: // AbsoluteLocationPath ::= AbbreviatedAbsoluteLocationPath 
+            {
+              Expression RESULT = null;
+		int aalpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aalpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression aalp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = aalp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(23/*AbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 73: // AbsoluteLocationPath ::= SLASH RelativeLocationPath 
+            {
+              Expression RESULT = null;
+		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new AbsoluteLocationPath(rlp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(23/*AbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 72: // AbsoluteLocationPath ::= SLASH 
+            {
+              Expression RESULT = null;
+		 RESULT = new AbsoluteLocationPath(); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(23/*AbsoluteLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 71: // RelativeLocationPath ::= AbbreviatedRelativeLocationPath 
+            {
+              Expression RESULT = null;
+		int arlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int arlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression arlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = arlp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(21/*RelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 70: // RelativeLocationPath ::= RelativeLocationPath SLASH Step 
+            {
+              Expression RESULT = null;
+		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int stepleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int stepright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression step = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		     
+        if (rlp instanceof Step && ((Step) rlp).isAbbreviatedDot()) {
+              RESULT = step;       // Remove './' from the middle
+        }
+        else if (((Step) step).isAbbreviatedDot()) {
+              RESULT = rlp;        // Remove '/.' from the end
+        }
+        else {
+             RESULT =
+                new ParentLocationPath((RelativeLocationPath) rlp, step); 
+           }
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(21/*RelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 69: // RelativeLocationPath ::= Step 
+            {
+              Expression RESULT = null;
+		int stepleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int stepright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression step = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = step; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(21/*RelativeLocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 68: // LocationPath ::= AbsoluteLocationPath 
+            {
+              Expression RESULT = null;
+		int alpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int alpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression alp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = alp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(4/*LocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 67: // LocationPath ::= RelativeLocationPath 
+            {
+              Expression RESULT = null;
+		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = rlp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(4/*LocationPath*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 66: // PathExpr ::= FilterExpr DSLASH RelativeLocationPath 
+            {
+              Expression RESULT = null;
+		int fexpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int fexpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression fexp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		
+           // 
+	   // Expand '//' into '/descendant-or-self::node()/' or
+	   // into /descendant-or-self::*/
+	   //
+	   int nodeType = DOM.NO_TYPE;
+	   if (rlp instanceof Step && 
+	       parser.isElementAxis(((Step) rlp).getAxis())) 
+	   {
+	       nodeType = DTM.ELEMENT_NODE;
+	   }
+           final Step step = new Step(Axis.DESCENDANTORSELF, nodeType, null);
+           FilterParentPath fpp = new FilterParentPath(fexp, step);
+           fpp = new FilterParentPath(fpp, rlp);
+           if (fexp instanceof KeyCall == false) {
+               fpp.setDescendantAxis();
+	   }
+           RESULT = fpp;
+        
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 65: // PathExpr ::= FilterExpr SLASH RelativeLocationPath 
+            {
+              Expression RESULT = null;
+		int fexpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int fexpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression fexp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int rlpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rlpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression rlp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new FilterParentPath(fexp, rlp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 64: // PathExpr ::= FilterExpr 
+            {
+              Expression RESULT = null;
+		int fexpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int fexpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression fexp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = fexp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 63: // PathExpr ::= LocationPath 
+            {
+              Expression RESULT = null;
+		int lpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int lpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression lp = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = lp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(19/*PathExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 62: // UnionExpr ::= PathExpr VBAR UnionExpr 
+            {
+              Expression RESULT = null;
+		int peleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int peright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression pe = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int restleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int restright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression rest = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new UnionPathExpr(pe, rest); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(18/*UnionExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 61: // UnionExpr ::= PathExpr 
+            {
+              Expression RESULT = null;
+		int peleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int peright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression pe = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = pe; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(18/*UnionExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 60: // UnaryExpr ::= MINUS UnaryExpr 
+            {
+              Expression RESULT = null;
+		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new UnaryOpExpr(ue); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(14/*UnaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 59: // UnaryExpr ::= UnionExpr 
+            {
+              Expression RESULT = null;
+		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = ue; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(14/*UnaryExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 58: // MultiplicativeExpr ::= MultiplicativeExpr MOD UnaryExpr 
+            {
+              Expression RESULT = null;
+		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new BinOpExpr(BinOpExpr.MOD, me, ue); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 57: // MultiplicativeExpr ::= MultiplicativeExpr DIV UnaryExpr 
+            {
+              Expression RESULT = null;
+		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new BinOpExpr(BinOpExpr.DIV, me, ue); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 56: // MultiplicativeExpr ::= MultiplicativeExpr MULT UnaryExpr 
+            {
+              Expression RESULT = null;
+		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new BinOpExpr(BinOpExpr.TIMES, me, ue); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 55: // MultiplicativeExpr ::= UnaryExpr 
+            {
+              Expression RESULT = null;
+		int ueleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ueright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ue = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = ue; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(13/*MultiplicativeExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 54: // AdditiveExpr ::= AdditiveExpr MINUS MultiplicativeExpr 
+            {
+              Expression RESULT = null;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new BinOpExpr(BinOpExpr.MINUS, ae, me); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(12/*AdditiveExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 53: // AdditiveExpr ::= AdditiveExpr PLUS MultiplicativeExpr 
+            {
+              Expression RESULT = null;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new BinOpExpr(BinOpExpr.PLUS, ae, me); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(12/*AdditiveExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 52: // AdditiveExpr ::= MultiplicativeExpr 
+            {
+              Expression RESULT = null;
+		int meleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int meright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression me = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = me; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(12/*AdditiveExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 51: // RelationalExpr ::= RelationalExpr GE AdditiveExpr 
+            {
+              Expression RESULT = null;
+		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new RelationalExpr(Operators.GE, re, ae); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 50: // RelationalExpr ::= RelationalExpr LE AdditiveExpr 
+            {
+              Expression RESULT = null;
+		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new RelationalExpr(Operators.LE, re, ae); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 49: // RelationalExpr ::= RelationalExpr GT AdditiveExpr 
+            {
+              Expression RESULT = null;
+		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new RelationalExpr(Operators.GT, re, ae); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 48: // RelationalExpr ::= RelationalExpr LT AdditiveExpr 
+            {
+              Expression RESULT = null;
+		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new RelationalExpr(Operators.LT, re, ae); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 47: // RelationalExpr ::= AdditiveExpr 
+            {
+              Expression RESULT = null;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = ae; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(11/*RelationalExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 46: // EqualityExpr ::= EqualityExpr NE RelationalExpr 
+            {
+              Expression RESULT = null;
+		int eeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int eeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression ee = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new EqualityExpr(Operators.NE, ee, re); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(10/*EqualityExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 45: // EqualityExpr ::= EqualityExpr EQ RelationalExpr 
+            {
+              Expression RESULT = null;
+		int eeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int eeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression ee = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new EqualityExpr(Operators.EQ, ee, re); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(10/*EqualityExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 44: // EqualityExpr ::= RelationalExpr 
+            {
+              Expression RESULT = null;
+		int releft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int reright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression re = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = re; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(10/*EqualityExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 43: // AndExpr ::= AndExpr AND EqualityExpr 
+            {
+              Expression RESULT = null;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int eeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int eeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ee = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new LogicalExpr(LogicalExpr.AND, ae, ee); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(9/*AndExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 42: // AndExpr ::= EqualityExpr 
+            {
+              Expression RESULT = null;
+		int eleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int eright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression e = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = e; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(9/*AndExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 41: // OrExpr ::= OrExpr OR AndExpr 
+            {
+              Expression RESULT = null;
+		int oeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int oeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Expression oe = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new LogicalExpr(LogicalExpr.OR, oe, ae); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(8/*OrExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 40: // OrExpr ::= AndExpr 
+            {
+              Expression RESULT = null;
+		int aeleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int aeright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ae = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = ae; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(8/*OrExpr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 39: // Expr ::= OrExpr 
+            {
+              Expression RESULT = null;
+		int exleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int exright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression ex = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = ex; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(2/*Expr*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 38: // Predicate ::= LBRACK Expr RBRACK 
+            {
+              Expression RESULT = null;
+		int eleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int eright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Expression e = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		
+		RESULT = new Predicate(e);
+	    
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(5/*Predicate*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 37: // Predicates ::= Predicate Predicates 
+            {
+              Vector RESULT = null;
+		int pleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int pright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Expression p = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 pp.insertElementAt(p, 0); RESULT = pp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(35/*Predicates*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 36: // Predicates ::= Predicate 
+            {
+              Vector RESULT = null;
+		int pleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int pright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression p = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+		Vector temp = new Vector();
+		temp.addElement(p);
+		RESULT = temp;     
+            
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(35/*Predicates*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 35: // ChildOrAttributeAxisSpecifier ::= ATTRIBUTE DCOLON 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.ATTRIBUTE); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 34: // ChildOrAttributeAxisSpecifier ::= CHILD DCOLON 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.CHILD); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 33: // ChildOrAttributeAxisSpecifier ::= ATSIGN 
+            {
+              Integer RESULT = null;
+		 RESULT = new Integer(Axis.ATTRIBUTE); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(42/*ChildOrAttributeAxisSpecifier*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 32: // NameTestPattern ::= QName 
+            {
+              Object RESULT = null;
+		int qnleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int qnright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		QName qn = (QName)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = qn; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(34/*NameTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 31: // NameTestPattern ::= STAR 
+            {
+              Object RESULT = null;
+		 RESULT = null; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(34/*NameTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 30: // NodeTestPattern ::= PI 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.PI); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 29: // NodeTestPattern ::= COMMENT 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.COMMENT); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 28: // NodeTestPattern ::= TEXT 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.TEXT); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 27: // NodeTestPattern ::= NODE 
+            {
+              Object RESULT = null;
+		 RESULT = new Integer(NodeTest.ANODE); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 26: // NodeTestPattern ::= NameTestPattern 
+            {
+              Object RESULT = null;
+		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = nt; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(33/*NodeTestPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 25: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern Predicates 
+            {
+              StepPattern RESULT = null;
+		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	       // TODO: report error if axis is attribute	
+	       RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp); 
+	    
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 24: // StepPattern ::= ChildOrAttributeAxisSpecifier ProcessingInstructionPattern 
+            {
+              StepPattern RESULT = null;
+		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	       RESULT = pip; 	// TODO: report error if axis is attribute
+	    
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 23: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern Predicates 
+            {
+              StepPattern RESULT = null;
+		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	       RESULT = parser.createStepPattern(axis.intValue(), nt, pp);
+            
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 22: // StepPattern ::= ChildOrAttributeAxisSpecifier NodeTestPattern 
+            {
+              StepPattern RESULT = null;
+		int axisleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int axisright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Integer axis = (Integer)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+	       RESULT = parser.createStepPattern(axis.intValue(), nt, null);
+            
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 21: // StepPattern ::= ProcessingInstructionPattern Predicates 
+            {
+              StepPattern RESULT = null;
+		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = (ProcessingInstructionPattern)pip.setPredicates(pp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 20: // StepPattern ::= ProcessingInstructionPattern 
+            {
+              StepPattern RESULT = null;
+		int pipleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int pipright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		StepPattern pip = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = pip; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 19: // StepPattern ::= NodeTestPattern Predicates 
+            {
+              StepPattern RESULT = null;
+		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		int ppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Vector pp = (Vector)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+		RESULT = parser.createStepPattern(Axis.CHILD, nt, pp);
+            
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 18: // StepPattern ::= NodeTestPattern 
+            {
+              StepPattern RESULT = null;
+		int ntleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ntright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Object nt = (Object)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 
+		RESULT = parser.createStepPattern(Axis.CHILD, nt, null);
+            
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(32/*StepPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 17: // RelativePathPattern ::= StepPattern DSLASH RelativePathPattern 
+            {
+              RelativePathPattern RESULT = null;
+		int spleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int spright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		StepPattern sp = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new AncestorPattern(sp, rpp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(31/*RelativePathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 16: // RelativePathPattern ::= StepPattern SLASH RelativePathPattern 
+            {
+              RelativePathPattern RESULT = null;
+		int spleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int spright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		StepPattern sp = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new ParentPattern(sp, rpp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(31/*RelativePathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 15: // RelativePathPattern ::= StepPattern 
+            {
+              RelativePathPattern RESULT = null;
+		int spleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int spright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		StepPattern sp = (StepPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = sp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(31/*RelativePathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 14: // ProcessingInstructionPattern ::= PIPARAM LPAREN Literal RPAREN 
+            {
+              StepPattern RESULT = null;
+		int lleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int lright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		String l = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		 RESULT = new ProcessingInstructionPattern(l); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(30/*ProcessingInstructionPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 13: // IdKeyPattern ::= KEY LPAREN Literal COMMA Literal RPAREN 
+            {
+              IdKeyPattern RESULT = null;
+		int l1left = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left;
+		int l1right = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).right;
+		String l1 = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).value;
+		int l2left = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int l2right = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		String l2 = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		 RESULT = new KeyPattern(l1, l2); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(27/*IdKeyPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-5)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 12: // IdKeyPattern ::= ID LPAREN Literal RPAREN 
+            {
+              IdKeyPattern RESULT = null;
+		int lleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int lright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		String l = (String)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		 RESULT = new IdPattern(l);
+               parser.setHasIdCall(true);
+            
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(27/*IdKeyPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 11: // LocationPathPattern ::= RelativePathPattern 
+            {
+              Pattern RESULT = null;
+		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = rpp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 10: // LocationPathPattern ::= DSLASH RelativePathPattern 
+            {
+              Pattern RESULT = null;
+		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new AncestorPattern(rpp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 9: // LocationPathPattern ::= IdKeyPattern DSLASH RelativePathPattern 
+            {
+              Pattern RESULT = null;
+		int ikpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int ikpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		IdKeyPattern ikp = (IdKeyPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new AncestorPattern(ikp, rpp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 8: // LocationPathPattern ::= IdKeyPattern SLASH RelativePathPattern 
+            {
+              Pattern RESULT = null;
+		int ikpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int ikpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		IdKeyPattern ikp = (IdKeyPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new ParentPattern(ikp, rpp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 7: // LocationPathPattern ::= IdKeyPattern 
+            {
+              Pattern RESULT = null;
+		int ikpleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int ikpright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		IdKeyPattern ikp = (IdKeyPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = ikp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 6: // LocationPathPattern ::= SLASH RelativePathPattern 
+            {
+              Pattern RESULT = null;
+		int rppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int rppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		RelativePathPattern rpp = (RelativePathPattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new AbsolutePathPattern(rpp); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 5: // LocationPathPattern ::= SLASH 
+            {
+              Pattern RESULT = null;
+		 RESULT = new AbsolutePathPattern(null); 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(29/*LocationPathPattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 4: // Pattern ::= LocationPathPattern VBAR Pattern 
+            {
+              Pattern RESULT = null;
+		int lppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left;
+		int lppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).right;
+		Pattern lpp = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).value;
+		int pleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int pright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Pattern p = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = new AlternativePattern(lpp, p);  
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(28/*Pattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 3: // Pattern ::= LocationPathPattern 
+            {
+              Pattern RESULT = null;
+		int lppleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int lppright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Pattern lpp = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = lpp; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(28/*Pattern*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 2: // TopLevel ::= EXPRESSION Expr 
+            {
+              SyntaxTreeNode RESULT = null;
+		int exprleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int exprright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Expression expr = (Expression)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = expr; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(1/*TopLevel*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 1: // TopLevel ::= PATTERN Pattern 
+            {
+              SyntaxTreeNode RESULT = null;
+		int patternleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).left;
+		int patternright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right;
+		Pattern pattern = (Pattern)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).value;
+		 RESULT = pattern; 
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(1/*TopLevel*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          return CUP$XPathParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 0: // $START ::= TopLevel EOF 
+            {
+              Object RESULT = null;
+		int start_valleft = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left;
+		int start_valright = ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).right;
+		SyntaxTreeNode start_val = (SyntaxTreeNode)((java_cup.runtime.Symbol) CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).value;
+		RESULT = start_val;
+              CUP$XPathParser$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$XPathParser$stack.elementAt(CUP$XPathParser$top-0)).right, RESULT);
+            }
+          /* ACCEPT */
+          CUP$XPathParser$parser.done_parsing();
+          return CUP$XPathParser$result;
+
+          /* . . . . . .*/
+          default:
+            throw new Exception(
+               "Invalid action number found in internal parse table");
+
+        }
+    }
+}
+
diff --git a/src/org/apache/xalan/xsltc/compiler/sym.java b/src/org/apache/xalan/xsltc/compiler/sym.java
new file mode 100644
index 0000000..80b3af4
--- /dev/null
+++ b/src/org/apache/xalan/xsltc/compiler/sym.java
@@ -0,0 +1,68 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.10k
+// Tue May 14 05:05:47 GMT 2019
+//----------------------------------------------------
+
+package org.apache.xalan.xsltc.compiler;
+
+/** CUP generated class containing symbol constants. */
+public class sym {
+  /* terminals */
+  public static final int MULT = 26;
+  public static final int Literal = 27;
+  public static final int GE = 21;
+  public static final int NAMESPACE = 49;
+  public static final int SLASH = 2;
+  public static final int PI = 36;
+  public static final int COMMENT = 35;
+  public static final int PIPARAM = 37;
+  public static final int FOLLOWINGSIBLING = 48;
+  public static final int ATSIGN = 12;
+  public static final int DSLASH = 15;
+  public static final int LPAREN = 7;
+  public static final int EXPRESSION = 54;
+  public static final int INT = 52;
+  public static final int CHILD = 41;
+  public static final int MINUS = 23;
+  public static final int STAR = 9;
+  public static final int DESCENDANTORSELF = 46;
+  public static final int RPAREN = 8;
+  public static final int AND = 34;
+  public static final int LT = 18;
+  public static final int OR = 33;
+  public static final int COMMA = 10;
+  public static final int DDOT = 13;
+  public static final int DIV = 24;
+  public static final int PLUS = 22;
+  public static final int DOT = 3;
+  public static final int ID = 29;
+  public static final int LE = 20;
+  public static final int QNAME = 28;
+  public static final int DESCENDANT = 45;
+  public static final int PRECEDINGSIBLING = 38;
+  public static final int EOF = 0;
+  public static final int error = 1;
+  public static final int SELF = 39;
+  public static final int VBAR = 6;
+  public static final int MOD = 25;
+  public static final int ANCESTORORSELF = 44;
+  public static final int PRECEDING = 50;
+  public static final int EQ = 16;
+  public static final int PATTERN = 53;
+  public static final int LBRACK = 4;
+  public static final int REAL = 51;
+  public static final int ANCESTOR = 43;
+  public static final int RBRACK = 5;
+  public static final int DCOLON = 14;
+  public static final int DOLLAR = 11;
+  public static final int NE = 17;
+  public static final int PARENT = 40;
+  public static final int FOLLOWING = 47;
+  public static final int KEY = 30;
+  public static final int TEXT = 31;
+  public static final int ATTRIBUTE = 42;
+  public static final int GT = 19;
+  public static final int NODE = 32;
+}
+


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org