ok_syntax1.tab.c revision 1.1.1.7 1 /* $NetBSD: ok_syntax1.tab.c,v 1.1.1.7 2021/02/20 20:30:10 christos Exp $ */
2
3 /* original parser id follows */
4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6
7 #define YYBYACC 1
8 #define YYMAJOR 2
9 #define YYMINOR 0
10 #define YYCHECK "yyyymmdd"
11
12 #define YYEMPTY (-1)
13 #define yyclearin (yychar = YYEMPTY)
14 #define yyerrok (yyerrflag = 0)
15 #define YYRECOVERING() (yyerrflag != 0)
16 #define YYENOMEM (-2)
17 #define YYEOF 0
18 #undef YYBTYACC
19 #define YYBTYACC 0
20 #define YYDEBUGSTR YYPREFIX "debug"
21
22 #ifndef yyparse
23 #define yyparse ok_syntax1_parse
24 #endif /* yyparse */
25
26 #ifndef yylex
27 #define yylex ok_syntax1_lex
28 #endif /* yylex */
29
30 #ifndef yyerror
31 #define yyerror ok_syntax1_error
32 #endif /* yyerror */
33
34 #ifndef yychar
35 #define yychar ok_syntax1_char
36 #endif /* yychar */
37
38 #ifndef yyval
39 #define yyval ok_syntax1_val
40 #endif /* yyval */
41
42 #ifndef yylval
43 #define yylval ok_syntax1_lval
44 #endif /* yylval */
45
46 #ifndef yydebug
47 #define yydebug ok_syntax1_debug
48 #endif /* yydebug */
49
50 #ifndef yynerrs
51 #define yynerrs ok_syntax1_nerrs
52 #endif /* yynerrs */
53
54 #ifndef yyerrflag
55 #define yyerrflag ok_syntax1_errflag
56 #endif /* yyerrflag */
57
58 #ifndef yylhs
59 #define yylhs ok_syntax1_lhs
60 #endif /* yylhs */
61
62 #ifndef yylen
63 #define yylen ok_syntax1_len
64 #endif /* yylen */
65
66 #ifndef yydefred
67 #define yydefred ok_syntax1_defred
68 #endif /* yydefred */
69
70 #ifndef yystos
71 #define yystos ok_syntax1_stos
72 #endif /* yystos */
73
74 #ifndef yydgoto
75 #define yydgoto ok_syntax1_dgoto
76 #endif /* yydgoto */
77
78 #ifndef yysindex
79 #define yysindex ok_syntax1_sindex
80 #endif /* yysindex */
81
82 #ifndef yyrindex
83 #define yyrindex ok_syntax1_rindex
84 #endif /* yyrindex */
85
86 #ifndef yygindex
87 #define yygindex ok_syntax1_gindex
88 #endif /* yygindex */
89
90 #ifndef yytable
91 #define yytable ok_syntax1_table
92 #endif /* yytable */
93
94 #ifndef yycheck
95 #define yycheck ok_syntax1_check
96 #endif /* yycheck */
97
98 #ifndef yyname
99 #define yyname ok_syntax1_name
100 #endif /* yyname */
101
102 #ifndef yyrule
103 #define yyrule ok_syntax1_rule
104 #endif /* yyrule */
105
106 #if YYBTYACC
107
108 #ifndef yycindex
109 #define yycindex ok_syntax1_cindex
110 #endif /* yycindex */
111
112 #ifndef yyctable
113 #define yyctable ok_syntax1_ctable
114 #endif /* yyctable */
115
116 #endif /* YYBTYACC */
117
118 #define YYPREFIX "ok_syntax1_"
119
120 #define YYPURE 1
121
122 #line 9 "ok_syntax1.y"
123 # include <stdio.h>
124 # include <ctype.h>
125
126 #ifdef YYBISON
127 #define YYSTYPE int
128 #define YYLEX_PARAM base
129 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
130 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
131 int YYLEX_DECL();
132 static void YYERROR_DECL();
133 #endif
134
135 #ifdef YYSTYPE
136 #undef YYSTYPE_IS_DECLARED
137 #define YYSTYPE_IS_DECLARED 1
138 #endif
139 #ifndef YYSTYPE_IS_DECLARED
140 #define YYSTYPE_IS_DECLARED 1
141 #line 43 "ok_syntax1.y"
142 typedef union
143 {
144 char * cval;
145 int ival;
146 double dval;
147 } YYSTYPE;
148 #endif /* !YYSTYPE_IS_DECLARED */
149 #line 148 "ok_syntax1.tab.c"
150
151 /* compatibility with bison */
152 #ifdef YYPARSE_PARAM
153 /* compatibility with FreeBSD */
154 # ifdef YYPARSE_PARAM_TYPE
155 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
156 # else
157 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
158 # endif
159 #else
160 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
161 #endif
162
163 /* Parameters sent to lex. */
164 #ifdef YYLEX_PARAM
165 # ifdef YYLEX_PARAM_TYPE
166 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
167 # else
168 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
169 # endif
170 # define YYLEX yylex(&yylval, YYLEX_PARAM)
171 #else
172 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
173 # define YYLEX yylex(&yylval, base)
174 #endif
175
176 /* Parameters sent to yyerror. */
177 #ifndef YYERROR_DECL
178 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
179 #endif
180 #ifndef YYERROR_CALL
181 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
182 #endif
183
184 extern int YYPARSE_DECL();
185
186 #define DIGIT 257
187 #define LETTER 258
188 #define OCT1 259
189 #define HEX1 260
190 #define HEX2 261
191 #define HEX3 262
192 #define STR1 263
193 #define STR2 265
194 #define BELL 266
195 #define BS 267
196 #define NL 268
197 #define LF 269
198 #define CR 270
199 #define TAB 271
200 #define VT 272
201 #define UMINUS 273
202 #define YYERRCODE 256
203 typedef short YYINT;
204 static const YYINT ok_syntax1_lhs[] = { -1,
205 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
206 2, 2, 2, 2, 2, 2, 3, 3,
207 };
208 static const YYINT ok_syntax1_len[] = { 2,
209 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
210 3, 3, 3, 2, 1, 1, 1, 2,
211 };
212 static const YYINT ok_syntax1_defred[] = { 1,
213 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
214 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
215 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
216 10, 11,
217 };
218 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
219 static const YYINT ok_syntax1_stos[] = { 0,
220 275, 256, 257, 258, 45, 40, 276, 277, 278, 10,
221 61, 258, 277, 277, 10, 124, 38, 43, 45, 42,
222 47, 37, 257, 277, 41, 277, 277, 277, 277, 277,
223 277, 277,
224 };
225 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
226 static const YYINT ok_syntax1_dgoto[] = { 1,
227 7, 8, 9,
228 };
229 static const YYINT ok_syntax1_sindex[] = { 0,
230 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
231 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
232 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
233 0, 0,
234 };
235 static const YYINT ok_syntax1_rindex[] = { 0,
236 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
238 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
239 0, 0,
240 };
241 #if YYBTYACC
242 static const YYINT ok_syntax1_cindex[] = { 0,
243 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
244 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
245 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
246 0, 0,
247 };
248 #endif
249 static const YYINT ok_syntax1_gindex[] = { 0,
250 0, 65, 0,
251 };
252 #define YYTABLESIZE 220
253 static const YYINT ok_syntax1_table[] = { 6,
254 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
255 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
256 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
257 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
258 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
259 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
260 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
261 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
262 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
263 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
264 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
265 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
266 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
267 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
268 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
270 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
271 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
274 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
275 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
276 };
277 static const YYINT ok_syntax1_check[] = { 40,
278 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
279 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
280 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
281 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
282 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
283 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
284 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
285 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
286 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
287 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
288 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
289 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
290 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
291 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
292 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
294 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
295 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
296 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
297 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
298 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
299 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
300 };
301 #if YYBTYACC
302 static const YYINT ok_syntax1_ctable[] = { -1,
303 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
304 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
306 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
307 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
308 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
309 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
310 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
311 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
312 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
313 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
314 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
315 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
316 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
317 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
319 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
320 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
321 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
322 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
323 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
324 -1, -1, -1, -1, -1, -1, -1, -1, -1,
325 };
326 #endif
327 #define YYFINAL 1
328 #ifndef YYDEBUG
329 #define YYDEBUG 0
330 #endif
331 #define YYMAXTOKEN 273
332 #define YYUNDFTOKEN 279
333 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
334 #if YYDEBUG
335 static const char *const ok_syntax1_name[] = {
336
337 "$end",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'","'\\r'",0,0,
338 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('","')'","'*'",
339 "'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0,0,0,0,0,0,0,
340 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
341 0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
342 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
343 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
344 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'\\377'",
345 "error","DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1",
346 "\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",
347 "$accept","list","stat","expr","number","illegal-symbol",
348 };
349 static const char *const ok_syntax1_rule[] = {
350 "$accept : list",
351 "list :",
352 "list : list stat '\\n'",
353 "list : list error '\\n'",
354 "stat : expr",
355 "stat : LETTER '=' expr",
356 "expr : '(' expr ')'",
357 "expr : expr '+' expr",
358 "expr : expr '-' expr",
359 "expr : expr '*' expr",
360 "expr : expr '/' expr",
361 "expr : expr '%' expr",
362 "expr : expr '&' expr",
363 "expr : expr '|' expr",
364 "expr : '-' expr",
365 "expr : LETTER",
366 "expr : number",
367 "number : DIGIT",
368 "number : number DIGIT",
369
370 };
371 #endif
372
373 #if YYDEBUG
374 int yydebug;
375 #endif
376
377 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
378 #ifndef YYLLOC_DEFAULT
379 #define YYLLOC_DEFAULT(loc, rhs, n) \
380 do \
381 { \
382 if (n == 0) \
383 { \
384 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
385 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
386 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
387 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
388 } \
389 else \
390 { \
391 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
392 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
393 (loc).last_line = YYRHSLOC(rhs, n).last_line; \
394 (loc).last_column = YYRHSLOC(rhs, n).last_column; \
395 } \
396 } while (0)
397 #endif /* YYLLOC_DEFAULT */
398 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
399 #if YYBTYACC
400
401 #ifndef YYLVQUEUEGROWTH
402 #define YYLVQUEUEGROWTH 32
403 #endif
404 #endif /* YYBTYACC */
405
406 /* define the initial stack-sizes */
407 #ifdef YYSTACKSIZE
408 #undef YYMAXDEPTH
409 #define YYMAXDEPTH YYSTACKSIZE
410 #else
411 #ifdef YYMAXDEPTH
412 #define YYSTACKSIZE YYMAXDEPTH
413 #else
414 #define YYSTACKSIZE 10000
415 #define YYMAXDEPTH 10000
416 #endif
417 #endif
418
419 #ifndef YYINITSTACKSIZE
420 #define YYINITSTACKSIZE 200
421 #endif
422
423 typedef struct {
424 unsigned stacksize;
425 YYINT *s_base;
426 YYINT *s_mark;
427 YYINT *s_last;
428 YYSTYPE *l_base;
429 YYSTYPE *l_mark;
430 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
431 YYLTYPE *p_base;
432 YYLTYPE *p_mark;
433 #endif
434 } YYSTACKDATA;
435 #if YYBTYACC
436
437 struct YYParseState_s
438 {
439 struct YYParseState_s *save; /* Previously saved parser state */
440 YYSTACKDATA yystack; /* saved parser stack */
441 int state; /* saved parser state */
442 int errflag; /* saved error recovery status */
443 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
444 YYINT ctry; /* saved index in yyctable[] for this conflict */
445 };
446 typedef struct YYParseState_s YYParseState;
447 #endif /* YYBTYACC */
448 #line 104 "ok_syntax1.y"
449 /* start of programs */
450
451 #ifdef YYBYACC
452 extern int YYLEX_DECL();
453 #endif
454
455 int
456 main (void)
457 {
458 int regs[26];
459 int base = 10;
460
461 while(!feof(stdin)) {
462 yyparse(regs, &base);
463 }
464 return 0;
465 }
466
467 #define UNUSED(x) ((void)(x))
468
469 static void
470 YYERROR_DECL()
471 {
472 UNUSED(regs); /* %parse-param regs is not actually used here */
473 UNUSED(base); /* %parse-param base is not actually used here */
474 fprintf(stderr, "%s\n", s);
475 }
476
477 int
478 YYLEX_DECL()
479 {
480 /* lexical analysis routine */
481 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
482 /* return DIGIT for a digit, yylval = 0 through 9 */
483 /* all other characters are returned immediately */
484
485 int c;
486
487 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
488
489 /* c is now nonblank */
490
491 if( islower( c )) {
492 yylval->ival = (c - 'a');
493 return ( LETTER );
494 }
495 if( isdigit( c )) {
496 yylval->ival = (c - '0') % (*base);
497 return ( DIGIT );
498 }
499 return( c );
500 }
501 #line 500 "ok_syntax1.tab.c"
502
503 /* For use in generated program */
504 #define yydepth (int)(yystack.s_mark - yystack.s_base)
505 #if YYBTYACC
506 #define yytrial (yyps->save)
507 #endif /* YYBTYACC */
508
509 #if YYDEBUG
510 #include <stdio.h> /* needed for printf */
511 #endif
512
513 #include <stdlib.h> /* needed for malloc, etc */
514 #include <string.h> /* needed for memset */
515
516 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
517 static int yygrowstack(YYSTACKDATA *data)
518 {
519 int i;
520 unsigned newsize;
521 YYINT *newss;
522 YYSTYPE *newvs;
523 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
524 YYLTYPE *newps;
525 #endif
526
527 if ((newsize = data->stacksize) == 0)
528 newsize = YYINITSTACKSIZE;
529 else if (newsize >= YYMAXDEPTH)
530 return YYENOMEM;
531 else if ((newsize *= 2) > YYMAXDEPTH)
532 newsize = YYMAXDEPTH;
533
534 i = (int) (data->s_mark - data->s_base);
535 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
536 if (newss == 0)
537 return YYENOMEM;
538
539 data->s_base = newss;
540 data->s_mark = newss + i;
541
542 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
543 if (newvs == 0)
544 return YYENOMEM;
545
546 data->l_base = newvs;
547 data->l_mark = newvs + i;
548
549 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
550 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
551 if (newps == 0)
552 return YYENOMEM;
553
554 data->p_base = newps;
555 data->p_mark = newps + i;
556 #endif
557
558 data->stacksize = newsize;
559 data->s_last = data->s_base + newsize - 1;
560
561 #if YYDEBUG
562 if (yydebug)
563 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
564 #endif
565 return 0;
566 }
567
568 #if YYPURE || defined(YY_NO_LEAKS)
569 static void yyfreestack(YYSTACKDATA *data)
570 {
571 free(data->s_base);
572 free(data->l_base);
573 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
574 free(data->p_base);
575 #endif
576 memset(data, 0, sizeof(*data));
577 }
578 #else
579 #define yyfreestack(data) /* nothing */
580 #endif /* YYPURE || defined(YY_NO_LEAKS) */
581 #if YYBTYACC
582
583 static YYParseState *
584 yyNewState(unsigned size)
585 {
586 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
587 if (p == NULL) return NULL;
588
589 p->yystack.stacksize = size;
590 if (size == 0)
591 {
592 p->yystack.s_base = NULL;
593 p->yystack.l_base = NULL;
594 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
595 p->yystack.p_base = NULL;
596 #endif
597 return p;
598 }
599 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
600 if (p->yystack.s_base == NULL) return NULL;
601 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
602 if (p->yystack.l_base == NULL) return NULL;
603 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
604 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
605 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
606 if (p->yystack.p_base == NULL) return NULL;
607 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
608 #endif
609
610 return p;
611 }
612
613 static void
614 yyFreeState(YYParseState *p)
615 {
616 yyfreestack(&p->yystack);
617 free(p);
618 }
619 #endif /* YYBTYACC */
620
621 #define YYABORT goto yyabort
622 #define YYREJECT goto yyabort
623 #define YYACCEPT goto yyaccept
624 #define YYERROR goto yyerrlab
625 #if YYBTYACC
626 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
627 #define YYVALID_NESTED do { if (yyps->save && \
628 yyps->save->save == 0) goto yyvalid; } while(0)
629 #endif /* YYBTYACC */
630
631 int
632 YYPARSE_DECL()
633 {
634 int yyerrflag;
635 int yychar;
636 YYSTYPE yyval;
637 YYSTYPE yylval;
638 int yynerrs;
639
640 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
641 YYLTYPE yyloc; /* position returned by actions */
642 YYLTYPE yylloc; /* position from the lexer */
643 #endif
644
645 /* variables for the parser stack */
646 YYSTACKDATA yystack;
647 #if YYBTYACC
648
649 /* Current parser state */
650 static YYParseState *yyps = 0;
651
652 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
653 static YYParseState *yypath = 0;
654
655 /* Base of the lexical value queue */
656 static YYSTYPE *yylvals = 0;
657
658 /* Current position at lexical value queue */
659 static YYSTYPE *yylvp = 0;
660
661 /* End position of lexical value queue */
662 static YYSTYPE *yylve = 0;
663
664 /* The last allocated position at the lexical value queue */
665 static YYSTYPE *yylvlim = 0;
666
667 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
668 /* Base of the lexical position queue */
669 static YYLTYPE *yylpsns = 0;
670
671 /* Current position at lexical position queue */
672 static YYLTYPE *yylpp = 0;
673
674 /* End position of lexical position queue */
675 static YYLTYPE *yylpe = 0;
676
677 /* The last allocated position at the lexical position queue */
678 static YYLTYPE *yylplim = 0;
679 #endif
680
681 /* Current position at lexical token queue */
682 static YYINT *yylexp = 0;
683
684 static YYINT *yylexemes = 0;
685 #endif /* YYBTYACC */
686 int yym, yyn, yystate, yyresult;
687 #if YYBTYACC
688 int yynewerrflag;
689 YYParseState *yyerrctx = NULL;
690 #endif /* YYBTYACC */
691 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
692 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
693 #endif
694 #if YYDEBUG
695 const char *yys;
696
697 if ((yys = getenv("YYDEBUG")) != 0)
698 {
699 yyn = *yys;
700 if (yyn >= '0' && yyn <= '9')
701 yydebug = yyn - '0';
702 }
703 if (yydebug)
704 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
705 #endif
706 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
707 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
708 #endif
709
710 yyerrflag = 0;
711 yychar = 0;
712 memset(&yyval, 0, sizeof(yyval));
713 memset(&yylval, 0, sizeof(yylval));
714 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
715 memset(&yyloc, 0, sizeof(yyloc));
716 memset(&yylloc, 0, sizeof(yylloc));
717 #endif
718
719 #if YYBTYACC
720 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
721 yyps->save = 0;
722 #endif /* YYBTYACC */
723 yym = 0;
724 yyn = 0;
725 yynerrs = 0;
726 yyerrflag = 0;
727 yychar = YYEMPTY;
728 yystate = 0;
729
730 #if YYPURE
731 memset(&yystack, 0, sizeof(yystack));
732 #endif
733
734 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
735 yystack.s_mark = yystack.s_base;
736 yystack.l_mark = yystack.l_base;
737 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
738 yystack.p_mark = yystack.p_base;
739 #endif
740 yystate = 0;
741 *yystack.s_mark = 0;
742
743 yyloop:
744 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
745 if (yychar < 0)
746 {
747 #if YYBTYACC
748 do {
749 if (yylvp < yylve)
750 {
751 /* we're currently re-reading tokens */
752 yylval = *yylvp++;
753 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
754 yylloc = *yylpp++;
755 #endif
756 yychar = *yylexp++;
757 break;
758 }
759 if (yyps->save)
760 {
761 /* in trial mode; save scanner results for future parse attempts */
762 if (yylvp == yylvlim)
763 { /* Enlarge lexical value queue */
764 size_t p = (size_t) (yylvp - yylvals);
765 size_t s = (size_t) (yylvlim - yylvals);
766
767 s += YYLVQUEUEGROWTH;
768 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
769 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
770 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
771 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
772 #endif
773 yylvp = yylve = yylvals + p;
774 yylvlim = yylvals + s;
775 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
776 yylpp = yylpe = yylpsns + p;
777 yylplim = yylpsns + s;
778 #endif
779 yylexp = yylexemes + p;
780 }
781 *yylexp = (YYINT) YYLEX;
782 *yylvp++ = yylval;
783 yylve++;
784 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
785 *yylpp++ = yylloc;
786 yylpe++;
787 #endif
788 yychar = *yylexp++;
789 break;
790 }
791 /* normal operation, no conflict encountered */
792 #endif /* YYBTYACC */
793 yychar = YYLEX;
794 #if YYBTYACC
795 } while (0);
796 #endif /* YYBTYACC */
797 if (yychar < 0) yychar = YYEOF;
798 #if YYDEBUG
799 if (yydebug)
800 {
801 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
802 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
803 YYDEBUGSTR, yydepth, yystate, yychar, yys);
804 #ifdef YYSTYPE_TOSTRING
805 #if YYBTYACC
806 if (!yytrial)
807 #endif /* YYBTYACC */
808 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
809 #endif
810 fputc('\n', stderr);
811 }
812 #endif
813 }
814 #if YYBTYACC
815
816 /* Do we have a conflict? */
817 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
818 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
819 {
820 YYINT ctry;
821
822 if (yypath)
823 {
824 YYParseState *save;
825 #if YYDEBUG
826 if (yydebug)
827 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
828 YYDEBUGSTR, yydepth, yystate);
829 #endif
830 /* Switch to the next conflict context */
831 save = yypath;
832 yypath = save->save;
833 save->save = NULL;
834 ctry = save->ctry;
835 if (save->state != yystate) YYABORT;
836 yyFreeState(save);
837
838 }
839 else
840 {
841
842 /* Unresolved conflict - start/continue trial parse */
843 YYParseState *save;
844 #if YYDEBUG
845 if (yydebug)
846 {
847 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
848 if (yyps->save)
849 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
850 else
851 fputs("Starting trial parse.\n", stderr);
852 }
853 #endif
854 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
855 if (save == NULL) goto yyenomem;
856 save->save = yyps->save;
857 save->state = yystate;
858 save->errflag = yyerrflag;
859 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
860 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
861 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
862 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
863 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
864 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
865 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
866 #endif
867 ctry = yytable[yyn];
868 if (yyctable[ctry] == -1)
869 {
870 #if YYDEBUG
871 if (yydebug && yychar >= YYEOF)
872 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
873 #endif
874 ctry++;
875 }
876 save->ctry = ctry;
877 if (yyps->save == NULL)
878 {
879 /* If this is a first conflict in the stack, start saving lexemes */
880 if (!yylexemes)
881 {
882 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
883 if (yylexemes == NULL) goto yyenomem;
884 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
885 if (yylvals == NULL) goto yyenomem;
886 yylvlim = yylvals + YYLVQUEUEGROWTH;
887 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
888 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
889 if (yylpsns == NULL) goto yyenomem;
890 yylplim = yylpsns + YYLVQUEUEGROWTH;
891 #endif
892 }
893 if (yylvp == yylve)
894 {
895 yylvp = yylve = yylvals;
896 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
897 yylpp = yylpe = yylpsns;
898 #endif
899 yylexp = yylexemes;
900 if (yychar >= YYEOF)
901 {
902 *yylve++ = yylval;
903 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
904 *yylpe++ = yylloc;
905 #endif
906 *yylexp = (YYINT) yychar;
907 yychar = YYEMPTY;
908 }
909 }
910 }
911 if (yychar >= YYEOF)
912 {
913 yylvp--;
914 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
915 yylpp--;
916 #endif
917 yylexp--;
918 yychar = YYEMPTY;
919 }
920 save->lexeme = (int) (yylvp - yylvals);
921 yyps->save = save;
922 }
923 if (yytable[yyn] == ctry)
924 {
925 #if YYDEBUG
926 if (yydebug)
927 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
928 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
929 #endif
930 if (yychar < 0)
931 {
932 yylvp++;
933 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
934 yylpp++;
935 #endif
936 yylexp++;
937 }
938 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
939 goto yyoverflow;
940 yystate = yyctable[ctry];
941 *++yystack.s_mark = (YYINT) yystate;
942 *++yystack.l_mark = yylval;
943 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
944 *++yystack.p_mark = yylloc;
945 #endif
946 yychar = YYEMPTY;
947 if (yyerrflag > 0) --yyerrflag;
948 goto yyloop;
949 }
950 else
951 {
952 yyn = yyctable[ctry];
953 goto yyreduce;
954 }
955 } /* End of code dealing with conflicts */
956 #endif /* YYBTYACC */
957 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
958 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
959 {
960 #if YYDEBUG
961 if (yydebug)
962 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
963 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
964 #endif
965 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
966 yystate = yytable[yyn];
967 *++yystack.s_mark = yytable[yyn];
968 *++yystack.l_mark = yylval;
969 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
970 *++yystack.p_mark = yylloc;
971 #endif
972 yychar = YYEMPTY;
973 if (yyerrflag > 0) --yyerrflag;
974 goto yyloop;
975 }
976 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
977 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
978 {
979 yyn = yytable[yyn];
980 goto yyreduce;
981 }
982 if (yyerrflag != 0) goto yyinrecovery;
983 #if YYBTYACC
984
985 yynewerrflag = 1;
986 goto yyerrhandler;
987 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
988
989 yyerrlab:
990 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
991 * before looking for error recovery */
992 yystack.s_mark -= yym;
993 yystate = *yystack.s_mark;
994 yystack.l_mark -= yym;
995 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
996 yystack.p_mark -= yym;
997 #endif
998
999 yynewerrflag = 0;
1000 yyerrhandler:
1001 while (yyps->save)
1002 {
1003 int ctry;
1004 YYParseState *save = yyps->save;
1005 #if YYDEBUG
1006 if (yydebug)
1007 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1008 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1009 (int)(yylvp - yylvals - yyps->save->lexeme));
1010 #endif
1011 /* Memorize most forward-looking error state in case it's really an error. */
1012 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1013 {
1014 /* Free old saved error context state */
1015 if (yyerrctx) yyFreeState(yyerrctx);
1016 /* Create and fill out new saved error context state */
1017 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1018 if (yyerrctx == NULL) goto yyenomem;
1019 yyerrctx->save = yyps->save;
1020 yyerrctx->state = yystate;
1021 yyerrctx->errflag = yyerrflag;
1022 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1023 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1024 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1025 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1026 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1027 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1028 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1029 #endif
1030 yyerrctx->lexeme = (int) (yylvp - yylvals);
1031 }
1032 yylvp = yylvals + save->lexeme;
1033 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1034 yylpp = yylpsns + save->lexeme;
1035 #endif
1036 yylexp = yylexemes + save->lexeme;
1037 yychar = YYEMPTY;
1038 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1039 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1040 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1041 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1042 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1043 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1044 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1045 #endif
1046 ctry = ++save->ctry;
1047 yystate = save->state;
1048 /* We tried shift, try reduce now */
1049 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1050 yyps->save = save->save;
1051 save->save = NULL;
1052 yyFreeState(save);
1053
1054 /* Nothing left on the stack -- error */
1055 if (!yyps->save)
1056 {
1057 #if YYDEBUG
1058 if (yydebug)
1059 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1060 YYPREFIX, yydepth);
1061 #endif
1062 /* Restore state as it was in the most forward-advanced error */
1063 yylvp = yylvals + yyerrctx->lexeme;
1064 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1065 yylpp = yylpsns + yyerrctx->lexeme;
1066 #endif
1067 yylexp = yylexemes + yyerrctx->lexeme;
1068 yychar = yylexp[-1];
1069 yylval = yylvp[-1];
1070 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1071 yylloc = yylpp[-1];
1072 #endif
1073 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1074 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1075 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1076 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1077 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1078 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1079 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1080 #endif
1081 yystate = yyerrctx->state;
1082 yyFreeState(yyerrctx);
1083 yyerrctx = NULL;
1084 }
1085 yynewerrflag = 1;
1086 }
1087 if (yynewerrflag == 0) goto yyinrecovery;
1088 #endif /* YYBTYACC */
1089
1090 YYERROR_CALL("syntax error");
1091 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1092 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1093 #endif
1094
1095 #if !YYBTYACC
1096 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1097 yyerrlab:
1098 #endif
1099 ++yynerrs;
1100
1101 yyinrecovery:
1102 if (yyerrflag < 3)
1103 {
1104 yyerrflag = 3;
1105 for (;;)
1106 {
1107 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1108 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1109 {
1110 #if YYDEBUG
1111 if (yydebug)
1112 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1113 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1114 #endif
1115 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1116 yystate = yytable[yyn];
1117 *++yystack.s_mark = yytable[yyn];
1118 *++yystack.l_mark = yylval;
1119 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1120 /* lookahead position is error end position */
1121 yyerror_loc_range[2] = yylloc;
1122 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1123 *++yystack.p_mark = yyloc;
1124 #endif
1125 goto yyloop;
1126 }
1127 else
1128 {
1129 #if YYDEBUG
1130 if (yydebug)
1131 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1132 YYDEBUGSTR, yydepth, *yystack.s_mark);
1133 #endif
1134 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1135 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1136 /* the current TOS position is the error start position */
1137 yyerror_loc_range[1] = *yystack.p_mark;
1138 #endif
1139 #if defined(YYDESTRUCT_CALL)
1140 #if YYBTYACC
1141 if (!yytrial)
1142 #endif /* YYBTYACC */
1143 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1144 YYDESTRUCT_CALL("error: discarding state",
1145 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1146 #else
1147 YYDESTRUCT_CALL("error: discarding state",
1148 yystos[*yystack.s_mark], yystack.l_mark);
1149 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1150 #endif /* defined(YYDESTRUCT_CALL) */
1151 --yystack.s_mark;
1152 --yystack.l_mark;
1153 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1154 --yystack.p_mark;
1155 #endif
1156 }
1157 }
1158 }
1159 else
1160 {
1161 if (yychar == YYEOF) goto yyabort;
1162 #if YYDEBUG
1163 if (yydebug)
1164 {
1165 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1166 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1167 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1168 }
1169 #endif
1170 #if defined(YYDESTRUCT_CALL)
1171 #if YYBTYACC
1172 if (!yytrial)
1173 #endif /* YYBTYACC */
1174 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1175 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1176 #else
1177 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1178 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1179 #endif /* defined(YYDESTRUCT_CALL) */
1180 yychar = YYEMPTY;
1181 goto yyloop;
1182 }
1183
1184 yyreduce:
1185 yym = yylen[yyn];
1186 #if YYDEBUG
1187 if (yydebug)
1188 {
1189 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1190 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1191 #ifdef YYSTYPE_TOSTRING
1192 #if YYBTYACC
1193 if (!yytrial)
1194 #endif /* YYBTYACC */
1195 if (yym > 0)
1196 {
1197 int i;
1198 fputc('<', stderr);
1199 for (i = yym; i > 0; i--)
1200 {
1201 if (i != yym) fputs(", ", stderr);
1202 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1203 yystack.l_mark[1-i]), stderr);
1204 }
1205 fputc('>', stderr);
1206 }
1207 #endif
1208 fputc('\n', stderr);
1209 }
1210 #endif
1211 if (yym > 0)
1212 yyval = yystack.l_mark[1-yym];
1213 else
1214 memset(&yyval, 0, sizeof yyval);
1215 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1216
1217 /* Perform position reduction */
1218 memset(&yyloc, 0, sizeof(yyloc));
1219 #if YYBTYACC
1220 if (!yytrial)
1221 #endif /* YYBTYACC */
1222 {
1223 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1224 /* just in case YYERROR is invoked within the action, save
1225 the start of the rhs as the error start position */
1226 yyerror_loc_range[1] = yystack.p_mark[1-yym];
1227 }
1228 #endif
1229
1230 switch (yyn)
1231 {
1232 case 3:
1233 #line 66 "ok_syntax1.y"
1234 { yyerrok ; }
1235 break;
1236 case 4:
1237 #line 70 "ok_syntax1.y"
1238 { printf("%d\n",yystack.l_mark[0].ival);}
1239 break;
1240 case 5:
1241 #line 72 "ok_syntax1.y"
1242 { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
1243 break;
1244 case 6:
1245 #line 76 "ok_syntax1.y"
1246 { yyval.ival = yystack.l_mark[-1].ival; }
1247 break;
1248 case 7:
1249 #line 78 "ok_syntax1.y"
1250 { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
1251 break;
1252 case 8:
1253 #line 80 "ok_syntax1.y"
1254 { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
1255 break;
1256 case 9:
1257 #line 82 "ok_syntax1.y"
1258 { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
1259 break;
1260 case 10:
1261 #line 84 "ok_syntax1.y"
1262 { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
1263 break;
1264 case 11:
1265 #line 86 "ok_syntax1.y"
1266 { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
1267 break;
1268 case 12:
1269 #line 88 "ok_syntax1.y"
1270 { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
1271 break;
1272 case 13:
1273 #line 90 "ok_syntax1.y"
1274 { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
1275 break;
1276 case 14:
1277 #line 92 "ok_syntax1.y"
1278 { yyval.ival = - yystack.l_mark[0].ival; }
1279 break;
1280 case 15:
1281 #line 94 "ok_syntax1.y"
1282 { yyval.ival = regs[yystack.l_mark[0].ival]; }
1283 break;
1284 case 17:
1285 #line 99 "ok_syntax1.y"
1286 { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
1287 break;
1288 case 18:
1289 #line 101 "ok_syntax1.y"
1290 { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
1291 break;
1292 #line 1291 "ok_syntax1.tab.c"
1293 default:
1294 break;
1295 }
1296 yystack.s_mark -= yym;
1297 yystate = *yystack.s_mark;
1298 yystack.l_mark -= yym;
1299 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1300 yystack.p_mark -= yym;
1301 #endif
1302 yym = yylhs[yyn];
1303 if (yystate == 0 && yym == 0)
1304 {
1305 #if YYDEBUG
1306 if (yydebug)
1307 {
1308 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1309 #ifdef YYSTYPE_TOSTRING
1310 #if YYBTYACC
1311 if (!yytrial)
1312 #endif /* YYBTYACC */
1313 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1314 #endif
1315 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1316 }
1317 #endif
1318 yystate = YYFINAL;
1319 *++yystack.s_mark = YYFINAL;
1320 *++yystack.l_mark = yyval;
1321 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1322 *++yystack.p_mark = yyloc;
1323 #endif
1324 if (yychar < 0)
1325 {
1326 #if YYBTYACC
1327 do {
1328 if (yylvp < yylve)
1329 {
1330 /* we're currently re-reading tokens */
1331 yylval = *yylvp++;
1332 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1333 yylloc = *yylpp++;
1334 #endif
1335 yychar = *yylexp++;
1336 break;
1337 }
1338 if (yyps->save)
1339 {
1340 /* in trial mode; save scanner results for future parse attempts */
1341 if (yylvp == yylvlim)
1342 { /* Enlarge lexical value queue */
1343 size_t p = (size_t) (yylvp - yylvals);
1344 size_t s = (size_t) (yylvlim - yylvals);
1345
1346 s += YYLVQUEUEGROWTH;
1347 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1348 goto yyenomem;
1349 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1350 goto yyenomem;
1351 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1352 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1353 goto yyenomem;
1354 #endif
1355 yylvp = yylve = yylvals + p;
1356 yylvlim = yylvals + s;
1357 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1358 yylpp = yylpe = yylpsns + p;
1359 yylplim = yylpsns + s;
1360 #endif
1361 yylexp = yylexemes + p;
1362 }
1363 *yylexp = (YYINT) YYLEX;
1364 *yylvp++ = yylval;
1365 yylve++;
1366 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1367 *yylpp++ = yylloc;
1368 yylpe++;
1369 #endif
1370 yychar = *yylexp++;
1371 break;
1372 }
1373 /* normal operation, no conflict encountered */
1374 #endif /* YYBTYACC */
1375 yychar = YYLEX;
1376 #if YYBTYACC
1377 } while (0);
1378 #endif /* YYBTYACC */
1379 if (yychar < 0) yychar = YYEOF;
1380 #if YYDEBUG
1381 if (yydebug)
1382 {
1383 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1384 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1385 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1386 }
1387 #endif
1388 }
1389 if (yychar == YYEOF) goto yyaccept;
1390 goto yyloop;
1391 }
1392 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1393 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1394 yystate = yytable[yyn];
1395 else
1396 yystate = yydgoto[yym];
1397 #if YYDEBUG
1398 if (yydebug)
1399 {
1400 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1401 #ifdef YYSTYPE_TOSTRING
1402 #if YYBTYACC
1403 if (!yytrial)
1404 #endif /* YYBTYACC */
1405 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1406 #endif
1407 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1408 }
1409 #endif
1410 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1411 *++yystack.s_mark = (YYINT) yystate;
1412 *++yystack.l_mark = yyval;
1413 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1414 *++yystack.p_mark = yyloc;
1415 #endif
1416 goto yyloop;
1417 #if YYBTYACC
1418
1419 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1420 yyvalid:
1421 if (yypath) YYABORT;
1422 while (yyps->save)
1423 {
1424 YYParseState *save = yyps->save;
1425 yyps->save = save->save;
1426 save->save = yypath;
1427 yypath = save;
1428 }
1429 #if YYDEBUG
1430 if (yydebug)
1431 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1432 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1433 #endif
1434 if (yyerrctx)
1435 {
1436 yyFreeState(yyerrctx);
1437 yyerrctx = NULL;
1438 }
1439 yylvp = yylvals + yypath->lexeme;
1440 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1441 yylpp = yylpsns + yypath->lexeme;
1442 #endif
1443 yylexp = yylexemes + yypath->lexeme;
1444 yychar = YYEMPTY;
1445 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1446 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1447 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1448 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1449 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1450 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1451 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1452 #endif
1453 yystate = yypath->state;
1454 goto yyloop;
1455 #endif /* YYBTYACC */
1456
1457 yyoverflow:
1458 YYERROR_CALL("yacc stack overflow");
1459 #if YYBTYACC
1460 goto yyabort_nomem;
1461 yyenomem:
1462 YYERROR_CALL("memory exhausted");
1463 yyabort_nomem:
1464 #endif /* YYBTYACC */
1465 yyresult = 2;
1466 goto yyreturn;
1467
1468 yyabort:
1469 yyresult = 1;
1470 goto yyreturn;
1471
1472 yyaccept:
1473 #if YYBTYACC
1474 if (yyps->save) goto yyvalid;
1475 #endif /* YYBTYACC */
1476 yyresult = 0;
1477
1478 yyreturn:
1479 #if defined(YYDESTRUCT_CALL)
1480 if (yychar != YYEOF && yychar != YYEMPTY)
1481 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1482 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1483 #else
1484 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1485 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1486
1487 {
1488 YYSTYPE *pv;
1489 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1490 YYLTYPE *pp;
1491
1492 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1493 YYDESTRUCT_CALL("cleanup: discarding state",
1494 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1495 #else
1496 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1497 YYDESTRUCT_CALL("cleanup: discarding state",
1498 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1499 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1500 }
1501 #endif /* defined(YYDESTRUCT_CALL) */
1502
1503 #if YYBTYACC
1504 if (yyerrctx)
1505 {
1506 yyFreeState(yyerrctx);
1507 yyerrctx = NULL;
1508 }
1509 while (yyps)
1510 {
1511 YYParseState *save = yyps;
1512 yyps = save->save;
1513 save->save = NULL;
1514 yyFreeState(save);
1515 }
1516 while (yypath)
1517 {
1518 YYParseState *save = yypath;
1519 yypath = save->save;
1520 save->save = NULL;
1521 yyFreeState(save);
1522 }
1523 #endif /* YYBTYACC */
1524 yyfreestack(&yystack);
1525 return (yyresult);
1526 }
1527