You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2009/03/25 05:15:17 UTC
svn commit: r758138 [3/3] - in
/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl: xpath/
xs/ xs/alternative/
Added: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20Parser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20Parser.java?rev=758138&view=auto
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20Parser.java (added)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20Parser.java Wed Mar 25 04:15:15 2009
@@ -0,0 +1,362 @@
+/*
+ * 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.
+ */
+
+package org.apache.xerces.impl.xpath;
+
+/**
+ * Lexical analyzer and parser for test XPath expressions. This parser
+ * implementation constructs a syntax tree for valid test XPath expressions
+ * which can be later evaluated.
+ *
+ * (Parser generated using JavaCC)
+ *
+ * @author Hiranya Jayathilaka, University of Moratuwa
+ * @version $Id$
+ */
+public class XPath20Parser {
+
+ public static final int EOF = 0;
+ public static final int KEYWORD_AND = 2;
+ public static final int KEYWORD_OR = 3;
+ public static final int KEYWORD_CAST = 4;
+ public static final int KEYWORD_AS = 5;
+
+ public static final int SYMBOL_COLON = 6;
+ public static final int SYMBOL_AT = 7;
+ public static final int SYMBOL_QUESTION = 8;
+ public static final int OPEN_PARAN = 9;
+ public static final int CLOSE_PARAN = 10;
+ public static final int SYMBOL_EQ = 11;
+ public static final int SYMBOL_NE = 12;
+ public static final int SYMBOL_LT = 13;
+ public static final int SYMBOL_GT = 14;
+ public static final int SYMBOL_LE = 15;
+ public static final int SYMBOL_GE = 16;
+
+ public static final int NUMERIC_LITERAL = 17;
+ public static final int DIGITS = 18;
+ public static final int NCNAME = 19;
+ public static final int NCNAME_START_CHAR = 20;
+ public static final int NCNAME_CHAR = 21;
+ public static final int ESCAPE_QUOTE = 22;
+ public static final int ESCAPE_APOS = 23;
+ public static final int STRING_LITERAL = 24;
+
+ /** Lexical state. */
+ public static final int DEFAULT = 0;
+
+ /** Literal token values. */
+ String[] tokenImage = {
+ "<EOF>",
+ "\" \"",
+ "\"and\"",
+ "\"or\"",
+ "\"cast\"",
+ "\"as\"",
+ "\":\"",
+ "\"@\"",
+ "\"?\"",
+ "\"(\"",
+ "\")\"",
+ "\"=\"",
+ "\"!=\"",
+ "\"<\"",
+ "\">\"",
+ "\"<=\"",
+ "\">=\"",
+ "<NUMERIC_LITERAL>",
+ "<DIGITS>",
+ "<NCNAME>",
+ "<NCNAME_START_CHAR>",
+ "<NCNAME_CHAR>",
+ "\"\\\"\\\"\"",
+ "\"\\\'\\\'\"",
+ "<STRING_LITERAL>",
+ "\"\\n\"",
+ };
+
+ public XPathSyntaxTreeNode parseExpression() throws XPathException {
+ return Test();
+ }
+
+ private XPathSyntaxTreeNode Test() throws XPathException {
+ XPathSyntaxTreeNode n;
+ n = OrExpr();
+ consumeToken(25);
+ return n;
+ }
+
+ private XPathSyntaxTreeNode OrExpr() throws XPathException {
+ XPathSyntaxTreeNode n1, n2;
+ n1 = AndExpr();
+ label_1: while (true) {
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case KEYWORD_OR:
+ break;
+
+ default:
+ array1[0] = gen;
+ break label_1;
+ }
+ consumeToken(KEYWORD_OR);
+ n2 = AndExpr();
+ return new ConjunctionNode(ConjunctionNode.OR, n1, n2);
+ }
+ return n1;
+ }
+
+ private XPathSyntaxTreeNode AndExpr() throws XPathException {
+ XPathSyntaxTreeNode n1, n2;
+ n1 = BooleanExpr();
+ label_2: while (true) {
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case KEYWORD_AND:
+ break;
+
+ default:
+ array1[1] = gen;
+ break label_2;
+ }
+
+ consumeToken(KEYWORD_AND);
+ n2 = BooleanExpr();
+ return new ConjunctionNode(ConjunctionNode.AND, n1, n2);
+ }
+ return n1;
+ }
+
+ private XPathSyntaxTreeNode BooleanExpr() throws XPathException {
+ XPathSyntaxTreeNode n1, n2;
+ String s;
+ int comp;
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case OPEN_PARAN:
+ consumeToken(OPEN_PARAN);
+ n1 = OrExpr();
+ consumeToken(CLOSE_PARAN);
+ return n1;
+
+ case NCNAME:
+ s = QName();
+ consumeToken(OPEN_PARAN);
+ n1 = OrExpr();
+ consumeToken(CLOSE_PARAN);
+ return new FunctionNode(s, n1);
+
+ case SYMBOL_AT:
+ case NUMERIC_LITERAL:
+ case STRING_LITERAL:
+ n1 = CastExpr();
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case SYMBOL_EQ:
+ case SYMBOL_NE:
+ case SYMBOL_LT:
+ case SYMBOL_GT:
+ case SYMBOL_LE:
+ case SYMBOL_GE:
+ comp = Comparator();
+ n2 = CastExpr();
+ return new CompNode(comp, n1, n2);
+
+ default:
+ array1[2] = gen;
+ }
+ return n1;
+
+ default:
+ array1[3] = gen;
+ consumeToken(-1);
+ throw new XPathException("c-general-xpath");
+ }
+ }
+
+ private String QName() throws XPathException {
+ Token t1, t2;
+ String s;
+ t1 = consumeToken(NCNAME);
+ s = t1.image;
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case SYMBOL_COLON:
+ consumeToken(SYMBOL_COLON);
+ t2 = consumeToken(NCNAME);
+ s += ":" + t2.image;
+ break;
+ default:
+ array1[4] = gen;
+ }
+ return s;
+ }
+
+ private int Comparator() throws XPathException {
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case SYMBOL_EQ:
+ consumeToken(SYMBOL_EQ);
+ return CompNode.EQ;
+
+ case SYMBOL_NE:
+ consumeToken(SYMBOL_NE);
+ return CompNode.NE;
+
+ case SYMBOL_GT:
+ consumeToken(SYMBOL_GT);
+ return CompNode.GT;
+
+ case SYMBOL_LT:
+ consumeToken(SYMBOL_LT);
+ return CompNode.LT;
+
+ case SYMBOL_GE:
+ consumeToken(SYMBOL_GE);
+ return CompNode.GE;
+
+ case SYMBOL_LE:
+ consumeToken(SYMBOL_LE);
+ return CompNode.LE;
+
+ default:
+ array1[5] = gen;
+ consumeToken(-1);
+ throw new XPathException("c-general-xpath");
+ }
+ }
+
+ private XPathSyntaxTreeNode CastExpr() throws XPathException {
+ XPathSyntaxTreeNode n;
+ String s;
+ n = SimpleValue();
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case KEYWORD_CAST:
+ consumeToken(KEYWORD_CAST);
+ consumeToken(KEYWORD_AS);
+ s = QName();
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case SYMBOL_QUESTION:
+ consumeToken(SYMBOL_QUESTION);
+ break;
+ default:
+ array1[6] = gen;
+ }
+ return new CastNode(n, s);
+
+ default:
+ array1[7] = gen;
+ }
+ return n;
+ }
+
+ private XPathSyntaxTreeNode SimpleValue() throws XPathException {
+ XPathSyntaxTreeNode n;
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case SYMBOL_AT:
+ n = AttrName();
+ return n;
+
+ case NUMERIC_LITERAL:
+ case STRING_LITERAL:
+ n = Literal();
+ return n;
+
+ default:
+ array1[8] = gen;
+ consumeToken(-1);
+ throw new XPathException("c-general-xpath");
+ }
+ }
+
+ private XPathSyntaxTreeNode AttrName() throws XPathException {
+ String t;
+ consumeToken(SYMBOL_AT);
+ t = NameTest();
+ return new AttrNode(t);
+ }
+
+ private XPathSyntaxTreeNode Literal() throws XPathException {
+ Token t;
+ switch ((nextTokenIndex == -1) ? nextToken() : nextTokenIndex) {
+ case NUMERIC_LITERAL:
+ t = consumeToken(NUMERIC_LITERAL);
+ return new LiteralNode(t.image, true);
+
+ case STRING_LITERAL:
+ t = consumeToken(STRING_LITERAL);
+ return new LiteralNode(t.image.substring(1, t.image
+ .length() - 1), false);
+
+ default:
+ array1[9] = gen;
+ consumeToken(-1);
+ throw new XPathException("c-general-xpath");
+ }
+ }
+
+ private String NameTest() throws XPathException {
+ String t;
+ t = QName();
+ return t;
+ }
+
+ /** Generated Token Manager. */
+ public XPath20ParserTokenManager tokenSource;
+ SimpleCharStream inputStream;
+
+ /** Current token. */
+ public Token token;
+
+ /** Next token. */
+ public Token nextToken;
+ private int nextTokenIndex;
+ private int gen;
+ final private int[] array1 = new int[10];
+
+ /** Constructor. */
+ public XPath20Parser(java.io.Reader stream) {
+ inputStream = new SimpleCharStream(stream, 1, 1);
+ tokenSource = new XPath20ParserTokenManager(inputStream);
+ token = new Token();
+ nextTokenIndex = -1;
+ gen = 0;
+ for (int i = 0; i < 10; i++)
+ array1[i] = -1;
+ }
+
+ private Token consumeToken(int kind) throws XPathException {
+ Token oldToken;
+ if ((oldToken = token).next != null) {
+ token = token.next;
+ }
+ else {
+ token = token.next = tokenSource.getNextToken();
+ }
+ nextTokenIndex = -1;
+ if (token.kind == kind) {
+ gen++;
+ return token;
+ }
+ token = oldToken;
+ throw new XPathException("c-general-xpath");
+ }
+
+ private int nextToken() throws XPathException {
+ if ((nextToken = token.next) == null) {
+ return (nextTokenIndex = (token.next = tokenSource.getNextToken()).kind);
+ }
+ else {
+ return (nextTokenIndex = nextToken.kind);
+ }
+ }
+}
+
Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20Parser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20Parser.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20ParserTokenManager.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20ParserTokenManager.java?rev=758138&view=auto
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20ParserTokenManager.java (added)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20ParserTokenManager.java Wed Mar 25 04:15:15 2009
@@ -0,0 +1,622 @@
+/*
+ * 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.
+ */
+
+package org.apache.xerces.impl.xpath;
+
+/**
+ * (Parser generated using JavaCC)
+ *
+ * @author Hiranya Jayathilaka, University of Moratuwa
+ * @version $Id$
+ */
+public class XPath20ParserTokenManager {
+
+ /** Debug output. */
+ public java.io.PrintStream debugStream = System.out;
+
+ /** Set debug output. */
+ public void setDebugStream(java.io.PrintStream ds) {
+ debugStream = ds;
+ }
+
+ private final int jjStopStringLiteralDfa_0(int pos, long active0) {
+ switch (pos) {
+ case 0:
+ if ((active0 & 0x800000L) != 0L)
+ return 23;
+ if ((active0 & 0x400000L) != 0L)
+ return 24;
+ if ((active0 & 0x3cL) != 0L) {
+ jjmatchedKind = 19;
+ return 22;
+ }
+ return -1;
+ case 1:
+ if ((active0 & 0x28L) != 0L)
+ return 22;
+ if ((active0 & 0x400000L) != 0L)
+ return 4;
+ if ((active0 & 0x800000L) != 0L)
+ return 9;
+ if ((active0 & 0x14L) != 0L) {
+ jjmatchedKind = 19;
+ jjmatchedPos = 1;
+ return 22;
+ }
+ return -1;
+ case 2:
+ if ((active0 & 0x4L) != 0L)
+ return 22;
+ if ((active0 & 0x10L) != 0L) {
+ jjmatchedKind = 19;
+ jjmatchedPos = 2;
+ return 22;
+ }
+ return -1;
+ default:
+ return -1;
+ }
+ }
+
+ private final int jjStartNfa_0(int pos, long active0) {
+ return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
+ }
+
+ private int jjStopAtPos(int pos, int kind) {
+ jjmatchedKind = kind;
+ jjmatchedPos = pos;
+ return pos + 1;
+ }
+
+ private int jjMoveStringLiteralDfa0_0() {
+ switch (curChar) {
+ case 10:
+ return jjStopAtPos(0, 25);
+ case 33:
+ return jjMoveStringLiteralDfa1_0(0x1000L);
+ case 34:
+ return jjMoveStringLiteralDfa1_0(0x400000L);
+ case 39:
+ return jjMoveStringLiteralDfa1_0(0x800000L);
+ case 40:
+ return jjStopAtPos(0, 9);
+ case 41:
+ return jjStopAtPos(0, 10);
+ case 58:
+ return jjStopAtPos(0, 6);
+ case 60:
+ jjmatchedKind = 13;
+ return jjMoveStringLiteralDfa1_0(0x8000L);
+ case 61:
+ return jjStopAtPos(0, 11);
+ case 62:
+ jjmatchedKind = 14;
+ return jjMoveStringLiteralDfa1_0(0x10000L);
+ case 63:
+ return jjStopAtPos(0, 8);
+ case 64:
+ return jjStopAtPos(0, 7);
+ case 97:
+ return jjMoveStringLiteralDfa1_0(0x24L);
+ case 99:
+ return jjMoveStringLiteralDfa1_0(0x10L);
+ case 111:
+ return jjMoveStringLiteralDfa1_0(0x8L);
+ default:
+ return jjMoveNfa_0(0, 0);
+ }
+ }
+
+ private int jjMoveStringLiteralDfa1_0(long active0) {
+ try {
+ curChar = input_stream.readChar();
+ } catch (java.io.IOException e) {
+ jjStopStringLiteralDfa_0(0, active0);
+ return 1;
+ }
+ switch (curChar) {
+ case 34:
+ if ((active0 & 0x400000L) != 0L)
+ return jjStartNfaWithStates_0(1, 22, 4);
+ break;
+ case 39:
+ if ((active0 & 0x800000L) != 0L)
+ return jjStartNfaWithStates_0(1, 23, 9);
+ break;
+ case 61:
+ if ((active0 & 0x1000L) != 0L)
+ return jjStopAtPos(1, 12);
+ else if ((active0 & 0x8000L) != 0L)
+ return jjStopAtPos(1, 15);
+ else if ((active0 & 0x10000L) != 0L)
+ return jjStopAtPos(1, 16);
+ break;
+ case 97:
+ return jjMoveStringLiteralDfa2_0(active0, 0x10L);
+ case 110:
+ return jjMoveStringLiteralDfa2_0(active0, 0x4L);
+ case 114:
+ if ((active0 & 0x8L) != 0L)
+ return jjStartNfaWithStates_0(1, 3, 22);
+ break;
+ case 115:
+ if ((active0 & 0x20L) != 0L)
+ return jjStartNfaWithStates_0(1, 5, 22);
+ break;
+ default:
+ break;
+ }
+ return jjStartNfa_0(0, active0);
+ }
+
+ private int jjMoveStringLiteralDfa2_0(long old0, long active0) {
+ if (((active0 &= old0)) == 0L)
+ return jjStartNfa_0(0, old0);
+ try {
+ curChar = input_stream.readChar();
+ } catch (java.io.IOException e) {
+ jjStopStringLiteralDfa_0(1, active0);
+ return 2;
+ }
+ switch (curChar) {
+ case 100:
+ if ((active0 & 0x4L) != 0L)
+ return jjStartNfaWithStates_0(2, 2, 22);
+ break;
+ case 115:
+ return jjMoveStringLiteralDfa3_0(active0, 0x10L);
+ default:
+ break;
+ }
+ return jjStartNfa_0(1, active0);
+ }
+
+ private int jjMoveStringLiteralDfa3_0(long old0, long active0) {
+ if (((active0 &= old0)) == 0L)
+ return jjStartNfa_0(1, old0);
+ try {
+ curChar = input_stream.readChar();
+ } catch (java.io.IOException e) {
+ jjStopStringLiteralDfa_0(2, active0);
+ return 3;
+ }
+ switch (curChar) {
+ case 116:
+ if ((active0 & 0x10L) != 0L)
+ return jjStartNfaWithStates_0(3, 4, 22);
+ break;
+ default:
+ break;
+ }
+ return jjStartNfa_0(2, active0);
+ }
+
+ private int jjStartNfaWithStates_0(int pos, int kind, int state) {
+ jjmatchedKind = kind;
+ jjmatchedPos = pos;
+ try {
+ curChar = input_stream.readChar();
+ } catch (java.io.IOException e) {
+ return pos + 1;
+ }
+ return jjMoveNfa_0(state, pos + 1);
+ }
+
+ static final long[] jjbitVec0 = { 0x0L, 0x0L, 0xffffffffffffffffL,
+ 0xffffffffffffffffL };
+
+ private int jjMoveNfa_0(int startState, int curPos) {
+ int startsAt = 0;
+ jjnewStateCnt = 23;
+ int i = 1;
+ jjstateSet[0] = startState;
+ int kind = 0x7fffffff;
+ for (;;) {
+ if (++jjround == 0x7fffffff)
+ ReInitRounds();
+ if (curChar < 64) {
+ long l = 1L << curChar;
+ do {
+ switch (jjstateSet[--i]) {
+ case 23:
+ if ((0xffffff7fffffffffL & l) != 0L)
+ jjCheckNAddStates(0, 2);
+ else if (curChar == 39) {
+ if (kind > 24)
+ kind = 24;
+ }
+ if (curChar == 39)
+ jjstateSet[jjnewStateCnt++] = 9;
+ break;
+ case 24:
+ if ((0xfffffffbffffffffL & l) != 0L)
+ jjCheckNAddStates(3, 5);
+ else if (curChar == 34) {
+ if (kind > 24)
+ kind = 24;
+ }
+ if (curChar == 34)
+ jjstateSet[jjnewStateCnt++] = 4;
+ break;
+ case 0:
+ if ((0x3ff600000000000L & l) != 0L) {
+ if (kind > 21)
+ kind = 21;
+ } else if (curChar == 39)
+ jjCheckNAddStates(0, 2);
+ else if (curChar == 34)
+ jjCheckNAddStates(3, 5);
+ if ((0x3ff000000000000L & l) != 0L) {
+ if (kind > 17)
+ kind = 17;
+ jjCheckNAddStates(6, 9);
+ } else if (curChar == 46)
+ jjCheckNAdd(1);
+ break;
+ case 1:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 17)
+ kind = 17;
+ jjCheckNAdd(1);
+ break;
+ case 2:
+ if ((0x3ff600000000000L & l) != 0L && kind > 21)
+ kind = 21;
+ break;
+ case 3:
+ case 4:
+ if (curChar == 34)
+ jjCheckNAddStates(3, 5);
+ break;
+ case 5:
+ if (curChar == 34)
+ jjstateSet[jjnewStateCnt++] = 4;
+ break;
+ case 6:
+ if ((0xfffffffbffffffffL & l) != 0L)
+ jjCheckNAddStates(3, 5);
+ break;
+ case 7:
+ if (curChar == 34 && kind > 24)
+ kind = 24;
+ break;
+ case 8:
+ case 9:
+ if (curChar == 39)
+ jjCheckNAddStates(0, 2);
+ break;
+ case 10:
+ if (curChar == 39)
+ jjstateSet[jjnewStateCnt++] = 9;
+ break;
+ case 11:
+ if ((0xffffff7fffffffffL & l) != 0L)
+ jjCheckNAddStates(0, 2);
+ break;
+ case 12:
+ if (curChar == 39 && kind > 24)
+ kind = 24;
+ break;
+ case 13:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 17)
+ kind = 17;
+ jjCheckNAddStates(6, 9);
+ break;
+ case 14:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 17)
+ kind = 17;
+ jjCheckNAddStates(10, 12);
+ break;
+ case 15:
+ if (curChar != 46)
+ break;
+ if (kind > 17)
+ kind = 17;
+ jjCheckNAddTwoStates(16, 17);
+ break;
+ case 16:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 17)
+ kind = 17;
+ jjCheckNAddTwoStates(16, 17);
+ break;
+ case 18:
+ if ((0x280000000000L & l) != 0L)
+ jjCheckNAdd(19);
+ break;
+ case 19:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 17)
+ kind = 17;
+ jjCheckNAdd(19);
+ break;
+ case 20:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 18)
+ kind = 18;
+ jjCheckNAdd(20);
+ break;
+ case 22:
+ if ((0x3ff600000000000L & l) == 0L)
+ break;
+ if (kind > 19)
+ kind = 19;
+ jjstateSet[jjnewStateCnt++] = 22;
+ break;
+ default:
+ break;
+ }
+ } while (i != startsAt);
+ } else if (curChar < 128) {
+ long l = 1L << (curChar & 077);
+ do {
+ switch (jjstateSet[--i]) {
+ case 23:
+ case 11:
+ jjCheckNAddStates(0, 2);
+ break;
+ case 24:
+ case 6:
+ jjCheckNAddStates(3, 5);
+ break;
+ case 0:
+ if ((0x7fffffe87fffffeL & l) != 0L) {
+ if (kind > 19)
+ kind = 19;
+ jjCheckNAdd(22);
+ }
+ if ((0x7fffffe87fffffeL & l) != 0L) {
+ if (kind > 21)
+ kind = 21;
+ }
+ break;
+ case 2:
+ if ((0x7fffffe87fffffeL & l) != 0L && kind > 21)
+ kind = 21;
+ break;
+ case 17:
+ if ((0x2000000020L & l) != 0L)
+ jjAddStates(13, 14);
+ break;
+ case 21:
+ case 22:
+ if ((0x7fffffe87fffffeL & l) == 0L)
+ break;
+ if (kind > 19)
+ kind = 19;
+ jjCheckNAdd(22);
+ break;
+ default:
+ break;
+ }
+ } while (i != startsAt);
+ } else {
+ int i2 = (curChar & 0xff) >> 6;
+ long l2 = 1L << (curChar & 077);
+ do {
+ switch (jjstateSet[--i]) {
+ case 23:
+ case 11:
+ if ((jjbitVec0[i2] & l2) != 0L)
+ jjCheckNAddStates(0, 2);
+ break;
+ case 24:
+ case 6:
+ if ((jjbitVec0[i2] & l2) != 0L)
+ jjCheckNAddStates(3, 5);
+ break;
+ default:
+ break;
+ }
+ } while (i != startsAt);
+ }
+ if (kind != 0x7fffffff) {
+ jjmatchedKind = kind;
+ jjmatchedPos = curPos;
+ kind = 0x7fffffff;
+ }
+ ++curPos;
+ if ((i = jjnewStateCnt) == (startsAt = 23 - (jjnewStateCnt = startsAt)))
+ return curPos;
+ try {
+ curChar = input_stream.readChar();
+ } catch (java.io.IOException e) {
+ return curPos;
+ }
+ }
+ }
+
+ static final int[] jjnextStates = { 10, 11, 12, 5, 6, 7, 14, 15, 17, 20,
+ 14, 15, 17, 18, 19, };
+
+ /** Token literal values. */
+ public static final String[] jjstrLiteralImages = { "", null,
+ "\141\156\144", "\157\162", "\143\141\163\164", "\141\163", "\72",
+ "\100", "\77", "\50", "\51", "\75", "\41\75", "\74", "\76",
+ "\74\75", "\76\75", null, null, null, null, null, "\42\42",
+ "\47\47", null, "\12", };
+
+ /** Lexer state names. */
+ public static final String[] lexStateNames = { "DEFAULT", };
+ static final long[] jjtoToken = { 0x3fffffdL, };
+ static final long[] jjtoSkip = { 0x2L, };
+ protected SimpleCharStream input_stream;
+ private final int[] jjrounds = new int[23];
+ private final int[] jjstateSet = new int[46];
+ protected char curChar;
+
+ /** Constructor. */
+ public XPath20ParserTokenManager(SimpleCharStream stream) {
+ if (SimpleCharStream.staticFlag)
+ throw new Error(
+ "ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+ input_stream = stream;
+ }
+
+ /** Constructor. */
+ public XPath20ParserTokenManager(SimpleCharStream stream, int lexState) throws XPathException {
+ this(stream);
+ SwitchTo(lexState);
+ }
+
+ /** Reinitialise parser. */
+ public void ReInit(SimpleCharStream stream) {
+ jjmatchedPos = jjnewStateCnt = 0;
+ curLexState = defaultLexState;
+ input_stream = stream;
+ ReInitRounds();
+ }
+
+ private void ReInitRounds() {
+ int i;
+ jjround = 0x80000001;
+ for (i = 23; i-- > 0;)
+ jjrounds[i] = 0x80000000;
+ }
+
+ /** Reinitialise parser. */
+ public void ReInit(SimpleCharStream stream, int lexState) throws XPathException {
+ ReInit(stream);
+ SwitchTo(lexState);
+ }
+
+ /** Switch to specified lex state. */
+ public void SwitchTo(int lexState) throws XPathException {
+ if (lexState >= 1 || lexState < 0)
+ throw new XPathException("c-general-xpath");
+ else
+ curLexState = lexState;
+ }
+
+ protected Token jjFillToken() {
+ final Token t;
+ final String curTokenImage;
+ final int beginLine;
+ final int endLine;
+ final int beginColumn;
+ final int endColumn;
+ String im = jjstrLiteralImages[jjmatchedKind];
+ curTokenImage = (im == null) ? input_stream.GetImage() : im;
+ beginLine = input_stream.getBeginLine();
+ beginColumn = input_stream.getBeginColumn();
+ endLine = input_stream.getEndLine();
+ endColumn = input_stream.getEndColumn();
+ t = Token.newToken(jjmatchedKind, curTokenImage);
+
+ t.beginLine = beginLine;
+ t.endLine = endLine;
+ t.beginColumn = beginColumn;
+ t.endColumn = endColumn;
+
+ return t;
+ }
+
+ int curLexState = 0;
+ int defaultLexState = 0;
+ int jjnewStateCnt;
+ int jjround;
+ int jjmatchedPos;
+ int jjmatchedKind;
+
+ /** Get the next Token. */
+ public Token getNextToken() throws XPathException {
+ Token matchedToken;
+ int curPos = 0;
+
+ EOFLoop: for (;;) {
+ try {
+ curChar = input_stream.BeginToken();
+ } catch (java.io.IOException e) {
+ jjmatchedKind = 0;
+ matchedToken = jjFillToken();
+ return matchedToken;
+ }
+
+ try {
+ input_stream.backup(0);
+ while (curChar <= 32 && (0x100000000L & (1L << curChar)) != 0L)
+ curChar = input_stream.BeginToken();
+ } catch (java.io.IOException e1) {
+ continue EOFLoop;
+ }
+ jjmatchedKind = 0x7fffffff;
+ jjmatchedPos = 0;
+ curPos = jjMoveStringLiteralDfa0_0();
+ if (jjmatchedKind != 0x7fffffff) {
+ if (jjmatchedPos + 1 < curPos)
+ input_stream.backup(curPos - jjmatchedPos - 1);
+ if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) {
+ matchedToken = jjFillToken();
+ return matchedToken;
+ } else {
+ continue EOFLoop;
+ }
+ }
+ int error_line = input_stream.getEndLine();
+ int error_column = input_stream.getEndColumn();
+ boolean EOFSeen = false;
+ try {
+ input_stream.readChar();
+ input_stream.backup(1);
+ } catch (java.io.IOException e1) {
+ EOFSeen = true;
+ if (curChar == '\n' || curChar == '\r') {
+ error_line++;
+ error_column = 0;
+ } else
+ error_column++;
+ }
+ if (!EOFSeen) {
+ input_stream.backup(1);
+ }
+ throw new XPathException("c-general-xpath");
+ }
+ }
+
+ private void jjCheckNAdd(int state) {
+ if (jjrounds[state] != jjround) {
+ jjstateSet[jjnewStateCnt++] = state;
+ jjrounds[state] = jjround;
+ }
+ }
+
+ private void jjAddStates(int start, int end) {
+ do {
+ jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+ } while (start++ != end);
+ }
+
+ private void jjCheckNAddTwoStates(int state1, int state2) {
+ jjCheckNAdd(state1);
+ jjCheckNAdd(state2);
+ }
+
+ private void jjCheckNAddStates(int start, int end) {
+ do {
+ jjCheckNAdd(jjnextStates[start]);
+ } while (start++ != end);
+ }
+
+}
Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20ParserTokenManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xpath/XPath20ParserTokenManager.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=758138&r1=758137&r2=758138&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java Wed Mar 25 04:15:15 2009
@@ -2021,6 +2021,30 @@
}
}
+ //process type alternatives
+ if (fTypeAlternativesChecking && fCurrentElemDecl != null) {
+ boolean typeSelected = false;
+ XSTypeAlternativeImpl[] alternatives = fCurrentElemDecl.getTypeAlternatives();
+ if (alternatives != null) {
+ for (int i = 0; i < alternatives.length; i++) {
+ Test test = alternatives[i].getTest();
+ if (test != null && test.evaluateTest(element, attributes)) {
+ fCurrentType = alternatives[i].getTypeDefinition();
+ typeSelected = true;
+ break;
+ }
+
+ }
+ //if a type is not selected try to assign the default type
+ if (!typeSelected) {
+ XSTypeAlternativeImpl defType = fCurrentElemDecl.getDefaultTypeDefinition();
+ if (defType != null) {
+ fCurrentType = defType.getTypeDefinition();
+ }
+ }
+ }
+ }
+
// if there was no processor stipulated type
if (fCurrentType == null) {
// try again to get the element decl:
@@ -2252,29 +2276,6 @@
matcher.startElement( element, attributes);
}
- //process type alternatives
- if (fTypeAlternativesChecking && fCurrentElemDecl != null) {
- boolean typeSelected = false;
- XSTypeAlternativeImpl[] alternatives = fCurrentElemDecl.getTypeAlternatives();
- if (alternatives != null) {
- for (int i = 0; i < alternatives.length; i++) {
- Test test = alternatives[i].getTest();
- if (test != null && test.evaluateTest(element, attributes)) {
- fCurrentType = alternatives[i].getTypeDefinition();
- typeSelected = true;
- break;
- }
- }
- //if a type is not selected try to assign the default type
- if (!typeSelected) {
- XSTypeAlternativeImpl defType = fCurrentElemDecl.getDefaultTypeDefinition();
- if (defType != null) {
- fCurrentType = defType.getTypeDefinition();
- }
- }
- }
- }
-
if (fAugPSVI) {
augs = getEmptyAugs(augs);
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java?rev=758138&r1=758137&r2=758138&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java Wed Mar 25 04:15:15 2009
@@ -53,9 +53,8 @@
/** Evaluate the test expression with respect to the specified element and its attributes */
public boolean evaluateTest(QName element, XMLAttributes attributes) {
if (fXPath != null) {
- return fXPath.traverseTree(element, attributes);
- }
- else {
+ return fXPath.evaluateTest(element, attributes);
+ } else {
return false;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org