Home | History | Annotate | Line # | Download | only in yacc
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