PageRenderTime 62ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/usr.bin/awk/ytab.c

https://bitbucket.org/warthurton/gno
C | 2195 lines | 1865 code | 65 blank | 265 comment | 111 complexity | 4c846f52d7d4e89a534a72ba795792a8 MD5 | raw file
Possible License(s): AGPL-1.0
  1. /* $Id: ytab.c 563 1998-04-07 16:19:01Z tribby $ */
  2. #ifdef __ORCAC__
  3. segment "lex";
  4. #endif
  5. /* NOTE: line directives commented-out in GNO version, for debugger */
  6. /* # line 26 "awkgram.y" */
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include "awk.h"
  10. void checkdup(Node *list, Cell *item);
  11. int yywrap(void) { return(1); }
  12. Node *beginloc = 0;
  13. Node *endloc = 0;
  14. int infunc = 0; /* = 1 if in arglist or body of func */
  15. int inloop = 0; /* = 1 if in while, for, do */
  16. char *curfname = 0; /* current function name */
  17. Node *arglist = 0; /* list of args for current function */
  18. /* # line 41 "awkgram.y" */
  19. typedef union {
  20. Node *p;
  21. Cell *cp;
  22. int i;
  23. char *s;
  24. } YYSTYPE;
  25. #ifdef __cplusplus
  26. # include <stdio.h>
  27. # include <yacc.h>
  28. #endif /* __cplusplus */
  29. # define FIRSTTOKEN 257
  30. # define PROGRAM 258
  31. # define PASTAT 259
  32. # define PASTAT2 260
  33. # define XBEGIN 261
  34. # define XEND 262
  35. # define NL 263
  36. # define ARRAY 264
  37. # define MATCH 265
  38. # define NOTMATCH 266
  39. # define MATCHOP 267
  40. # define FINAL 268
  41. # define DOT 269
  42. # define ALL 270
  43. # define CCL 271
  44. # define NCCL 272
  45. # define CHAR 273
  46. # define OR 274
  47. # define STAR 275
  48. # define QUEST 276
  49. # define PLUS 277
  50. # define AND 278
  51. # define BOR 279
  52. # define APPEND 280
  53. # define EQ 281
  54. # define GE 282
  55. # define GT 283
  56. # define LE 284
  57. # define LT 285
  58. # define NE 286
  59. # define IN 287
  60. # define ARG 288
  61. # define BLTIN 289
  62. # define BREAK 290
  63. # define CLOSE 291
  64. # define CONTINUE 292
  65. # define DELETE 293
  66. # define DO 294
  67. # define EXIT 295
  68. # define FOR 296
  69. # define FUNC 297
  70. # define SUB 298
  71. # define GSUB 299
  72. # define IF 300
  73. # define INDEX 301
  74. # define LSUBSTR 302
  75. # define MATCHFCN 303
  76. # define NEXT 304
  77. # define NEXTFILE 305
  78. # define ADD 306
  79. # define MINUS 307
  80. # define MULT 308
  81. # define DIVIDE 309
  82. # define MOD 310
  83. # define ASSIGN 311
  84. # define ASGNOP 312
  85. # define ADDEQ 313
  86. # define SUBEQ 314
  87. # define MULTEQ 315
  88. # define DIVEQ 316
  89. # define MODEQ 317
  90. # define POWEQ 318
  91. # define PRINT 319
  92. # define PRINTF 320
  93. # define SPRINTF 321
  94. # define ELSE 322
  95. # define INTEST 323
  96. # define CONDEXPR 324
  97. # define POSTINCR 325
  98. # define PREINCR 326
  99. # define POSTDECR 327
  100. # define PREDECR 328
  101. # define VAR 329
  102. # define IVAR 330
  103. # define VARNF 331
  104. # define CALL 332
  105. # define NUMBER 333
  106. # define STRING 334
  107. # define REGEXPR 335
  108. # define GETLINE 336
  109. # define RETURN 337
  110. # define SPLIT 338
  111. # define SUBSTR 339
  112. # define WHILE 340
  113. # define CAT 341
  114. # define NOT 342
  115. # define UMINUS 343
  116. # define POWER 344
  117. # define DECR 345
  118. # define INCR 346
  119. # define INDIRECT 347
  120. # define LASTTOKEN 348
  121. #define yyclearin yychar = -1
  122. #define yyerrok yyerrflag = 0
  123. extern int yychar;
  124. #ifndef YYMAXDEPTH
  125. #define YYMAXDEPTH 150
  126. #endif
  127. /* __YYSCLASS defines the scoping/storage class for global objects
  128. * that are NOT renamed by the -p option. By default these names
  129. * are going to be 'static' so that multi-definition errors
  130. * will not occur with multiple parsers.
  131. * If you want (unsupported) access to internal names you need
  132. * to define this to be null so it implies 'extern' scope.
  133. * This should not be used in conjunction with -p.
  134. */
  135. #ifndef __YYSCLASS
  136. # define __YYSCLASS static
  137. #endif
  138. YYSTYPE yylval;
  139. __YYSCLASS YYSTYPE yyval;
  140. typedef int yytabelem;
  141. # define YYERRCODE 256
  142. /* # line 444 "awkgram.y" */
  143. void setfname(Cell *p)
  144. {
  145. if (isarr(p))
  146. ERROR "%s is an array, not a function", p->nval SYNTAX;
  147. else if (isfcn(p))
  148. ERROR "you can't define function %s more than once", p->nval SYNTAX;
  149. curfname = p->nval;
  150. }
  151. int constnode(Node *p)
  152. {
  153. return isvalue(p) && ((Cell *) (p->narg[0]))->csub == CCON;
  154. }
  155. char *strnode(Node *p)
  156. {
  157. return ((Cell *)(p->narg[0]))->sval;
  158. }
  159. Node *notnull(Node *n)
  160. {
  161. switch (n->nobj) {
  162. case LE: case LT: case EQ: case NE: case GT: case GE:
  163. case BOR: case AND: case NOT:
  164. return n;
  165. default:
  166. return op2(NE, n, nullnode);
  167. }
  168. }
  169. void checkdup(Node *vl, Cell *cp) /* check if name already in list */
  170. {
  171. char *s = cp->nval;
  172. for ( ; vl; vl = vl->nnext) {
  173. if (strcmp(s, ((Cell *)(vl->narg[0]))->nval) == 0) {
  174. ERROR "duplicate argument %s", s SYNTAX;
  175. break;
  176. }
  177. }
  178. }
  179. __YYSCLASS yytabelem yyexca[] ={
  180. -1, 0,
  181. 0, 28,
  182. 261, 28,
  183. 262, 28,
  184. 123, 28,
  185. 40, 28,
  186. 47, 28,
  187. 288, 28,
  188. 289, 28,
  189. 297, 28,
  190. 298, 28,
  191. 299, 28,
  192. 301, 28,
  193. 303, 28,
  194. 321, 28,
  195. 329, 28,
  196. 330, 28,
  197. 331, 28,
  198. 332, 28,
  199. 333, 28,
  200. 334, 28,
  201. 336, 28,
  202. 338, 28,
  203. 339, 28,
  204. 43, 28,
  205. 45, 28,
  206. 342, 28,
  207. 345, 28,
  208. 346, 28,
  209. 347, 28,
  210. -2, 0,
  211. -1, 1,
  212. 0, -1,
  213. -2, 0,
  214. -1, 157,
  215. 59, 30,
  216. -2, 0,
  217. -1, 176,
  218. 124, 0,
  219. 267, 0,
  220. 281, 0,
  221. 282, 0,
  222. 283, 0,
  223. 284, 0,
  224. 285, 0,
  225. 286, 0,
  226. 287, 0,
  227. -2, 63,
  228. -1, 177,
  229. 124, 0,
  230. 267, 0,
  231. 281, 0,
  232. 282, 0,
  233. 283, 0,
  234. 284, 0,
  235. 285, 0,
  236. 286, 0,
  237. 287, 0,
  238. -2, 64,
  239. -1, 178,
  240. 124, 0,
  241. 267, 0,
  242. 281, 0,
  243. 282, 0,
  244. 283, 0,
  245. 284, 0,
  246. 285, 0,
  247. 286, 0,
  248. 287, 0,
  249. -2, 65,
  250. -1, 179,
  251. 124, 0,
  252. 267, 0,
  253. 281, 0,
  254. 282, 0,
  255. 283, 0,
  256. 284, 0,
  257. 285, 0,
  258. 286, 0,
  259. 287, 0,
  260. -2, 66,
  261. -1, 180,
  262. 124, 0,
  263. 267, 0,
  264. 281, 0,
  265. 282, 0,
  266. 283, 0,
  267. 284, 0,
  268. 285, 0,
  269. 286, 0,
  270. 287, 0,
  271. -2, 67,
  272. -1, 181,
  273. 124, 0,
  274. 267, 0,
  275. 281, 0,
  276. 282, 0,
  277. 283, 0,
  278. 284, 0,
  279. 285, 0,
  280. 286, 0,
  281. 287, 0,
  282. -2, 68,
  283. -1, 183,
  284. 124, 0,
  285. 267, 0,
  286. 281, 0,
  287. 282, 0,
  288. 283, 0,
  289. 284, 0,
  290. 285, 0,
  291. 286, 0,
  292. 287, 0,
  293. -2, 70,
  294. -1, 288,
  295. 267, 0,
  296. 287, 0,
  297. -2, 53,
  298. -1, 332,
  299. 41, 30,
  300. -2, 0,
  301. -1, 354,
  302. 41, 30,
  303. -2, 0,
  304. };
  305. # define YYNPROD 184
  306. # define YYLAST 4423
  307. __YYSCLASS yytabelem yyact[]={
  308. 17, 137, 66, 228, 253, 276, 243, 124, 138, 102,
  309. 42, 103, 104, 111, 112, 42, 100, 155, 109, 107,
  310. 307, 108, 185, 110, 100, 214, 100, 100, 100, 42,
  311. 253, 121, 122, 123, 249, 82, 253, 42, 83, 103,
  312. 104, 223, 103, 104, 313, 252, 113, 205, 232, 139,
  313. 311, 41, 22, 43, 53, 42, 41, 22, 43, 142,
  314. 7, 146, 309, 7, 48, 149, 150, 152, 153, 23,
  315. 41, 22, 43, 163, 23, 100, 111, 156, 41, 140,
  316. 43, 109, 85, 273, 217, 143, 110, 105, 23, 51,
  317. 62, 16, 190, 244, 274, 11, 41, 113, 43, 10,
  318. 100, 50, 317, 79, 80, 133, 190, 100, 100, 100,
  319. 100, 100, 100, 100, 9, 268, 334, 148, 323, 190,
  320. 277, 190, 190, 190, 283, 100, 264, 190, 259, 190,
  321. 258, 190, 277, 190, 168, 169, 188, 351, 86, 190,
  322. 11, 315, 100, 219, 350, 349, 100, 221, 156, 24,
  323. 320, 134, 100, 226, 319, 257, 330, 218, 170, 167,
  324. 230, 158, 157, 100, 132, 130, 129, 128, 16, 127,
  325. 126, 125, 100, 120, 100, 119, 100, 100, 100, 100,
  326. 100, 100, 100, 4, 100, 154, 251, 100, 100, 21,
  327. 270, 144, 49, 131, 316, 346, 360, 363, 1, 72,
  328. 20, 100, 199, 39, 233, 224, 100, 234, 100, 100,
  329. 100, 5, 58, 100, 100, 67, 96, 222, 61, 60,
  330. 248, 81, 8, 159, 114, 216, 116, 117, 118, 160,
  331. 2, 0, 100, 100, 100, 100, 163, 0, 163, 163,
  332. 163, 163, 275, 182, 163, 238, 100, 0, 0, 236,
  333. 0, 292, 0, 140, 293, 100, 100, 3, 0, 0,
  334. 0, 0, 0, 166, 6, 0, 140, 6, 47, 0,
  335. 0, 269, 162, 165, 0, 96, 0, 0, 0, 211,
  336. 0, 0, 100, 156, 184, 100, 100, 100, 0, 100,
  337. 0, 100, 308, 0, 0, 0, 100, 0, 100, 100,
  338. 116, 239, 100, 0, 100, 100, 100, 96, 193, 194,
  339. 195, 196, 197, 198, 18, 163, 333, 27, 156, 26,
  340. 112, 44, 202, 204, 0, 206, 340, 332, 341, 0,
  341. 0, 210, 100, 68, 0, 230, 345, 100, 0, 100,
  342. 0, 0, 96, 100, 100, 0, 96, 229, 0, 0,
  343. 0, 355, 96, 156, 0, 358, 0, 230, 359, 0,
  344. 0, 0, 354, 242, 238, 361, 0, 238, 238, 238,
  345. 312, 238, 96, 238, 96, 0, 96, 96, 96, 96,
  346. 96, 96, 96, 112, 96, 0, 18, 96, 96, 27,
  347. 287, 26, 347, 44, 0, 0, 0, 16, 0, 357,
  348. 0, 96, 0, 0, 0, 68, 260, 337, 96, 96,
  349. 96, 299, 300, 96, 96, 0, 0, 0, 0, 238,
  350. 239, 0, 0, 239, 239, 239, 0, 239, 0, 239,
  351. 0, 289, 96, 278, 279, 280, 165, 0, 165, 165,
  352. 165, 165, 296, 0, 165, 0, 96, 291, 0, 0,
  353. 0, 0, 0, 302, 0, 96, 96, 18, 0, 0,
  354. 27, 0, 26, 0, 44, 310, 0, 0, 0, 16,
  355. 0, 0, 339, 0, 0, 239, 68, 0, 0, 0,
  356. 0, 0, 242, 0, 0, 242, 242, 242, 19, 242,
  357. 0, 242, 0, 0, 0, 0, 96, 0, 96, 96,
  358. 0, 0, 96, 335, 96, 96, 96, 0, 281, 0,
  359. 284, 285, 286, 288, 115, 165, 290, 18, 0, 0,
  360. 27, 0, 26, 0, 44, 0, 0, 0, 0, 0,
  361. 75, 0, 96, 0, 0, 0, 68, 242, 0, 96,
  362. 16, 0, 306, 96, 96, 0, 0, 0, 0, 0,
  363. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  364. 0, 164, 42, 28, 55, 56, 57, 73, 69, 59,
  365. 70, 0, 45, 46, 71, 33, 0, 34, 63, 64,
  366. 0, 0, 0, 0, 0, 0, 101, 336, 0, 27,
  367. 0, 26, 0, 77, 78, 37, 0, 0, 0, 0,
  368. 16, 0, 75, 41, 22, 43, 29, 35, 38, 52,
  369. 32, 65, 36, 40, 76, 0, 25, 0, 0, 30,
  370. 31, 23, 0, 0, 0, 0, 0, 0, 0, 0,
  371. 0, 0, 0, 0, 42, 28, 55, 56, 57, 73,
  372. 69, 59, 70, 0, 45, 46, 71, 33, 0, 34,
  373. 63, 64, 0, 0, 0, 0, 18, 0, 0, 27,
  374. 0, 26, 0, 44, 0, 77, 78, 37, 0, 0,
  375. 0, 0, 0, 75, 0, 41, 22, 43, 29, 35,
  376. 38, 0, 32, 65, 36, 40, 76, 0, 25, 0,
  377. 0, 30, 31, 23, 0, 0, 0, 0, 0, 0,
  378. 0, 0, 0, 0, 0, 42, 28, 55, 56, 57,
  379. 73, 69, 59, 70, 0, 45, 46, 71, 33, 0,
  380. 34, 63, 64, 0, 164, 0, 164, 164, 164, 164,
  381. 0, 0, 164, 75, 0, 0, 77, 78, 37, 0,
  382. 271, 0, 0, 0, 0, 0, 41, 22, 43, 29,
  383. 35, 38, 0, 32, 65, 36, 40, 76, 0, 25,
  384. 0, 0, 30, 31, 23, 42, 28, 55, 56, 57,
  385. 73, 69, 59, 70, 0, 45, 46, 71, 33, 0,
  386. 34, 63, 64, 18, 0, 0, 27, 0, 26, 0,
  387. 44, 0, 0, 0, 0, 0, 77, 78, 37, 0,
  388. 0, 0, 68, 164, 0, 0, 41, 22, 43, 29,
  389. 35, 38, 0, 32, 65, 36, 40, 76, 0, 25,
  390. 0, 0, 30, 31, 23, 0, 0, 0, 0, 0,
  391. 0, 0, 0, 0, 42, 28, 0, 0, 0, 0,
  392. 0, 0, 0, 18, 45, 46, 27, 33, 26, 34,
  393. 44, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  394. 0, 0, 68, 0, 0, 0, 16, 37, 247, 0,
  395. 0, 0, 75, 0, 0, 41, 22, 43, 29, 35,
  396. 38, 0, 32, 0, 36, 40, 0, 0, 99, 0,
  397. 0, 30, 31, 23, 0, 0, 0, 0, 0, 0,
  398. 0, 0, 0, 18, 42, 28, 27, 0, 26, 73,
  399. 44, 0, 0, 0, 45, 46, 0, 33, 0, 34,
  400. 0, 0, 68, 0, 0, 0, 16, 0, 246, 0,
  401. 0, 0, 0, 0, 0, 77, 78, 37, 0, 0,
  402. 0, 0, 0, 0, 0, 41, 22, 43, 29, 35,
  403. 38, 0, 32, 0, 36, 40, 0, 0, 25, 0,
  404. 0, 30, 31, 23, 0, 0, 0, 0, 0, 0,
  405. 18, 0, 0, 27, 0, 26, 0, 44, 0, 0,
  406. 0, 0, 0, 0, 0, 0, 16, 0, 225, 68,
  407. 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,
  408. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  409. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  410. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  411. 0, 42, 28, 55, 56, 57, 73, 69, 59, 70,
  412. 0, 45, 46, 71, 33, 0, 34, 63, 64, 0,
  413. 0, 0, 0, 16, 0, 215, 0, 0, 0, 75,
  414. 0, 0, 77, 78, 37, 0, 0, 0, 0, 0,
  415. 0, 256, 41, 22, 43, 29, 35, 38, 0, 32,
  416. 65, 36, 40, 76, 0, 25, 0, 0, 30, 31,
  417. 23, 42, 28, 55, 56, 57, 73, 69, 59, 70,
  418. 0, 45, 46, 71, 33, 0, 34, 63, 64, 0,
  419. 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,
  420. 0, 0, 77, 78, 37, 0, 0, 0, 0, 0,
  421. 0, 0, 41, 22, 43, 29, 35, 38, 0, 32,
  422. 65, 36, 40, 76, 0, 25, 0, 0, 30, 31,
  423. 23, 42, 28, 55, 56, 57, 73, 69, 59, 70,
  424. 0, 45, 46, 71, 33, 0, 34, 63, 64, 18,
  425. 0, 0, 27, 0, 26, 0, 44, 189, 191, 0,
  426. 0, 0, 77, 78, 37, 0, 75, 0, 68, 0,
  427. 0, 0, 41, 22, 43, 29, 35, 38, 0, 32,
  428. 65, 36, 40, 76, 0, 25, 0, 0, 30, 31,
  429. 23, 0, 0, 0, 0, 0, 0, 0, 42, 28,
  430. 55, 56, 57, 73, 69, 59, 70, 0, 45, 46,
  431. 71, 33, 235, 34, 63, 64, 18, 0, 0, 27,
  432. 0, 26, 0, 44, 0, 0, 0, 0, 0, 77,
  433. 78, 37, 16, 0, 135, 68, 0, 0, 0, 41,
  434. 22, 43, 29, 35, 38, 0, 32, 65, 36, 40,
  435. 76, 0, 25, 0, 0, 30, 31, 23, 0, 261,
  436. 262, 263, 0, 265, 266, 267, 0, 0, 0, 0,
  437. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  438. 0, 0, 0, 0, 0, 0, 0, 0, 189, 0,
  439. 101, 329, 0, 27, 190, 26, 0, 0, 0, 16,
  440. 294, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  441. 0, 0, 0, 84, 0, 0, 0, 0, 0, 0,
  442. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  443. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  444. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  445. 0, 0, 0, 0, 322, 325, 327, 328, 0, 0,
  446. 0, 0, 0, 0, 189, 75, 101, 326, 0, 27,
  447. 190, 26, 0, 0, 95, 0, 0, 0, 0, 0,
  448. 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
  449. 0, 0, 0, 0, 0, 0, 0, 42, 28, 55,
  450. 56, 57, 73, 69, 59, 70, 0, 45, 46, 71,
  451. 33, 0, 34, 63, 64, 0, 0, 0, 0, 0,
  452. 0, 0, 0, 0, 0, 0, 0, 0, 77, 78,
  453. 37, 0, 75, 0, 0, 0, 0, 0, 41, 22,
  454. 43, 29, 35, 38, 0, 32, 65, 36, 40, 76,
  455. 95, 25, 0, 0, 30, 31, 23, 0, 0, 0,
  456. 0, 0, 0, 0, 42, 28, 55, 56, 57, 73,
  457. 69, 59, 70, 0, 45, 46, 71, 33, 0, 34,
  458. 63, 64, 0, 0, 0, 0, 0, 0, 101, 324,
  459. 0, 27, 190, 26, 0, 77, 78, 37, 0, 0,
  460. 0, 0, 0, 0, 0, 41, 22, 43, 29, 35,
  461. 38, 84, 32, 65, 36, 40, 76, 93, 25, 0,
  462. 0, 30, 31, 23, 0, 0, 0, 0, 98, 97,
  463. 0, 87, 88, 89, 90, 91, 92, 94, 42, 28,
  464. 0, 0, 0, 0, 0, 0, 0, 0, 45, 46,
  465. 0, 33, 0, 34, 0, 0, 0, 0, 0, 0,
  466. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  467. 0, 37, 95, 0, 0, 0, 0, 0, 0, 41,
  468. 22, 43, 29, 35, 38, 0, 32, 0, 36, 40,
  469. 0, 0, 99, 93, 0, 30, 31, 23, 101, 0,
  470. 0, 27, 0, 26, 98, 97, 0, 87, 88, 89,
  471. 90, 91, 92, 94, 42, 28, 0, 139, 0, 0,
  472. 0, 84, 0, 0, 45, 46, 0, 33, 0, 34,
  473. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  474. 0, 0, 0, 0, 0, 0, 0, 37, 0, 0,
  475. 0, 0, 0, 0, 0, 41, 22, 43, 29, 35,
  476. 38, 0, 32, 0, 36, 40, 0, 0, 99, 0,
  477. 0, 30, 31, 23, 101, 192, 0, 27, 190, 26,
  478. 0, 0, 95, 0, 0, 0, 0, 0, 0, 0,
  479. 0, 0, 0, 0, 0, 0, 0, 84, 0, 0,
  480. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  481. 0, 0, 0, 0, 0, 93, 0, 0, 0, 0,
  482. 0, 0, 0, 0, 0, 0, 98, 97, 0, 87,
  483. 88, 89, 90, 91, 92, 94, 42, 28, 0, 0,
  484. 0, 0, 0, 0, 0, 0, 45, 46, 0, 33,
  485. 0, 34, 0, 0, 0, 0, 0, 0, 95, 0,
  486. 0, 0, 0, 0, 0, 101, 353, 0, 27, 37,
  487. 26, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  488. 29, 35, 38, 0, 32, 0, 36, 40, 84, 0,
  489. 99, 0, 0, 30, 31, 23, 0, 0, 0, 0,
  490. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  491. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  492. 0, 140, 0, 0, 0, 93, 0, 0, 0, 0,
  493. 0, 0, 0, 0, 0, 0, 98, 97, 0, 87,
  494. 88, 89, 90, 91, 92, 94, 42, 28, 0, 95,
  495. 101, 352, 0, 27, 0, 26, 45, 46, 0, 33,
  496. 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
  497. 0, 0, 0, 84, 0, 0, 0, 0, 0, 37,
  498. 0, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  499. 29, 35, 38, 0, 32, 0, 36, 40, 0, 0,
  500. 99, 93, 0, 30, 31, 23, 0, 0, 0, 0,
  501. 0, 0, 98, 97, 0, 87, 88, 89, 90, 91,
  502. 92, 94, 42, 28, 0, 0, 0, 0, 0, 0,
  503. 0, 0, 45, 46, 95, 33, 0, 34, 101, 348,
  504. 0, 27, 0, 26, 0, 0, 0, 0, 0, 0,
  505. 0, 0, 0, 0, 0, 37, 0, 0, 0, 0,
  506. 0, 84, 0, 41, 22, 43, 29, 35, 38, 0,
  507. 32, 0, 36, 40, 0, 0, 99, 0, 0, 30,
  508. 31, 23, 0, 0, 0, 0, 0, 0, 0, 0,
  509. 0, 0, 93, 0, 0, 0, 0, 0, 0, 0,
  510. 0, 0, 0, 98, 97, 0, 87, 88, 89, 90,
  511. 91, 92, 94, 42, 28, 0, 0, 0, 0, 0,
  512. 0, 0, 95, 45, 46, 0, 33, 0, 34, 0,
  513. 101, 0, 0, 27, 0, 26, 0, 0, 0, 0,
  514. 0, 0, 0, 0, 0, 0, 37, 0, 0, 344,
  515. 0, 0, 0, 84, 41, 22, 43, 29, 35, 38,
  516. 0, 32, 0, 36, 40, 0, 0, 99, 0, 0,
  517. 30, 31, 23, 0, 0, 0, 0, 93, 0, 0,
  518. 0, 0, 0, 0, 0, 0, 0, 0, 98, 97,
  519. 0, 87, 88, 89, 90, 91, 92, 94, 42, 28,
  520. 0, 0, 0, 0, 0, 0, 0, 0, 45, 46,
  521. 0, 33, 0, 34, 95, 0, 0, 0, 0, 0,
  522. 0, 0, 101, 321, 0, 27, 0, 26, 0, 0,
  523. 0, 37, 0, 0, 0, 0, 0, 0, 0, 41,
  524. 22, 43, 29, 35, 38, 84, 32, 0, 36, 40,
  525. 0, 0, 99, 0, 0, 30, 31, 23, 0, 0,
  526. 0, 0, 0, 0, 0, 93, 0, 0, 0, 0,
  527. 0, 0, 0, 0, 0, 0, 98, 97, 0, 87,
  528. 88, 89, 90, 91, 92, 94, 42, 28, 0, 0,
  529. 0, 0, 0, 0, 0, 0, 45, 46, 0, 33,
  530. 0, 34, 0, 0, 0, 0, 95, 0, 0, 0,
  531. 101, 318, 0, 27, 0, 26, 0, 0, 0, 37,
  532. 0, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  533. 29, 35, 38, 84, 32, 0, 36, 40, 0, 0,
  534. 99, 0, 0, 30, 31, 23, 0, 0, 0, 0,
  535. 0, 0, 0, 0, 0, 0, 0, 93, 0, 0,
  536. 0, 0, 0, 0, 0, 0, 0, 0, 98, 97,
  537. 0, 87, 88, 89, 90, 91, 92, 94, 42, 28,
  538. 0, 0, 0, 0, 0, 0, 0, 0, 45, 46,
  539. 0, 33, 0, 34, 95, 101, 277, 0, 27, 0,
  540. 26, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  541. 0, 37, 0, 0, 0, 0, 0, 0, 84, 41,
  542. 22, 43, 29, 35, 38, 0, 32, 0, 36, 40,
  543. 0, 0, 99, 0, 0, 30, 31, 23, 0, 0,
  544. 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
  545. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  546. 98, 97, 0, 87, 88, 89, 90, 91, 92, 94,
  547. 42, 28, 0, 0, 0, 0, 0, 0, 0, 95,
  548. 45, 46, 0, 33, 0, 34, 101, 0, 0, 27,
  549. 190, 26, 0, 0, 0, 0, 0, 0, 0, 0,
  550. 0, 0, 0, 37, 0, 0, 0, 0, 0, 84,
  551. 0, 41, 22, 43, 29, 35, 38, 0, 32, 0,
  552. 36, 40, 0, 0, 99, 0, 0, 30, 31, 23,
  553. 0, 0, 0, 0, 0, 0, 0, 93, 0, 0,
  554. 0, 0, 0, 0, 0, 0, 0, 0, 98, 97,
  555. 0, 87, 88, 89, 90, 91, 92, 94, 42, 28,
  556. 0, 0, 101, 192, 0, 27, 0, 26, 45, 46,
  557. 95, 33, 0, 34, 0, 0, 0, 0, 0, 0,
  558. 0, 0, 0, 0, 0, 84, 0, 0, 0, 0,
  559. 0, 37, 0, 0, 0, 0, 0, 0, 0, 41,
  560. 22, 43, 29, 35, 38, 0, 32, 0, 36, 40,
  561. 0, 0, 99, 0, 0, 30, 31, 23, 0, 0,
  562. 0, 0, 93, 0, 0, 0, 0, 0, 0, 0,
  563. 0, 0, 0, 98, 97, 0, 87, 88, 89, 90,
  564. 91, 92, 94, 42, 28, 0, 95, 0, 0, 0,
  565. 0, 0, 101, 45, 46, 27, 33, 26, 34, 0,
  566. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  567. 250, 0, 0, 0, 0, 84, 37, 0, 0, 0,
  568. 0, 0, 0, 0, 41, 22, 43, 29, 35, 38,
  569. 0, 32, 0, 36, 40, 0, 0, 99, 0, 0,
  570. 30, 31, 23, 0, 0, 0, 0, 0, 0, 0,
  571. 0, 0, 0, 93, 0, 0, 0, 0, 0, 0,
  572. 0, 0, 0, 0, 98, 97, 0, 87, 88, 89,
  573. 90, 91, 92, 94, 42, 28, 95, 0, 101, 0,
  574. 0, 27, 0, 26, 45, 46, 0, 33, 0, 34,
  575. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  576. 0, 84, 0, 0, 0, 0, 0, 37, 0, 0,
  577. 0, 0, 0, 0, 0, 41, 22, 43, 29, 35,
  578. 38, 0, 32, 0, 36, 40, 0, 0, 99, 93,
  579. 0, 30, 31, 23, 0, 0, 0, 0, 0, 0,
  580. 98, 97, 0, 87, 88, 89, 90, 91, 92, 94,
  581. 42, 28, 0, 0, 0, 0, 0, 0, 0, 0,
  582. 45, 46, 95, 33, 101, 34, 0, 27, 0, 26,
  583. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  584. 0, 0, 0, 37, 0, 0, 0, 0, 0, 0,
  585. 0, 41, 22, 43, 29, 35, 38, 0, 32, 0,
  586. 36, 40, 0, 0, 99, 0, 0, 30, 31, 23,
  587. 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
  588. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  589. 98, 97, 0, 87, 88, 89, 90, 91, 92, 94,
  590. 42, 28, 0, 0, 0, 0, 0, 0, 95, 101,
  591. 45, 46, 27, 33, 26, 34, 0, 0, 0, 0,
  592. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  593. 0, 0, 0, 37, 0, 0, 0, 0, 0, 0,
  594. 0, 41, 22, 43, 29, 35, 38, 0, 32, 0,
  595. 36, 40, 0, 0, 99, 54, 0, 30, 31, 23,
  596. 0, 0, 0, 0, 0, 93, 0, 0, 0, 0,
  597. 0, 0, 0, 0, 0, 0, 98, 97, 0, 87,
  598. 88, 89, 90, 91, 92, 94, 42, 28, 0, 0,
  599. 0, 0, 0, 95, 0, 0, 45, 46, 0, 33,
  600. 0, 34, 0, 0, 0, 0, 0, 0, 0, 136,
  601. 0, 0, 0, 0, 0, 0, 0, 147, 0, 37,
  602. 0, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  603. 29, 35, 38, 0, 32, 0, 36, 40, 0, 0,
  604. 99, 0, 0, 30, 31, 23, 0, 0, 0, 0,
  605. 0, 93, 0, 0, 0, 0, 0, 0, 0, 0,
  606. 0, 0, 98, 0, 0, 87, 88, 89, 90, 91,
  607. 92, 94, 42, 28, 0, 0, 0, 0, 0, 0,
  608. 0, 0, 45, 46, 0, 33, 0, 34, 0, 136,
  609. 18, 0, 0, 27, 0, 26, 0, 44, 0, 0,
  610. 220, 0, 0, 0, 136, 37, 0, 0, 0, 0,
  611. 227, 0, 0, 41, 22, 43, 29, 35, 38, 0,
  612. 32, 0, 36, 40, 136, 136, 99, 0, 0, 30,
  613. 31, 23, 0, 0, 0, 0, 93, 0, 0, 0,
  614. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  615. 87, 88, 89, 90, 91, 92, 94, 42, 28, 0,
  616. 0, 0, 0, 0, 0, 0, 0, 45, 46, 74,
  617. 33, 0, 34, 16, 15, 0, 0, 0, 272, 0,
  618. 0, 0, 0, 0, 0, 0, 0, 0, 106, 0,
  619. 37, 0, 0, 0, 0, 0, 0, 0, 41, 22,
  620. 43, 29, 35, 38, 0, 32, 0, 36, 40, 0,
  621. 0, 99, 0, 0, 30, 31, 23, 0, 0, 15,
  622. 0, 15, 0, 0, 0, 136, 141, 101, 0, 145,
  623. 27, 0, 26, 0, 0, 151, 0, 0, 0, 0,
  624. 0, 0, 0, 0, 0, 314, 0, 0, 0, 0,
  625. 237, 0, 0, 0, 171, 173, 175, 176, 177, 178,
  626. 179, 180, 181, 183, 0, 0, 0, 0, 0, 0,
  627. 0, 186, 187, 0, 0, 0, 0, 0, 0, 0,
  628. 0, 0, 0, 200, 0, 0, 0, 0, 0, 200,
  629. 200, 0, 0, 0, 0, 207, 208, 209, 200, 212,
  630. 213, 101, 356, 136, 27, 0, 26, 0, 0, 0,
  631. 0, 12, 13, 0, 0, 0, 362, 0, 0, 364,
  632. 101, 0, 0, 27, 237, 26, 0, 0, 231, 0,
  633. 0, 106, 0, 0, 0, 0, 0, 245, 42, 28,
  634. 0, 0, 0, 0, 0, 0, 0, 14, 45, 46,
  635. 0, 33, 0, 34, 0, 0, 0, 0, 0, 254,
  636. 0, 255, 0, 0, 0, 0, 0, 0, 0, 0,
  637. 0, 37, 0, 0, 0, 0, 0, 0, 0, 41,
  638. 22, 43, 29, 35, 38, 0, 32, 0, 36, 40,
  639. 0, 0, 25, 0, 0, 30, 31, 23, 18, 0,
  640. 0, 27, 0, 26, 0, 44, 0, 0, 0, 0,
  641. 0, 0, 0, 0, 200, 0, 0, 139, 0, 0,
  642. 295, 0, 0, 0, 0, 0, 297, 0, 0, 0,
  643. 0, 298, 301, 0, 0, 303, 304, 305, 0, 0,
  644. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  645. 18, 0, 106, 27, 240, 26, 0, 44, 0, 0,
  646. 0, 0, 0, 0, 0, 98, 97, 0, 0, 0,
  647. 0, 0, 0, 0, 241, 42, 28, 0, 331, 0,
  648. 0, 0, 0, 0, 0, 45, 46, 0, 33, 0,
  649. 34, 0, 338, 0, 0, 0, 0, 0, 342, 0,
  650. 343, 0, 0, 0, 0, 0, 0, 0, 37, 0,
  651. 0, 0, 0, 0, 0, 0, 41, 22, 43, 29,
  652. 35, 38, 0, 32, 0, 36, 40, 0, 240, 99,
  653. 0, 0, 30, 31, 23, 0, 0, 0, 101, 98,
  654. 97, 27, 0, 26, 0, 0, 0, 240, 241, 42,
  655. 28, 0, 0, 0, 0, 0, 0, 0, 98, 45,
  656. 46, 0, 33, 0, 34, 0, 0, 241, 42, 28,
  657. 0, 0, 0, 0, 0, 0, 0, 0, 45, 46,
  658. 0, 33, 37, 34, 0, 0, 0, 0, 0, 0,
  659. 41, 22, 43, 29, 35, 38, 0, 32, 0, 36,
  660. 40, 37, 0, 99, 0, 0, 30, 31, 23, 41,
  661. 22, 43, 29, 35, 38, 0, 32, 0, 36, 40,
  662. 0, 140, 99, 0, 0, 30, 31, 23, 282, 0,
  663. 0, 27, 0, 26, 0, 44, 0, 0, 0, 0,
  664. 0, 0, 0, 0, 0, 0, 42, 28, 0, 0,
  665. 0, 0, 0, 0, 0, 0, 45, 46, 0, 33,
  666. 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
  667. 0, 0, 0, 253, 0, 0, 0, 0, 0, 37,
  668. 0, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  669. 29, 35, 38, 0, 32, 0, 36, 40, 42, 28,
  670. 25, 0, 0, 30, 31, 23, 0, 0, 45, 46,
  671. 0, 33, 0, 34, 282, 0, 0, 27, 0, 26,
  672. 0, 44, 0, 0, 0, 0, 0, 0, 0, 0,
  673. 0, 37, 0, 0, 0, 0, 0, 0, 0, 41,
  674. 22, 43, 29, 35, 38, 0, 32, 0, 36, 40,
  675. 0, 0, 25, 0, 0, 30, 31, 23, 0, 0,
  676. 0, 0, 0, 0, 0, 240, 282, 0, 0, 27,
  677. 0, 26, 0, 44, 0, 0, 0, 0, 0, 0,
  678. 0, 0, 0, 0, 0, 241, 42, 28, 0, 0,
  679. 0, 0, 0, 0, 0, 0, 45, 46, 0, 33,
  680. 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
  681. 0, 0, 0, 0, 0, 0, 0, 0, 0, 37,
  682. 0, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  683. 29, 35, 38, 0, 32, 0, 36, 40, 0, 0,
  684. 99, 0, 0, 30, 31, 23, 0, 18, 203, 0,
  685. 27, 174, 26, 0, 44, 0, 0, 0, 0, 0,
  686. 0, 0, 0, 0, 0, 0, 18, 201, 0, 27,
  687. 0, 26, 0, 44, 0, 0, 42, 28, 0, 0,
  688. 0, 0, 0, 0, 0, 0, 45, 46, 0, 33,
  689. 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
  690. 0, 0, 0, 0, 0, 0, 0, 0, 0, 37,
  691. 0, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  692. 29, 35, 38, 0, 32, 0, 36, 40, 0, 0,
  693. 25, 0, 0, 30, 31, 23, 0, 172, 18, 0,
  694. 0, 27, 0, 26, 0, 44, 0, 0, 0, 0,
  695. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  696. 0, 0, 42, 28, 0, 0, 0, 0, 0, 0,
  697. 0, 0, 45, 46, 0, 33, 0, 34, 0, 0,
  698. 0, 0, 0, 0, 0, 0, 0, 0, 0, 253,
  699. 0, 0, 0, 18, 0, 37, 27, 0, 26, 0,
  700. 44, 0, 0, 41, 22, 43, 29, 35, 38, 0,
  701. 32, 0, 36, 40, 42, 28, 25, 0, 0, 30,
  702. 31, 23, 0, 0, 45, 46, 0, 33, 0, 34,
  703. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  704. 0, 0, 0, 0, 0, 18, 0, 37, 27, 0,
  705. 26, 0, 44, 0, 0, 41, 22, 43, 29, 35,
  706. 38, 0, 32, 0, 36, 40, 0, 0, 25, 0,
  707. 0, 30, 31, 23, 0, 0, 0, 0, 0, 0,
  708. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  709. 0, 0, 0, 0, 0, 42, 28, 282, 0, 0,
  710. 27, 0, 26, 0, 44, 45, 46, 0, 33, 0,
  711. 34, 0, 0, 0, 42, 28, 161, 0, 0, 27,
  712. 0, 26, 0, 44, 45, 46, 0, 33, 37, 34,
  713. 0, 0, 0, 0, 0, 0, 41, 22, 43, 29,
  714. 35, 38, 0, 32, 0, 36, 40, 37, 0, 25,
  715. 0, 0, 30, 31, 23, 41, 22, 43, 29, 35,
  716. 38, 174, 32, 0, 36, 40, 0, 0, 25, 0,
  717. 0, 30, 31, 23, 0, 0, 101, 0, 0, 27,
  718. 0, 26, 0, 44, 0, 0, 42, 28, 0, 0,
  719. 0, 0, 0, 0, 0, 101, 45, 46, 27, 33,
  720. 26, 34, 0, 0, 0, 0, 0, 0, 0, 0,
  721. 0, 0, 0, 0, 0, 0, 172, 0, 0, 37,
  722. 0, 0, 0, 0, 0, 0, 0, 41, 22, 43,
  723. 29, 35, 38, 0, 32, 0, 36, 40, 0, 0,
  724. 25, 42, 28, 30, 31, 23, 0, 0, 0, 0,
  725. 0, 45, 46, 0, 33, 0, 34, 0, 0, 0,
  726. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  727. 0, 0, 0, 0, 37, 0, 0, 0, 0, 0,
  728. 0, 0, 41, 22, 43, 29, 35, 38, 0, 32,
  729. 0, 36, 40, 42, 28, 25, 0, 0, 30, 31,
  730. 23, 0, 0, 45, 46, 0, 33, 0, 34, 0,
  731. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  732. 0, 0, 0, 0, 0, 0, 37, 0, 0, 0,
  733. 0, 0, 0, 0, 41, 22, 43, 29, 35, 38,
  734. 0, 32, 0, 36, 40, 42, 28, 25, 0, 0,
  735. 30, 31, 23, 0, 0, 45, 46, 0, 33, 0,
  736. 34, 0, 0, 0, 42, 28, 0, 0, 0, 0,
  737. 0, 0, 0, 0, 45, 46, 0, 33, 37, 34,
  738. 0, 0, 0, 0, 0, 0, 41, 22, 43, 29,
  739. 35, 38, 0, 32, 0, 36, 40, 37, 0, 25,
  740. 0, 0, 30, 31, 23, 41, 22, 43, 29, 35,
  741. 38, 0, 32, 0, 36, 40, 0, 0, 25, 0,
  742. 0, 30, 31, 23, 42, 28, 0, 0, 0, 0,
  743. 0, 0, 0, 0, 45, 46, 0, 33, 0, 34,
  744. 0, 0, 0, 42, 28, 0, 0, 0, 0, 0,
  745. 0, 0, 0, 45, 46, 0, 33, 37, 34, 0,
  746. 0, 0, 0, 0, 0, 41, 22, 43, 29, 35,
  747. 38, 0, 32, 0, 36, 40, 37, 0, 25, 0,
  748. 0, 30, 31, 23, 41, 22, 43, 29, 35, 38,
  749. 0, 0, 0, 36, 40, 0, 0, 99, 0, 0,
  750. 30, 31, 23 };
  751. __YYSCLASS yytabelem yypact[]={
  752. 1, -3000, -3000, -3000, 2970, 5, -3000, -3000, 4, -3000,
  753. 45, 346, -32, -32, -294, 2618, -3000, -303, 3925, -3000,
  754. -24, 6, -3000, 546, -3000, 4056, 546, 546, 135, 133,
  755. -273, -273, -278, 131, 130, -3000, 129, 127, -3000, 126,
  756. 125, -3000, -3000, -3000, -3000, -3000, -3000, -3000, -3000, 2970,
  757. 346, 3925, -3000, 1129, -3000, -10, 3925, -10, -178, 3278,
  758. -3000, 1196, 346, -10, -10, 3278, -10, -3000, -184, -3000,
  759. 122, 121, 3996, -251, 2618, -3000, 119, -3000, -3000, 346,
  760. 346, 118, -3000, -3000, 3925, 3873, 3818, 3925, 3925, 3925,
  761. 3925, 3925, 3925, 3925, -251, -314, -24, -3000, -3000, 546,
  762. -334, 3925, 3925, -3000, -3000, 95, 1654, 546, 546, 546,
  763. 546, 546, 546, 3925, -3000, -3000, -330, -330, -330, 3746,
  764. 3727, -3000, -3000, -238, 546, 3925, 3925, 3925, 3925, 3925,
  765. 3925, -310, -3000, 930, -32, -3000, -3000, -3000, -179, -184,
  766. -3000, 1578, -3000, -3000, 1196, 1578, -3000, -281, 863, -3000,
  767. -3000, 1578, -3000, -3000, 1196, -3000, -179, 616, 3925, -76,
  768. 78, 3925, 3181, -306, -3000, -24, 2, 3925, 803, 743,
  769. -295, 2532, -3000, 2704, -3000, 2789, 4075, 4075, 4075, 4075,
  770. 4075, 4075, -3000, 4075, -3000, -273, 2442, 2618, -242, 3330,
  771. -3000, 3330, -3000, 39, 39, -330, -330, -330, -330, 62,
  772. 2618, -3000, 89, -3000, 87, 546, -24, 2366, 2366, 2366,
  773. 85, 78, 2366, 2366, 68, -3000, 346, -3000, -3000, -3000,
  774. -3000, -3000, 477, -3000, -180, -3000, -3000, -3000, 35, -45,
  775. -3000, 2275, 546, 546, 546, 3646, 83, 3977, 3594, 3508,
  776. 3977, -251, -24, 3977, 3925, 2275, -3000, -3000, 79, -3000,
  777. 3925, -3000, -251, -3000, 2618, 2618, 3330, -3000, -3000, -3000,
  778. -24, 3330, 3330, -233, -3000, 3330, 3330, 3330, -3000, 417,
  779. -320, -3000, -3000, -3000, 3, -251, -213, -3000, -24, -24,
  780. -24, 3181, 3925, -243, 3107, 3200, 3418, -3000, 4075, -3000,
  781. 3181, 48, -213, -213, -227, 2618, -3000, 2618, 2190, 113,
  782. 109, 2102, 77, 1468, 1346, 1270, -3000, 116, 3925, -184,
  783. 91, -3000, 75, -251, 3977, -3000, -32, -3000, -3000, -3000,
  784. -3000, -3000, 3330, -3000, -3000, -259, -3000, -259, 3330, -3000,
  785. 3925, 2010, 616, -213, -243, -3000, 3181, 346, 1918, 104,
  786. 103, 96, 1830, 1745, -184, 91, 1196, 274, -3000, -3000,
  787. -3000, -3000, -3000, -10, 616, -213, -3000, -3000, -3000, 91,
  788. 1196, -213, -3000, 1196, -3000 };
  789. __YYSCLASS yytabelem yypgo[]={
  790. 0, 230, 3089, 272, 87, 229, 202, 223, 200, 488,
  791. 99, 114, 222, 149, 2, 3, 2875, 54, 0, 189,
  792. 221, 220, 219, 218, 217, 215, 212, 1, 211, 183,
  793. 90, 205, 5, 1071, 8, 17, 138, 82, 203, 199,
  794. 198, 197, 196, 195, 194, 193, 191, 190, 185 };
  795. __YYSCLASS yytabelem yyr1[]={
  796. 0, 40, 40, 36, 36, 37, 37, 33, 33, 26,
  797. 26, 24, 24, 41, 22, 42, 22, 43, 22, 20,
  798. 20, 23, 30, 30, 34, 34, 35, 35, 29, 29,
  799. 15, 15, 1, 1, 10, 11, 11, 11, 11, 11,
  800. 11, 11, 44, 11, 12, 12, 6, 6, 3, 3,
  801. 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
  802. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  803. 2, 2, 2, 2, 2, 2, 2, 2, 4, 4,
  804. 5, 5, 7, 7, 7, 39, 39, 28, 28, 28,
  805. 28, 31, 31, 9, 9, 45, 13, 32, 32, 14,
  806. 14, 14, 14, 14, 14, 14, 14, 27, 27, 16,
  807. 16, 16, 46, 47, 16, 16, 16, 16, 16, 16,
  808. 16, 16, 16, 16, 16, 16, 48, 16, 16, 17,
  809. 17, 38, 38, 8, 8, 8, 8, 8, 8, 8,
  810. 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  811. 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  812. 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  813. 8, 8, 8, 18, 18, 18, 18, 21, 21, 21,
  814. 19, 19, 19, 25 };
  815. __YYSCLASS yytabelem yyr2[]={
  816. 0, 3, 3, 2, 4, 2, 4, 2, 4, 2,
  817. 4, 2, 4, 1, 25, 1, 21, 1, 17, 3,
  818. 3, 9, 2, 4, 2, 4, 1, 2, 1, 2,
  819. 1, 2, 3, 7, 3, 3, 9, 7, 13, 7,
  820. 9, 9, 1, 19, 2, 7, 2, 7, 7, 11,
  821. 7, 7, 7, 7, 7, 11, 5, 2, 2, 7,
  822. 11, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  823. 7, 7, 11, 9, 7, 5, 2, 2, 7, 7,
  824. 2, 7, 1, 2, 7, 2, 2, 2, 2, 4,
  825. 4, 2, 4, 3, 5, 1, 9, 2, 4, 9,
  826. 9, 9, 5, 11, 5, 3, 3, 2, 4, 5,
  827. 7, 5, 1, 1, 19, 7, 5, 2, 9, 5,
  828. 7, 5, 5, 7, 5, 4, 1, 7, 5, 2,
  829. 5, 2, 2, 7, 7, 7, 7, 7, 7, 5,
  830. 5, 5, 7, 9, 3, 7, 9, 5, 5, 5,
  831. 5, 9, 7, 5, 3, 13, 13, 7, 13, 13,
  832. 3, 17, 17, 13, 9, 3, 13, 13, 17, 17,
  833. 17, 13, 2, 2, 9, 3, 5, 1, 3, 7,
  834. 3, 3, 3, 9 };
  835. __YYSCLASS yytabelem yychk[]={
  836. -3000, -40, -1, 256, -29, -28, 263, 59, -12, -11,
  837. -10, -30, 261, 262, 297, -2, 123, -18, 40, -9,
  838. -8, -19, 330, 347, -13, 342, 45, 43, 289, 332,
  839. 345, 346, 336, 301, 303, 333, 338, 321, 334, -38,
  840. 339, 329, 288, 331, 47, 298, 299, 263, 59, -29,
  841. -30, 44, 263, -17, -16, 290, 291, 292, -26, 295,
  842. -22, -23, -30, 304, 305, 337, -14, -25, 59, 294,
  843. 296, 300, -39, 293, -2, 256, 340, 319, 320, -30,
  844. -30, -20, 329, 332, 63, -37, -36, 281, 282, 283,
  845. 284, 285, 286, 267, 287, 124, -8, 279, 278, 342,
  846. -18, 40, 312, 345, 346, -4, -2, 43, 45, 42,
  847. 47, 37, 344, 91, -8, -9, -8, -8, -8, 40,
  848. 40, -18, -18, -18, 285, 40, 40, 40, 40, 40,
  849. 40, -45, -11, -17, -10, 125, -16, -27, -34, 59,
  850. 263, -2, -27, 263, -46, -2, -27, -16, -17, -27,
  851. -27, -2, -27, -27, -48, -35, -34, 40, 40, -7,
  852. -5, 40, -3, -18, -9, -8, -19, 40, -17, -17,
  853. 40, -2, 263, -2, 263, -2, -2, -2, -2, -2,
  854. -2, -2, -13, -2, -19, 336, -2, -2, 41, -33,
  855. 44, -33, 41, -8, -8, -8, -8, -8, -8, -6,
  856. -2, 41, -6, 41, -6, 285, -8, -2, -2, -2,
  857. -6, -13, -2, -2, 335, 125, -30, 263, -35, -27,
  858. -16, -27, -24, 322, -31, 125, -27, -16, -15, -19,
  859. -14, -2, 124, 280, 283, -33, -4, 63, -37, -36,
  860. 267, 287, -8, 312, 91, -2, 125, 125, -21, 329,
  861. 58, -18, 287, 263, -2, -2, -33, 93, 41, 41,
  862. -8, -33, -33, -33, 41, -33, -33, -33, 47, -17,
  863. -47, 263, -16, 263, 59, 287, -32, 41, -8, -8,
  864. -8, -3, 40, 41, -3, -3, -3, -13, -3, -19,
  865. -3, -6, -32, -32, -33, -2, -19, -2, -2, -13,
  866. -13, -2, -19, -2, -2, -2, 125, 340, -35, 59,
  867. -19, 263, -4, 287, 58, 93, -44, 329, 41, 41,
  868. 41, 41, -33, 41, 41, -33, 41, -33, -33, 41,
  869. 40, -2, -35, -32, 41, -19, -3, -30, -2, -13,
  870. -18, -18, -2, -2, 59, -15, -43, -17, 41, 41,
  871. 41, 41, 41, 41, -35, -32, -16, 125, -27, -15,
  872. -42, -32, -16, -41, -16 };
  873. __YYSCLASS yytabelem yydef[]={
  874. -2, -2, 1, 2, 32, 29, 87, 88, 28, 44,
  875. 35, 0, 0, 0, 0, 34, 22, 172, 0, 76,
  876. 77, 173, 175, 0, 93, 0, 0, 0, 144, 0,
  877. 0, 0, 154, 0, 0, 160, 0, 0, 165, 0,
  878. 0, 180, 181, 182, 95, 131, 132, 89, 90, 33,
  879. 0, 0, 23, 0, 129, 0, 0, 0, 112, 0,
  880. 117, 0, 0, 0, 0, 0, 0, 126, 26, 9,
  881. 0, 0, 82, 0, 105, 106, 0, 85, 86, 0,
  882. 0, 0, 19, 20, 0, 0, 0, 0, 0, 0,
  883. 0, 0, 0, 0, 0, 0, 75, 5, 3, 0,
  884. 172, 0, 0, 149, 150, 0, 0, 0, 0, 0,
  885. 0, 0, 0, 0, 176, 94, 141, 139, 140, 0,
  886. 0, 147, 148, 153, 0, 0, 0, 0, 0, 0,
  887. 0, 0, 45, 0, 37, 39, 130, 109, 107, 26,
  888. 24, 0, 111, 10, 0, 0, 116, 119, 0, 121,
  889. 122, 0, 124, 125, 0, 128, 27, -2, 0, 102,
  890. 83, 0, 80, 172, 57, 58, 104, 0, 0, 0,
  891. 177, 0, 6, 61, 4, 62, -2, -2, -2, -2,
  892. -2, -2, 69, -2, 71, 74, 0, 59, 0, 0,
  893. 7, 0, 157, 133, 134, 135, 136, 137, 138, 0,
  894. 46, 142, 0, 145, 0, 0, 152, 0, 0, 0,
  895. 0, 93, 0, 0, 0, 36, 0, 25, 108, 110,
  896. 113, 115, 0, 11, 120, 91, 123, 127, 0, 173,
  897. 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  898. 0, 0, 56, 0, 0, 0, 40, 41, 0, 178,
  899. 0, 73, 0, 8, 79, 78, 0, 174, 143, 146,
  900. 151, 0, 0, 0, 164, 0, 0, 0, 96, 0,
  901. 0, 12, 118, 92, 26, 0, 21, 97, 99, 100,
  902. 101, 81, 0, 84, 0, 50, 51, 52, -2, 54,
  903. 48, 0, 183, 42, 0, 60, 72, 47, 0, 93,
  904. 93, 0, 0, 0, 0, 0, 38, 0, 0, 26,
  905. 0, 98, 0, 0, 0, 103, 0, 179, 155, 156,
  906. 158, 159, 0, 163, 166, 0, 167, 0, 0, 171,
  907. 0, 0, -2, 17, 0, 55, 49, 0, 0, 93,
  908. 0, 0, 0, 0, 26, 0, 0, 0, 161, 162,
  909. 168, 169, 170, 0, -2, 15, 18, 43, 114, 0,
  910. 0, 13, 16, 0, 14 };
  911. typedef struct { char *t_name; int t_val; } yytoktype;
  912. #ifndef YYDEBUG
  913. # define YYDEBUG 0 /* don't allow debugging */
  914. #endif
  915. #if YYDEBUG
  916. __YYSCLASS yytoktype yytoks[] =
  917. {
  918. "FIRSTTOKEN", 257,
  919. "PROGRAM", 258,
  920. "PASTAT", 259,
  921. "PASTAT2", 260,
  922. "XBEGIN", 261,
  923. "XEND", 262,
  924. "NL", 263,
  925. ",", 44,
  926. "{", 123,
  927. "(", 40,
  928. "|", 124,
  929. ";", 59,
  930. "/", 47,
  931. ")", 41,
  932. "}", 125,
  933. "[", 91,
  934. "]", 93,
  935. "ARRAY", 264,
  936. "MATCH", 265,
  937. "NOTMATCH", 266,
  938. "MATCHOP", 267,
  939. "FINAL", 268,
  940. "DOT", 269,
  941. "ALL", 270,
  942. "CCL", 271,
  943. "NCCL", 272,
  944. "CHAR", 273,
  945. "OR", 274,
  946. "STAR", 275,
  947. "QUEST", 276,
  948. "PLUS", 277,
  949. "AND", 278,
  950. "BOR", 279,
  951. "APPEND", 280,
  952. "EQ", 281,
  953. "GE", 282,
  954. "GT", 283,
  955. "LE", 284,
  956. "LT", 285,
  957. "NE", 286,
  958. "IN", 287,
  959. "ARG", 288,
  960. "BLTIN", 289,
  961. "BREAK", 290,
  962. "CLOSE", 291,
  963. "CONTINUE", 292,
  964. "DELETE", 293,
  965. "DO", 294,
  966. "EXIT", 295,
  967. "FOR", 296,
  968. "FUNC", 297,
  969. "SUB", 298,
  970. "GSUB", 299,
  971. "IF", 300,
  972. "INDEX", 301,
  973. "LSUBSTR", 302,
  974. "MATCHFCN", 303,
  975. "NEXT", 304,
  976. "NEXTFILE", 305,
  977. "ADD", 306,
  978. "MINUS", 307,
  979. "MULT", 308,
  980. "DIVIDE", 309,
  981. "MOD", 310,
  982. "ASSIGN", 311,
  983. "ASGNOP", 312,
  984. "ADDEQ", 313,
  985. "SUBEQ", 314,
  986. "MULTEQ", 315,
  987. "DIVEQ", 316,
  988. "MODEQ", 317,
  989. "POWEQ", 318,
  990. "PRINT", 319,
  991. "PRINTF", 320,
  992. "SPRINTF", 321,
  993. "ELSE", 322,
  994. "INTEST", 323,
  995. "CONDEXPR", 324,
  996. "POSTINCR", 325,
  997. "PREINCR", 326,
  998. "POSTDECR", 327,
  999. "PREDECR", 328,
  1000. "VAR", 329,
  1001. "IVAR", 330,
  1002. "VARNF", 331,
  1003. "CALL", 332,
  1004. "NUMBER", 333,
  1005. "STRING", 334,
  1006. "REGEXPR", 335,
  1007. "?", 63,
  1008. ":", 58,
  1009. "GETLINE", 336,
  1010. "RETURN", 337,
  1011. "SPLIT", 338,
  1012. "SUBSTR", 339,
  1013. "WHILE", 340,
  1014. "CAT", 341,
  1015. "+", 43,
  1016. "-", 45,
  1017. "*", 42,
  1018. "%", 37,
  1019. "NOT", 342,
  1020. "UMINUS", 343,
  1021. "POWER", 344,
  1022. "DECR", 345,
  1023. "INCR", 346,
  1024. "INDIRECT", 347,
  1025. "LASTTOKEN", 348,
  1026. "-unknown-", -1 /* ends search */
  1027. };
  1028. __YYSCLASS char * yyreds[] =
  1029. {
  1030. "-no such reduction-",
  1031. "program : pas",
  1032. "program : error",
  1033. "and : AND",
  1034. "and : and NL",
  1035. "bor : BOR",
  1036. "bor : bor NL",
  1037. "comma : ','",
  1038. "comma : comma NL",
  1039. "do : DO",
  1040. "do : do NL",
  1041. "else : ELSE",
  1042. "else : else NL",
  1043. "for : FOR '(' opt_simple_stmt ';' opt_nl pattern ';' opt_nl opt_simple_stmt rparen",
  1044. "for : FOR '(' opt_simple_stmt ';' opt_nl pattern ';' opt_nl opt_simple_stmt rparen stmt",
  1045. "for : FOR '(' opt_simple_stmt ';' ';' opt_nl opt_simple_stmt rparen",
  1046. "for : FOR '(' opt_simple_stmt ';' ';' opt_nl opt_simple_stmt rparen stmt",
  1047. "for : FOR '(' varname IN varname rparen",
  1048. "for : FOR '(' varname IN varname rparen stmt",
  1049. "funcname : VAR",
  1050. "funcname : CALL",
  1051. "if : IF '(' pattern rparen",
  1052. "lbrace : '{'",
  1053. "lbrace : lbrace NL",
  1054. "nl : NL",
  1055. "nl : nl NL",
  1056. "opt_nl : /* empty */",
  1057. "opt_nl : nl",
  1058. "opt_pst : /* empty */",
  1059. "opt_pst : pst",
  1060. "opt_simple_stmt : /* empty */",
  1061. "opt_simple_stmt : simple_stmt",
  1062. "pas : opt_pst",
  1063. "pas : opt_pst pa_stats opt_pst",
  1064. "pa_pat : pattern",
  1065. "pa_stat : pa_pat",
  1066. "pa_stat : pa_pat lbrace stmtlist '}'",
  1067. "pa_stat : pa_pat ',' pa_pat",
  1068. "pa_stat : pa_pat ',' pa_pat lbrace stmtlist '}'",
  1069. "pa_stat : lbrace stmtlist '}'",
  1070. "pa_stat : XBEGIN lbrace stmtlist '}'",
  1071. "pa_stat : XEND lbrace stmtlist '}'",
  1072. "pa_stat : FUNC funcname '(' varlist rparen",
  1073. "pa_stat : FUNC funcname '(' varlist rparen lbrace stmtlist '}'",
  1074. "pa_stats : pa_stat",
  1075. "pa_stats : pa_stats opt_pst pa_stat",
  1076. "patlist : pattern",
  1077. "patlist : patlist comma pattern",
  1078. "ppattern : var ASGNOP ppattern",
  1079. "ppattern : ppattern '?' ppattern ':' ppattern",
  1080. "ppattern : ppattern bor ppattern",
  1081. "ppattern : ppattern and ppattern",
  1082. "ppattern : ppattern MATCHOP reg_expr",
  1083. "ppattern : ppattern MATCHOP ppattern",
  1084. "ppattern : ppattern IN varname",
  1085. "ppattern : '(' plist ')' IN varname",
  1086. "ppattern : ppattern term",
  1087. "ppattern : re",
  1088. "ppattern : term",
  1089. "pattern : var ASGNOP pattern",
  1090. "pattern : pattern '?' pattern ':' pattern",
  1091. "pattern : pattern bor pattern",
  1092. "pattern : pattern and pattern",
  1093. "pattern : pattern EQ pattern",
  1094. "pattern : pattern GE pattern",
  1095. "pattern : pattern GT pattern",
  1096. "pattern : pattern LE pattern",
  1097. "pattern : pattern LT pattern",
  1098. "pattern : pattern NE pattern",
  1099. "pattern : pattern MATCHOP reg_expr",
  1100. "pattern : pattern MATCHOP pattern",
  1101. "pattern : pattern IN varname",
  1102. "pattern : '(' plist ')' IN varname",
  1103. "pattern : pattern '|' GETLINE var",
  1104. "pattern : pattern '|' GETLINE",
  1105. "pattern : pattern term",
  1106. "pattern : re",
  1107. "pattern : term",
  1108. "plist : pattern comma pattern",
  1109. "plist : plist comma pattern",
  1110. "pplist : ppattern",
  1111. "pplist : pplist comma ppattern",
  1112. "prarg : /* empty */",
  1113. "prarg : pplist",
  1114. "prarg : '(' plist ')'",
  1115. "print : PRINT",
  1116. "print : PRINTF",
  1117. "pst : NL",
  1118. "pst : ';'",
  1119. "pst : pst NL",
  1120. "pst : pst ';'",
  1121. "rbrace : '}'",
  1122. "rbrace : rbrace NL",
  1123. "re : reg_expr",
  1124. "re : NOT re",
  1125. "reg_expr : '/'",
  1126. "reg_expr : '/' REGEXPR '/'",
  1127. "rparen : ')'",
  1128. "rparen : rparen NL",
  1129. "simple_stmt : print prarg '|' term",
  1130. "simple_stmt : print prarg APPEND term",
  1131. "simple_stmt : print prarg GT term",
  1132. "simple_stmt : print prarg",
  1133. "simple_stmt : DELETE varname '[' patlist ']'",
  1134. "simple_stmt : DELETE varname",
  1135. "simple_stmt : pattern",
  1136. "simple_stmt : error",
  1137. "st : nl",
  1138. "st : ';' opt_nl",
  1139. "stmt : BREAK st",
  1140. "stmt : CLOSE pattern st",
  1141. "stmt : CONTINUE st",
  1142. "stmt : do",
  1143. "stmt : do stmt",
  1144. "stmt : do stmt WHILE '(' pattern ')' st",
  1145. "stmt : EXIT pattern st",
  1146. "stmt : EXIT st",
  1147. "stmt : for",
  1148. "stmt : if stmt else stmt",
  1149. "stmt : if stmt",
  1150. "stmt : lbrace stmtlist rbrace",
  1151. "stmt : NEXT st",
  1152. "stmt : NEXTFILE st",
  1153. "stmt : RETURN pattern st",
  1154. "stmt : RETURN st",
  1155. "stmt : simple_stmt st",
  1156. "stmt : while",
  1157. "stmt : while stmt",
  1158. "stmt : ';' opt_nl",
  1159. "stmtlist : stmt",
  1160. "stmtlist : stmtlist stmt",
  1161. "subop : SUB",
  1162. "subop : GSUB",
  1163. "term : term '+' term",
  1164. "term : term '-' term",
  1165. "term : term '*' term",
  1166. "term : term '/' term",
  1167. "term : term '%' term",
  1168. "term : term POWER term",
  1169. "term : '-' term",
  1170. "term : '+' term",
  1171. "term : NOT term",
  1172. "term : BLTIN '(' ')'",
  1173. "term : BLTIN '(' patlist ')'",
  1174. "term : BLTIN",
  1175. "term : CALL '(' ')'",
  1176. "term : CALL '(' patlist ')'",
  1177. "term : DECR var",
  1178. "term : INCR var",
  1179. "term : var DECR",
  1180. "term : var INCR",
  1181. "term : GETLINE var LT term",
  1182. "term : GETLINE LT term",
  1183. "term : GETLINE var",
  1184. "term : GETLINE",
  1185. "term : INDEX '(' pattern comma pattern ')'",
  1186. "term : INDEX '(' pattern comma reg_expr ')'",
  1187. "term : '(' pattern ')'",
  1188. "term : MATCHFCN '(' pattern comma reg_expr ')'",
  1189. "term : MATCHFCN '(' pattern comma pattern ')'",
  1190. "term : NUMBER",
  1191. "term : SPLIT '(' pattern comma varname comma pattern ')'",
  1192. "term : SPLIT '(' pattern comma varname comma reg_expr ')'",
  1193. "term : SPLIT '(' pattern comma varname ')'",
  1194. "term : SPRINTF '(' patlist ')'",
  1195. "term : STRING",
  1196. "term : subop '(' reg_expr comma pattern ')'",
  1197. "term : subop '(' pattern comma pattern ')'",
  1198. "term : subop '(' reg_expr comma pattern comma var ')'",
  1199. "term : subop '(' pattern comma pattern comma var ')'",
  1200. "term : SUBSTR '(' pattern comma pattern comma pattern ')'",
  1201. "term : SUBSTR '(' pattern comma pattern ')'",
  1202. "term : var",
  1203. "var : varname",
  1204. "var : varname '[' patlist ']'",
  1205. "var : IVAR",
  1206. "var : INDIRECT term",
  1207. "varlist : /* empty */",
  1208. "varlist : VAR",
  1209. "varlist : varlist comma VAR",
  1210. "varname : VAR",
  1211. "varname : ARG",
  1212. "varname : VARNF",
  1213. "while : WHILE '(' pattern rparen",
  1214. };
  1215. #endif /* YYDEBUG */
  1216. #define YYFLAG (-3000)
  1217. /* @(#) $Revision: 563 $ */
  1218. /*
  1219. ** Skeleton parser driver for yacc output
  1220. */
  1221. #if defined(NLS) && !defined(NL_SETN)
  1222. #include <msgbuf.h>
  1223. #endif
  1224. #ifndef nl_msg
  1225. #define nl_msg(i,s) (s)
  1226. #endif
  1227. /*
  1228. ** yacc user known macros and defines
  1229. */
  1230. #define YYERROR goto yyerrlab
  1231. #ifndef __RUNTIME_YYMAXDEPTH
  1232. #define YYACCEPT return(0)
  1233. #define YYABORT return(1)
  1234. #else
  1235. #define YYACCEPT {free_stacks(); return(0);}
  1236. #define YYABORT {free_stacks(); return(1);}
  1237. #endif
  1238. #define YYBACKUP( newtoken, newvalue )\
  1239. {\
  1240. if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
  1241. {\
  1242. yyerror( (nl_msg(30001,"syntax error - cannot backup")) );\
  1243. goto yyerrlab;\
  1244. }\
  1245. yychar = newtoken;\
  1246. yystate = *yyps;\
  1247. yylval = newvalue;\
  1248. goto yynewstate;\
  1249. }
  1250. #define YYRECOVERING() (!!yyerrflag)
  1251. #ifndef YYDEBUG
  1252. # define YYDEBUG 1 /* make debugging available */
  1253. #endif
  1254. /*
  1255. ** user known globals
  1256. */
  1257. int yydebug; /* set to 1 to get debugging */
  1258. /*
  1259. ** driver internal defines
  1260. */
  1261. /* define for YYFLAG now generated by yacc program. */
  1262. /*#define YYFLAG (FLAGVAL)*/
  1263. /*
  1264. ** global variables used by the parser
  1265. */
  1266. # ifndef __RUNTIME_YYMAXDEPTH
  1267. __YYSCLASS YYSTYPE yyv[ YYMAXDEPTH ]; /* value stack */
  1268. __YYSCLASS int yys[ YYMAXDEPTH ]; /* state stack */
  1269. # else
  1270. __YYSCLASS YYSTYPE *yyv; /* pointer to malloc'ed value stack */
  1271. __YYSCLASS int *yys; /* pointer to malloc'ed stack stack */
  1272. #if defined(__STDC__) || defined (__cplusplus)
  1273. #include <stdlib.h>
  1274. #else
  1275. extern char *malloc();
  1276. extern char *realloc();
  1277. extern void free();
  1278. #endif /* __STDC__ or __cplusplus */
  1279. static int allocate_stacks();
  1280. static void free_stacks();
  1281. # ifndef YYINCREMENT
  1282. # define YYINCREMENT (YYMAXDEPTH/2) + 10
  1283. # endif
  1284. # endif /* __RUNTIME_YYMAXDEPTH */
  1285. long yymaxdepth = YYMAXDEPTH;
  1286. __YYSCLASS YYSTYPE *yypv; /* top of value stack */
  1287. __YYSCLASS int *yyps; /* top of state stack */
  1288. __YYSCLASS int yystate; /* current state */
  1289. __YYSCLASS int yytmp; /* extra var (lasts between blocks) */
  1290. int yynerrs; /* number of errors */
  1291. __YYSCLASS int yyerrflag; /* error recovery flag */
  1292. int yychar; /* current input token number */
  1293. /*
  1294. ** yyparse - return 0 if worked, 1 if syntax error not recovered from
  1295. */
  1296. int
  1297. #ifndef __STDC__
  1298. yyparse()
  1299. #else
  1300. yyparse(void)
  1301. #endif
  1302. {
  1303. register YYSTYPE *yypvt; /* top of value stack for $vars */
  1304. /*
  1305. ** Initialize externals - yyparse may be called more than once
  1306. */
  1307. # ifdef __RUNTIME_YYMAXDEPTH
  1308. if (allocate_stacks()) YYABORT;
  1309. # endif
  1310. yypv = &yyv[-1];
  1311. yyps = &yys[-1];
  1312. yystate = 0;
  1313. yytmp = 0;
  1314. yynerrs = 0;
  1315. yyerrflag = 0;
  1316. yychar = -1;
  1317. goto yystack;
  1318. {
  1319. register YYSTYPE *yy_pv; /* top of value stack */
  1320. register int *yy_ps; /* top of state stack */
  1321. register int yy_state; /* current state */
  1322. register int yy_n; /* internal state number info */
  1323. /*
  1324. ** get globals into registers.
  1325. ** branch to here only if YYBACKUP was called.
  1326. */
  1327. yynewstate:
  1328. yy_pv = yypv;
  1329. yy_ps = yyps;
  1330. yy_state = yystate;
  1331. goto yy_newstate;
  1332. /*
  1333. ** get globals into registers.
  1334. ** either we just started, or we just finished a reduction
  1335. */
  1336. yystack:
  1337. yy_pv = yypv;
  1338. yy_ps = yyps;
  1339. yy_state = yystate;
  1340. /*
  1341. ** top of for (;;) loop while no reductions done
  1342. */
  1343. yy_stack:
  1344. /*
  1345. ** put a state and value onto the stacks
  1346. */
  1347. #if YYDEBUG
  1348. /*
  1349. ** if debugging, look up token value in list of value vs.
  1350. ** name pairs. 0 and negative (-1) are special values.
  1351. ** Note: linear search is used since time is not a real
  1352. ** consideration while debugging.
  1353. */
  1354. if ( yydebug )
  1355. {
  1356. register int yy_i;
  1357. printf( "State %d, token ", yy_state );
  1358. if ( yychar == 0 )
  1359. printf( "end-of-file\n" );
  1360. else if ( yychar < 0 )
  1361. printf( "-none-\n" );
  1362. else
  1363. {
  1364. for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
  1365. yy_i++ )
  1366. {
  1367. if ( yytoks[yy_i].t_val == yychar )
  1368. break;
  1369. }
  1370. printf( "%s\n", yytoks[yy_i].t_name );
  1371. }
  1372. }
  1373. #endif /* YYDEBUG */
  1374. if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */
  1375. {
  1376. # ifndef __RUNTIME_YYMAXDEPTH
  1377. yyerror( (nl_msg(30002,"yacc stack overflow")) );
  1378. YYABORT;
  1379. # else
  1380. /* save old stack bases to recalculate pointers */
  1381. YYSTYPE * yyv_old = yyv;
  1382. int * yys_old = yys;
  1383. yymaxdepth += YYINCREMENT;
  1384. yys = (int *) realloc(yys, yymaxdepth * sizeof(int));
  1385. yyv = (YYSTYPE *) realloc(yyv, yymaxdepth * sizeof(YYSTYPE));
  1386. if (yys==0 || yyv==0) {
  1387. yyerror( (nl_msg(30002,"yacc stack overflow")) );
  1388. YYABORT;
  1389. }
  1390. /* Reset pointers into stack */
  1391. yy_ps = (yy_ps - yys_old) + yys;
  1392. yyps = (yyps - yys_old) + yys;
  1393. yy_pv = (yy_pv - yyv_old) + yyv;
  1394. yypv = (yypv - yyv_old) + yyv;
  1395. # endif
  1396. }
  1397. *yy_ps = yy_state;
  1398. *++yy_pv = yyval;
  1399. /*
  1400. ** we have a new state - find out what to do
  1401. */
  1402. yy_newstate:
  1403. if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
  1404. goto yydefault; /* simple state */
  1405. #if YYDEBUG
  1406. /*
  1407. ** if debugging, need to mark whether new token grabbed
  1408. */
  1409. yytmp = yychar < 0;
  1410. #endif
  1411. if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
  1412. yychar = 0; /* reached EOF */
  1413. #if YYDEBUG
  1414. if ( yydebug && yytmp )
  1415. {
  1416. register int yy_i;
  1417. printf( "Received token " );
  1418. if ( yychar == 0 )
  1419. printf( "end-of-file\n" );
  1420. else if ( yychar < 0 )
  1421. printf( "-none-\n" );
  1422. else
  1423. {
  1424. for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
  1425. yy_i++ )
  1426. {
  1427. if ( yytoks[yy_i].t_val == yychar )
  1428. break;
  1429. }
  1430. printf( "%s\n", yytoks[yy_i].t_name );
  1431. }
  1432. }
  1433. #endif /* YYDEBUG */
  1434. if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
  1435. goto yydefault;
  1436. if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
  1437. {
  1438. yychar = -1;
  1439. yyval = yylval;
  1440. yy_state = yy_n;
  1441. if ( yyerrflag > 0 )
  1442. yyerrflag--;
  1443. goto yy_stack;
  1444. }
  1445. yydefault:
  1446. if ( ( yy_n = yydef[ yy_state ] ) == -2 )
  1447. {
  1448. #if YYDEBUG
  1449. yytmp = yychar < 0;
  1450. #endif
  1451. if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
  1452. yychar = 0; /* reached EOF */
  1453. #if YYDEBUG
  1454. if ( yydebug && yytmp )
  1455. {
  1456. register int yy_i;
  1457. printf( "Received token " );
  1458. if ( yychar == 0 )
  1459. printf( "end-of-file\n" );
  1460. else if ( yychar < 0 )
  1461. printf( "-none-\n" );
  1462. else
  1463. {
  1464. for ( yy_i = 0;
  1465. yytoks[yy_i].t_val >= 0;
  1466. yy_i++ )
  1467. {
  1468. if ( yytoks[yy_i].t_val
  1469. == yychar )
  1470. {
  1471. break;
  1472. }
  1473. }
  1474. printf( "%s\n", yytoks[yy_i].t_name );
  1475. }
  1476. }
  1477. #endif /* YYDEBUG */
  1478. /*
  1479. ** look through exception table
  1480. */
  1481. {
  1482. register int *yyxi = yyexca;
  1483. while ( ( *yyxi != -1 ) ||
  1484. ( yyxi[1] != yy_state ) )
  1485. {
  1486. yyxi += 2;
  1487. }
  1488. while ( ( *(yyxi += 2) >= 0 ) &&
  1489. ( *yyxi != yychar ) )
  1490. ;
  1491. if ( ( yy_n = yyxi[1] ) < 0 )
  1492. YYACCEPT;
  1493. }
  1494. }
  1495. /*
  1496. ** check for syntax error
  1497. */
  1498. if ( yy_n == 0 ) /* have an error */
  1499. {
  1500. /* no worry about speed here! */
  1501. switch ( yyerrflag )
  1502. {
  1503. case 0: /* new error */
  1504. yyerror( (nl_msg(30003,"syntax error")) );
  1505. yynerrs++;
  1506. goto skip_init;
  1507. yyerrlab:
  1508. /*
  1509. ** get globals into registers.
  1510. ** we have a user generated syntax type error
  1511. */
  1512. yy_pv = yypv;
  1513. yy_ps = yyps;
  1514. yy_state = yystate;
  1515. yynerrs++;
  1516. skip_init:
  1517. case 1:
  1518. case 2: /* incompletely recovered error */
  1519. /* try again... */
  1520. yyerrflag = 3;
  1521. /*
  1522. ** find state where "error" is a legal
  1523. ** shift action
  1524. */
  1525. while ( yy_ps >= yys )
  1526. {
  1527. yy_n = yypact[ *yy_ps ] + YYERRCODE;
  1528. if ( yy_n >= 0 && yy_n < YYLAST &&
  1529. yychk[yyact[yy_n]] == YYERRCODE) {
  1530. /*
  1531. ** simulate shift of "error"
  1532. */
  1533. yy_state = yyact[ yy_n ];
  1534. goto yy_stack;
  1535. }
  1536. /*
  1537. ** current state has no shift on
  1538. ** "error", pop stack
  1539. */
  1540. #if YYDEBUG
  1541. # define _POP_ "Error recovery pops state %d, uncovers state %d\n"
  1542. if ( yydebug )
  1543. printf( _POP_, *yy_ps,
  1544. yy_ps[-1] );
  1545. # undef _POP_
  1546. #endif
  1547. yy_ps--;
  1548. yy_pv--;
  1549. }
  1550. /*
  1551. ** there is no state on stack with "error" as
  1552. ** a valid shift. give up.
  1553. */
  1554. YYABORT;
  1555. case 3: /* no shift yet; eat a token */
  1556. #if YYDEBUG
  1557. /*
  1558. ** if debugging, look up token in list of
  1559. ** pairs. 0 and negative shouldn't occur,
  1560. ** but since timing doesn't matter when
  1561. ** debugging, it doesn't hurt to leave the
  1562. ** tests here.
  1563. */
  1564. if ( yydebug )
  1565. {
  1566. register int yy_i;
  1567. printf( "Error recovery discards " );
  1568. if ( yychar == 0 )
  1569. printf( "token end-of-file\n" );
  1570. else if ( yychar < 0 )
  1571. printf( "token -none-\n" );
  1572. else
  1573. {
  1574. for ( yy_i = 0;
  1575. yytoks[yy_i].t_val >= 0;
  1576. yy_i++ )
  1577. {
  1578. if ( yytoks[yy_i].t_val
  1579. == yychar )
  1580. {
  1581. break;
  1582. }
  1583. }
  1584. printf( "token %s\n",
  1585. yytoks[yy_i].t_name );
  1586. }
  1587. }
  1588. #endif /* YYDEBUG */
  1589. if ( yychar == 0 ) /* reached EOF. quit */
  1590. YYABORT;
  1591. yychar = -1;
  1592. goto yy_newstate;
  1593. }
  1594. }/* end if ( yy_n == 0 ) */
  1595. /*
  1596. ** reduction by production yy_n
  1597. ** put stack tops, etc. so things right after switch
  1598. */
  1599. #if YYDEBUG
  1600. /*
  1601. ** if debugging, print the string that is the user's
  1602. ** specification of the reduction which is just about
  1603. ** to be done.
  1604. */
  1605. if ( yydebug )
  1606. printf( "Reduce by (%d) \"%s\"\n",
  1607. yy_n, yyreds[ yy_n ] );
  1608. #endif
  1609. yytmp = yy_n; /* value to switch over */
  1610. yypvt = yy_pv; /* $vars top of value stack */
  1611. /*
  1612. ** Look in goto table for next state
  1613. ** Sorry about using yy_state here as temporary
  1614. ** register variable, but why not, if it works...
  1615. ** If yyr2[ yy_n ] doesn't have the low order bit
  1616. ** set, then there is no action to be done for
  1617. ** this reduction. So, no saving & unsaving of
  1618. ** registers done. The only difference between the
  1619. ** code just after the if and the body of the if is
  1620. ** the goto yy_stack in the body. This way the test
  1621. ** can be made before the choice of what to do is needed.
  1622. */
  1623. {
  1624. /* length of production doubled with extra bit */
  1625. register int yy_len = yyr2[ yy_n ];
  1626. if ( !( yy_len & 01 ) )
  1627. {
  1628. yy_len >>= 1;
  1629. yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
  1630. yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
  1631. *( yy_ps -= yy_len ) + 1;
  1632. if ( yy_state >= YYLAST ||
  1633. yychk[ yy_state =
  1634. yyact[ yy_state ] ] != -yy_n )
  1635. {
  1636. yy_state = yyact[ yypgo[ yy_n ] ];
  1637. }
  1638. goto yy_stack;
  1639. }
  1640. yy_len >>= 1;
  1641. yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
  1642. yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
  1643. *( yy_ps -= yy_len ) + 1;
  1644. if ( yy_state >= YYLAST ||
  1645. yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
  1646. {
  1647. yy_state = yyact[ yypgo[ yy_n ] ];
  1648. }
  1649. }
  1650. /* save until reenter driver code */
  1651. yystate = yy_state;
  1652. yyps = yy_ps;
  1653. yypv = yy_pv;
  1654. }
  1655. /*
  1656. ** code supplied by user is placed in this switch
  1657. */
  1658. switch( yytmp )
  1659. {
  1660. case 1:
  1661. /* # line 98 "awkgram.y" */
  1662. { if (errorflag==0)
  1663. winner = (Node *)stat3(PROGRAM, beginloc, yypvt[-0].p, endloc); } break;
  1664. case 2:
  1665. /* # line 100 "awkgram.y" */
  1666. { yyclearin; bracecheck(); ERROR "bailing out" SYNTAX; } break;
  1667. case 13:
  1668. /* # line 124 "awkgram.y" */
  1669. {inloop++;} break;
  1670. case 14:
  1671. /* # line 125 "awkgram.y" */
  1672. { --inloop; yyval.p = stat4(FOR, yypvt[-9].p, notnull(yypvt[-6].p), yypvt[-3].p, yypvt[-0].p); } break;
  1673. case 15:
  1674. /* # line 126 "awkgram.y" */
  1675. {inloop++;} break;
  1676. case 16:
  1677. /* # line 127 "awkgram.y" */
  1678. { --inloop; yyval.p = stat4(FOR, yypvt[-7].p, NIL, yypvt[-3].p, yypvt[-0].p); } break;
  1679. case 17:
  1680. /* # line 128 "awkgram.y" */
  1681. {inloop++;} break;
  1682. case 18:
  1683. /* # line 129 "awkgram.y" */
  1684. { --inloop; yyval.p = stat3(IN, yypvt[-5].p, makearr(yypvt[-3].p), yypvt[-0].p); } break;
  1685. case 19:
  1686. /* # line 133 "awkgram.y" */
  1687. { setfname(yypvt[-0].cp); } break;
  1688. case 20:
  1689. /* # line 134 "awkgram.y" */
  1690. { setfname(yypvt[-0].cp); } break;
  1691. case 21:
  1692. /* # line 138 "awkgram.y" */
  1693. { yyval.p = notnull(yypvt[-1].p); } break;
  1694. case 26:
  1695. /* # line 150 "awkgram.y" */
  1696. { yyval.i = 0; } break;
  1697. case 28:
  1698. /* # line 155 "awkgram.y" */
  1699. { yyval.i = 0; } break;
  1700. case 30:
  1701. /* # line 161 "awkgram.y" */
  1702. { yyval.p = 0; } break;
  1703. case 32:
  1704. /* # line 166 "awkgram.y" */
  1705. { yyval.p = 0; } break;
  1706. case 33:
  1707. /* # line 167 "awkgram.y" */
  1708. { yyval.p = yypvt[-1].p; } break;
  1709. case 34:
  1710. /* # line 171 "awkgram.y" */
  1711. { yyval.p = notnull(yypvt[-0].p); } break;
  1712. case 35:
  1713. /* # line 175 "awkgram.y" */
  1714. { yyval.p = stat2(PASTAT, yypvt[-0].p, stat2(PRINT, rectonode(), NIL)); } break;
  1715. case 36:
  1716. /* # line 176 "awkgram.y" */
  1717. { yyval.p = stat2(PASTAT, yypvt[-3].p, yypvt[-1].p); } break;
  1718. case 37:
  1719. /* # line 177 "awkgram.y" */
  1720. { yyval.p = pa2stat(yypvt[-2].p, yypvt[-0].p, stat2(PRINT, rectonode(), NIL)); } break;
  1721. case 38:
  1722. /* # line 178 "awkgram.y" */
  1723. { yyval.p = pa2stat(yypvt[-5].p, yypvt[-3].p, yypvt[-1].p); } break;
  1724. case 39:
  1725. /* # line 179 "awkgram.y" */
  1726. { yyval.p = stat2(PASTAT, NIL, yypvt[-1].p); } break;
  1727. case 40:
  1728. /* # line 181 "awkgram.y" */
  1729. { beginloc = linkum(beginloc, yypvt[-1].p); yyval.p = 0; } break;
  1730. case 41:
  1731. /* # line 183 "awkgram.y" */
  1732. { endloc = linkum(endloc, yypvt[-1].p); yyval.p = 0; } break;
  1733. case 42:
  1734. /* # line 184 "awkgram.y" */
  1735. {infunc++;} break;
  1736. case 43:
  1737. /* # line 185 "awkgram.y" */
  1738. { infunc--; curfname=0; defn((Cell *)yypvt[-7].p, yypvt[-5].p, yypvt[-1].p); yyval.p = 0; } break;
  1739. case 45:
  1740. /* # line 190 "awkgram.y" */
  1741. { yyval.p = linkum(yypvt[-2].p, yypvt[-0].p); } break;
  1742. case 47:
  1743. /* # line 195 "awkgram.y" */
  1744. { yyval.p = linkum(yypvt[-2].p, yypvt[-0].p); } break;
  1745. case 48:
  1746. /* # line 199 "awkgram.y" */
  1747. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1748. case 49:
  1749. /* # line 201 "awkgram.y" */
  1750. { yyval.p = op3(CONDEXPR, notnull(yypvt[-4].p), yypvt[-2].p, yypvt[-0].p); } break;
  1751. case 50:
  1752. /* # line 203 "awkgram.y" */
  1753. { yyval.p = op2(BOR, notnull(yypvt[-2].p), notnull(yypvt[-0].p)); } break;
  1754. case 51:
  1755. /* # line 205 "awkgram.y" */
  1756. { yyval.p = op2(AND, notnull(yypvt[-2].p), notnull(yypvt[-0].p)); } break;
  1757. case 52:
  1758. /* # line 206 "awkgram.y" */
  1759. { yyval.p = op3(yypvt[-1].i, NIL, yypvt[-2].p, (Node*)makedfa(yypvt[-0].s, 0)); } break;
  1760. case 53:
  1761. /* # line 208 "awkgram.y" */
  1762. { if (constnode(yypvt[-0].p))
  1763. yyval.p = op3(yypvt[-1].i, NIL, yypvt[-2].p, (Node*)makedfa(strnode(yypvt[-0].p), 0));
  1764. else
  1765. yyval.p = op3(yypvt[-1].i, (Node *)1, yypvt[-2].p, yypvt[-0].p); } break;
  1766. case 54:
  1767. /* # line 212 "awkgram.y" */
  1768. { yyval.p = op2(INTEST, yypvt[-2].p, makearr(yypvt[-0].p)); } break;
  1769. case 55:
  1770. /* # line 213 "awkgram.y" */
  1771. { yyval.p = op2(INTEST, yypvt[-3].p, makearr(yypvt[-0].p)); } break;
  1772. case 56:
  1773. /* # line 214 "awkgram.y" */
  1774. { yyval.p = op2(CAT, yypvt[-1].p, yypvt[-0].p); } break;
  1775. case 59:
  1776. /* # line 220 "awkgram.y" */
  1777. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1778. case 60:
  1779. /* # line 222 "awkgram.y" */
  1780. { yyval.p = op3(CONDEXPR, notnull(yypvt[-4].p), yypvt[-2].p, yypvt[-0].p); } break;
  1781. case 61:
  1782. /* # line 224 "awkgram.y" */
  1783. { yyval.p = op2(BOR, notnull(yypvt[-2].p), notnull(yypvt[-0].p)); } break;
  1784. case 62:
  1785. /* # line 226 "awkgram.y" */
  1786. { yyval.p = op2(AND, notnull(yypvt[-2].p), notnull(yypvt[-0].p)); } break;
  1787. case 63:
  1788. /* # line 227 "awkgram.y" */
  1789. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1790. case 64:
  1791. /* # line 228 "awkgram.y" */
  1792. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1793. case 65:
  1794. /* # line 229 "awkgram.y" */
  1795. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1796. case 66:
  1797. /* # line 230 "awkgram.y" */
  1798. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1799. case 67:
  1800. /* # line 231 "awkgram.y" */
  1801. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1802. case 68:
  1803. /* # line 232 "awkgram.y" */
  1804. { yyval.p = op2(yypvt[-1].i, yypvt[-2].p, yypvt[-0].p); } break;
  1805. case 69:
  1806. /* # line 233 "awkgram.y" */
  1807. { yyval.p = op3(yypvt[-1].i, NIL, yypvt[-2].p, (Node*)makedfa(yypvt[-0].s, 0)); } break;
  1808. case 70:
  1809. /* # line 235 "awkgram.y" */
  1810. { if (constnode(yypvt[-0].p))
  1811. yyval.p = op3(yypvt[-1].i, NIL, yypvt[-2].p, (Node*)makedfa(strnode(yypvt[-0].p), 0));
  1812. else
  1813. yyval.p = op3(yypvt[-1].i, (Node *)1, yypvt[-2].p, yypvt[-0].p); } break;
  1814. case 71:
  1815. /* # line 239 "awkgram.y" */
  1816. { yyval.p = op2(INTEST, yypvt[-2].p, makearr(yypvt[-0].p)); } break;
  1817. case 72:
  1818. /* # line 240 "awkgram.y" */
  1819. { yyval.p = op2(INTEST, yypvt[-3].p, makearr(yypvt[-0].p)); } break;
  1820. case 73:
  1821. /* # line 241 "awkgram.y" */
  1822. {
  1823. if (safe) ERROR "cmd | getline is unsafe" SYNTAX;
  1824. else yyval.p = op3(GETLINE, yypvt[-0].p, (Node*)yypvt[-2].i, yypvt[-3].p); } break;
  1825. case 74:
  1826. /* # line 244 "awkgram.y" */
  1827. {
  1828. if (safe) ERROR "cmd | getline is unsafe" SYNTAX;
  1829. else yyval.p = op3(GETLINE, (Node*)0, (Node*)yypvt[-1].i, yypvt[-2].p); } break;
  1830. case 75:
  1831. /* # line 247 "awkgram.y" */
  1832. { yyval.p = op2(CAT, yypvt[-1].p, yypvt[-0].p); } break;
  1833. case 78:
  1834. /* # line 253 "awkgram.y" */
  1835. { yyval.p = linkum(yypvt[-2].p, yypvt[-0].p); } break;
  1836. case 79:
  1837. /* # line 254 "awkgram.y" */
  1838. { yyval.p = linkum(yypvt[-2].p, yypvt[-0].p); } break;
  1839. case 81:
  1840. /* # line 259 "awkgram.y" */
  1841. { yyval.p = linkum(yypvt[-2].p, yypvt[-0].p); } break;
  1842. case 82:
  1843. /* # line 263 "awkgram.y" */
  1844. { yyval.p = rectonode(); } break;
  1845. case 84:
  1846. /* # line 265 "awkgram.y" */
  1847. { yyval.p = yypvt[-1].p; } break;
  1848. case 93:
  1849. /* # line 282 "awkgram.y" */
  1850. { yyval.p = op3(MATCH, NIL, rectonode(), (Node*)makedfa(yypvt[-0].s, 0)); } break;
  1851. case 94:
  1852. /* # line 283 "awkgram.y" */
  1853. { yyval.p = op1(NOT, notnull(yypvt[-0].p)); } break;
  1854. case 95:
  1855. /* # line 287 "awkgram.y" */
  1856. {startreg();} break;
  1857. case 96:
  1858. /* # line 287 "awkgram.y" */
  1859. { yyval.s = yypvt[-1].s; } break;
  1860. case 99:
  1861. /* # line 295 "awkgram.y" */
  1862. {
  1863. if (safe) ERROR "print | is unsafe" SYNTAX;
  1864. else yyval.p = stat3(yypvt[-3].i, yypvt[-2].p, (Node *) yypvt[-1].i, yypvt[-0].p); } break;
  1865. case 100:
  1866. /* # line 298 "awkgram.y" */
  1867. {
  1868. if (safe) ERROR "print >> is unsafe" SYNTAX;
  1869. else yyval.p = stat3(yypvt[-3].i, yypvt[-2].p, (Node *) yypvt[-1].i, yypvt[-0].p); } break;
  1870. case 101:
  1871. /* # line 301 "awkgram.y" */
  1872. {
  1873. if (safe) ERROR "print > is unsafe" SYNTAX;
  1874. else yyval.p = stat3(yypvt[-3].i, yypvt[-2].p, (Node *) yypvt[-1].i, yypvt[-0].p); } break;
  1875. case 102:
  1876. /* # line 304 "awkgram.y" */
  1877. { yyval.p = stat3(yypvt[-1].i, yypvt[-0].p, NIL, NIL); } break;
  1878. case 103:
  1879. /* # line 305 "awkgram.y" */
  1880. { yyval.p = stat2(DELETE, makearr(yypvt[-3].p), yypvt[-1].p); } break;
  1881. case 104:
  1882. /* # line 306 "awkgram.y" */
  1883. { yyval.p = stat2(DELETE, makearr(yypvt[-0].p), 0); } break;
  1884. case 105:
  1885. /* # line 307 "awkgram.y" */
  1886. { yyval.p = exptostat(yypvt[-0].p); } break;
  1887. case 106:
  1888. /* # line 308 "awkgram.y" */
  1889. { yyclearin; ERROR "illegal statement" SYNTAX; } break;
  1890. case 109:
  1891. /* # line 317 "awkgram.y" */
  1892. { if (!inloop) ERROR "break illegal outside of loops" SYNTAX;
  1893. yyval.p = stat1(BREAK, NIL); } break;
  1894. case 110:
  1895. /* # line 319 "awkgram.y" */
  1896. { yyval.p = stat1(CLOSE, yypvt[-1].p); } break;
  1897. case 111:
  1898. /* # line 320 "awkgram.y" */
  1899. { if (!inloop) ERROR "continue illegal outside of loops" SYNTAX;
  1900. yyval.p = stat1(CONTINUE, NIL); } break;
  1901. case 112:
  1902. /* # line 322 "awkgram.y" */
  1903. {inloop++;} break;
  1904. case 113:
  1905. /* # line 322 "awkgram.y" */
  1906. {--inloop;} break;
  1907. case 114:
  1908. /* # line 323 "awkgram.y" */
  1909. { yyval.p = stat2(DO, yypvt[-6].p, notnull(yypvt[-2].p)); } break;
  1910. case 115:
  1911. /* # line 324 "awkgram.y" */
  1912. { yyval.p = stat1(EXIT, yypvt[-1].p); } break;
  1913. case 116:
  1914. /* # line 325 "awkgram.y" */
  1915. { yyval.p = stat1(EXIT, NIL); } break;
  1916. case 118:
  1917. /* # line 327 "awkgram.y" */
  1918. { yyval.p = stat3(IF, yypvt[-3].p, yypvt[-2].p, yypvt[-0].p); } break;
  1919. case 119:
  1920. /* # line 328 "awkgram.y" */
  1921. { yyval.p = stat3(IF, yypvt[-1].p, yypvt[-0].p, NIL); } break;
  1922. case 120:
  1923. /* # line 329 "awkgram.y" */
  1924. { yyval.p = yypvt[-1].p; } break;
  1925. case 121:
  1926. /* # line 330 "awkgram.y" */
  1927. { if (infunc)
  1928. ERROR "next is illegal inside a function" SYNTAX;
  1929. yyval.p = stat1(NEXT, NIL); } break;
  1930. case 122:
  1931. /* # line 333 "awkgram.y" */
  1932. { if (infunc)
  1933. ERROR "nextfile is illegal inside a function" SYNTAX;
  1934. yyval.p = stat1(NEXTFILE, NIL); } break;
  1935. case 123:
  1936. /* # line 336 "awkgram.y" */
  1937. { yyval.p = stat1(RETURN, yypvt[-1].p); } break;
  1938. case 124:
  1939. /* # line 337 "awkgram.y" */
  1940. { yyval.p = stat1(RETURN, NIL); } break;
  1941. case 126:
  1942. /* # line 339 "awkgram.y" */
  1943. {inloop++;} break;
  1944. case 127:
  1945. /* # line 339 "awkgram.y" */
  1946. { --inloop; yyval.p = stat2(WHILE, yypvt[-2].p, yypvt[-0].p); } break;
  1947. case 128:
  1948. /* # line 340 "awkgram.y" */
  1949. { yyval.p = 0; } break;
  1950. case 130:
  1951. /* # line 345 "awkgram.y" */
  1952. { yyval.p = linkum(yypvt[-1].p, yypvt[-0].p); } break;
  1953. case 133:
  1954. /* # line 353 "awkgram.y" */
  1955. { yyval.p = op2(ADD, yypvt[-2].p, yypvt[-0].p); } break;
  1956. case 134:
  1957. /* # line 354 "awkgram.y" */
  1958. { yyval.p = op2(MINUS, yypvt[-2].p, yypvt[-0].p); } break;
  1959. case 135:
  1960. /* # line 355 "awkgram.y" */
  1961. { yyval.p = op2(MULT, yypvt[-2].p, yypvt[-0].p); } break;
  1962. case 136:
  1963. /* # line 356 "awkgram.y" */
  1964. { yyval.p = op2(DIVIDE, yypvt[-2].p, yypvt[-0].p); } break;
  1965. case 137:
  1966. /* # line 357 "awkgram.y" */
  1967. { yyval.p = op2(MOD, yypvt[-2].p, yypvt[-0].p); } break;
  1968. case 138:
  1969. /* # line 358 "awkgram.y" */
  1970. { yyval.p = op2(POWER, yypvt[-2].p, yypvt[-0].p); } break;
  1971. case 139:
  1972. /* # line 359 "awkgram.y" */
  1973. { yyval.p = op1(UMINUS, yypvt[-0].p); } break;
  1974. case 140:
  1975. /* # line 360 "awkgram.y" */
  1976. { yyval.p = yypvt[-0].p; } break;
  1977. case 141:
  1978. /* # line 361 "awkgram.y" */
  1979. { yyval.p = op1(NOT, notnull(yypvt[-0].p)); } break;
  1980. case 142:
  1981. /* # line 362 "awkgram.y" */
  1982. { yyval.p = op2(BLTIN, (Node *) yypvt[-2].i, rectonode()); } break;
  1983. case 143:
  1984. /* # line 363 "awkgram.y" */
  1985. { yyval.p = op2(BLTIN, (Node *) yypvt[-3].i, yypvt[-1].p); } break;
  1986. case 144:
  1987. /* # line 364 "awkgram.y" */
  1988. { yyval.p = op2(BLTIN, (Node *) yypvt[-0].i, rectonode()); } break;
  1989. case 145:
  1990. /* # line 365 "awkgram.y" */
  1991. { yyval.p = op2(CALL, celltonode(yypvt[-2].cp,CVAR), NIL); } break;
  1992. case 146:
  1993. /* # line 366 "awkgram.y" */
  1994. { yyval.p = op2(CALL, celltonode(yypvt[-3].cp,CVAR), yypvt[-1].p); } break;
  1995. case 147:
  1996. /* # line 367 "awkgram.y" */
  1997. { yyval.p = op1(PREDECR, yypvt[-0].p); } break;
  1998. case 148:
  1999. /* # line 368 "awkgram.y" */
  2000. { yyval.p = op1(PREINCR, yypvt[-0].p); } break;
  2001. case 149:
  2002. /* # line 369 "awkgram.y" */
  2003. { yyval.p = op1(POSTDECR, yypvt[-1].p); } break;
  2004. case 150:
  2005. /* # line 370 "awkgram.y" */
  2006. { yyval.p = op1(POSTINCR, yypvt[-1].p); } break;
  2007. case 151:
  2008. /* # line 371 "awkgram.y" */
  2009. { yyval.p = op3(GETLINE, yypvt[-2].p, (Node *)yypvt[-1].i, yypvt[-0].p); } break;
  2010. case 152:
  2011. /* # line 372 "awkgram.y" */
  2012. { yyval.p = op3(GETLINE, NIL, (Node *)yypvt[-1].i, yypvt[-0].p); } break;
  2013. case 153:
  2014. /* # line 373 "awkgram.y" */
  2015. { yyval.p = op3(GETLINE, yypvt[-0].p, NIL, NIL); } break;
  2016. case 154:
  2017. /* # line 374 "awkgram.y" */
  2018. { yyval.p = op3(GETLINE, NIL, NIL, NIL); } break;
  2019. case 155:
  2020. /* # line 376 "awkgram.y" */
  2021. { yyval.p = op2(INDEX, yypvt[-3].p, yypvt[-1].p); } break;
  2022. case 156:
  2023. /* # line 378 "awkgram.y" */
  2024. { ERROR "index() doesn't permit regular expressions" SYNTAX;
  2025. yyval.p = op2(INDEX, yypvt[-3].p, (Node*)yypvt[-1].s); } break;
  2026. case 157:
  2027. /* # line 380 "awkgram.y" */
  2028. { yyval.p = yypvt[-1].p; } break;
  2029. case 158:
  2030. /* # line 382 "awkgram.y" */
  2031. { yyval.p = op3(MATCHFCN, NIL, yypvt[-3].p, (Node*)makedfa(yypvt[-1].s, 1)); } break;
  2032. case 159:
  2033. /* # line 384 "awkgram.y" */
  2034. { if (constnode(yypvt[-1].p))
  2035. yyval.p = op3(MATCHFCN, NIL, yypvt[-3].p, (Node*)makedfa(strnode(yypvt[-1].p), 1));
  2036. else
  2037. yyval.p = op3(MATCHFCN, (Node *)1, yypvt[-3].p, yypvt[-1].p); } break;
  2038. case 160:
  2039. /* # line 388 "awkgram.y" */
  2040. { yyval.p = celltonode(yypvt[-0].cp, CCON); } break;
  2041. case 161:
  2042. /* # line 390 "awkgram.y" */
  2043. { yyval.p = op4(SPLIT, yypvt[-5].p, makearr(yypvt[-3].p), yypvt[-1].p, (Node*)STRING); } break;
  2044. case 162:
  2045. /* # line 392 "awkgram.y" */
  2046. { yyval.p = op4(SPLIT, yypvt[-5].p, makearr(yypvt[-3].p), (Node*)makedfa(yypvt[-1].s, 1), (Node *)REGEXPR); } break;
  2047. case 163:
  2048. /* # line 394 "awkgram.y" */
  2049. { yyval.p = op4(SPLIT, yypvt[-3].p, makearr(yypvt[-1].p), NIL, (Node*)STRING); } break;
  2050. case 164:
  2051. /* # line 395 "awkgram.y" */
  2052. { yyval.p = op1(yypvt[-3].i, yypvt[-1].p); } break;
  2053. case 165:
  2054. /* # line 396 "awkgram.y" */
  2055. { yyval.p = celltonode(yypvt[-0].cp, CCON); } break;
  2056. case 166:
  2057. /* # line 398 "awkgram.y" */
  2058. { yyval.p = op4(yypvt[-5].i, NIL, (Node*)makedfa(yypvt[-3].s, 1), yypvt[-1].p, rectonode()); } break;
  2059. case 167:
  2060. /* # line 400 "awkgram.y" */
  2061. { if (constnode(yypvt[-3].p))
  2062. yyval.p = op4(yypvt[-5].i, NIL, (Node*)makedfa(strnode(yypvt[-3].p), 1), yypvt[-1].p, rectonode());
  2063. else
  2064. yyval.p = op4(yypvt[-5].i, (Node *)1, yypvt[-3].p, yypvt[-1].p, rectonode()); } break;
  2065. case 168:
  2066. /* # line 405 "awkgram.y" */
  2067. { yyval.p = op4(yypvt[-7].i, NIL, (Node*)makedfa(yypvt[-5].s, 1), yypvt[-3].p, yypvt[-1].p); } break;
  2068. case 169:
  2069. /* # line 407 "awkgram.y" */
  2070. { if (constnode(yypvt[-5].p))
  2071. yyval.p = op4(yypvt[-7].i, NIL, (Node*)makedfa(strnode(yypvt[-5].p), 1), yypvt[-3].p, yypvt[-1].p);
  2072. else
  2073. yyval.p = op4(yypvt[-7].i, (Node *)1, yypvt[-5].p, yypvt[-3].p, yypvt[-1].p); } break;
  2074. case 170:
  2075. /* # line 412 "awkgram.y" */
  2076. { yyval.p = op3(SUBSTR, yypvt[-5].p, yypvt[-3].p, yypvt[-1].p); } break;
  2077. case 171:
  2078. /* # line 414 "awkgram.y" */
  2079. { yyval.p = op3(SUBSTR, yypvt[-3].p, yypvt[-1].p, NIL); } break;
  2080. case 174:
  2081. /* # line 420 "awkgram.y" */
  2082. { yyval.p = op2(ARRAY, makearr(yypvt[-3].p), yypvt[-1].p); } break;
  2083. case 175:
  2084. /* # line 421 "awkgram.y" */
  2085. { yyval.p = op1(INDIRECT, celltonode(yypvt[-0].cp, CVAR)); } break;
  2086. case 176:
  2087. /* # line 422 "awkgram.y" */
  2088. { yyval.p = op1(INDIRECT, yypvt[-0].p); } break;
  2089. case 177:
  2090. /* # line 426 "awkgram.y" */
  2091. { arglist = yyval.p = 0; } break;
  2092. case 178:
  2093. /* # line 427 "awkgram.y" */
  2094. { arglist = yyval.p = celltonode(yypvt[-0].cp,CVAR); } break;
  2095. case 179:
  2096. /* # line 428 "awkgram.y" */
  2097. {
  2098. checkdup(yypvt[-2].p, yypvt[-0].cp);
  2099. arglist = yyval.p = linkum(yypvt[-2].p,celltonode(yypvt[-0].cp,CVAR)); } break;
  2100. case 180:
  2101. /* # line 434 "awkgram.y" */
  2102. { yyval.p = celltonode(yypvt[-0].cp, CVAR); } break;
  2103. case 181:
  2104. /* # line 435 "awkgram.y" */
  2105. { yyval.p = op1(ARG, (Node *) yypvt[-0].i); } break;
  2106. case 182:
  2107. /* # line 436 "awkgram.y" */
  2108. { yyval.p = op1(VARNF, (Node *) yypvt[-0].cp); } break;
  2109. case 183:
  2110. /* # line 441 "awkgram.y" */
  2111. { yyval.p = notnull(yypvt[-1].p); } break;
  2112. }
  2113. goto yystack; /* reset registers in driver code */
  2114. }
  2115. # ifdef __RUNTIME_YYMAXDEPTH
  2116. static int allocate_stacks() {
  2117. /* allocate the yys and yyv stacks */
  2118. yys = (int *) malloc(yymaxdepth * sizeof(int));
  2119. yyv = (YYSTYPE *) malloc(yymaxdepth * sizeof(YYSTYPE));
  2120. if (yys==0 || yyv==0) {
  2121. yyerror( (nl_msg(30004,"unable to allocate space for yacc stacks")) );
  2122. return(1);
  2123. }
  2124. else return(0);
  2125. }
  2126. static void free_stacks() {
  2127. if (yys!=0) free((char *) yys);
  2128. if (yyv!=0) free((char *) yyv);
  2129. }
  2130. # endif /* defined(__RUNTIME_YYMAXDEPTH) */