ok_syntax1.tab.c revision 1.7 1 /* $NetBSD: ok_syntax1.tab.c,v 1.7 2026/01/18 16:41:31 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
19 #ifndef yyparse
20 #define yyparse ok_syntax1_parse
21 #endif /* yyparse */
22
23 #ifndef yylex
24 #define yylex ok_syntax1_lex
25 #endif /* yylex */
26
27 #ifndef yyerror
28 #define yyerror ok_syntax1_error
29 #endif /* yyerror */
30
31 #ifndef yychar
32 #define yychar ok_syntax1_char
33 #endif /* yychar */
34
35 #ifndef yyval
36 #define yyval ok_syntax1_val
37 #endif /* yyval */
38
39 #ifndef yylval
40 #define yylval ok_syntax1_lval
41 #endif /* yylval */
42
43 #ifndef yydebug
44 #define yydebug ok_syntax1_debug
45 #endif /* yydebug */
46
47 #ifndef yynerrs
48 #define yynerrs ok_syntax1_nerrs
49 #endif /* yynerrs */
50
51 #ifndef yyerrflag
52 #define yyerrflag ok_syntax1_errflag
53 #endif /* yyerrflag */
54
55 #ifndef yylhs
56 #define yylhs ok_syntax1_lhs
57 #endif /* yylhs */
58
59 #ifndef yylen
60 #define yylen ok_syntax1_len
61 #endif /* yylen */
62
63 #ifndef yydefred
64 #define yydefred ok_syntax1_defred
65 #endif /* yydefred */
66
67 #ifndef yydgoto
68 #define yydgoto ok_syntax1_dgoto
69 #endif /* yydgoto */
70
71 #ifndef yysindex
72 #define yysindex ok_syntax1_sindex
73 #endif /* yysindex */
74
75 #ifndef yyrindex
76 #define yyrindex ok_syntax1_rindex
77 #endif /* yyrindex */
78
79 #ifndef yygindex
80 #define yygindex ok_syntax1_gindex
81 #endif /* yygindex */
82
83 #ifndef yytable
84 #define yytable ok_syntax1_table
85 #endif /* yytable */
86
87 #ifndef yycheck
88 #define yycheck ok_syntax1_check
89 #endif /* yycheck */
90
91 #ifndef yyname
92 #define yyname ok_syntax1_name
93 #endif /* yyname */
94
95 #ifndef yyrule
96 #define yyrule ok_syntax1_rule
97 #endif /* yyrule */
98 #define YYPREFIX "ok_syntax1_"
99
100 #define YYPURE 1
101
102 #line 9 "ok_syntax1.y"
103 # include <stdio.h>
104 # include <ctype.h>
105
106 #ifdef YYBISON
107 #define YYSTYPE int
108 #define YYLEX_PARAM base
109 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
110 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
111 int YYLEX_DECL();
112 static void YYERROR_DECL();
113 #endif
114
115 #ifdef YYSTYPE
116 #undef YYSTYPE_IS_DECLARED
117 #define YYSTYPE_IS_DECLARED 1
118 #endif
119 #ifndef YYSTYPE_IS_DECLARED
120 #define YYSTYPE_IS_DECLARED 1
121 #line 43 "ok_syntax1.y"
122 union CalcData
123 {
124 char * cval;
125 int ival;
126 double dval;
127 }; typedef union CalcData YYSTYPE;
128 #endif /* !YYSTYPE_IS_DECLARED */
129 #line 128 "ok_syntax1.tab.c"
130
131 /* compatibility with bison */
132 #ifdef YYPARSE_PARAM
133 /* compatibility with FreeBSD */
134 # ifdef YYPARSE_PARAM_TYPE
135 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
136 # else
137 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
138 # endif
139 #else
140 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
141 #endif
142
143 /* Parameters sent to lex. */
144 #ifdef YYLEX_PARAM
145 # ifdef YYLEX_PARAM_TYPE
146 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
147 # else
148 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
149 # endif
150 # define YYLEX yylex(&yylval, YYLEX_PARAM)
151 #else
152 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
153 # define YYLEX yylex(&yylval, base)
154 #endif
155
156 /* Parameters sent to yyerror. */
157 #ifndef YYERROR_DECL
158 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
159 #endif
160 #ifndef YYERROR_CALL
161 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
162 #endif
163
164 extern int YYPARSE_DECL();
165
166 #define DIGIT 257
167 #define LETTER 258
168 #define OCT1 259
169 #define HEX1 260
170 #define HEX2 261
171 #define HEX3 262
172 #define STR1 263
173 #define STR2 265
174 #define BELL 266
175 #define BS 267
176 #define NL 268
177 #define LF 269
178 #define CR 270
179 #define TAB 271
180 #define VT 272
181 #define UMINUS 273
182 #define YYERRCODE 256
183 typedef int YYINT;
184 static const YYINT ok_syntax1_lhs[] = { -1,
185 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
186 2, 2, 2, 2, 2, 2, 3, 3,
187 };
188 static const YYINT ok_syntax1_len[] = { 2,
189 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
190 3, 3, 3, 2, 1, 1, 1, 2,
191 };
192 static const YYINT ok_syntax1_defred[] = { 1,
193 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
194 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
195 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
196 10, 11,
197 };
198 static const YYINT ok_syntax1_dgoto[] = { 1,
199 7, 8, 9,
200 };
201 static const YYINT ok_syntax1_sindex[] = { 0,
202 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
203 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
204 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
205 0, 0,
206 };
207 static const YYINT ok_syntax1_rindex[] = { 0,
208 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
210 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
211 0, 0,
212 };
213 static const YYINT ok_syntax1_gindex[] = { 0,
214 0, 65, 0,
215 };
216 #define YYTABLESIZE 220
217 static const YYINT ok_syntax1_table[] = { 6,
218 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
219 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
220 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
221 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
222 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
223 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
224 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
225 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
226 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
227 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
228 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
229 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
230 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
231 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
232 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
234 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
235 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
236 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
238 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
239 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
240 };
241 static const YYINT ok_syntax1_check[] = { 40,
242 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
243 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
244 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
245 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
246 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
247 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
248 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
249 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
250 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
251 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
252 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
253 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
254 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
255 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
256 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
257 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
258 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
259 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
260 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
261 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
262 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
263 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
264 };
265 #define YYFINAL 1
266 #ifndef YYDEBUG
267 #define YYDEBUG 0
268 #endif
269 #define YYMAXTOKEN 273
270 #define YYUNDFTOKEN 279
271 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
272 #if YYDEBUG
273 #ifndef NULL
274 #define NULL (void*)0
275 #endif
276 static const char *const ok_syntax1_name[] = {
277
278 "end-of-file",NULL,NULL,NULL,NULL,NULL,NULL,"'\\a'","'\\b'","'\\t'","'\\n'",
279 "'\\v'","'\\f'","'\\r'",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
280 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'#'",NULL,"'%'","'&'",NULL,
281 "'('","')'","'*'","'+'",NULL,"'-'",NULL,"'/'",NULL,NULL,NULL,NULL,NULL,NULL,
282 NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'='",NULL,NULL,"'@'",NULL,NULL,NULL,NULL,
283 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
284 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'^'",NULL,NULL,NULL,NULL,NULL,
285 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
286 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'|'",NULL,"'~'","'\\177'",NULL,NULL,
287 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
288 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
289 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
290 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
291 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
292 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
293 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
294 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'\\377'",NULL,
295 "DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1","\"\\177\\177\\\\\\n\"",
296 "STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",NULL,NULL,NULL,NULL,NULL,
297 "illegal-symbol",
298 };
299 static const char *const ok_syntax1_rule[] = {
300 "$accept : list",
301 "list :",
302 "list : list stat '\\n'",
303 "list : list error '\\n'",
304 "stat : expr",
305 "stat : LETTER '=' expr",
306 "expr : '(' expr ')'",
307 "expr : expr '+' expr",
308 "expr : expr '-' expr",
309 "expr : expr '*' expr",
310 "expr : expr '/' expr",
311 "expr : expr '%' expr",
312 "expr : expr '&' expr",
313 "expr : expr '|' expr",
314 "expr : '-' expr",
315 "expr : LETTER",
316 "expr : number",
317 "number : DIGIT",
318 "number : number DIGIT",
319
320 };
321 #endif
322
323 #if YYDEBUG
324 int yydebug;
325 #endif
326
327 /* define the initial stack-sizes */
328 #ifdef YYSTACKSIZE
329 #undef YYMAXDEPTH
330 #define YYMAXDEPTH YYSTACKSIZE
331 #else
332 #ifdef YYMAXDEPTH
333 #define YYSTACKSIZE YYMAXDEPTH
334 #else
335 #define YYSTACKSIZE 10000
336 #define YYMAXDEPTH 10000
337 #endif
338 #endif
339
340 #define YYINITSTACKSIZE 200
341
342 typedef struct {
343 unsigned stacksize;
344 YYINT *s_base;
345 YYINT *s_mark;
346 YYINT *s_last;
347 YYSTYPE *l_base;
348 YYSTYPE *l_mark;
349 } YYSTACKDATA;
350 #line 104 "ok_syntax1.y"
351 /* start of programs */
352
353 #ifdef YYBYACC
354 extern int YYLEX_DECL();
355 #endif
356
357 int
358 main (void)
359 {
360 int regs[26];
361 int base = 10;
362
363 while(!feof(stdin)) {
364 yyparse(regs, &base);
365 }
366 return 0;
367 }
368
369 #define UNUSED(x) ((void)(x))
370
371 static void
372 YYERROR_DECL()
373 {
374 UNUSED(regs); /* %parse-param regs is not actually used here */
375 UNUSED(base); /* %parse-param base is not actually used here */
376 fprintf(stderr, "%s\n", s);
377 }
378
379 int
380 YYLEX_DECL()
381 {
382 /* lexical analysis routine */
383 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
384 /* return DIGIT for a digit, yylval = 0 through 9 */
385 /* all other characters are returned immediately */
386
387 int c;
388
389 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
390
391 /* c is now nonblank */
392
393 if( islower( c )) {
394 yylval->ival = (c - 'a');
395 return ( LETTER );
396 }
397 if( isdigit( c )) {
398 yylval->ival = (c - '0') % (*base);
399 return ( DIGIT );
400 }
401 return( c );
402 }
403 #line 402 "ok_syntax1.tab.c"
404
405 #if YYDEBUG
406 #include <stdio.h> /* needed for printf */
407 #endif
408
409 #include <stdlib.h> /* needed for malloc, etc */
410 #include <string.h> /* needed for memset */
411
412 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
413 static int yygrowstack(YYSTACKDATA *data)
414 {
415 int i;
416 unsigned newsize;
417 YYINT *newss;
418 YYSTYPE *newvs;
419
420 if ((newsize = data->stacksize) == 0)
421 newsize = YYINITSTACKSIZE;
422 else if (newsize >= YYMAXDEPTH)
423 return YYENOMEM;
424 else if ((newsize *= 2) > YYMAXDEPTH)
425 newsize = YYMAXDEPTH;
426
427 i = (int) (data->s_mark - data->s_base);
428 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
429 if (newss == NULL)
430 return YYENOMEM;
431
432 data->s_base = newss;
433 data->s_mark = newss + i;
434
435 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
436 if (newvs == NULL)
437 return YYENOMEM;
438
439 data->l_base = newvs;
440 data->l_mark = newvs + i;
441
442 data->stacksize = newsize;
443 data->s_last = data->s_base + newsize - 1;
444 return 0;
445 }
446
447 #if YYPURE || defined(YY_NO_LEAKS)
448 static void yyfreestack(YYSTACKDATA *data)
449 {
450 free(data->s_base);
451 free(data->l_base);
452 memset(data, 0, sizeof(*data));
453 }
454 #else
455 #define yyfreestack(data) /* nothing */
456 #endif
457
458 #define YYABORT goto yyabort
459 #define YYREJECT goto yyabort
460 #define YYACCEPT goto yyaccept
461 #define YYERROR goto yyerrlab
462
463 int
464 YYPARSE_DECL()
465 {
466 int yyerrflag;
467 int yychar;
468 YYSTYPE yyval;
469 YYSTYPE yylval;
470 int yynerrs;
471
472 /* variables for the parser stack */
473 YYSTACKDATA yystack;
474 int yym, yyn, yystate;
475 #if YYDEBUG
476 const char *yys;
477
478 if ((yys = getenv("YYDEBUG")) != NULL)
479 {
480 yyn = *yys;
481 if (yyn >= '0' && yyn <= '9')
482 yydebug = yyn - '0';
483 }
484 #endif
485
486 memset(&yyval, 0, sizeof(yyval));
487 memset(&yylval, 0, sizeof(yylval));
488
489 /* yym is set below */
490 /* yyn is set below */
491 yynerrs = 0;
492 yyerrflag = 0;
493 yychar = YYEMPTY;
494 yystate = 0;
495
496 #if YYPURE
497 memset(&yystack, 0, sizeof(yystack));
498 #endif
499
500 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
501 yystack.s_mark = yystack.s_base;
502 yystack.l_mark = yystack.l_base;
503 yystate = 0;
504 *yystack.s_mark = 0;
505
506 yyloop:
507 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
508 if (yychar < 0)
509 {
510 yychar = YYLEX;
511 if (yychar < 0) yychar = YYEOF;
512 #if YYDEBUG
513 if (yydebug)
514 {
515 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
516 printf("%sdebug: state %d, reading %d (%s)\n",
517 YYPREFIX, yystate, yychar, yys);
518 }
519 #endif
520 }
521 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
522 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
523 {
524 #if YYDEBUG
525 if (yydebug)
526 printf("%sdebug: state %d, shifting to state %d\n",
527 YYPREFIX, yystate, yytable[yyn]);
528 #endif
529 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
530 yystate = yytable[yyn];
531 *++yystack.s_mark = yytable[yyn];
532 *++yystack.l_mark = yylval;
533 yychar = YYEMPTY;
534 if (yyerrflag > 0) --yyerrflag;
535 goto yyloop;
536 }
537 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
538 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
539 {
540 yyn = yytable[yyn];
541 goto yyreduce;
542 }
543 if (yyerrflag != 0) goto yyinrecovery;
544
545 YYERROR_CALL("syntax error");
546
547 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
548 yyerrlab:
549 ++yynerrs;
550
551 yyinrecovery:
552 if (yyerrflag < 3)
553 {
554 yyerrflag = 3;
555 for (;;)
556 {
557 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
558 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
559 {
560 #if YYDEBUG
561 if (yydebug)
562 printf("%sdebug: state %d, error recovery shifting\
563 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
564 #endif
565 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
566 yystate = yytable[yyn];
567 *++yystack.s_mark = yytable[yyn];
568 *++yystack.l_mark = yylval;
569 goto yyloop;
570 }
571 else
572 {
573 #if YYDEBUG
574 if (yydebug)
575 printf("%sdebug: error recovery discarding state %d\n",
576 YYPREFIX, *yystack.s_mark);
577 #endif
578 if (yystack.s_mark <= yystack.s_base) goto yyabort;
579 --yystack.s_mark;
580 --yystack.l_mark;
581 }
582 }
583 }
584 else
585 {
586 if (yychar == YYEOF) goto yyabort;
587 #if YYDEBUG
588 if (yydebug)
589 {
590 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
591 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
592 YYPREFIX, yystate, yychar, yys);
593 }
594 #endif
595 yychar = YYEMPTY;
596 goto yyloop;
597 }
598
599 yyreduce:
600 #if YYDEBUG
601 if (yydebug)
602 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
603 YYPREFIX, yystate, yyn, yyrule[yyn]);
604 #endif
605 yym = yylen[yyn];
606 if (yym > 0)
607 yyval = yystack.l_mark[1-yym];
608 else
609 memset(&yyval, 0, sizeof yyval);
610
611 switch (yyn)
612 {
613 case 3:
614 #line 66 "ok_syntax1.y"
615 { yyerrok ; }
616 #line 615 "ok_syntax1.tab.c"
617 break;
618 case 4:
619 #line 70 "ok_syntax1.y"
620 { printf("%d\n",yystack.l_mark[0].ival);}
621 #line 620 "ok_syntax1.tab.c"
622 break;
623 case 5:
624 #line 72 "ok_syntax1.y"
625 { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
626 #line 625 "ok_syntax1.tab.c"
627 break;
628 case 6:
629 #line 76 "ok_syntax1.y"
630 { yyval.ival = yystack.l_mark[-1].ival; }
631 #line 630 "ok_syntax1.tab.c"
632 break;
633 case 7:
634 #line 78 "ok_syntax1.y"
635 { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
636 #line 635 "ok_syntax1.tab.c"
637 break;
638 case 8:
639 #line 80 "ok_syntax1.y"
640 { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
641 #line 640 "ok_syntax1.tab.c"
642 break;
643 case 9:
644 #line 82 "ok_syntax1.y"
645 { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
646 #line 645 "ok_syntax1.tab.c"
647 break;
648 case 10:
649 #line 84 "ok_syntax1.y"
650 { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
651 #line 650 "ok_syntax1.tab.c"
652 break;
653 case 11:
654 #line 86 "ok_syntax1.y"
655 { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
656 #line 655 "ok_syntax1.tab.c"
657 break;
658 case 12:
659 #line 88 "ok_syntax1.y"
660 { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
661 #line 660 "ok_syntax1.tab.c"
662 break;
663 case 13:
664 #line 90 "ok_syntax1.y"
665 { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
666 #line 665 "ok_syntax1.tab.c"
667 break;
668 case 14:
669 #line 92 "ok_syntax1.y"
670 { yyval.ival = - yystack.l_mark[0].ival; }
671 #line 670 "ok_syntax1.tab.c"
672 break;
673 case 15:
674 #line 94 "ok_syntax1.y"
675 { yyval.ival = regs[yystack.l_mark[0].ival]; }
676 #line 675 "ok_syntax1.tab.c"
677 break;
678 case 17:
679 #line 99 "ok_syntax1.y"
680 { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
681 #line 680 "ok_syntax1.tab.c"
682 break;
683 case 18:
684 #line 101 "ok_syntax1.y"
685 { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
686 #line 685 "ok_syntax1.tab.c"
687 break;
688 #line 687 "ok_syntax1.tab.c"
689 }
690 yystack.s_mark -= yym;
691 yystate = *yystack.s_mark;
692 yystack.l_mark -= yym;
693 yym = yylhs[yyn];
694 if (yystate == 0 && yym == 0)
695 {
696 #if YYDEBUG
697 if (yydebug)
698 printf("%sdebug: after reduction, shifting from state 0 to\
699 state %d\n", YYPREFIX, YYFINAL);
700 #endif
701 yystate = YYFINAL;
702 *++yystack.s_mark = YYFINAL;
703 *++yystack.l_mark = yyval;
704 if (yychar < 0)
705 {
706 yychar = YYLEX;
707 if (yychar < 0) yychar = YYEOF;
708 #if YYDEBUG
709 if (yydebug)
710 {
711 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
712 printf("%sdebug: state %d, reading %d (%s)\n",
713 YYPREFIX, YYFINAL, yychar, yys);
714 }
715 #endif
716 }
717 if (yychar == YYEOF) goto yyaccept;
718 goto yyloop;
719 }
720 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
721 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
722 yystate = yytable[yyn];
723 else
724 yystate = yydgoto[yym];
725 #if YYDEBUG
726 if (yydebug)
727 printf("%sdebug: after reduction, shifting from state %d \
728 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
729 #endif
730 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
731 *++yystack.s_mark = (YYINT) yystate;
732 *++yystack.l_mark = yyval;
733 goto yyloop;
734
735 yyoverflow:
736 YYERROR_CALL("yacc stack overflow");
737
738 yyabort:
739 yyfreestack(&yystack);
740 return (1);
741
742 yyaccept:
743 yyfreestack(&yystack);
744 return (0);
745 }
746