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