📄 xpathparser.java
字号:
throws java.io.IOException, yyException {//t this.yydebug = (jay.yydebug.yyDebug)yydebug; return yyparse(yyLex); } /** initial size and increment of the state/value stack [default 256]. This is not final so that it can be overwritten outside of invocations of yyparse(). */ protected int yyMax; /** executed at the beginning of a reduce action. Used as $$ = yyDefault($1), prior to the user-specified action, if any. Can be overwritten to provide deep copy, etc. @param first value for $1, or null. @return first. */ protected Object yyDefault (Object first) { return first; } /** the generated parser. Maintains a state and a value stack, currently with fixed maximum size. @param yyLex scanner. @return result of the last reduction, if any. @throws yyException on irrecoverable parse error. */ public Object yyparse (yyInput yyLex) throws java.io.IOException, yyException { if (yyMax <= 0) yyMax = 256; // initial size int yyState = 0, yyStates[] = new int[yyMax]; // state stack Object yyVal = null, yyVals[] = new Object[yyMax]; // value stack int yyToken = -1; // current input int yyErrorFlag = 0; // #tks to shift yyLoop: for (int yyTop = 0;; ++ yyTop) { if (yyTop >= yyStates.length) { // dynamically increase int[] i = new int[yyStates.length+yyMax]; System.arraycopy(yyStates, 0, i, 0, yyStates.length); yyStates = i; Object[] o = new Object[yyVals.length+yyMax]; System.arraycopy(yyVals, 0, o, 0, yyVals.length); yyVals = o; } yyStates[yyTop] = yyState; yyVals[yyTop] = yyVal;//t if (yydebug != null) yydebug.push(yyState, yyVal); yyDiscarded: for (;;) { // discarding a token does not change stack int yyN; if ((yyN = YyDefRedClass.yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0;//t if (yydebug != null)//t yydebug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); } if ((yyN = YySindexClass.yySindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyToken) {//t if (yydebug != null)//t yydebug.shift(yyState, YyTableClass.yyTable[yyN], yyErrorFlag-1); yyState = YyTableClass.yyTable[yyN]; // shift to yyN yyVal = yyLex.value(); yyToken = -1; if (yyErrorFlag > 0) -- yyErrorFlag; continue yyLoop; } if ((yyN = YyRindexClass.yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyToken) yyN = YyTableClass.yyTable[yyN]; // reduce (yyN) else switch (yyErrorFlag) { case 0: yyerror("syntax error", yyExpecting(yyState));//t if (yydebug != null) yydebug.error("syntax error"); case 1: case 2: yyErrorFlag = 3; do { if ((yyN = YySindexClass.yySindex[yyStates[yyTop]]) != 0 && (yyN += yyErrorCode) >= 0 && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyErrorCode) {//t if (yydebug != null)//t yydebug.shift(yyStates[yyTop], YyTableClass.yyTable[yyN], 3); yyState = YyTableClass.yyTable[yyN]; yyVal = yyLex.value(); continue yyLoop; }//t if (yydebug != null) yydebug.pop(yyStates[yyTop]); } while (-- yyTop >= 0);//t if (yydebug != null) yydebug.reject(); throw new yyException("irrecoverable syntax error"); case 3: if (yyToken == 0) {//t if (yydebug != null) yydebug.reject(); throw new yyException("irrecoverable syntax error at end-of-file"); }//t if (yydebug != null)//t yydebug.discard(yyState, yyToken, yyname(yyToken),//t yyLex.value()); yyToken = -1; continue yyDiscarded; // leave stack alone } } int yyV = yyTop + 1-YyLenClass.yyLen[yyN];//t if (yydebug != null)//t yydebug.reduce(yyState, yyStates[yyV-1], yyN, YyRuleClass.yyRule[yyN], YyLenClass.yyLen[yyN]); yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) {case 4: // line 277 "XPathParser.y" { yyVal = new Root(); } break;case 5: // line 281 "XPathParser.y" { Steps steps; if (yyVals[0+yyTop] instanceof Steps) { steps = (Steps) yyVals[0+yyTop]; } else { steps = new Steps(); steps.path.addFirst(yyVals[0+yyTop]); } steps.path.addFirst(new Root()); yyVal = steps; /*$$ = new Step(new Root(), (Path) $2);*/ } break;case 6: // line 297 "XPathParser.y" { Test nt = new NodeTypeTest((short) 0); Selector s = new Selector(Selector.DESCENDANT_OR_SELF, Collections.singletonList (nt)); Steps steps; if (yyVals[0+yyTop] instanceof Steps) { steps = (Steps) yyVals[0+yyTop]; } else { steps = new Steps(); steps.path.addFirst(yyVals[0+yyTop]); } steps.path.addFirst(s); steps.path.addFirst(new Root()); yyVal = steps; /*Step step = new Step(s, (Path) $2);*/ /*$$ = new Step(new Root(), step);*/ } break;case 8: // line 322 "XPathParser.y" { Steps steps; if (yyVals[-2+yyTop] instanceof Steps) { steps = (Steps) yyVals[-2+yyTop]; } else { steps = new Steps(); steps.path.addFirst(yyVals[-2+yyTop]); } steps.path.addLast(yyVals[0+yyTop]); yyVal = steps; /*$$ = new Step((Expr) $1, (Path) $3);*/ } break;case 9: // line 338 "XPathParser.y" { Test nt = new NodeTypeTest((short) 0); Selector s = new Selector(Selector.DESCENDANT_OR_SELF, Collections.singletonList (nt)); Steps steps; if (yyVals[-2+yyTop] instanceof Steps) { steps = (Steps) yyVals[-2+yyTop]; } else { steps = new Steps(); steps.path.addFirst(yyVals[-2+yyTop]); } steps.path.addLast(s); steps.path.addLast(yyVals[0+yyTop]); yyVal = steps; /*Step step = new Step(s, (Path) $3);*/ /*$$ = new Step((Expr) $1, step);*/ } break;case 10: // line 362 "XPathParser.y" { yyVal = new Selector (Selector.CHILD, (List) yyVals[0+yyTop]); } break;case 11: // line 366 "XPathParser.y" { yyVal = new Selector (Selector.ATTRIBUTE, (List) yyVals[0+yyTop]); } break;case 12: // line 370 "XPathParser.y" { yyVal = new Selector (((Integer) yyVals[-2+yyTop]).intValue (), (List) yyVals[0+yyTop]); } break;case 13: // line 374 "XPathParser.y" { yyVal = new Selector (Selector.SELF, Collections.EMPTY_LIST); } break;case 14: // line 378 "XPathParser.y" { yyVal = new Selector (Selector.PARENT, Collections.EMPTY_LIST); } break;case 15: // line 385 "XPathParser.y" { List list = new ArrayList(); list.add(yyVals[0+yyTop]); yyVal = list; } break;case 16: // line 391 "XPathParser.y" { List list = (List)yyVals[-1+yyTop]; list.add(yyVals[0+yyTop]); yyVal = list; } break;case 17: // line 415 "XPathParser.y" { yyVal = new Integer(Selector.ANCESTOR); } break;case 18: // line 419 "XPathParser.y" { yyVal = new Integer(Selector.ANCESTOR_OR_SELF); } break;case 19: // line 423 "XPathParser.y" { yyVal = new Integer(Selector.ATTRIBUTE); } break;case 20: // line 427 "XPathParser.y" { yyVal = new Integer(Selector.CHILD); } break;case 21: // line 431 "XPathParser.y" { yyVal = new Integer(Selector.DESCENDANT); } break;case 22: // line 435 "XPathParser.y" { yyVal = new Integer(Selector.DESCENDANT_OR_SELF); } break;case 23: // line 439 "XPathParser.y" { yyVal = new Integer(Selector.FOLLOWING); } break;case 24: // line 443 "XPathParser.y" { yyVal = new Integer(Selector.FOLLOWING_SIBLING); } break;case 25: // line 447 "XPathParser.y" { yyVal = new Integer(Selector.NAMESPACE); } break;case 26: // line 451 "XPathParser.y" { yyVal = new Integer(Selector.PARENT); } break;case 27: // line 455 "XPathParser.y" { yyVal = new Integer(Selector.PRECEDING); } break;case 28: // line 459 "XPathParser.y" { yyVal = new Integer(Selector.PRECEDING_SIBLING); } break;case 29: // line 463 "XPathParser.y" { yyVal = new Integer(Selector.SELF); } break;case 31: // line 472 "XPathParser.y" { yyVal = new NodeTypeTest(Node.PROCESSING_INSTRUCTION_NODE, (String) yyVals[-1+yyTop]); } break;case 32: // line 477 "XPathParser.y" { yyVal = new NodeTypeTest(((Short) yyVals[-1+yyTop]).shortValue()); } break;case 33: // line 484 "XPathParser.y" { yyVal = new Predicate((Expr) yyVals[-1+yyTop]); } break;case 35: // line 492 "XPathParser.y" { yyVal = new ParenthesizedExpr((Expr) yyVals[-1+yyTop]); } break;case 36: // line 496 "XPathParser.y" { yyVal = new Constant(yyVals[0+yyTop]); } break;case 37: // line 500 "XPathParser.y" { yyVal = new Constant(yyVals[0+yyTop]); } break;case 39: // line 508 "XPathParser.y" { yyVal = lookupFunction((String) yyVals[-2+yyTop], Collections.EMPTY_LIST); } break;case 40: // line 512 "XPathParser.y" {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -