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