Parser.cs 39 KB

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