Parser.cs 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085
  1. // created by jay 0.7 (c) 1998 [email protected]
  2. // line 2 "Parser.jay"
  3. // XPath parser
  4. //
  5. // Author - Piers Haken <[email protected]>
  6. //
  7. // TODO: FUNCTION_CALL should be a QName, not just a NCName
  8. // TODO: PROCESSING_INSTRUCTION's optional parameter
  9. // TODO: flatten argument/predicate lists in place
  10. using System;
  11. using System.Xml.XPath;
  12. namespace Mono.Xml.XPath
  13. {
  14. public class XPathParser
  15. {
  16. internal object yyparseDebug (Tokenizer tok)
  17. {
  18. return yyparse (tok, new yydebug.yyDebugSimple ());
  19. }
  20. // line 27 "-"
  21. /** simplified error message.
  22. @see <a href="#yyerror(java.lang.String, java.lang.String[])">yyerror</a>
  23. */
  24. public void yyerror (string message) {
  25. yyerror(message, null);
  26. }
  27. /** (syntax) error message.
  28. Can be overwritten to control message format.
  29. @param message text to be displayed.
  30. @param expected vector of acceptable tokens, if available.
  31. */
  32. public void yyerror (string message, string[] expected) {
  33. if ((expected != null) && (expected.Length > 0)) {
  34. System.Console.Write (message+", expecting");
  35. for (int n = 0; n < expected.Length; ++ n)
  36. System.Console.Write (" "+expected[n]);
  37. System.Console.WriteLine ();
  38. } else
  39. System.Console.WriteLine (message);
  40. }
  41. /** debugging support, requires the package jay.yydebug.
  42. Set to null to suppress debugging messages.
  43. */
  44. protected yydebug.yyDebug debug;
  45. protected static int yyFinal = 25;
  46. public static string [] yyRule = {
  47. "$accept : Expr",
  48. "Expr : OrExpr",
  49. "OrExpr : AndExpr",
  50. "OrExpr : OrExpr OR AndExpr",
  51. "AndExpr : EqualityExpr",
  52. "AndExpr : AndExpr AND EqualityExpr",
  53. "EqualityExpr : RelationalExpr",
  54. "EqualityExpr : EqualityExpr EQ RelationalExpr",
  55. "EqualityExpr : EqualityExpr NE RelationalExpr",
  56. "RelationalExpr : AdditiveExpr",
  57. "RelationalExpr : RelationalExpr LT AdditiveExpr",
  58. "RelationalExpr : RelationalExpr GT AdditiveExpr",
  59. "RelationalExpr : RelationalExpr LE AdditiveExpr",
  60. "RelationalExpr : RelationalExpr GE AdditiveExpr",
  61. "AdditiveExpr : MultiplicativeExpr",
  62. "AdditiveExpr : AdditiveExpr PLUS MultiplicativeExpr",
  63. "AdditiveExpr : AdditiveExpr MINUS MultiplicativeExpr",
  64. "MultiplicativeExpr : UnaryExpr",
  65. "MultiplicativeExpr : MultiplicativeExpr ASTERISK UnaryExpr",
  66. "MultiplicativeExpr : MultiplicativeExpr DIV UnaryExpr",
  67. "MultiplicativeExpr : MultiplicativeExpr MOD UnaryExpr",
  68. "UnaryExpr : UnionExpr",
  69. "UnaryExpr : MINUS UnaryExpr",
  70. "UnionExpr : PathExpr",
  71. "UnionExpr : UnionExpr BAR PathExpr",
  72. "PathExpr : RelativeLocationPath",
  73. "PathExpr : SLASH",
  74. "PathExpr : SLASH RelativeLocationPath",
  75. "PathExpr : SLASH2 RelativeLocationPath",
  76. "PathExpr : FilterExpr",
  77. "PathExpr : FilterExpr SLASH RelativeLocationPath",
  78. "PathExpr : FilterExpr SLASH2 RelativeLocationPath",
  79. "RelativeLocationPath : Step",
  80. "RelativeLocationPath : RelativeLocationPath SLASH Step",
  81. "RelativeLocationPath : RelativeLocationPath SLASH2 Step",
  82. "Step : AxisSpecifier QName ZeroOrMorePredicates",
  83. "Step : AxisSpecifier ASTERISK ZeroOrMorePredicates",
  84. "Step : AxisSpecifier NodeType PAREN_OPEN OptionalLiteral PAREN_CLOSE ZeroOrMorePredicates",
  85. "Step : DOT",
  86. "Step : DOT2",
  87. "AxisSpecifier :",
  88. "AxisSpecifier : AT",
  89. "AxisSpecifier : AxisName COLON2",
  90. "NodeType : COMMENT",
  91. "NodeType : TEXT",
  92. "NodeType : PROCESSING_INSTRUCTION",
  93. "NodeType : NODE",
  94. "FilterExpr : PrimaryExpr",
  95. "FilterExpr : FilterExpr Predicate",
  96. "PrimaryExpr : DOLLAR QName",
  97. "PrimaryExpr : PAREN_OPEN Expr PAREN_CLOSE",
  98. "PrimaryExpr : LITERAL",
  99. "PrimaryExpr : NUMBER",
  100. "PrimaryExpr : FunctionCall",
  101. "FunctionCall : FUNCTION_NAME PAREN_OPEN OptionalArgumentList PAREN_CLOSE",
  102. "OptionalArgumentList :",
  103. "OptionalArgumentList : Expr OptionalArgumentListTail",
  104. "OptionalArgumentListTail :",
  105. "OptionalArgumentListTail : COMMA Expr OptionalArgumentListTail",
  106. "ZeroOrMorePredicates :",
  107. "ZeroOrMorePredicates : Predicate ZeroOrMorePredicates",
  108. "Predicate : BRACKET_OPEN Expr BRACKET_CLOSE",
  109. "AxisName : ANCESTOR",
  110. "AxisName : ANCESTOR_OR_SELF",
  111. "AxisName : ATTRIBUTE",
  112. "AxisName : CHILD",
  113. "AxisName : DESCENDANT",
  114. "AxisName : DESCENDANT_OR_SELF",
  115. "AxisName : FOLLOWING",
  116. "AxisName : FOLLOWING_SIBLING",
  117. "AxisName : NAMESPACE",
  118. "AxisName : PARENT",
  119. "AxisName : PRECEDING",
  120. "AxisName : PRECEDING_SIBLING",
  121. "AxisName : SELF",
  122. "OptionalLiteral :",
  123. "OptionalLiteral : LITERAL",
  124. "QName : NCName",
  125. "QName : NCName COLON ASTERISK",
  126. "QName : NCName COLON NCName",
  127. };
  128. protected static string [] yyName = {
  129. "end-of-file",null,null,null,null,null,null,null,null,null,null,null,
  130. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  131. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  132. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  133. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  134. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  135. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  136. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  137. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  138. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  139. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  140. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  141. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  142. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  143. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  144. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  145. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  146. null,null,null,null,null,null,null,null,null,null,null,null,null,null,
  147. null,null,null,null,null,null,null,"ERROR","EOF","SLASH","SLASH2",
  148. "DOT","DOT2","COLON","COLON2","COMMA","AT","FUNCTION_NAME",
  149. "BRACKET_OPEN","BRACKET_CLOSE","PAREN_OPEN","PAREN_CLOSE","AND","OR",
  150. "DIV","MOD","PLUS","MINUS","ASTERISK","DOLLAR","BAR","EQ","NE","LE",
  151. "GE","LT","GT","ANCESTOR","ANCESTOR_OR_SELF","ATTRIBUTE","CHILD",
  152. "DESCENDANT","DESCENDANT_OR_SELF","FOLLOWING","FOLLOWING_SIBLING",
  153. "NAMESPACE","PARENT","PRECEDING","PRECEDING_SIBLING","SELF","COMMENT",
  154. "TEXT","PROCESSING_INSTRUCTION","NODE","NUMBER","LITERAL","NCName",
  155. };
  156. /** index-checked interface to yyName[].
  157. @param token single character or %token value.
  158. @return token name or [illegal] or [unknown].
  159. */
  160. public static string yyname (int token) {
  161. if ((token < 0) || (token > yyName.Length)) return "[illegal]";
  162. string name;
  163. if ((name = yyName[token]) != null) return name;
  164. return "[unknown]";
  165. }
  166. /** computes list of expected tokens on error by tracing the tables.
  167. @param state for which to compute the list.
  168. @return list of token names.
  169. */
  170. protected string[] yyExpecting (int state) {
  171. int token, n, len = 0;
  172. bool[] ok = new bool[yyName.Length];
  173. if ((n = yySindex[state]) != 0)
  174. for (token = n < 0 ? -n : 0;
  175. (token < yyName.Length) && (n+token < yyTable.Length); ++ token)
  176. if (yyCheck[n+token] == token && !ok[token] && yyName[token] != null) {
  177. ++ len;
  178. ok[token] = true;
  179. }
  180. if ((n = yyRindex[state]) != 0)
  181. for (token = n < 0 ? -n : 0;
  182. (token < yyName.Length) && (n+token < yyTable.Length); ++ token)
  183. if (yyCheck[n+token] == token && !ok[token] && yyName[token] != null) {
  184. ++ len;
  185. ok[token] = true;
  186. }
  187. string [] result = new string[len];
  188. for (n = token = 0; n < len; ++ token)
  189. if (ok[token]) result[n++] = yyName[token];
  190. return result;
  191. }
  192. /** the generated parser, with debugging messages.
  193. Maintains a state and a value stack, currently with fixed maximum size.
  194. @param yyLex scanner.
  195. @param yydebug debug message writer implementing yyDebug, or null.
  196. @return result of the last reduction, if any.
  197. @throws yyException on irrecoverable parse error.
  198. */
  199. public Object yyparse (yyParser.yyInput yyLex, Object yyd)
  200. {
  201. this.debug = (yydebug.yyDebug)yyd;
  202. return yyparse(yyLex);
  203. }
  204. /** initial size and increment of the state/value stack [default 256].
  205. This is not final so that it can be overwritten outside of invocations
  206. of yyparse().
  207. */
  208. protected int yyMax;
  209. /** executed at the beginning of a reduce action.
  210. Used as $$ = yyDefault($1), prior to the user-specified action, if any.
  211. Can be overwritten to provide deep copy, etc.
  212. @param first value for $1, or null.
  213. @return first.
  214. */
  215. protected Object yyDefault (Object first) {
  216. return first;
  217. }
  218. /** the generated parser.
  219. Maintains a state and a value stack, currently with fixed maximum size.
  220. @param yyLex scanner.
  221. @return result of the last reduction, if any.
  222. @throws yyException on irrecoverable parse error.
  223. */
  224. public Object yyparse (yyParser.yyInput yyLex)
  225. {
  226. if (yyMax <= 0) yyMax = 256; // initial size
  227. int yyState = 0; // state stack ptr
  228. int [] yyStates = new int[yyMax]; // state stack
  229. Object yyVal = null; // value stack ptr
  230. Object [] yyVals = new Object[yyMax]; // value stack
  231. int yyToken = -1; // current input
  232. int yyErrorFlag = 0; // #tks to shift
  233. int yyTop = 0;
  234. goto skip;
  235. yyLoop:
  236. yyTop++;
  237. skip:
  238. for (;; ++ yyTop) {
  239. if (yyTop >= yyStates.Length) { // dynamically increase
  240. int[] i = new int[yyStates.Length+yyMax];
  241. System.Array.Copy(yyStates, i, 0);
  242. yyStates = i;
  243. Object[] o = new Object[yyVals.Length+yyMax];
  244. System.Array.Copy(yyVals, o, 0);
  245. yyVals = o;
  246. }
  247. yyStates[yyTop] = yyState;
  248. yyVals[yyTop] = yyVal;
  249. if (debug != null) debug.push(yyState, yyVal);
  250. yyDiscarded: for (;;) { // discarding a token does not change stack
  251. int yyN;
  252. if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN)
  253. if (yyToken < 0) {
  254. yyToken = yyLex.advance() ? yyLex.token() : 0;
  255. if (debug != null)
  256. debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value());
  257. }
  258. if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0)
  259. && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) {
  260. if (debug != null)
  261. debug.shift(yyState, yyTable[yyN], yyErrorFlag-1);
  262. yyState = yyTable[yyN]; // shift to yyN
  263. yyVal = yyLex.value();
  264. yyToken = -1;
  265. if (yyErrorFlag > 0) -- yyErrorFlag;
  266. goto yyLoop;
  267. }
  268. if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
  269. && yyN < yyTable.Length && yyCheck[yyN] == yyToken)
  270. yyN = yyTable[yyN]; // reduce (yyN)
  271. else
  272. switch (yyErrorFlag) {
  273. case 0:
  274. yyerror("syntax error", yyExpecting(yyState));
  275. if (debug != null) debug.error("syntax error");
  276. goto case 1;
  277. case 1: case 2:
  278. yyErrorFlag = 3;
  279. do {
  280. if ((yyN = yySindex[yyStates[yyTop]]) != 0
  281. && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length
  282. && yyCheck[yyN] == Token.yyErrorCode) {
  283. if (debug != null)
  284. debug.shift(yyStates[yyTop], yyTable[yyN], 3);
  285. yyState = yyTable[yyN];
  286. yyVal = yyLex.value();
  287. goto yyLoop;
  288. }
  289. if (debug != null) debug.pop(yyStates[yyTop]);
  290. } while (-- yyTop >= 0);
  291. if (debug != null) debug.reject();
  292. throw new yyParser.yyException("irrecoverable syntax error");
  293. case 3:
  294. if (yyToken == 0) {
  295. if (debug != null) debug.reject();
  296. throw new yyParser.yyException("irrecoverable syntax error at end-of-file");
  297. }
  298. if (debug != null)
  299. debug.discard(yyState, yyToken, yyname(yyToken),
  300. yyLex.value());
  301. yyToken = -1;
  302. goto yyDiscarded; // leave stack alone
  303. }
  304. }
  305. int yyV = yyTop + 1-yyLen[yyN];
  306. if (debug != null)
  307. debug.reduce(yyState, yyStates[yyV-1], yyN, yyRule[yyN], yyLen[yyN]);
  308. yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
  309. switch (yyN) {
  310. case 3:
  311. // line 112 "Parser.jay"
  312. {
  313. yyVal = new ExprOR ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  314. }
  315. break;
  316. case 5:
  317. // line 120 "Parser.jay"
  318. {
  319. yyVal = new ExprAND ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  320. }
  321. break;
  322. case 7:
  323. // line 128 "Parser.jay"
  324. {
  325. yyVal = new ExprEQ ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  326. }
  327. break;
  328. case 8:
  329. // line 132 "Parser.jay"
  330. {
  331. yyVal = new ExprNE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  332. }
  333. break;
  334. case 10:
  335. // line 140 "Parser.jay"
  336. {
  337. yyVal = new ExprLT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  338. }
  339. break;
  340. case 11:
  341. // line 144 "Parser.jay"
  342. {
  343. yyVal = new ExprGT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  344. }
  345. break;
  346. case 12:
  347. // line 148 "Parser.jay"
  348. {
  349. yyVal = new ExprLE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  350. }
  351. break;
  352. case 13:
  353. // line 152 "Parser.jay"
  354. {
  355. yyVal = new ExprGE ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  356. }
  357. break;
  358. case 15:
  359. // line 160 "Parser.jay"
  360. {
  361. yyVal = new ExprPLUS ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  362. }
  363. break;
  364. case 16:
  365. // line 164 "Parser.jay"
  366. {
  367. yyVal = new ExprMINUS ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  368. }
  369. break;
  370. case 18:
  371. // line 172 "Parser.jay"
  372. {
  373. yyVal = new ExprMULT ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  374. }
  375. break;
  376. case 19:
  377. // line 176 "Parser.jay"
  378. {
  379. yyVal = new ExprDIV ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  380. }
  381. break;
  382. case 20:
  383. // line 180 "Parser.jay"
  384. {
  385. yyVal = new ExprMOD ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]);
  386. }
  387. break;
  388. case 22:
  389. // line 188 "Parser.jay"
  390. {
  391. yyVal = new ExprNEG ((Expression) yyVals[0+yyTop]);
  392. }
  393. break;
  394. case 24:
  395. // line 196 "Parser.jay"
  396. {
  397. yyVal = new ExprUNION ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]);
  398. }
  399. break;
  400. case 26:
  401. // line 204 "Parser.jay"
  402. {
  403. yyVal = new ExprRoot ();
  404. }
  405. break;
  406. case 27:
  407. // line 208 "Parser.jay"
  408. {
  409. yyVal = new ExprSLASH (new ExprRoot (), (NodeSet) yyVals[0+yyTop]);
  410. }
  411. break;
  412. case 28:
  413. // line 212 "Parser.jay"
  414. {
  415. ExprStep exprStep = new ExprStep (new NodeTypeTest (Axes.DescendantOrSelf, XPathNodeType.All));
  416. yyVal = new ExprSLASH (new ExprSLASH (new ExprRoot (), exprStep), (NodeSet) yyVals[0+yyTop]);
  417. }
  418. break;
  419. case 30:
  420. // line 218 "Parser.jay"
  421. {
  422. yyVal = new ExprSLASH ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]);
  423. }
  424. break;
  425. case 31:
  426. // line 222 "Parser.jay"
  427. {
  428. ExprStep exprStep = new ExprStep (new NodeTypeTest (Axes.DescendantOrSelf, XPathNodeType.All));
  429. yyVal = new ExprSLASH (new ExprSLASH ((NodeSet) yyVals[-2+yyTop], exprStep), (NodeSet) yyVals[0+yyTop]);
  430. }
  431. break;
  432. case 33:
  433. // line 231 "Parser.jay"
  434. {
  435. yyVal = new ExprSLASH ((NodeSet) yyVals[-2+yyTop], (NodeSet) yyVals[0+yyTop]);
  436. }
  437. break;
  438. case 34:
  439. // line 235 "Parser.jay"
  440. {
  441. ExprStep exprStep = new ExprStep (new NodeTypeTest (Axes.DescendantOrSelf, XPathNodeType.All));
  442. yyVal = new ExprSLASH (new ExprSLASH ((NodeSet) yyVals[-2+yyTop], exprStep), (NodeSet) yyVals[0+yyTop]);
  443. }
  444. break;
  445. case 35:
  446. // line 243 "Parser.jay"
  447. {
  448. yyVal = new ExprStep (new NodeNameTest ((Axes) yyVals[-2+yyTop], (QName) yyVals[-1+yyTop]), (ExprPredicates) yyVals[0+yyTop]);
  449. }
  450. break;
  451. case 36:
  452. // line 247 "Parser.jay"
  453. {
  454. yyVal = new ExprStep (new NodeTypeTest ((Axes) yyVals[-2+yyTop]), (ExprPredicates) yyVals[0+yyTop]);
  455. }
  456. break;
  457. case 37:
  458. // line 256 "Parser.jay"
  459. {
  460. yyVal = new ExprStep (new NodeTypeTest ((Axes) yyVals[-5+yyTop], (XPathNodeType) yyVals[-4+yyTop], (String) yyVals[-2+yyTop]), (ExprPredicates) yyVals[0+yyTop]);
  461. }
  462. break;
  463. case 38:
  464. // line 260 "Parser.jay"
  465. {
  466. yyVal = new ExprStep (new NodeTypeTest (Axes.Self, XPathNodeType.All));
  467. }
  468. break;
  469. case 39:
  470. // line 264 "Parser.jay"
  471. {
  472. yyVal = new ExprStep (new NodeTypeTest (Axes.Parent, XPathNodeType.All));
  473. }
  474. break;
  475. case 40:
  476. // line 271 "Parser.jay"
  477. {
  478. yyVal = Axes.Child;
  479. }
  480. break;
  481. case 41:
  482. // line 275 "Parser.jay"
  483. {
  484. yyVal = Axes.Attribute;
  485. }
  486. break;
  487. case 42:
  488. // line 279 "Parser.jay"
  489. {
  490. yyVal = yyVals[-1+yyTop];
  491. }
  492. break;
  493. case 43:
  494. // line 285 "Parser.jay"
  495. { yyVal = XPathNodeType.Comment; }
  496. break;
  497. case 44:
  498. // line 286 "Parser.jay"
  499. { yyVal = XPathNodeType.Text; }
  500. break;
  501. case 45:
  502. // line 287 "Parser.jay"
  503. { yyVal = XPathNodeType.ProcessingInstruction; }
  504. break;
  505. case 46:
  506. // line 288 "Parser.jay"
  507. { yyVal = XPathNodeType.All; }
  508. break;
  509. case 48:
  510. // line 295 "Parser.jay"
  511. {
  512. yyVal = new ExprFilter ((Expression) yyVals[-1+yyTop], (Expression) yyVals[0+yyTop]);
  513. }
  514. break;
  515. case 49:
  516. // line 302 "Parser.jay"
  517. {
  518. yyVal = new ExprVariable ((QName) yyVals[0+yyTop]);
  519. }
  520. break;
  521. case 50:
  522. // line 306 "Parser.jay"
  523. {
  524. yyVal = yyVals[-1+yyTop];
  525. }
  526. break;
  527. case 51:
  528. // line 310 "Parser.jay"
  529. {
  530. yyVal = new ExprLiteral ((String) yyVals[0+yyTop]);
  531. }
  532. break;
  533. case 52:
  534. // line 314 "Parser.jay"
  535. {
  536. yyVal = new ExprNumber ((double) yyVals[0+yyTop]);
  537. }
  538. break;
  539. case 54:
  540. // line 322 "Parser.jay"
  541. {
  542. yyVal = new ExprFunctionCall ((String) yyVals[-3+yyTop], (FunctionArguments) yyVals[-1+yyTop]);
  543. }
  544. break;
  545. case 56:
  546. // line 330 "Parser.jay"
  547. {
  548. yyVal = new FunctionArguments ((Expression) yyVals[-1+yyTop], (FunctionArguments) yyVals[0+yyTop]);
  549. }
  550. break;
  551. case 58:
  552. // line 338 "Parser.jay"
  553. {
  554. yyVal = new FunctionArguments ((Expression) yyVals[-1+yyTop], (FunctionArguments) yyVals[0+yyTop]);
  555. }
  556. break;
  557. case 60:
  558. // line 347 "Parser.jay"
  559. {
  560. yyVal = new ExprPredicates ((Expression) yyVals[-1+yyTop], (ExprPredicates) yyVals[0+yyTop]);
  561. }
  562. break;
  563. case 61:
  564. // line 354 "Parser.jay"
  565. {
  566. yyVal = yyVals[-1+yyTop];
  567. }
  568. break;
  569. case 62:
  570. // line 360 "Parser.jay"
  571. { yyVal = Axes.Ancestor; }
  572. break;
  573. case 63:
  574. // line 361 "Parser.jay"
  575. { yyVal = Axes.AncestorOrSelf; }
  576. break;
  577. case 64:
  578. // line 362 "Parser.jay"
  579. { yyVal = Axes.Attribute; }
  580. break;
  581. case 65:
  582. // line 363 "Parser.jay"
  583. { yyVal = Axes.Child; }
  584. break;
  585. case 66:
  586. // line 364 "Parser.jay"
  587. { yyVal = Axes.Descendant; }
  588. break;
  589. case 67:
  590. // line 365 "Parser.jay"
  591. { yyVal = Axes.DescendantOrSelf; }
  592. break;
  593. case 68:
  594. // line 366 "Parser.jay"
  595. { yyVal = Axes.Following; }
  596. break;
  597. case 69:
  598. // line 367 "Parser.jay"
  599. { yyVal = Axes.FollowingSibling; }
  600. break;
  601. case 70:
  602. // line 368 "Parser.jay"
  603. { yyVal = Axes.Namespace; }
  604. break;
  605. case 71:
  606. // line 369 "Parser.jay"
  607. { yyVal = Axes.Parent; }
  608. break;
  609. case 72:
  610. // line 370 "Parser.jay"
  611. { yyVal = Axes.Preceding; }
  612. break;
  613. case 73:
  614. // line 371 "Parser.jay"
  615. { yyVal = Axes.PrecedingSibling; }
  616. break;
  617. case 74:
  618. // line 372 "Parser.jay"
  619. { yyVal = Axes.Self; }
  620. break;
  621. case 77:
  622. // line 382 "Parser.jay"
  623. {
  624. yyVal = new NCName ((String) yyVals[0+yyTop]);
  625. }
  626. break;
  627. case 78:
  628. // line 386 "Parser.jay"
  629. {
  630. yyVal = new QName ((String) yyVals[-2+yyTop], null);
  631. }
  632. break;
  633. case 79:
  634. // line 390 "Parser.jay"
  635. {
  636. yyVal = new QName ((String) yyVals[-2+yyTop], (String) yyVals[0+yyTop]);
  637. }
  638. break;
  639. // line 662 "-"
  640. }
  641. yyTop -= yyLen[yyN];
  642. yyState = yyStates[yyTop];
  643. int yyM = yyLhs[yyN];
  644. if (yyState == 0 && yyM == 0) {
  645. if (debug != null) debug.shift(0, yyFinal);
  646. yyState = yyFinal;
  647. if (yyToken < 0) {
  648. yyToken = yyLex.advance() ? yyLex.token() : 0;
  649. if (debug != null)
  650. debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value());
  651. }
  652. if (yyToken == 0) {
  653. if (debug != null) debug.accept(yyVal);
  654. return yyVal;
  655. }
  656. goto yyLoop;
  657. }
  658. if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0)
  659. && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState))
  660. yyState = yyTable[yyN];
  661. else
  662. yyState = yyDgoto[yyM];
  663. if (debug != null) debug.shift(yyStates[yyTop], yyState);
  664. goto yyLoop;
  665. }
  666. }
  667. }
  668. static short [] yyLhs = { -1,
  669. 0, 1, 1, 2, 2, 3, 3, 3, 4, 4,
  670. 4, 4, 4, 5, 5, 5, 6, 6, 6, 6,
  671. 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
  672. 9, 10, 10, 10, 12, 12, 12, 12, 12, 13,
  673. 13, 13, 16, 16, 16, 16, 11, 11, 19, 19,
  674. 19, 19, 19, 21, 22, 22, 23, 23, 15, 15,
  675. 20, 18, 18, 18, 18, 18, 18, 18, 18, 18,
  676. 18, 18, 18, 18, 17, 17, 14, 14, 14,
  677. };
  678. static short [] yyLen = { 2,
  679. 1, 1, 3, 1, 3, 1, 3, 3, 1, 3,
  680. 3, 3, 3, 1, 3, 3, 1, 3, 3, 3,
  681. 1, 2, 1, 3, 1, 1, 2, 2, 1, 3,
  682. 3, 1, 3, 3, 3, 3, 6, 1, 1, 0,
  683. 1, 2, 1, 1, 1, 1, 1, 2, 2, 3,
  684. 1, 1, 1, 4, 0, 2, 0, 3, 0, 2,
  685. 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  686. 1, 1, 1, 1, 0, 1, 1, 3, 3,
  687. };
  688. static short [] yyDefRed = { 0,
  689. 0, 0, 38, 39, 41, 0, 0, 0, 0, 62,
  690. 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
  691. 73, 74, 52, 51, 0, 0, 0, 0, 0, 0,
  692. 0, 17, 0, 23, 0, 0, 32, 0, 0, 47,
  693. 53, 0, 0, 0, 0, 22, 0, 49, 0, 0,
  694. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  695. 0, 0, 0, 0, 0, 0, 0, 48, 0, 43,
  696. 44, 45, 46, 0, 0, 42, 0, 0, 50, 0,
  697. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  698. 19, 20, 18, 24, 33, 34, 0, 0, 0, 36,
  699. 0, 35, 0, 0, 56, 54, 78, 79, 61, 60,
  700. 76, 0, 0, 0, 58, 37,
  701. };
  702. protected static short [] yyDgoto = { 25,
  703. 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
  704. 36, 37, 38, 48, 100, 75, 112, 39, 40, 101,
  705. 41, 78, 105,
  706. };
  707. protected static short [] yySindex = { -188,
  708. -85, -85, 0, 0, 0, -258, -188, -188, -297, 0,
  709. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  710. 0, 0, 0, 0, 0, -215, -257, -253, -265, -245,
  711. -261, 0, -221, 0, -218, -252, 0, -256, -203, 0,
  712. 0, -218, -218, -188, -209, 0, -200, 0, -188, -188,
  713. -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
  714. -188, -130, -85, -85, -85, -85, -188, 0, -204, 0,
  715. 0, 0, 0, -204, -195, 0, -199, -194, 0, -268,
  716. -257, -253, -265, -265, -245, -245, -245, -245, -261, -261,
  717. 0, 0, 0, 0, 0, 0, -218, -218, -202, 0,
  718. -204, 0, -229, -188, 0, 0, 0, 0, 0, 0,
  719. 0, -191, -199, -204, 0, 0,
  720. };
  721. protected static short [] yyRindex = { -182,
  722. 1, -182, 0, 0, 0, 0, -182, -182, 0, 0,
  723. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  724. 0, 0, 0, 0, 0, 253, 65, 23, 435, 319,
  725. 244, 0, 222, 0, 90, 112, 0, 0, 0, 0,
  726. 0, 134, 156, -267, 0, 0, 40, 0, -182, -182,
  727. -182, -182, -182, -182, -182, -182, -182, -182, -182, -182,
  728. -182, -182, -182, -182, -182, -182, -182, 0, 68, 0,
  729. 0, 0, 0, 68, 0, 0, -190, 0, 0, 0,
  730. 510, 501, 457, 479, 347, 369, 391, 413, 267, 289,
  731. 0, 0, 0, 0, 0, 0, 178, 200, 0, 0,
  732. 68, 0, -187, -182, 0, 0, 0, 0, 0, 0,
  733. 0, 0, -190, 68, 0, 0,
  734. };
  735. protected static short [] yyGindex = { -7,
  736. 0, 34, 35, -3, -29, -1, -6, 0, 24, 4,
  737. 0, -12, 0, 49, -71, 0, 0, 0, 0, 52,
  738. 0, 0, -21,
  739. };
  740. protected static short [] yyTable = { 45,
  741. 26, 46, 102, 55, 42, 43, 65, 66, 47, 107,
  742. 40, 44, 59, 60, 50, 67, 61, 53, 54, 55,
  743. 56, 69, 4, 85, 86, 87, 88, 51, 52, 110,
  744. 57, 58, 40, 40, 40, 40, 77, 108, 40, 77,
  745. 63, 64, 116, 70, 71, 72, 73, 83, 84, 47,
  746. 95, 96, 91, 92, 93, 89, 90, 49, 62, 99,
  747. 76, 79, 80, 67, 2, 104, 109, 59, 97, 98,
  748. 1, 2, 3, 4, 103, 111, 106, 5, 6, 114,
  749. 57, 7, 81, 75, 82, 94, 74, 68, 8, 25,
  750. 9, 115, 0, 0, 0, 40, 113, 0, 10, 11,
  751. 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
  752. 22, 29, 0, 0, 0, 23, 24, 40, 40, 40,
  753. 40, 0, 0, 40, 0, 0, 0, 0, 1, 2,
  754. 3, 4, 0, 27, 0, 5, 6, 0, 0, 7,
  755. 0, 0, 0, 0, 0, 0, 0, 0, 9, 0,
  756. 0, 0, 0, 0, 0, 28, 10, 11, 12, 13,
  757. 14, 15, 16, 17, 18, 19, 20, 21, 22, 0,
  758. 0, 0, 0, 23, 24, 3, 4, 30, 0, 0,
  759. 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  760. 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
  761. 0, 10, 11, 12, 13, 14, 15, 16, 17, 18,
  762. 19, 20, 21, 22, 0, 0, 0, 0, 0, 0,
  763. 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
  764. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  765. 0, 0, 0, 14, 0, 0, 0, 0, 0, 0,
  766. 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
  767. 0, 0, 0, 0, 0, 26, 15, 0, 0, 26,
  768. 0, 26, 26, 26, 26, 26, 26, 26, 26, 0,
  769. 26, 26, 26, 26, 26, 26, 26, 4, 16, 0,
  770. 0, 4, 0, 4, 4, 4, 0, 0, 77, 77,
  771. 40, 40, 40, 40, 77, 0, 40, 77, 77, 0,
  772. 77, 77, 77, 77, 77, 77, 77, 77, 9, 77,
  773. 77, 77, 77, 77, 77, 77, 59, 59, 0, 2,
  774. 0, 0, 59, 2, 0, 2, 59, 2, 59, 59,
  775. 59, 59, 59, 59, 59, 59, 12, 59, 59, 59,
  776. 59, 59, 59, 59, 25, 0, 0, 0, 25, 0,
  777. 25, 25, 25, 25, 25, 25, 25, 25, 13, 25,
  778. 25, 25, 25, 25, 25, 25, 29, 0, 0, 0,
  779. 29, 0, 29, 29, 29, 29, 29, 29, 29, 29,
  780. 10, 29, 29, 29, 29, 29, 29, 29, 27, 0,
  781. 0, 0, 27, 0, 27, 27, 27, 27, 27, 27,
  782. 27, 27, 11, 27, 27, 27, 27, 27, 27, 27,
  783. 28, 0, 0, 0, 28, 0, 28, 28, 28, 28,
  784. 28, 28, 28, 28, 6, 28, 28, 28, 28, 28,
  785. 28, 28, 30, 0, 0, 0, 30, 0, 30, 30,
  786. 30, 30, 30, 30, 30, 30, 7, 30, 30, 30,
  787. 30, 30, 30, 30, 31, 0, 0, 0, 31, 0,
  788. 31, 31, 31, 31, 31, 31, 31, 31, 8, 31,
  789. 31, 31, 31, 31, 31, 31, 21, 0, 0, 0,
  790. 21, 0, 21, 21, 21, 21, 21, 21, 21, 21,
  791. 5, 0, 21, 21, 21, 21, 21, 21, 14, 3,
  792. 0, 0, 14, 0, 14, 14, 14, 1, 0, 14,
  793. 14, 1, 0, 1, 14, 14, 14, 14, 14, 14,
  794. 0, 15, 0, 0, 0, 15, 0, 15, 15, 15,
  795. 0, 0, 15, 15, 0, 0, 0, 15, 15, 15,
  796. 15, 15, 15, 16, 0, 0, 0, 16, 0, 16,
  797. 16, 16, 0, 0, 16, 16, 0, 0, 0, 16,
  798. 16, 16, 16, 16, 16, 0, 0, 0, 0, 0,
  799. 0, 0, 0, 9, 0, 0, 0, 9, 0, 9,
  800. 9, 9, 0, 0, 0, 0, 0, 0, 0, 9,
  801. 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
  802. 0, 12, 0, 0, 0, 12, 0, 12, 12, 12,
  803. 0, 0, 0, 0, 0, 0, 0, 12, 12, 12,
  804. 12, 12, 12, 13, 0, 0, 0, 13, 0, 13,
  805. 13, 13, 0, 0, 0, 0, 0, 0, 0, 13,
  806. 13, 13, 13, 13, 13, 10, 0, 0, 0, 10,
  807. 0, 10, 10, 10, 0, 0, 0, 0, 0, 0,
  808. 0, 10, 10, 10, 10, 10, 10, 11, 0, 0,
  809. 0, 11, 0, 11, 11, 11, 0, 0, 0, 0,
  810. 0, 0, 0, 11, 11, 11, 11, 11, 11, 6,
  811. 0, 0, 0, 6, 0, 6, 6, 6, 0, 0,
  812. 0, 0, 0, 0, 0, 6, 6, 0, 0, 0,
  813. 0, 7, 0, 0, 0, 7, 0, 7, 7, 7,
  814. 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
  815. 0, 0, 0, 8, 0, 0, 0, 8, 0, 8,
  816. 8, 8, 0, 0, 0, 0, 0, 0, 0, 8,
  817. 8, 0, 0, 0, 0, 5, 0, 0, 0, 5,
  818. 0, 5, 5, 5, 3, 0, 0, 0, 3, 0,
  819. 3, 0, 3,
  820. };
  821. protected static short [] yyCheck = { 7,
  822. 0, 8, 74, 271, 1, 2, 259, 260, 306, 278,
  823. 278, 270, 274, 275, 272, 268, 278, 283, 284, 285,
  824. 286, 278, 0, 53, 54, 55, 56, 281, 282, 101,
  825. 276, 277, 300, 301, 302, 303, 44, 306, 306, 0,
  826. 259, 260, 114, 300, 301, 302, 303, 51, 52, 306,
  827. 63, 64, 59, 60, 61, 57, 58, 273, 280, 67,
  828. 264, 271, 263, 268, 0, 265, 269, 0, 65, 66,
  829. 259, 260, 261, 262, 270, 305, 271, 266, 267, 271,
  830. 271, 270, 49, 271, 50, 62, 38, 36, 277, 0,
  831. 279, 113, -1, -1, -1, 278, 104, -1, 287, 288,
  832. 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
  833. 299, 0, -1, -1, -1, 304, 305, 300, 301, 302,
  834. 303, -1, -1, 306, -1, -1, -1, -1, 259, 260,
  835. 261, 262, -1, 0, -1, 266, 267, -1, -1, 270,
  836. -1, -1, -1, -1, -1, -1, -1, -1, 279, -1,
  837. -1, -1, -1, -1, -1, 0, 287, 288, 289, 290,
  838. 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
  839. -1, -1, -1, 304, 305, 261, 262, 0, -1, -1,
  840. 266, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  841. -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
  842. -1, 287, 288, 289, 290, 291, 292, 293, 294, 295,
  843. 296, 297, 298, 299, -1, -1, -1, -1, -1, -1,
  844. -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
  845. -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  846. -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
  847. -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
  848. -1, -1, -1, -1, -1, 265, 0, -1, -1, 269,
  849. -1, 271, 272, 273, 274, 275, 276, 277, 278, -1,
  850. 280, 281, 282, 283, 284, 285, 286, 265, 0, -1,
  851. -1, 269, -1, 271, 272, 273, -1, -1, 259, 260,
  852. 300, 301, 302, 303, 265, -1, 306, 268, 269, -1,
  853. 271, 272, 273, 274, 275, 276, 277, 278, 0, 280,
  854. 281, 282, 283, 284, 285, 286, 259, 260, -1, 265,
  855. -1, -1, 265, 269, -1, 271, 269, 273, 271, 272,
  856. 273, 274, 275, 276, 277, 278, 0, 280, 281, 282,
  857. 283, 284, 285, 286, 265, -1, -1, -1, 269, -1,
  858. 271, 272, 273, 274, 275, 276, 277, 278, 0, 280,
  859. 281, 282, 283, 284, 285, 286, 265, -1, -1, -1,
  860. 269, -1, 271, 272, 273, 274, 275, 276, 277, 278,
  861. 0, 280, 281, 282, 283, 284, 285, 286, 265, -1,
  862. -1, -1, 269, -1, 271, 272, 273, 274, 275, 276,
  863. 277, 278, 0, 280, 281, 282, 283, 284, 285, 286,
  864. 265, -1, -1, -1, 269, -1, 271, 272, 273, 274,
  865. 275, 276, 277, 278, 0, 280, 281, 282, 283, 284,
  866. 285, 286, 265, -1, -1, -1, 269, -1, 271, 272,
  867. 273, 274, 275, 276, 277, 278, 0, 280, 281, 282,
  868. 283, 284, 285, 286, 265, -1, -1, -1, 269, -1,
  869. 271, 272, 273, 274, 275, 276, 277, 278, 0, 280,
  870. 281, 282, 283, 284, 285, 286, 265, -1, -1, -1,
  871. 269, -1, 271, 272, 273, 274, 275, 276, 277, 278,
  872. 0, -1, 281, 282, 283, 284, 285, 286, 265, 0,
  873. -1, -1, 269, -1, 271, 272, 273, 265, -1, 276,
  874. 277, 269, -1, 271, 281, 282, 283, 284, 285, 286,
  875. -1, 265, -1, -1, -1, 269, -1, 271, 272, 273,
  876. -1, -1, 276, 277, -1, -1, -1, 281, 282, 283,
  877. 284, 285, 286, 265, -1, -1, -1, 269, -1, 271,
  878. 272, 273, -1, -1, 276, 277, -1, -1, -1, 281,
  879. 282, 283, 284, 285, 286, -1, -1, -1, -1, -1,
  880. -1, -1, -1, 265, -1, -1, -1, 269, -1, 271,
  881. 272, 273, -1, -1, -1, -1, -1, -1, -1, 281,
  882. 282, 283, 284, 285, 286, -1, -1, -1, -1, -1,
  883. -1, 265, -1, -1, -1, 269, -1, 271, 272, 273,
  884. -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
  885. 284, 285, 286, 265, -1, -1, -1, 269, -1, 271,
  886. 272, 273, -1, -1, -1, -1, -1, -1, -1, 281,
  887. 282, 283, 284, 285, 286, 265, -1, -1, -1, 269,
  888. -1, 271, 272, 273, -1, -1, -1, -1, -1, -1,
  889. -1, 281, 282, 283, 284, 285, 286, 265, -1, -1,
  890. -1, 269, -1, 271, 272, 273, -1, -1, -1, -1,
  891. -1, -1, -1, 281, 282, 283, 284, 285, 286, 265,
  892. -1, -1, -1, 269, -1, 271, 272, 273, -1, -1,
  893. -1, -1, -1, -1, -1, 281, 282, -1, -1, -1,
  894. -1, 265, -1, -1, -1, 269, -1, 271, 272, 273,
  895. -1, -1, -1, -1, -1, -1, -1, 281, 282, -1,
  896. -1, -1, -1, 265, -1, -1, -1, 269, -1, 271,
  897. 272, 273, -1, -1, -1, -1, -1, -1, -1, 281,
  898. 282, -1, -1, -1, -1, 265, -1, -1, -1, 269,
  899. -1, 271, 272, 273, 265, -1, -1, -1, 269, -1,
  900. 271, -1, 273,
  901. };
  902. // line 396 "Parser.jay"
  903. }
  904. // line 929 "-"
  905. namespace yydebug {
  906. using System;
  907. public interface yyDebug {
  908. void push (int state, Object value);
  909. void lex (int state, int token, string name, Object value);
  910. void shift (int from, int to, int errorFlag);
  911. void pop (int state);
  912. void discard (int state, int token, string name, Object value);
  913. void reduce (int from, int to, int rule, string text, int len);
  914. void shift (int from, int to);
  915. void accept (Object value);
  916. void error (string message);
  917. void reject ();
  918. }
  919. class yyDebugSimple : yyDebug {
  920. void println (string s){
  921. Console.WriteLine (s);
  922. }
  923. public void push (int state, Object value) {
  924. println ("push\tstate "+state+"\tvalue "+value);
  925. }
  926. public void lex (int state, int token, string name, Object value) {
  927. println("lex\tstate "+state+"\treading "+name+"\tvalue "+value);
  928. }
  929. public void shift (int from, int to, int errorFlag) {
  930. switch (errorFlag) {
  931. default: // normally
  932. println("shift\tfrom state "+from+" to "+to);
  933. break;
  934. case 0: case 1: case 2: // in error recovery
  935. println("shift\tfrom state "+from+" to "+to
  936. +"\t"+errorFlag+" left to recover");
  937. break;
  938. case 3: // normally
  939. println("shift\tfrom state "+from+" to "+to+"\ton error");
  940. break;
  941. }
  942. }
  943. public void pop (int state) {
  944. println("pop\tstate "+state+"\ton error");
  945. }
  946. public void discard (int state, int token, string name, Object value) {
  947. println("discard\tstate "+state+"\ttoken "+name+"\tvalue "+value);
  948. }
  949. public void reduce (int from, int to, int rule, string text, int len) {
  950. println("reduce\tstate "+from+"\tuncover "+to
  951. +"\trule ("+rule+") "+text);
  952. }
  953. public void shift (int from, int to) {
  954. println("goto\tfrom state "+from+" to "+to);
  955. }
  956. public void accept (Object value) {
  957. println("accept\tvalue "+value);
  958. }
  959. public void error (string message) {
  960. println("error\t"+message);
  961. }
  962. public void reject () {
  963. println("reject");
  964. }
  965. }
  966. }
  967. // %token constants
  968. class Token {
  969. public const int ERROR = 257;
  970. public const int EOF = 258;
  971. public const int SLASH = 259;
  972. public const int SLASH2 = 260;
  973. public const int DOT = 261;
  974. public const int DOT2 = 262;
  975. public const int COLON = 263;
  976. public const int COLON2 = 264;
  977. public const int COMMA = 265;
  978. public const int AT = 266;
  979. public const int FUNCTION_NAME = 267;
  980. public const int BRACKET_OPEN = 268;
  981. public const int BRACKET_CLOSE = 269;
  982. public const int PAREN_OPEN = 270;
  983. public const int PAREN_CLOSE = 271;
  984. public const int AND = 272;
  985. public const int OR = 273;
  986. public const int DIV = 274;
  987. public const int MOD = 275;
  988. public const int PLUS = 276;
  989. public const int MINUS = 277;
  990. public const int ASTERISK = 278;
  991. public const int DOLLAR = 279;
  992. public const int BAR = 280;
  993. public const int EQ = 281;
  994. public const int NE = 282;
  995. public const int LE = 283;
  996. public const int GE = 284;
  997. public const int LT = 285;
  998. public const int GT = 286;
  999. public const int ANCESTOR = 287;
  1000. public const int ANCESTOR_OR_SELF = 288;
  1001. public const int ATTRIBUTE = 289;
  1002. public const int CHILD = 290;
  1003. public const int DESCENDANT = 291;
  1004. public const int DESCENDANT_OR_SELF = 292;
  1005. public const int FOLLOWING = 293;
  1006. public const int FOLLOWING_SIBLING = 294;
  1007. public const int NAMESPACE = 295;
  1008. public const int PARENT = 296;
  1009. public const int PRECEDING = 297;
  1010. public const int PRECEDING_SIBLING = 298;
  1011. public const int SELF = 299;
  1012. public const int COMMENT = 300;
  1013. public const int TEXT = 301;
  1014. public const int PROCESSING_INSTRUCTION = 302;
  1015. public const int NODE = 303;
  1016. public const int NUMBER = 304;
  1017. public const int LITERAL = 305;
  1018. public const int NCName = 306;
  1019. public const int yyErrorCode = 256;
  1020. }
  1021. namespace yyParser {
  1022. using System;
  1023. /** thrown for irrecoverable syntax errors and stack overflow.
  1024. */
  1025. public class yyException : System.Exception {
  1026. public yyException (string message) : base (message) {
  1027. }
  1028. }
  1029. /** must be implemented by a scanner object to supply input to the parser.
  1030. */
  1031. public interface yyInput {
  1032. /** move on to next token.
  1033. @return false if positioned beyond tokens.
  1034. @throws IOException on input error.
  1035. */
  1036. bool advance (); // throws java.io.IOException;
  1037. /** classifies current token.
  1038. Should not be called if advance() returned false.
  1039. @return current %token or single character.
  1040. */
  1041. int token ();
  1042. /** associated with current token.
  1043. Should not be called if advance() returned false.
  1044. @return value for token().
  1045. */
  1046. Object value ();
  1047. }
  1048. }
  1049. } // close outermost namespace, that MUST HAVE BEEN opened in the prolog