[BACK]Return to calc.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / demos

Annotation of OpenXM_contrib/gmp/demos/calc.c, Revision 1.1.1.1

1.1       maekawa     1:
                      2: /*  A Bison parser, made from calc.y
                      3:     by GNU Bison version 1.28  */
                      4:
                      5: #define YYBISON 1  /* Identify Bison output.  */
                      6:
                      7: #define        EOS     257
                      8: #define        BAD     258
                      9: #define        HEX     259
                     10: #define        DECIMAL 260
                     11: #define        QUIT    261
                     12: #define        ABS     262
                     13: #define        BIN     263
                     14: #define        FIB     264
                     15: #define        GCD     265
                     16: #define        LCM     266
                     17: #define        NEXTPRIME       267
                     18: #define        POWM    268
                     19: #define        ROOT    269
                     20: #define        SQRT    270
                     21: #define        NUMBER  271
                     22: #define        VARIABLE        272
                     23: #define        LOR     273
                     24: #define        LAND    274
                     25: #define        EQ      275
                     26: #define        NE      276
                     27: #define        LE      277
                     28: #define        GE      278
                     29: #define        LSHIFT  279
                     30: #define        RSHIFT  280
                     31: #define        UMINUS  281
                     32:
                     33: #line 99 "calc.y"
                     34:
                     35: #include <stdio.h>
                     36: #include <stdlib.h>
                     37:
                     38: #include "gmp.h"
                     39:
                     40: #define numberof(x)  (sizeof (x) / sizeof ((x)[0]))
                     41:
                     42:
                     43: int  ibase = 0;
                     44: int  obase = 10;
                     45:
                     46:
                     47: /* The stack is a fixed size, which means there's a limit on the nesting
                     48:    allowed in expressions.  A more sophisticated program could let it grow
                     49:    dynamically.  */
                     50:
                     51: mpz_t    stack[100];
                     52: mpz_ptr  sp = stack[0];
                     53:
                     54: #define CHECK_OVERFLOW()                                                  \
                     55:   if (sp >= stack[numberof(stack)])                                       \
                     56:     {                                                                     \
                     57:       fprintf (stderr,                                                    \
                     58:                "Value stack overflow, too much nesting in expression\n"); \
                     59:       YYERROR;                                                            \
                     60:     }
                     61:
                     62: #define CHECK_EMPTY()                                                   \
                     63:   if (sp != stack[0])                                                   \
                     64:     {                                                                   \
                     65:       fprintf (stderr, "Oops, expected the value stack to be empty\n"); \
                     66:       sp = stack[0];                                                    \
                     67:     }
                     68:
                     69:
                     70: mpz_t  variable[26];
                     71:
                     72: #define CHECK_VARIABLE(var)                                             \
                     73:   if ((var) < 0 || (var) >= numberof (variable))                        \
                     74:     {                                                                   \
                     75:       fprintf (stderr, "Oops, bad variable somehow: %d\n", var);        \
                     76:       YYERROR;                                                          \
                     77:     }
                     78:
                     79:
                     80: #define CHECK_UI(name,z)                                                   \
                     81:   if (! mpz_fits_ulong_p (z))                                              \
                     82:     {                                                                      \
                     83:       fprintf (stderr,                                                     \
                     84:                "Operand must fit in an \"unsigned long\" for %s\n", name); \
                     85:       YYERROR;                                                             \
                     86:     }
                     87:
                     88:
                     89: #line 155 "calc.y"
                     90: typedef union {
                     91:   char  *str;
                     92:   int   var;
                     93: } YYSTYPE;
                     94: #include <stdio.h>
                     95:
                     96: #ifndef __cplusplus
                     97: #ifndef __STDC__
                     98: #define const
                     99: #endif
                    100: #endif
                    101:
                    102:
                    103:
                    104: #define        YYFINAL         107
                    105: #define        YYFLAG          -32768
                    106: #define        YYNTBASE        41
                    107:
                    108: #define YYTRANSLATE(x) ((unsigned)(x) <= 281 ? yytranslate[x] : 47)
                    109:
                    110: static const char yytranslate[] = {     0,
                    111:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    112:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    113:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    114:      2,     2,    36,     2,     2,     2,    33,     2,     2,    38,
                    115:     39,    31,    29,    40,    30,     2,    32,     2,     2,     2,
                    116:      2,     2,     2,     2,     2,     2,     2,     2,     2,    21,
                    117:     37,    22,     2,     2,     2,     2,     2,     2,     2,     2,
                    118:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    119:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    120:      2,     2,     2,    35,     2,     2,     2,     2,     2,     2,
                    121:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    122:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    123:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    124:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    125:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    126:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    127:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    128:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    129:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    130:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    131:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    132:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    133:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    134:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    135:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                    136:      2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
                    137:      7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
                    138:     17,    18,    19,    20,    23,    24,    25,    26,    27,    28,
                    139:     34
                    140: };
                    141:
                    142: #if YYDEBUG != 0
                    143: static const short yyprhs[] = {     0,
                    144:      0,     2,     5,     8,    12,    15,    16,    18,    22,    24,
                    145:     26,    28,    32,    36,    40,    44,    48,    52,    56,    60,
                    146:     64,    67,    70,    74,    78,    82,    86,    90,    94,    98,
                    147:    102,   107,   114,   119,   124,   129,   134,   143,   150,   155,
                    148:    157,   159,   161,   165,   167
                    149: };
                    150:
                    151: static const short yyrhs[] = {    43,
                    152:      0,    42,    43,     0,    43,     3,     0,    42,    43,     3,
                    153:      0,     1,     3,     0,     0,    44,     0,    18,    37,    44,
                    154:      0,     5,     0,     6,     0,     7,     0,    38,    44,    39,
                    155:      0,    44,    29,    44,     0,    44,    30,    44,     0,    44,
                    156:     31,    44,     0,    44,    32,    44,     0,    44,    33,    44,
                    157:      0,    44,    35,    44,     0,    44,    27,    44,     0,    44,
                    158:     28,    44,     0,    44,    36,     0,    30,    44,     0,    44,
                    159:     21,    44,     0,    44,    25,    44,     0,    44,    23,    44,
                    160:      0,    44,    24,    44,     0,    44,    26,    44,     0,    44,
                    161:     22,    44,     0,    44,    20,    44,     0,    44,    19,    44,
                    162:      0,     8,    38,    44,    39,     0,     9,    38,    44,    40,
                    163:     44,    39,     0,    10,    38,    44,    39,     0,    11,    38,
                    164:     45,    39,     0,    12,    38,    46,    39,     0,    13,    38,
                    165:     44,    39,     0,    14,    38,    44,    40,    44,    40,    44,
                    166:     39,     0,    15,    38,    44,    40,    44,    39,     0,    16,
                    167:     38,    44,    39,     0,    18,     0,    17,     0,    44,     0,
                    168:     45,    40,    44,     0,    44,     0,    46,    40,    44,     0
                    169: };
                    170:
                    171: #endif
                    172:
                    173: #if YYDEBUG != 0
                    174: static const short yyrline[] = { 0,
                    175:    179,   181,   183,   185,   186,   188,   190,   195,   201,   202,
                    176:    203,   208,   210,   211,   212,   213,   214,   215,   217,   219,
                    177:    221,   223,   225,   226,   227,   228,   229,   230,   232,   233,
                    178:    235,   236,   238,   240,   241,   242,   243,   244,   246,   248,
                    179:    254,   264,   266,   268,   270
                    180: };
                    181: #endif
                    182:
                    183:
                    184: #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
                    185:
                    186: static const char * const yytname[] = {   "$","error","$undefined.","EOS","BAD",
                    187: "HEX","DECIMAL","QUIT","ABS","BIN","FIB","GCD","LCM","NEXTPRIME","POWM","ROOT",
                    188: "SQRT","NUMBER","VARIABLE","LOR","LAND","'<'","'>'","EQ","NE","LE","GE","LSHIFT",
                    189: "RSHIFT","'+'","'-'","'*'","'/'","'%'","UMINUS","'^'","'!'","'='","'('","')'",
                    190: "','","top","statements","statement","e","gcdlist","lcmlist", NULL
                    191: };
                    192: #endif
                    193:
                    194: static const short yyr1[] = {     0,
                    195:     41,    41,    42,    42,    42,    43,    43,    43,    43,    43,
                    196:     43,    44,    44,    44,    44,    44,    44,    44,    44,    44,
                    197:     44,    44,    44,    44,    44,    44,    44,    44,    44,    44,
                    198:     44,    44,    44,    44,    44,    44,    44,    44,    44,    44,
                    199:     44,    45,    45,    46,    46
                    200: };
                    201:
                    202: static const short yyr2[] = {     0,
                    203:      1,     2,     2,     3,     2,     0,     1,     3,     1,     1,
                    204:      1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
                    205:      2,     2,     3,     3,     3,     3,     3,     3,     3,     3,
                    206:      4,     6,     4,     4,     4,     4,     8,     6,     4,     1,
                    207:      1,     1,     3,     1,     3
                    208: };
                    209:
                    210: static const short yydefact[] = {     0,
                    211:      0,     9,    10,    11,     0,     0,     0,     0,     0,     0,
                    212:      0,     0,     0,    41,    40,     0,     0,     6,     1,     7,
                    213:      5,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                    214:      0,    40,    22,     0,     2,     3,     0,     0,     0,     0,
                    215:      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                    216:      0,     0,    21,     0,     0,     0,    42,     0,    44,     0,
                    217:      0,     0,     0,     0,     8,    12,     4,    30,    29,    23,
                    218:     28,    25,    26,    24,    27,    19,    20,    13,    14,    15,
                    219:     16,    17,    18,    31,     0,    33,    34,     0,    35,     0,
                    220:     36,     0,     0,    39,     0,    43,    45,     0,     0,    32,
                    221:      0,    38,     0,    37,     0,     0,     0
                    222: };
                    223:
                    224: static const short yydefgoto[] = {   105,
                    225:     18,    19,    20,    58,    60
                    226: };
                    227:
                    228: static const short yypact[] = {    37,
                    229:     15,-32768,-32768,-32768,   -19,   -18,     1,     3,    23,    26,
                    230:     28,    30,    32,-32768,    34,    92,    92,    81,    62,   368,
                    231: -32768,    92,    92,    92,    92,    92,    92,    92,    92,    92,
                    232:     92,-32768,   -33,   200,    70,-32768,    92,    92,    92,    92,
                    233:     92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
                    234:     92,    92,-32768,   221,   112,   242,   368,   -35,   368,   -23,
                    235:    263,   134,   156,   284,   368,-32768,-32768,   385,   401,   417,
                    236:    417,   417,   417,   417,   417,    27,    27,    47,    47,   -33,
                    237:    -33,   -33,   -33,-32768,    92,-32768,-32768,    92,-32768,    92,
                    238: -32768,    92,    92,-32768,   305,   368,   368,   178,   326,-32768,
                    239:     92,-32768,   347,-32768,    84,   113,-32768
                    240: };
                    241:
                    242: static const short yypgoto[] = {-32768,
                    243: -32768,    63,   -16,-32768,-32768
                    244: };
                    245:
                    246:
                    247: #define        YYLAST          453
                    248:
                    249:
                    250: static const short yytable[] = {    33,
                    251:     34,    52,    53,    87,    88,    54,    55,    56,    57,    59,
                    252:     61,    62,    63,    64,    65,    89,    90,    21,    22,    23,
                    253:     68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
                    254:     78,    79,    80,    81,    82,    83,    -6,     1,    24,    -6,
                    255:     25,     2,     3,     4,     5,     6,     7,     8,     9,    10,
                    256:     11,    12,    13,    14,    15,    47,    48,    49,    50,    51,
                    257:     26,    52,    53,    27,    36,    28,    16,    29,    95,    30,
                    258:     31,    96,    67,    97,    17,    98,    99,    49,    50,    51,
                    259:     35,    52,    53,   106,   103,     2,     3,     4,     5,     6,
                    260:      7,     8,     9,    10,    11,    12,    13,    14,    15,     5,
                    261:      6,     7,     8,     9,    10,    11,    12,    13,    14,    32,
                    262:     16,     0,   107,     0,     0,     0,     0,     0,    17,     0,
                    263:      0,    16,     0,     0,     0,     0,     0,     0,     0,    17,
                    264:     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
                    265:     47,    48,    49,    50,    51,     0,    52,    53,     0,     0,
                    266:      0,    85,    37,    38,    39,    40,    41,    42,    43,    44,
                    267:     45,    46,    47,    48,    49,    50,    51,     0,    52,    53,
                    268:      0,     0,     0,    92,    37,    38,    39,    40,    41,    42,
                    269:     43,    44,    45,    46,    47,    48,    49,    50,    51,     0,
                    270:     52,    53,     0,     0,     0,    93,    37,    38,    39,    40,
                    271:     41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
                    272:     51,     0,    52,    53,     0,     0,     0,   101,    37,    38,
                    273:     39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
                    274:     49,    50,    51,     0,    52,    53,     0,     0,    66,    37,
                    275:     38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
                    276:     48,    49,    50,    51,     0,    52,    53,     0,     0,    84,
                    277:     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
                    278:     47,    48,    49,    50,    51,     0,    52,    53,     0,     0,
                    279:     86,    37,    38,    39,    40,    41,    42,    43,    44,    45,
                    280:     46,    47,    48,    49,    50,    51,     0,    52,    53,     0,
                    281:      0,    91,    37,    38,    39,    40,    41,    42,    43,    44,
                    282:     45,    46,    47,    48,    49,    50,    51,     0,    52,    53,
                    283:      0,     0,    94,    37,    38,    39,    40,    41,    42,    43,
                    284:     44,    45,    46,    47,    48,    49,    50,    51,     0,    52,
                    285:     53,     0,     0,   100,    37,    38,    39,    40,    41,    42,
                    286:     43,    44,    45,    46,    47,    48,    49,    50,    51,     0,
                    287:     52,    53,     0,     0,   102,    37,    38,    39,    40,    41,
                    288:     42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
                    289:      0,    52,    53,     0,     0,   104,    37,    38,    39,    40,
                    290:     41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
                    291:     51,     0,    52,    53,    38,    39,    40,    41,    42,    43,
                    292:     44,    45,    46,    47,    48,    49,    50,    51,     0,    52,
                    293:     53,    39,    40,    41,    42,    43,    44,    45,    46,    47,
                    294:     48,    49,    50,    51,     0,    52,    53,-32768,-32768,-32768,
                    295: -32768,-32768,-32768,    45,    46,    47,    48,    49,    50,    51,
                    296:      0,    52,    53
                    297: };
                    298:
                    299: static const short yycheck[] = {    16,
                    300:     17,    35,    36,    39,    40,    22,    23,    24,    25,    26,
                    301:     27,    28,    29,    30,    31,    39,    40,     3,    38,    38,
                    302:     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
                    303:     47,    48,    49,    50,    51,    52,     0,     1,    38,     3,
                    304:     38,     5,     6,     7,     8,     9,    10,    11,    12,    13,
                    305:     14,    15,    16,    17,    18,    29,    30,    31,    32,    33,
                    306:     38,    35,    36,    38,     3,    38,    30,    38,    85,    38,
                    307:     37,    88,     3,    90,    38,    92,    93,    31,    32,    33,
                    308:     18,    35,    36,     0,   101,     5,     6,     7,     8,     9,
                    309:     10,    11,    12,    13,    14,    15,    16,    17,    18,     8,
                    310:      9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
                    311:     30,    -1,     0,    -1,    -1,    -1,    -1,    -1,    38,    -1,
                    312:     -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,
                    313:     19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
                    314:     29,    30,    31,    32,    33,    -1,    35,    36,    -1,    -1,
                    315:     -1,    40,    19,    20,    21,    22,    23,    24,    25,    26,
                    316:     27,    28,    29,    30,    31,    32,    33,    -1,    35,    36,
                    317:     -1,    -1,    -1,    40,    19,    20,    21,    22,    23,    24,
                    318:     25,    26,    27,    28,    29,    30,    31,    32,    33,    -1,
                    319:     35,    36,    -1,    -1,    -1,    40,    19,    20,    21,    22,
                    320:     23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
                    321:     33,    -1,    35,    36,    -1,    -1,    -1,    40,    19,    20,
                    322:     21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
                    323:     31,    32,    33,    -1,    35,    36,    -1,    -1,    39,    19,
                    324:     20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
                    325:     30,    31,    32,    33,    -1,    35,    36,    -1,    -1,    39,
                    326:     19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
                    327:     29,    30,    31,    32,    33,    -1,    35,    36,    -1,    -1,
                    328:     39,    19,    20,    21,    22,    23,    24,    25,    26,    27,
                    329:     28,    29,    30,    31,    32,    33,    -1,    35,    36,    -1,
                    330:     -1,    39,    19,    20,    21,    22,    23,    24,    25,    26,
                    331:     27,    28,    29,    30,    31,    32,    33,    -1,    35,    36,
                    332:     -1,    -1,    39,    19,    20,    21,    22,    23,    24,    25,
                    333:     26,    27,    28,    29,    30,    31,    32,    33,    -1,    35,
                    334:     36,    -1,    -1,    39,    19,    20,    21,    22,    23,    24,
                    335:     25,    26,    27,    28,    29,    30,    31,    32,    33,    -1,
                    336:     35,    36,    -1,    -1,    39,    19,    20,    21,    22,    23,
                    337:     24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
                    338:     -1,    35,    36,    -1,    -1,    39,    19,    20,    21,    22,
                    339:     23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
                    340:     33,    -1,    35,    36,    20,    21,    22,    23,    24,    25,
                    341:     26,    27,    28,    29,    30,    31,    32,    33,    -1,    35,
                    342:     36,    21,    22,    23,    24,    25,    26,    27,    28,    29,
                    343:     30,    31,    32,    33,    -1,    35,    36,    21,    22,    23,
                    344:     24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
                    345:     -1,    35,    36
                    346: };
                    347: /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
                    348: #line 3 "/usr/share/misc/bison.simple"
                    349: /* This file comes from bison-1.28.  */
                    350:
                    351: /* Skeleton output parser for bison,
                    352:    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
                    353:
                    354:    This program is free software; you can redistribute it and/or modify
                    355:    it under the terms of the GNU General Public License as published by
                    356:    the Free Software Foundation; either version 2, or (at your option)
                    357:    any later version.
                    358:
                    359:    This program is distributed in the hope that it will be useful,
                    360:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                    361:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                    362:    GNU General Public License for more details.
                    363:
                    364:    You should have received a copy of the GNU General Public License
                    365:    along with this program; if not, write to the Free Software
                    366:    Foundation, Inc., 59 Temple Place - Suite 330,
                    367:    Boston, MA 02111-1307, USA.  */
                    368:
                    369: /* As a special exception, when this file is copied by Bison into a
                    370:    Bison output file, you may use that output file without restriction.
                    371:    This special exception was added by the Free Software Foundation
                    372:    in version 1.24 of Bison.  */
                    373:
                    374: /* This is the parser code that is written into each bison parser
                    375:   when the %semantic_parser declaration is not specified in the grammar.
                    376:   It was written by Richard Stallman by simplifying the hairy parser
                    377:   used when %semantic_parser is specified.  */
                    378:
                    379: #ifndef YYSTACK_USE_ALLOCA
                    380: #ifdef alloca
                    381: #define YYSTACK_USE_ALLOCA
                    382: #else /* alloca not defined */
                    383: #ifdef __GNUC__
                    384: #define YYSTACK_USE_ALLOCA
                    385: #define alloca __builtin_alloca
                    386: #else /* not GNU C.  */
                    387: #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
                    388: #define YYSTACK_USE_ALLOCA
                    389: #include <alloca.h>
                    390: #else /* not sparc */
                    391: /* We think this test detects Watcom and Microsoft C.  */
                    392: /* This used to test MSDOS, but that is a bad idea
                    393:    since that symbol is in the user namespace.  */
                    394: #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
                    395: #if 0 /* No need for malloc.h, which pollutes the namespace;
                    396:         instead, just don't use alloca.  */
                    397: #include <malloc.h>
                    398: #endif
                    399: #else /* not MSDOS, or __TURBOC__ */
                    400: #if defined(_AIX)
                    401: /* I don't know what this was needed for, but it pollutes the namespace.
                    402:    So I turned it off.   rms, 2 May 1997.  */
                    403: /* #include <malloc.h>  */
                    404:  #pragma alloca
                    405: #define YYSTACK_USE_ALLOCA
                    406: #else /* not MSDOS, or __TURBOC__, or _AIX */
                    407: #if 0
                    408: #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
                    409:                 and on HPUX 10.  Eventually we can turn this on.  */
                    410: #define YYSTACK_USE_ALLOCA
                    411: #define alloca __builtin_alloca
                    412: #endif /* __hpux */
                    413: #endif
                    414: #endif /* not _AIX */
                    415: #endif /* not MSDOS, or __TURBOC__ */
                    416: #endif /* not sparc */
                    417: #endif /* not GNU C */
                    418: #endif /* alloca not defined */
                    419: #endif /* YYSTACK_USE_ALLOCA not defined */
                    420:
                    421: #ifdef YYSTACK_USE_ALLOCA
                    422: #define YYSTACK_ALLOC alloca
                    423: #else
                    424: #define YYSTACK_ALLOC malloc
                    425: #endif
                    426:
                    427: /* Note: there must be only one dollar sign in this file.
                    428:    It is replaced by the list of actions, each action
                    429:    as one case of the switch.  */
                    430:
                    431: #define yyerrok                (yyerrstatus = 0)
                    432: #define yyclearin      (yychar = YYEMPTY)
                    433: #define YYEMPTY                -2
                    434: #define YYEOF          0
                    435: #define YYACCEPT       goto yyacceptlab
                    436: #define YYABORT        goto yyabortlab
                    437: #define YYERROR                goto yyerrlab1
                    438: /* Like YYERROR except do call yyerror.
                    439:    This remains here temporarily to ease the
                    440:    transition to the new meaning of YYERROR, for GCC.
                    441:    Once GCC version 2 has supplanted version 1, this can go.  */
                    442: #define YYFAIL         goto yyerrlab
                    443: #define YYRECOVERING()  (!!yyerrstatus)
                    444: #define YYBACKUP(token, value) \
                    445: do                                                             \
                    446:   if (yychar == YYEMPTY && yylen == 1)                         \
                    447:     { yychar = (token), yylval = (value);                      \
                    448:       yychar1 = YYTRANSLATE (yychar);                          \
                    449:       YYPOPSTACK;                                              \
                    450:       goto yybackup;                                           \
                    451:     }                                                          \
                    452:   else                                                         \
                    453:     { yyerror ("syntax error: cannot back up"); YYERROR; }     \
                    454: while (0)
                    455:
                    456: #define YYTERROR       1
                    457: #define YYERRCODE      256
                    458:
                    459: #ifndef YYPURE
                    460: #define YYLEX          yylex()
                    461: #endif
                    462:
                    463: #ifdef YYPURE
                    464: #ifdef YYLSP_NEEDED
                    465: #ifdef YYLEX_PARAM
                    466: #define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
                    467: #else
                    468: #define YYLEX          yylex(&yylval, &yylloc)
                    469: #endif
                    470: #else /* not YYLSP_NEEDED */
                    471: #ifdef YYLEX_PARAM
                    472: #define YYLEX          yylex(&yylval, YYLEX_PARAM)
                    473: #else
                    474: #define YYLEX          yylex(&yylval)
                    475: #endif
                    476: #endif /* not YYLSP_NEEDED */
                    477: #endif
                    478:
                    479: /* If nonreentrant, generate the variables here */
                    480:
                    481: #ifndef YYPURE
                    482:
                    483: int    yychar;                 /*  the lookahead symbol                */
                    484: YYSTYPE        yylval;                 /*  the semantic value of the           */
                    485:                                /*  lookahead symbol                    */
                    486:
                    487: #ifdef YYLSP_NEEDED
                    488: YYLTYPE yylloc;                        /*  location data for the lookahead     */
                    489:                                /*  symbol                              */
                    490: #endif
                    491:
                    492: int yynerrs;                   /*  number of parse errors so far       */
                    493: #endif  /* not YYPURE */
                    494:
                    495: #if YYDEBUG != 0
                    496: int yydebug;                   /*  nonzero means print parse trace     */
                    497: /* Since this is uninitialized, it does not stop multiple parsers
                    498:    from coexisting.  */
                    499: #endif
                    500:
                    501: /*  YYINITDEPTH indicates the initial size of the parser's stacks      */
                    502:
                    503: #ifndef        YYINITDEPTH
                    504: #define YYINITDEPTH 200
                    505: #endif
                    506:
                    507: /*  YYMAXDEPTH is the maximum size the stacks can grow to
                    508:     (effective only if the built-in stack extension method is used).  */
                    509:
                    510: #if YYMAXDEPTH == 0
                    511: #undef YYMAXDEPTH
                    512: #endif
                    513:
                    514: #ifndef YYMAXDEPTH
                    515: #define YYMAXDEPTH 10000
                    516: #endif
                    517: 
                    518: /* Define __yy_memcpy.  Note that the size argument
                    519:    should be passed with type unsigned int, because that is what the non-GCC
                    520:    definitions require.  With GCC, __builtin_memcpy takes an arg
                    521:    of type size_t, but it can handle unsigned int.  */
                    522:
                    523: #if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
                    524: #define __yy_memcpy(TO,FROM,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
                    525: #else                          /* not GNU C or C++ */
                    526: #ifndef __cplusplus
                    527:
                    528: /* This is the most reliable way to avoid incompatibilities
                    529:    in available built-in functions on various systems.  */
                    530: static void
                    531: __yy_memcpy (to, from, count)
                    532:      char *to;
                    533:      char *from;
                    534:      unsigned int count;
                    535: {
                    536:   register char *f = from;
                    537:   register char *t = to;
                    538:   register int i = count;
                    539:
                    540:   while (i-- > 0)
                    541:     *t++ = *f++;
                    542: }
                    543:
                    544: #else /* __cplusplus */
                    545:
                    546: /* This is the most reliable way to avoid incompatibilities
                    547:    in available built-in functions on various systems.  */
                    548: static void
                    549: __yy_memcpy (char *to, char *from, unsigned int count)
                    550: {
                    551:   register char *t = to;
                    552:   register char *f = from;
                    553:   register int i = count;
                    554:
                    555:   while (i-- > 0)
                    556:     *t++ = *f++;
                    557: }
                    558:
                    559: #endif
                    560: #endif
                    561: 
                    562: #line 217 "/usr/share/misc/bison.simple"
                    563:
                    564: /* The user can define YYPARSE_PARAM as the name of an argument to be passed
                    565:    into yyparse.  The argument should have type void *.
                    566:    It should actually point to an object.
                    567:    Grammar actions can access the variable by casting it
                    568:    to the proper pointer type.  */
                    569:
                    570: #ifdef YYPARSE_PARAM
                    571: #ifdef __cplusplus
                    572: #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
                    573: #define YYPARSE_PARAM_DECL
                    574: #else /* not __cplusplus */
                    575: #define YYPARSE_PARAM_ARG YYPARSE_PARAM
                    576: #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
                    577: #endif /* not __cplusplus */
                    578: #else /* not YYPARSE_PARAM */
                    579: #define YYPARSE_PARAM_ARG
                    580: #define YYPARSE_PARAM_DECL
                    581: #endif /* not YYPARSE_PARAM */
                    582:
                    583: /* Prevent warning if -Wstrict-prototypes.  */
                    584: #ifdef __GNUC__
                    585: #ifdef YYPARSE_PARAM
                    586: int yyparse (void *);
                    587: #else
                    588: int yyparse (void);
                    589: #endif
                    590: #endif
                    591:
                    592: int
                    593: yyparse(YYPARSE_PARAM_ARG)
                    594:      YYPARSE_PARAM_DECL
                    595: {
                    596:   register int yystate;
                    597:   register int yyn;
                    598:   register short *yyssp;
                    599:   register YYSTYPE *yyvsp;
                    600:   int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
                    601:   int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
                    602:
                    603:   short        yyssa[YYINITDEPTH];     /*  the state stack                     */
                    604:   YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
                    605:
                    606:   short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
                    607:   YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
                    608:
                    609: #ifdef YYLSP_NEEDED
                    610:   YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
                    611:   YYLTYPE *yyls = yylsa;
                    612:   YYLTYPE *yylsp;
                    613:
                    614: #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
                    615: #else
                    616: #define YYPOPSTACK   (yyvsp--, yyssp--)
                    617: #endif
                    618:
                    619:   int yystacksize = YYINITDEPTH;
                    620:   int yyfree_stacks = 0;
                    621:
                    622: #ifdef YYPURE
                    623:   int yychar;
                    624:   YYSTYPE yylval;
                    625:   int yynerrs;
                    626: #ifdef YYLSP_NEEDED
                    627:   YYLTYPE yylloc;
                    628: #endif
                    629: #endif
                    630:
                    631:   YYSTYPE yyval;               /*  the variable used to return         */
                    632:                                /*  semantic values from the action     */
                    633:                                /*  routines                            */
                    634:
                    635:   int yylen;
                    636:
                    637: #if YYDEBUG != 0
                    638:   if (yydebug)
                    639:     fprintf(stderr, "Starting parse\n");
                    640: #endif
                    641:
                    642:   yystate = 0;
                    643:   yyerrstatus = 0;
                    644:   yynerrs = 0;
                    645:   yychar = YYEMPTY;            /* Cause a token to be read.  */
                    646:
                    647:   /* Initialize stack pointers.
                    648:      Waste one element of value and location stack
                    649:      so that they stay on the same level as the state stack.
                    650:      The wasted elements are never initialized.  */
                    651:
                    652:   yyssp = yyss - 1;
                    653:   yyvsp = yyvs;
                    654: #ifdef YYLSP_NEEDED
                    655:   yylsp = yyls;
                    656: #endif
                    657:
                    658: /* Push a new state, which is found in  yystate  .  */
                    659: /* In all cases, when you get here, the value and location stacks
                    660:    have just been pushed. so pushing a state here evens the stacks.  */
                    661: yynewstate:
                    662:
                    663:   *++yyssp = yystate;
                    664:
                    665:   if (yyssp >= yyss + yystacksize - 1)
                    666:     {
                    667:       /* Give user a chance to reallocate the stack */
                    668:       /* Use copies of these so that the &'s don't force the real ones into memory. */
                    669:       YYSTYPE *yyvs1 = yyvs;
                    670:       short *yyss1 = yyss;
                    671: #ifdef YYLSP_NEEDED
                    672:       YYLTYPE *yyls1 = yyls;
                    673: #endif
                    674:
                    675:       /* Get the current used size of the three stacks, in elements.  */
                    676:       int size = yyssp - yyss + 1;
                    677:
                    678: #ifdef yyoverflow
                    679:       /* Each stack pointer address is followed by the size of
                    680:         the data in use in that stack, in bytes.  */
                    681: #ifdef YYLSP_NEEDED
                    682:       /* This used to be a conditional around just the two extra args,
                    683:         but that might be undefined if yyoverflow is a macro.  */
                    684:       yyoverflow("parser stack overflow",
                    685:                 &yyss1, size * sizeof (*yyssp),
                    686:                 &yyvs1, size * sizeof (*yyvsp),
                    687:                 &yyls1, size * sizeof (*yylsp),
                    688:                 &yystacksize);
                    689: #else
                    690:       yyoverflow("parser stack overflow",
                    691:                 &yyss1, size * sizeof (*yyssp),
                    692:                 &yyvs1, size * sizeof (*yyvsp),
                    693:                 &yystacksize);
                    694: #endif
                    695:
                    696:       yyss = yyss1; yyvs = yyvs1;
                    697: #ifdef YYLSP_NEEDED
                    698:       yyls = yyls1;
                    699: #endif
                    700: #else /* no yyoverflow */
                    701:       /* Extend the stack our own way.  */
                    702:       if (yystacksize >= YYMAXDEPTH)
                    703:        {
                    704:          yyerror("parser stack overflow");
                    705:          if (yyfree_stacks)
                    706:            {
                    707:              free (yyss);
                    708:              free (yyvs);
                    709: #ifdef YYLSP_NEEDED
                    710:              free (yyls);
                    711: #endif
                    712:            }
                    713:          return 2;
                    714:        }
                    715:       yystacksize *= 2;
                    716:       if (yystacksize > YYMAXDEPTH)
                    717:        yystacksize = YYMAXDEPTH;
                    718: #ifndef YYSTACK_USE_ALLOCA
                    719:       yyfree_stacks = 1;
                    720: #endif
                    721:       yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
                    722:       __yy_memcpy ((char *)yyss, (char *)yyss1,
                    723:                   size * (unsigned int) sizeof (*yyssp));
                    724:       yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
                    725:       __yy_memcpy ((char *)yyvs, (char *)yyvs1,
                    726:                   size * (unsigned int) sizeof (*yyvsp));
                    727: #ifdef YYLSP_NEEDED
                    728:       yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
                    729:       __yy_memcpy ((char *)yyls, (char *)yyls1,
                    730:                   size * (unsigned int) sizeof (*yylsp));
                    731: #endif
                    732: #endif /* no yyoverflow */
                    733:
                    734:       yyssp = yyss + size - 1;
                    735:       yyvsp = yyvs + size - 1;
                    736: #ifdef YYLSP_NEEDED
                    737:       yylsp = yyls + size - 1;
                    738: #endif
                    739:
                    740: #if YYDEBUG != 0
                    741:       if (yydebug)
                    742:        fprintf(stderr, "Stack size increased to %d\n", yystacksize);
                    743: #endif
                    744:
                    745:       if (yyssp >= yyss + yystacksize - 1)
                    746:        YYABORT;
                    747:     }
                    748:
                    749: #if YYDEBUG != 0
                    750:   if (yydebug)
                    751:     fprintf(stderr, "Entering state %d\n", yystate);
                    752: #endif
                    753:
                    754:   goto yybackup;
                    755:  yybackup:
                    756:
                    757: /* Do appropriate processing given the current state.  */
                    758: /* Read a lookahead token if we need one and don't already have one.  */
                    759: /* yyresume: */
                    760:
                    761:   /* First try to decide what to do without reference to lookahead token.  */
                    762:
                    763:   yyn = yypact[yystate];
                    764:   if (yyn == YYFLAG)
                    765:     goto yydefault;
                    766:
                    767:   /* Not known => get a lookahead token if don't already have one.  */
                    768:
                    769:   /* yychar is either YYEMPTY or YYEOF
                    770:      or a valid token in external form.  */
                    771:
                    772:   if (yychar == YYEMPTY)
                    773:     {
                    774: #if YYDEBUG != 0
                    775:       if (yydebug)
                    776:        fprintf(stderr, "Reading a token: ");
                    777: #endif
                    778:       yychar = YYLEX;
                    779:     }
                    780:
                    781:   /* Convert token to internal form (in yychar1) for indexing tables with */
                    782:
                    783:   if (yychar <= 0)             /* This means end of input. */
                    784:     {
                    785:       yychar1 = 0;
                    786:       yychar = YYEOF;          /* Don't call YYLEX any more */
                    787:
                    788: #if YYDEBUG != 0
                    789:       if (yydebug)
                    790:        fprintf(stderr, "Now at end of input.\n");
                    791: #endif
                    792:     }
                    793:   else
                    794:     {
                    795:       yychar1 = YYTRANSLATE(yychar);
                    796:
                    797: #if YYDEBUG != 0
                    798:       if (yydebug)
                    799:        {
                    800:          fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
                    801:          /* Give the individual parser a way to print the precise meaning
                    802:             of a token, for further debugging info.  */
                    803: #ifdef YYPRINT
                    804:          YYPRINT (stderr, yychar, yylval);
                    805: #endif
                    806:          fprintf (stderr, ")\n");
                    807:        }
                    808: #endif
                    809:     }
                    810:
                    811:   yyn += yychar1;
                    812:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
                    813:     goto yydefault;
                    814:
                    815:   yyn = yytable[yyn];
                    816:
                    817:   /* yyn is what to do for this token type in this state.
                    818:      Negative => reduce, -yyn is rule number.
                    819:      Positive => shift, yyn is new state.
                    820:        New state is final state => don't bother to shift,
                    821:        just return success.
                    822:      0, or most negative number => error.  */
                    823:
                    824:   if (yyn < 0)
                    825:     {
                    826:       if (yyn == YYFLAG)
                    827:        goto yyerrlab;
                    828:       yyn = -yyn;
                    829:       goto yyreduce;
                    830:     }
                    831:   else if (yyn == 0)
                    832:     goto yyerrlab;
                    833:
                    834:   if (yyn == YYFINAL)
                    835:     YYACCEPT;
                    836:
                    837:   /* Shift the lookahead token.  */
                    838:
                    839: #if YYDEBUG != 0
                    840:   if (yydebug)
                    841:     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
                    842: #endif
                    843:
                    844:   /* Discard the token being shifted unless it is eof.  */
                    845:   if (yychar != YYEOF)
                    846:     yychar = YYEMPTY;
                    847:
                    848:   *++yyvsp = yylval;
                    849: #ifdef YYLSP_NEEDED
                    850:   *++yylsp = yylloc;
                    851: #endif
                    852:
                    853:   /* count tokens shifted since error; after three, turn off error status.  */
                    854:   if (yyerrstatus) yyerrstatus--;
                    855:
                    856:   yystate = yyn;
                    857:   goto yynewstate;
                    858:
                    859: /* Do the default action for the current state.  */
                    860: yydefault:
                    861:
                    862:   yyn = yydefact[yystate];
                    863:   if (yyn == 0)
                    864:     goto yyerrlab;
                    865:
                    866: /* Do a reduction.  yyn is the number of a rule to reduce with.  */
                    867: yyreduce:
                    868:   yylen = yyr2[yyn];
                    869:   if (yylen > 0)
                    870:     yyval = yyvsp[1-yylen]; /* implement default value of the action */
                    871:
                    872: #if YYDEBUG != 0
                    873:   if (yydebug)
                    874:     {
                    875:       int i;
                    876:
                    877:       fprintf (stderr, "Reducing via rule %d (line %d), ",
                    878:               yyn, yyrline[yyn]);
                    879:
                    880:       /* Print the symbols being reduced, and their result.  */
                    881:       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
                    882:        fprintf (stderr, "%s ", yytname[yyrhs[i]]);
                    883:       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
                    884:     }
                    885: #endif
                    886:
                    887:
                    888:   switch (yyn) {
                    889:
                    890: case 5:
                    891: #line 186 "calc.y"
                    892: { sp = stack[0]; yyerrok; ;
                    893:     break;}
                    894: case 7:
                    895: #line 190 "calc.y"
                    896: {
                    897:       mpz_out_str (stdout, obase, sp); putchar ('\n');
                    898:       sp--;
                    899:       CHECK_EMPTY ();
                    900:     ;
                    901:     break;}
                    902: case 8:
                    903: #line 195 "calc.y"
                    904: {
                    905:       CHECK_VARIABLE (yyvsp[-2].var);
                    906:       mpz_swap (variable[yyvsp[-2].var], sp);
                    907:       sp--;
                    908:       CHECK_EMPTY ();
                    909:     ;
                    910:     break;}
                    911: case 9:
                    912: #line 201 "calc.y"
                    913: { ibase = 16; obase = -16; ;
                    914:     break;}
                    915: case 10:
                    916: #line 202 "calc.y"
                    917: { ibase = 0;  obase = 10; ;
                    918:     break;}
                    919: case 11:
                    920: #line 203 "calc.y"
                    921: { exit (0); ;
                    922:     break;}
                    923: case 13:
                    924: #line 210 "calc.y"
                    925: { sp--; mpz_add    (sp, sp, sp+1); ;
                    926:     break;}
                    927: case 14:
                    928: #line 211 "calc.y"
                    929: { sp--; mpz_sub    (sp, sp, sp+1); ;
                    930:     break;}
                    931: case 15:
                    932: #line 212 "calc.y"
                    933: { sp--; mpz_mul    (sp, sp, sp+1); ;
                    934:     break;}
                    935: case 16:
                    936: #line 213 "calc.y"
                    937: { sp--; mpz_fdiv_q (sp, sp, sp+1); ;
                    938:     break;}
                    939: case 17:
                    940: #line 214 "calc.y"
                    941: { sp--; mpz_fdiv_r (sp, sp, sp+1); ;
                    942:     break;}
                    943: case 18:
                    944: #line 215 "calc.y"
                    945: { CHECK_UI ("exponentiation", sp);
                    946:                      sp--; mpz_pow_ui (sp, sp, mpz_get_ui (sp+1)); ;
                    947:     break;}
                    948: case 19:
                    949: #line 217 "calc.y"
                    950: { CHECK_UI ("lshift", sp);
                    951:                      sp--; mpz_mul_2exp (sp, sp, mpz_get_ui (sp+1)); ;
                    952:     break;}
                    953: case 20:
                    954: #line 219 "calc.y"
                    955: { CHECK_UI ("rshift", sp);
                    956:                      sp--; mpz_fdiv_q_2exp (sp, sp, mpz_get_ui (sp+1)); ;
                    957:     break;}
                    958: case 21:
                    959: #line 221 "calc.y"
                    960: { CHECK_UI ("factorial", sp);
                    961:                      mpz_fac_ui (sp, mpz_get_ui (sp)); ;
                    962:     break;}
                    963: case 22:
                    964: #line 223 "calc.y"
                    965: { mpz_neg (sp, sp); ;
                    966:     break;}
                    967: case 23:
                    968: #line 225 "calc.y"
                    969: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <  0); ;
                    970:     break;}
                    971: case 24:
                    972: #line 226 "calc.y"
                    973: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <= 0); ;
                    974:     break;}
                    975: case 25:
                    976: #line 227 "calc.y"
                    977: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) == 0); ;
                    978:     break;}
                    979: case 26:
                    980: #line 228 "calc.y"
                    981: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) != 0); ;
                    982:     break;}
                    983: case 27:
                    984: #line 229 "calc.y"
                    985: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >= 0); ;
                    986:     break;}
                    987: case 28:
                    988: #line 230 "calc.y"
                    989: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >  0); ;
                    990:     break;}
                    991: case 29:
                    992: #line 232 "calc.y"
                    993: { sp--; mpz_set_ui (sp, mpz_sgn (sp) && mpz_sgn (sp+1)); ;
                    994:     break;}
                    995: case 30:
                    996: #line 233 "calc.y"
                    997: { sp--; mpz_set_ui (sp, mpz_sgn (sp) || mpz_sgn (sp+1)); ;
                    998:     break;}
                    999: case 31:
                   1000: #line 235 "calc.y"
                   1001: { mpz_abs (sp, sp); ;
                   1002:     break;}
                   1003: case 32:
                   1004: #line 236 "calc.y"
                   1005: { sp--; CHECK_UI ("binomial", sp+1);
                   1006:                                     mpz_bin_ui (sp, sp, mpz_get_ui (sp+1)); ;
                   1007:     break;}
                   1008: case 33:
                   1009: #line 238 "calc.y"
                   1010: { CHECK_UI ("fibonacci", sp);
                   1011:                                     mpz_fib_ui (sp, mpz_get_ui (sp)); ;
                   1012:     break;}
                   1013: case 36:
                   1014: #line 242 "calc.y"
                   1015: { mpz_nextprime (sp, sp); ;
                   1016:     break;}
                   1017: case 37:
                   1018: #line 243 "calc.y"
                   1019: { sp -= 2; mpz_powm (sp, sp, sp+1, sp+2); ;
                   1020:     break;}
                   1021: case 38:
                   1022: #line 244 "calc.y"
                   1023: { sp--; CHECK_UI ("nth-root", sp+1);
                   1024:                                     mpz_root (sp, sp, mpz_get_ui (sp+1)); ;
                   1025:     break;}
                   1026: case 39:
                   1027: #line 246 "calc.y"
                   1028: { mpz_sqrt (sp, sp); ;
                   1029:     break;}
                   1030: case 40:
                   1031: #line 248 "calc.y"
                   1032: {
                   1033:         sp++;
                   1034:         CHECK_OVERFLOW ();
                   1035:         CHECK_VARIABLE (yyvsp[0].var);
                   1036:         mpz_set (sp, variable[yyvsp[0].var]);
                   1037:       ;
                   1038:     break;}
                   1039: case 41:
                   1040: #line 254 "calc.y"
                   1041: {
                   1042:         sp++;
                   1043:         CHECK_OVERFLOW ();
                   1044:         if (mpz_set_str (sp, yyvsp[0].str, ibase) != 0)
                   1045:           {
                   1046:             fprintf (stderr, "Invalid number: %s\n", yyvsp[0].str);
                   1047:             YYERROR;
                   1048:           }
                   1049:       ;
                   1050:     break;}
                   1051: case 43:
                   1052: #line 266 "calc.y"
                   1053: { sp--; mpz_gcd (sp, sp, sp+1); ;
                   1054:     break;}
                   1055: case 45:
                   1056: #line 270 "calc.y"
                   1057: { sp--; mpz_lcm (sp, sp, sp+1); ;
                   1058:     break;}
                   1059: }
                   1060:    /* the action file gets copied in in place of this dollarsign */
                   1061: #line 543 "/usr/share/misc/bison.simple"
                   1062: 
                   1063:   yyvsp -= yylen;
                   1064:   yyssp -= yylen;
                   1065: #ifdef YYLSP_NEEDED
                   1066:   yylsp -= yylen;
                   1067: #endif
                   1068:
                   1069: #if YYDEBUG != 0
                   1070:   if (yydebug)
                   1071:     {
                   1072:       short *ssp1 = yyss - 1;
                   1073:       fprintf (stderr, "state stack now");
                   1074:       while (ssp1 != yyssp)
                   1075:        fprintf (stderr, " %d", *++ssp1);
                   1076:       fprintf (stderr, "\n");
                   1077:     }
                   1078: #endif
                   1079:
                   1080:   *++yyvsp = yyval;
                   1081:
                   1082: #ifdef YYLSP_NEEDED
                   1083:   yylsp++;
                   1084:   if (yylen == 0)
                   1085:     {
                   1086:       yylsp->first_line = yylloc.first_line;
                   1087:       yylsp->first_column = yylloc.first_column;
                   1088:       yylsp->last_line = (yylsp-1)->last_line;
                   1089:       yylsp->last_column = (yylsp-1)->last_column;
                   1090:       yylsp->text = 0;
                   1091:     }
                   1092:   else
                   1093:     {
                   1094:       yylsp->last_line = (yylsp+yylen-1)->last_line;
                   1095:       yylsp->last_column = (yylsp+yylen-1)->last_column;
                   1096:     }
                   1097: #endif
                   1098:
                   1099:   /* Now "shift" the result of the reduction.
                   1100:      Determine what state that goes to,
                   1101:      based on the state we popped back to
                   1102:      and the rule number reduced by.  */
                   1103:
                   1104:   yyn = yyr1[yyn];
                   1105:
                   1106:   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
                   1107:   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
                   1108:     yystate = yytable[yystate];
                   1109:   else
                   1110:     yystate = yydefgoto[yyn - YYNTBASE];
                   1111:
                   1112:   goto yynewstate;
                   1113:
                   1114: yyerrlab:   /* here on detecting error */
                   1115:
                   1116:   if (! yyerrstatus)
                   1117:     /* If not already recovering from an error, report this error.  */
                   1118:     {
                   1119:       ++yynerrs;
                   1120:
                   1121: #ifdef YYERROR_VERBOSE
                   1122:       yyn = yypact[yystate];
                   1123:
                   1124:       if (yyn > YYFLAG && yyn < YYLAST)
                   1125:        {
                   1126:          int size = 0;
                   1127:          char *msg;
                   1128:          int x, count;
                   1129:
                   1130:          count = 0;
                   1131:          /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
                   1132:          for (x = (yyn < 0 ? -yyn : 0);
                   1133:               x < (sizeof(yytname) / sizeof(char *)); x++)
                   1134:            if (yycheck[x + yyn] == x)
                   1135:              size += strlen(yytname[x]) + 15, count++;
                   1136:          msg = (char *) malloc(size + 15);
                   1137:          if (msg != 0)
                   1138:            {
                   1139:              strcpy(msg, "parse error");
                   1140:
                   1141:              if (count < 5)
                   1142:                {
                   1143:                  count = 0;
                   1144:                  for (x = (yyn < 0 ? -yyn : 0);
                   1145:                       x < (sizeof(yytname) / sizeof(char *)); x++)
                   1146:                    if (yycheck[x + yyn] == x)
                   1147:                      {
                   1148:                        strcat(msg, count == 0 ? ", expecting `" : " or `");
                   1149:                        strcat(msg, yytname[x]);
                   1150:                        strcat(msg, "'");
                   1151:                        count++;
                   1152:                      }
                   1153:                }
                   1154:              yyerror(msg);
                   1155:              free(msg);
                   1156:            }
                   1157:          else
                   1158:            yyerror ("parse error; also virtual memory exceeded");
                   1159:        }
                   1160:       else
                   1161: #endif /* YYERROR_VERBOSE */
                   1162:        yyerror("parse error");
                   1163:     }
                   1164:
                   1165:   goto yyerrlab1;
                   1166: yyerrlab1:   /* here on error raised explicitly by an action */
                   1167:
                   1168:   if (yyerrstatus == 3)
                   1169:     {
                   1170:       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
                   1171:
                   1172:       /* return failure if at end of input */
                   1173:       if (yychar == YYEOF)
                   1174:        YYABORT;
                   1175:
                   1176: #if YYDEBUG != 0
                   1177:       if (yydebug)
                   1178:        fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
                   1179: #endif
                   1180:
                   1181:       yychar = YYEMPTY;
                   1182:     }
                   1183:
                   1184:   /* Else will try to reuse lookahead token
                   1185:      after shifting the error token.  */
                   1186:
                   1187:   yyerrstatus = 3;             /* Each real token shifted decrements this */
                   1188:
                   1189:   goto yyerrhandle;
                   1190:
                   1191: yyerrdefault:  /* current state does not do anything special for the error token. */
                   1192:
                   1193: #if 0
                   1194:   /* This is wrong; only states that explicitly want error tokens
                   1195:      should shift them.  */
                   1196:   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
                   1197:   if (yyn) goto yydefault;
                   1198: #endif
                   1199:
                   1200: yyerrpop:   /* pop the current state because it cannot handle the error token */
                   1201:
                   1202:   if (yyssp == yyss) YYABORT;
                   1203:   yyvsp--;
                   1204:   yystate = *--yyssp;
                   1205: #ifdef YYLSP_NEEDED
                   1206:   yylsp--;
                   1207: #endif
                   1208:
                   1209: #if YYDEBUG != 0
                   1210:   if (yydebug)
                   1211:     {
                   1212:       short *ssp1 = yyss - 1;
                   1213:       fprintf (stderr, "Error: state stack now");
                   1214:       while (ssp1 != yyssp)
                   1215:        fprintf (stderr, " %d", *++ssp1);
                   1216:       fprintf (stderr, "\n");
                   1217:     }
                   1218: #endif
                   1219:
                   1220: yyerrhandle:
                   1221:
                   1222:   yyn = yypact[yystate];
                   1223:   if (yyn == YYFLAG)
                   1224:     goto yyerrdefault;
                   1225:
                   1226:   yyn += YYTERROR;
                   1227:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
                   1228:     goto yyerrdefault;
                   1229:
                   1230:   yyn = yytable[yyn];
                   1231:   if (yyn < 0)
                   1232:     {
                   1233:       if (yyn == YYFLAG)
                   1234:        goto yyerrpop;
                   1235:       yyn = -yyn;
                   1236:       goto yyreduce;
                   1237:     }
                   1238:   else if (yyn == 0)
                   1239:     goto yyerrpop;
                   1240:
                   1241:   if (yyn == YYFINAL)
                   1242:     YYACCEPT;
                   1243:
                   1244: #if YYDEBUG != 0
                   1245:   if (yydebug)
                   1246:     fprintf(stderr, "Shifting error token, ");
                   1247: #endif
                   1248:
                   1249:   *++yyvsp = yylval;
                   1250: #ifdef YYLSP_NEEDED
                   1251:   *++yylsp = yylloc;
                   1252: #endif
                   1253:
                   1254:   yystate = yyn;
                   1255:   goto yynewstate;
                   1256:
                   1257:  yyacceptlab:
                   1258:   /* YYACCEPT comes here.  */
                   1259:   if (yyfree_stacks)
                   1260:     {
                   1261:       free (yyss);
                   1262:       free (yyvs);
                   1263: #ifdef YYLSP_NEEDED
                   1264:       free (yyls);
                   1265: #endif
                   1266:     }
                   1267:   return 0;
                   1268:
                   1269:  yyabortlab:
                   1270:   /* YYABORT comes here.  */
                   1271:   if (yyfree_stacks)
                   1272:     {
                   1273:       free (yyss);
                   1274:       free (yyvs);
                   1275: #ifdef YYLSP_NEEDED
                   1276:       free (yyls);
                   1277: #endif
                   1278:     }
                   1279:   return 1;
                   1280: }
                   1281: #line 272 "calc.y"
                   1282:
                   1283:
                   1284: yyerror (char *s)
                   1285: {
                   1286:   fprintf (stderr, "%s\n", s);
                   1287: }
                   1288:
                   1289: int
                   1290: main (void)
                   1291: {
                   1292:   int  i;
                   1293:
                   1294:   for (i = 0; i < numberof (variable); i++)
                   1295:     mpz_init (variable[i]);
                   1296:
                   1297:   for (i = 0; i < numberof (stack); i++)
                   1298:     mpz_init (stack[i]);
                   1299:
                   1300:   return yyparse ();
                   1301: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>