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;
+}
+
