ok_syntax1.tab.c revision 1.2 1 /* $NetBSD: ok_syntax1.tab.c,v 1.2 2017/02/11 19:33:12 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 1
9 #define YYMINOR 9
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 int yydebug;
374 int yynerrs;
375
376 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
377 #ifndef YYLLOC_DEFAULT
378 #define YYLLOC_DEFAULT(loc, rhs, n) \
379 do \
380 { \
381 if (n == 0) \
382 { \
383 (loc).first_line = ((rhs)[-1]).last_line; \
384 (loc).first_column = ((rhs)[-1]).last_column; \
385 (loc).last_line = ((rhs)[-1]).last_line; \
386 (loc).last_column = ((rhs)[-1]).last_column; \
387 } \
388 else \
389 { \
390 (loc).first_line = ((rhs)[ 0 ]).first_line; \
391 (loc).first_column = ((rhs)[ 0 ]).first_column; \
392 (loc).last_line = ((rhs)[n-1]).last_line; \
393 (loc).last_column = ((rhs)[n-1]).last_column; \
394 } \
395 } while (0)
396 #endif /* YYLLOC_DEFAULT */
397 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
398 #if YYBTYACC
399
400 #ifndef YYLVQUEUEGROWTH
401 #define YYLVQUEUEGROWTH 32
402 #endif
403 #endif /* YYBTYACC */
404
405 /* define the initial stack-sizes */
406 #ifdef YYSTACKSIZE
407 #undef YYMAXDEPTH
408 #define YYMAXDEPTH YYSTACKSIZE
409 #else
410 #ifdef YYMAXDEPTH
411 #define YYSTACKSIZE YYMAXDEPTH
412 #else
413 #define YYSTACKSIZE 10000
414 #define YYMAXDEPTH 10000
415 #endif
416 #endif
417
418 #ifndef YYINITSTACKSIZE
419 #define YYINITSTACKSIZE 200
420 #endif
421
422 typedef struct {
423 unsigned stacksize;
424 YYINT *s_base;
425 YYINT *s_mark;
426 YYINT *s_last;
427 YYSTYPE *l_base;
428 YYSTYPE *l_mark;
429 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
430 YYLTYPE *p_base;
431 YYLTYPE *p_mark;
432 #endif
433 } YYSTACKDATA;
434 #if YYBTYACC
435
436 struct YYParseState_s
437 {
438 struct YYParseState_s *save; /* Previously saved parser state */
439 YYSTACKDATA yystack; /* saved parser stack */
440 int state; /* saved parser state */
441 int errflag; /* saved error recovery status */
442 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
443 YYINT ctry; /* saved index in yyctable[] for this conflict */
444 };
445 typedef struct YYParseState_s YYParseState;
446 #endif /* YYBTYACC */
447 #line 104 "ok_syntax1.y"
448 /* start of programs */
449
450 #ifdef YYBYACC
451 extern int YYLEX_DECL();
452 #endif
453
454 int
455 main (void)
456 {
457 int regs[26];
458 int base = 10;
459
460 while(!feof(stdin)) {
461 yyparse(regs, &base);
462 }
463 return 0;
464 }
465
466 #define UNUSED(x) ((void)(x))
467
468 static void
469 YYERROR_DECL()
470 {
471 UNUSED(regs); /* %parse-param regs is not actually used here */
472 UNUSED(base); /* %parse-param base is not actually used here */
473 fprintf(stderr, "%s\n", s);
474 }
475
476 int
477 YYLEX_DECL()
478 {
479 /* lexical analysis routine */
480 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
481 /* return DIGIT for a digit, yylval = 0 through 9 */
482 /* all other characters are returned immediately */
483
484 int c;
485
486 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
487
488 /* c is now nonblank */
489
490 if( islower( c )) {
491 yylval->ival = (c - 'a');
492 return ( LETTER );
493 }
494 if( isdigit( c )) {
495 yylval->ival = (c - '0') % (*base);
496 return ( DIGIT );
497 }
498 return( c );
499 }
500 #line 499 "ok_syntax1.tab.c"
501
502 /* For use in generated program */
503 #define yydepth (int)(yystack.s_mark - yystack.s_base)
504 #if YYBTYACC
505 #define yytrial (yyps->save)
506 #endif /* YYBTYACC */
507
508 #if YYDEBUG
509 #include <stdio.h> /* needed for printf */
510 #endif
511
512 #include <stdlib.h> /* needed for malloc, etc */
513 #include <string.h> /* needed for memset */
514
515 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
516 static int yygrowstack(YYSTACKDATA *data)
517 {
518 int i;
519 unsigned newsize;
520 YYINT *newss;
521 YYSTYPE *newvs;
522 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
523 YYLTYPE *newps;
524 #endif
525
526 if ((newsize = data->stacksize) == 0)
527 newsize = YYINITSTACKSIZE;
528 else if (newsize >= YYMAXDEPTH)
529 return YYENOMEM;
530 else if ((newsize *= 2) > YYMAXDEPTH)
531 newsize = YYMAXDEPTH;
532
533 i = (int) (data->s_mark - data->s_base);
534 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
535 if (newss == 0)
536 return YYENOMEM;
537
538 data->s_base = newss;
539 data->s_mark = newss + i;
540
541 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
542 if (newvs == 0)
543 return YYENOMEM;
544
545 data->l_base = newvs;
546 data->l_mark = newvs + i;
547
548 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
549 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
550 if (newps == 0)
551 return YYENOMEM;
552
553 data->p_base = newps;
554 data->p_mark = newps + i;
555 #endif
556
557 data->stacksize = newsize;
558 data->s_last = data->s_base + newsize - 1;
559
560 #if YYDEBUG
561 if (yydebug)
562 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
563 #endif
564 return 0;
565 }
566
567 #if YYPURE || defined(YY_NO_LEAKS)
568 static void yyfreestack(YYSTACKDATA *data)
569 {
570 free(data->s_base);
571 free(data->l_base);
572 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
573 free(data->p_base);
574 #endif
575 memset(data, 0, sizeof(*data));
576 }
577 #else
578 #define yyfreestack(data) /* nothing */
579 #endif /* YYPURE || defined(YY_NO_LEAKS) */
580 #if YYBTYACC
581
582 static YYParseState *
583 yyNewState(unsigned size)
584 {
585 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
586 if (p == NULL) return NULL;
587
588 p->yystack.stacksize = size;
589 if (size == 0)
590 {
591 p->yystack.s_base = NULL;
592 p->yystack.l_base = NULL;
593 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
594 p->yystack.p_base = NULL;
595 #endif
596 return p;
597 }
598 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
599 if (p->yystack.s_base == NULL) return NULL;
600 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
601 if (p->yystack.l_base == NULL) return NULL;
602 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
603 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
604 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
605 if (p->yystack.p_base == NULL) return NULL;
606 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
607 #endif
608
609 return p;
610 }
611
612 static void
613 yyFreeState(YYParseState *p)
614 {
615 yyfreestack(&p->yystack);
616 free(p);
617 }
618 #endif /* YYBTYACC */
619
620 #define YYABORT goto yyabort
621 #define YYREJECT goto yyabort
622 #define YYACCEPT goto yyaccept
623 #define YYERROR goto yyerrlab
624 #if YYBTYACC
625 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
626 #define YYVALID_NESTED do { if (yyps->save && \
627 yyps->save->save == 0) goto yyvalid; } while(0)
628 #endif /* YYBTYACC */
629
630 int
631 YYPARSE_DECL()
632 {
633 int yyerrflag;
634 int yychar;
635 YYSTYPE yyval;
636 YYSTYPE yylval;
637 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
638 YYLTYPE yyloc; /* position returned by actions */
639 YYLTYPE yylloc; /* position from the lexer */
640 #endif
641
642 /* variables for the parser stack */
643 YYSTACKDATA yystack;
644 #if YYBTYACC
645
646 /* Current parser state */
647 static YYParseState *yyps = 0;
648
649 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
650 static YYParseState *yypath = 0;
651
652 /* Base of the lexical value queue */
653 static YYSTYPE *yylvals = 0;
654
655 /* Current position at lexical value queue */
656 static YYSTYPE *yylvp = 0;
657
658 /* End position of lexical value queue */
659 static YYSTYPE *yylve = 0;
660
661 /* The last allocated position at the lexical value queue */
662 static YYSTYPE *yylvlim = 0;
663
664 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
665 /* Base of the lexical position queue */
666 static YYLTYPE *yylpsns = 0;
667
668 /* Current position at lexical position queue */
669 static YYLTYPE *yylpp = 0;
670
671 /* End position of lexical position queue */
672 static YYLTYPE *yylpe = 0;
673
674 /* The last allocated position at the lexical position queue */
675 static YYLTYPE *yylplim = 0;
676 #endif
677
678 /* Current position at lexical token queue */
679 static YYINT *yylexp = 0;
680
681 static YYINT *yylexemes = 0;
682 #endif /* YYBTYACC */
683 int yym, yyn, yystate, yyresult;
684 #if YYBTYACC
685 int yynewerrflag;
686 YYParseState *yyerrctx = NULL;
687 #endif /* YYBTYACC */
688 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
689 YYLTYPE yyerror_loc_range[2]; /* position of error start & end */
690 #endif
691 #if YYDEBUG
692 const char *yys;
693
694 if ((yys = getenv("YYDEBUG")) != 0)
695 {
696 yyn = *yys;
697 if (yyn >= '0' && yyn <= '9')
698 yydebug = yyn - '0';
699 }
700 if (yydebug)
701 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
702 #endif
703
704 #if YYBTYACC
705 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
706 yyps->save = 0;
707 #endif /* YYBTYACC */
708 yym = 0;
709 yyn = 0;
710 yynerrs = 0;
711 yyerrflag = 0;
712 yychar = YYEMPTY;
713 yystate = 0;
714
715 #if YYPURE
716 memset(&yystack, 0, sizeof(yystack));
717 #endif
718
719 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
720 yystack.s_mark = yystack.s_base;
721 yystack.l_mark = yystack.l_base;
722 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
723 yystack.p_mark = yystack.p_base;
724 #endif
725 yystate = 0;
726 *yystack.s_mark = 0;
727
728 yyloop:
729 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
730 if (yychar < 0)
731 {
732 #if YYBTYACC
733 do {
734 if (yylvp < yylve)
735 {
736 /* we're currently re-reading tokens */
737 yylval = *yylvp++;
738 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
739 yylloc = *yylpp++;
740 #endif
741 yychar = *yylexp++;
742 break;
743 }
744 if (yyps->save)
745 {
746 /* in trial mode; save scanner results for future parse attempts */
747 if (yylvp == yylvlim)
748 { /* Enlarge lexical value queue */
749 size_t p = (size_t) (yylvp - yylvals);
750 size_t s = (size_t) (yylvlim - yylvals);
751
752 s += YYLVQUEUEGROWTH;
753 if ((yylexemes = realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
754 if ((yylvals = realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
755 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
756 if ((yylpsns = realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
757 #endif
758 yylvp = yylve = yylvals + p;
759 yylvlim = yylvals + s;
760 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
761 yylpp = yylpe = yylpsns + p;
762 yylplim = yylpsns + s;
763 #endif
764 yylexp = yylexemes + p;
765 }
766 *yylexp = (YYINT) YYLEX;
767 *yylvp++ = yylval;
768 yylve++;
769 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
770 *yylpp++ = yylloc;
771 yylpe++;
772 #endif
773 yychar = *yylexp++;
774 break;
775 }
776 /* normal operation, no conflict encountered */
777 #endif /* YYBTYACC */
778 yychar = YYLEX;
779 #if YYBTYACC
780 } while (0);
781 #endif /* YYBTYACC */
782 if (yychar < 0) yychar = YYEOF;
783 #if YYDEBUG
784 if (yydebug)
785 {
786 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
787 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
788 YYDEBUGSTR, yydepth, yystate, yychar, yys);
789 #ifdef YYSTYPE_TOSTRING
790 #if YYBTYACC
791 if (!yytrial)
792 #endif /* YYBTYACC */
793 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
794 #endif
795 fputc('\n', stderr);
796 }
797 #endif
798 }
799 #if YYBTYACC
800
801 /* Do we have a conflict? */
802 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
803 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
804 {
805 YYINT ctry;
806
807 if (yypath)
808 {
809 YYParseState *save;
810 #if YYDEBUG
811 if (yydebug)
812 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
813 YYDEBUGSTR, yydepth, yystate);
814 #endif
815 /* Switch to the next conflict context */
816 save = yypath;
817 yypath = save->save;
818 save->save = NULL;
819 ctry = save->ctry;
820 if (save->state != yystate) YYABORT;
821 yyFreeState(save);
822
823 }
824 else
825 {
826
827 /* Unresolved conflict - start/continue trial parse */
828 YYParseState *save;
829 #if YYDEBUG
830 if (yydebug)
831 {
832 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
833 if (yyps->save)
834 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
835 else
836 fputs("Starting trial parse.\n", stderr);
837 }
838 #endif
839 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
840 if (save == NULL) goto yyenomem;
841 save->save = yyps->save;
842 save->state = yystate;
843 save->errflag = yyerrflag;
844 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
845 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
846 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
847 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
848 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
849 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
850 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
851 #endif
852 ctry = yytable[yyn];
853 if (yyctable[ctry] == -1)
854 {
855 #if YYDEBUG
856 if (yydebug && yychar >= YYEOF)
857 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
858 #endif
859 ctry++;
860 }
861 save->ctry = ctry;
862 if (yyps->save == NULL)
863 {
864 /* If this is a first conflict in the stack, start saving lexemes */
865 if (!yylexemes)
866 {
867 yylexemes = malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
868 if (yylexemes == NULL) goto yyenomem;
869 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
870 if (yylvals == NULL) goto yyenomem;
871 yylvlim = yylvals + YYLVQUEUEGROWTH;
872 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
873 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
874 if (yylpsns == NULL) goto yyenomem;
875 yylplim = yylpsns + YYLVQUEUEGROWTH;
876 #endif
877 }
878 if (yylvp == yylve)
879 {
880 yylvp = yylve = yylvals;
881 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
882 yylpp = yylpe = yylpsns;
883 #endif
884 yylexp = yylexemes;
885 if (yychar >= YYEOF)
886 {
887 *yylve++ = yylval;
888 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
889 *yylpe++ = yylloc;
890 #endif
891 *yylexp = (YYINT) yychar;
892 yychar = YYEMPTY;
893 }
894 }
895 }
896 if (yychar >= YYEOF)
897 {
898 yylvp--;
899 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
900 yylpp--;
901 #endif
902 yylexp--;
903 yychar = YYEMPTY;
904 }
905 save->lexeme = (int) (yylvp - yylvals);
906 yyps->save = save;
907 }
908 if (yytable[yyn] == ctry)
909 {
910 #if YYDEBUG
911 if (yydebug)
912 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
913 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
914 #endif
915 if (yychar < 0)
916 {
917 yylvp++;
918 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
919 yylpp++;
920 #endif
921 yylexp++;
922 }
923 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
924 goto yyoverflow;
925 yystate = yyctable[ctry];
926 *++yystack.s_mark = (YYINT) yystate;
927 *++yystack.l_mark = yylval;
928 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
929 *++yystack.p_mark = yylloc;
930 #endif
931 yychar = YYEMPTY;
932 if (yyerrflag > 0) --yyerrflag;
933 goto yyloop;
934 }
935 else
936 {
937 yyn = yyctable[ctry];
938 goto yyreduce;
939 }
940 } /* End of code dealing with conflicts */
941 #endif /* YYBTYACC */
942 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
943 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
944 {
945 #if YYDEBUG
946 if (yydebug)
947 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
948 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
949 #endif
950 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
951 yystate = yytable[yyn];
952 *++yystack.s_mark = yytable[yyn];
953 *++yystack.l_mark = yylval;
954 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
955 *++yystack.p_mark = yylloc;
956 #endif
957 yychar = YYEMPTY;
958 if (yyerrflag > 0) --yyerrflag;
959 goto yyloop;
960 }
961 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
962 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
963 {
964 yyn = yytable[yyn];
965 goto yyreduce;
966 }
967 if (yyerrflag != 0) goto yyinrecovery;
968 #if YYBTYACC
969
970 yynewerrflag = 1;
971 goto yyerrhandler;
972 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
973
974 yyerrlab:
975 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
976 * before looking for error recovery */
977 yystack.s_mark -= yym;
978 yystate = *yystack.s_mark;
979 yystack.l_mark -= yym;
980 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
981 yystack.p_mark -= yym;
982 #endif
983
984 yynewerrflag = 0;
985 yyerrhandler:
986 while (yyps->save)
987 {
988 int ctry;
989 YYParseState *save = yyps->save;
990 #if YYDEBUG
991 if (yydebug)
992 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
993 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
994 (int)(yylvp - yylvals - yyps->save->lexeme));
995 #endif
996 /* Memorize most forward-looking error state in case it's really an error. */
997 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
998 {
999 /* Free old saved error context state */
1000 if (yyerrctx) yyFreeState(yyerrctx);
1001 /* Create and fill out new saved error context state */
1002 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1003 if (yyerrctx == NULL) goto yyenomem;
1004 yyerrctx->save = yyps->save;
1005 yyerrctx->state = yystate;
1006 yyerrctx->errflag = yyerrflag;
1007 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1008 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1009 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1010 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1011 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1012 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1013 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1014 #endif
1015 yyerrctx->lexeme = (int) (yylvp - yylvals);
1016 }
1017 yylvp = yylvals + save->lexeme;
1018 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1019 yylpp = yylpsns + save->lexeme;
1020 #endif
1021 yylexp = yylexemes + save->lexeme;
1022 yychar = YYEMPTY;
1023 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1024 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1025 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1026 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1027 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1028 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1029 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1030 #endif
1031 ctry = ++save->ctry;
1032 yystate = save->state;
1033 /* We tried shift, try reduce now */
1034 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1035 yyps->save = save->save;
1036 save->save = NULL;
1037 yyFreeState(save);
1038
1039 /* Nothing left on the stack -- error */
1040 if (!yyps->save)
1041 {
1042 #if YYDEBUG
1043 if (yydebug)
1044 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1045 YYPREFIX, yydepth);
1046 #endif
1047 /* Restore state as it was in the most forward-advanced error */
1048 yylvp = yylvals + yyerrctx->lexeme;
1049 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1050 yylpp = yylpsns + yyerrctx->lexeme;
1051 #endif
1052 yylexp = yylexemes + yyerrctx->lexeme;
1053 yychar = yylexp[-1];
1054 yylval = yylvp[-1];
1055 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1056 yylloc = yylpp[-1];
1057 #endif
1058 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1059 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1060 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1061 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1062 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1063 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1064 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1065 #endif
1066 yystate = yyerrctx->state;
1067 yyFreeState(yyerrctx);
1068 yyerrctx = NULL;
1069 }
1070 yynewerrflag = 1;
1071 }
1072 if (yynewerrflag == 0) goto yyinrecovery;
1073 #endif /* YYBTYACC */
1074
1075 YYERROR_CALL("syntax error");
1076 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1077 yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
1078 #endif
1079
1080 #if !YYBTYACC
1081 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1082 yyerrlab:
1083 #endif
1084 ++yynerrs;
1085
1086 yyinrecovery:
1087 if (yyerrflag < 3)
1088 {
1089 yyerrflag = 3;
1090 for (;;)
1091 {
1092 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1093 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1094 {
1095 #if YYDEBUG
1096 if (yydebug)
1097 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1098 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1099 #endif
1100 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1101 yystate = yytable[yyn];
1102 *++yystack.s_mark = yytable[yyn];
1103 *++yystack.l_mark = yylval;
1104 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1105 /* lookahead position is error end position */
1106 yyerror_loc_range[1] = yylloc;
1107 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1108 *++yystack.p_mark = yyloc;
1109 #endif
1110 goto yyloop;
1111 }
1112 else
1113 {
1114 #if YYDEBUG
1115 if (yydebug)
1116 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1117 YYDEBUGSTR, yydepth, *yystack.s_mark);
1118 #endif
1119 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1120 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1121 /* the current TOS position is the error start position */
1122 yyerror_loc_range[0] = *yystack.p_mark;
1123 #endif
1124 #if defined(YYDESTRUCT_CALL)
1125 #if YYBTYACC
1126 if (!yytrial)
1127 #endif /* YYBTYACC */
1128 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1129 YYDESTRUCT_CALL("error: discarding state",
1130 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1131 #else
1132 YYDESTRUCT_CALL("error: discarding state",
1133 yystos[*yystack.s_mark], yystack.l_mark);
1134 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1135 #endif /* defined(YYDESTRUCT_CALL) */
1136 --yystack.s_mark;
1137 --yystack.l_mark;
1138 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1139 --yystack.p_mark;
1140 #endif
1141 }
1142 }
1143 }
1144 else
1145 {
1146 if (yychar == YYEOF) goto yyabort;
1147 #if YYDEBUG
1148 if (yydebug)
1149 {
1150 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1151 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1152 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1153 }
1154 #endif
1155 #if defined(YYDESTRUCT_CALL)
1156 #if YYBTYACC
1157 if (!yytrial)
1158 #endif /* YYBTYACC */
1159 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1160 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1161 #else
1162 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1163 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1164 #endif /* defined(YYDESTRUCT_CALL) */
1165 yychar = YYEMPTY;
1166 goto yyloop;
1167 }
1168
1169 yyreduce:
1170 yym = yylen[yyn];
1171 #if YYDEBUG
1172 if (yydebug)
1173 {
1174 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1175 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1176 #ifdef YYSTYPE_TOSTRING
1177 #if YYBTYACC
1178 if (!yytrial)
1179 #endif /* YYBTYACC */
1180 if (yym > 0)
1181 {
1182 int i;
1183 fputc('<', stderr);
1184 for (i = yym; i > 0; i--)
1185 {
1186 if (i != yym) fputs(", ", stderr);
1187 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1188 yystack.l_mark[1-i]), stderr);
1189 }
1190 fputc('>', stderr);
1191 }
1192 #endif
1193 fputc('\n', stderr);
1194 }
1195 #endif
1196 if (yym > 0)
1197 yyval = yystack.l_mark[1-yym];
1198 else
1199 memset(&yyval, 0, sizeof yyval);
1200 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1201
1202 /* Perform position reduction */
1203 memset(&yyloc, 0, sizeof(yyloc));
1204 #if YYBTYACC
1205 if (!yytrial)
1206 #endif /* YYBTYACC */
1207 {
1208 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
1209 /* just in case YYERROR is invoked within the action, save
1210 the start of the rhs as the error start position */
1211 yyerror_loc_range[0] = yystack.p_mark[1-yym];
1212 }
1213 #endif
1214
1215 switch (yyn)
1216 {
1217 case 3:
1218 #line 66 "ok_syntax1.y"
1219 { yyerrok ; }
1220 break;
1221 case 4:
1222 #line 70 "ok_syntax1.y"
1223 { printf("%d\n",yystack.l_mark[0].ival);}
1224 break;
1225 case 5:
1226 #line 72 "ok_syntax1.y"
1227 { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
1228 break;
1229 case 6:
1230 #line 76 "ok_syntax1.y"
1231 { yyval.ival = yystack.l_mark[-1].ival; }
1232 break;
1233 case 7:
1234 #line 78 "ok_syntax1.y"
1235 { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
1236 break;
1237 case 8:
1238 #line 80 "ok_syntax1.y"
1239 { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
1240 break;
1241 case 9:
1242 #line 82 "ok_syntax1.y"
1243 { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
1244 break;
1245 case 10:
1246 #line 84 "ok_syntax1.y"
1247 { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
1248 break;
1249 case 11:
1250 #line 86 "ok_syntax1.y"
1251 { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
1252 break;
1253 case 12:
1254 #line 88 "ok_syntax1.y"
1255 { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
1256 break;
1257 case 13:
1258 #line 90 "ok_syntax1.y"
1259 { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
1260 break;
1261 case 14:
1262 #line 92 "ok_syntax1.y"
1263 { yyval.ival = - yystack.l_mark[0].ival; }
1264 break;
1265 case 15:
1266 #line 94 "ok_syntax1.y"
1267 { yyval.ival = regs[yystack.l_mark[0].ival]; }
1268 break;
1269 case 17:
1270 #line 99 "ok_syntax1.y"
1271 { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
1272 break;
1273 case 18:
1274 #line 101 "ok_syntax1.y"
1275 { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
1276 break;
1277 #line 1276 "ok_syntax1.tab.c"
1278 default:
1279 break;
1280 }
1281 yystack.s_mark -= yym;
1282 yystate = *yystack.s_mark;
1283 yystack.l_mark -= yym;
1284 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1285 yystack.p_mark -= yym;
1286 #endif
1287 yym = yylhs[yyn];
1288 if (yystate == 0 && yym == 0)
1289 {
1290 #if YYDEBUG
1291 if (yydebug)
1292 {
1293 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1294 #ifdef YYSTYPE_TOSTRING
1295 #if YYBTYACC
1296 if (!yytrial)
1297 #endif /* YYBTYACC */
1298 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1299 #endif
1300 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1301 }
1302 #endif
1303 yystate = YYFINAL;
1304 *++yystack.s_mark = YYFINAL;
1305 *++yystack.l_mark = yyval;
1306 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1307 *++yystack.p_mark = yyloc;
1308 #endif
1309 if (yychar < 0)
1310 {
1311 #if YYBTYACC
1312 do {
1313 if (yylvp < yylve)
1314 {
1315 /* we're currently re-reading tokens */
1316 yylval = *yylvp++;
1317 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1318 yylloc = *yylpp++;
1319 #endif
1320 yychar = *yylexp++;
1321 break;
1322 }
1323 if (yyps->save)
1324 {
1325 /* in trial mode; save scanner results for future parse attempts */
1326 if (yylvp == yylvlim)
1327 { /* Enlarge lexical value queue */
1328 size_t p = (size_t) (yylvp - yylvals);
1329 size_t s = (size_t) (yylvlim - yylvals);
1330
1331 s += YYLVQUEUEGROWTH;
1332 if ((yylexemes = realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1333 goto yyenomem;
1334 if ((yylvals = realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1335 goto yyenomem;
1336 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1337 if ((yylpsns = realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1338 goto yyenomem;
1339 #endif
1340 yylvp = yylve = yylvals + p;
1341 yylvlim = yylvals + s;
1342 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1343 yylpp = yylpe = yylpsns + p;
1344 yylplim = yylpsns + s;
1345 #endif
1346 yylexp = yylexemes + p;
1347 }
1348 *yylexp = (YYINT) YYLEX;
1349 *yylvp++ = yylval;
1350 yylve++;
1351 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1352 *yylpp++ = yylloc;
1353 yylpe++;
1354 #endif
1355 yychar = *yylexp++;
1356 break;
1357 }
1358 /* normal operation, no conflict encountered */
1359 #endif /* YYBTYACC */
1360 yychar = YYLEX;
1361 #if YYBTYACC
1362 } while (0);
1363 #endif /* YYBTYACC */
1364 if (yychar < 0) yychar = YYEOF;
1365 #if YYDEBUG
1366 if (yydebug)
1367 {
1368 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1369 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1370 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1371 }
1372 #endif
1373 }
1374 if (yychar == YYEOF) goto yyaccept;
1375 goto yyloop;
1376 }
1377 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1378 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1379 yystate = yytable[yyn];
1380 else
1381 yystate = yydgoto[yym];
1382 #if YYDEBUG
1383 if (yydebug)
1384 {
1385 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1386 #ifdef YYSTYPE_TOSTRING
1387 #if YYBTYACC
1388 if (!yytrial)
1389 #endif /* YYBTYACC */
1390 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1391 #endif
1392 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1393 }
1394 #endif
1395 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1396 *++yystack.s_mark = (YYINT) yystate;
1397 *++yystack.l_mark = yyval;
1398 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1399 *++yystack.p_mark = yyloc;
1400 #endif
1401 goto yyloop;
1402 #if YYBTYACC
1403
1404 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1405 yyvalid:
1406 if (yypath) YYABORT;
1407 while (yyps->save)
1408 {
1409 YYParseState *save = yyps->save;
1410 yyps->save = save->save;
1411 save->save = yypath;
1412 yypath = save;
1413 }
1414 #if YYDEBUG
1415 if (yydebug)
1416 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1417 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1418 #endif
1419 if (yyerrctx)
1420 {
1421 yyFreeState(yyerrctx);
1422 yyerrctx = NULL;
1423 }
1424 yylvp = yylvals + yypath->lexeme;
1425 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1426 yylpp = yylpsns + yypath->lexeme;
1427 #endif
1428 yylexp = yylexemes + yypath->lexeme;
1429 yychar = YYEMPTY;
1430 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1431 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1432 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1433 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1434 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1435 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1436 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1437 #endif
1438 yystate = yypath->state;
1439 goto yyloop;
1440 #endif /* YYBTYACC */
1441
1442 yyoverflow:
1443 YYERROR_CALL("yacc stack overflow");
1444 #if YYBTYACC
1445 goto yyabort_nomem;
1446 yyenomem:
1447 YYERROR_CALL("memory exhausted");
1448 yyabort_nomem:
1449 #endif /* YYBTYACC */
1450 yyresult = 2;
1451 goto yyreturn;
1452
1453 yyabort:
1454 yyresult = 1;
1455 goto yyreturn;
1456
1457 yyaccept:
1458 #if YYBTYACC
1459 if (yyps->save) goto yyvalid;
1460 #endif /* YYBTYACC */
1461 yyresult = 0;
1462
1463 yyreturn:
1464 #if defined(YYDESTRUCT_CALL)
1465 if (yychar != YYEOF && yychar != YYEMPTY)
1466 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1467 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1468 #else
1469 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1470 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1471
1472 {
1473 YYSTYPE *pv;
1474 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1475 YYLTYPE *pp;
1476
1477 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1478 YYDESTRUCT_CALL("cleanup: discarding state",
1479 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1480 #else
1481 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1482 YYDESTRUCT_CALL("cleanup: discarding state",
1483 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1484 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1485 }
1486 #endif /* defined(YYDESTRUCT_CALL) */
1487
1488 #if YYBTYACC
1489 if (yyerrctx)
1490 {
1491 yyFreeState(yyerrctx);
1492 yyerrctx = NULL;
1493 }
1494 while (yyps)
1495 {
1496 YYParseState *save = yyps;
1497 yyps = save->save;
1498 save->save = NULL;
1499 yyFreeState(save);
1500 }
1501 while (yypath)
1502 {
1503 YYParseState *save = yypath;
1504 yypath = save->save;
1505 save->save = NULL;
1506 yyFreeState(save);
1507 }
1508 #endif /* YYBTYACC */
1509 yyfreestack(&yystack);
1510 return (yyresult);
1511 }
1512