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