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

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

1.1     ! ohara       1: /* A Bison parser, made from calc.y
        !             2:    by GNU bison 1.34.  */
        !             3:
        !             4: #define YYBISON 1  /* Identify Bison output.  */
        !             5:
        !             6: # define       EOS     257
        !             7: # define       BAD     258
        !             8: # define       HELP    259
        !             9: # define       HEX     260
        !            10: # define       DECIMAL 261
        !            11: # define       QUIT    262
        !            12: # define       ABS     263
        !            13: # define       BIN     264
        !            14: # define       FIB     265
        !            15: # define       GCD     266
        !            16: # define       KRON    267
        !            17: # define       LCM     268
        !            18: # define       LUCNUM  269
        !            19: # define       NEXTPRIME       270
        !            20: # define       POWM    271
        !            21: # define       ROOT    272
        !            22: # define       SQRT    273
        !            23: # define       NUMBER  274
        !            24: # define       VARIABLE        275
        !            25: # define       LOR     276
        !            26: # define       LAND    277
        !            27: # define       EQ      278
        !            28: # define       NE      279
        !            29: # define       LE      280
        !            30: # define       GE      281
        !            31: # define       LSHIFT  282
        !            32: # define       RSHIFT  283
        !            33: # define       UMINUS  284
        !            34:
        !            35: #line 1 "calc.y"
        !            36:
        !            37: /* A simple integer desk calculator using yacc and gmp.
        !            38:
        !            39: Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
        !            40:
        !            41: This file is part of the GNU MP Library.
        !            42:
        !            43: This program is free software; you can redistribute it and/or modify it under
        !            44: the terms of the GNU General Public License as published by the Free Software
        !            45: Foundation; either version 2 of the License, or (at your option) any later
        !            46: version.
        !            47:
        !            48: This program is distributed in the hope that it will be useful, but WITHOUT ANY
        !            49: WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
        !            50: PARTICULAR PURPOSE.  See the GNU General Public License for more details.
        !            51:
        !            52: You should have received a copy of the GNU General Public License along with
        !            53: this program; if not, write to the Free Software Foundation, Inc., 59 Temple
        !            54: Place - Suite 330, Boston, MA 02111-1307, USA. */
        !            55:
        !            56:
        !            57: /* This is a simple program, meant only to show one way to use GMP for this
        !            58:    sort of thing.  There's few features, and error checking is minimal.
        !            59:    Standard input is read, calc_help() below shows the inputs accepted.
        !            60:
        !            61:    Expressions are evaluated as they're read.  If user defined functions
        !            62:    were wanted it'd be necessary to build a parse tree like pexpr.c does, or
        !            63:    a list of operations for a stack based evaluator.  That would also make
        !            64:    it possible to detect and optimize evaluations "mod m" like pexpr.c does.
        !            65:
        !            66:    A stack is used for intermediate values in the expression evaluation,
        !            67:    separate from the yacc parser stack.  This is simple, makes error
        !            68:    recovery easy, minimizes the junk around mpz calls in the rules, and
        !            69:    saves initializing or clearing "mpz_t"s during a calculation.  A
        !            70:    disadvantage though is that variables must be copied to the stack to be
        !            71:    worked on.  A more sophisticated calculator or language system might be
        !            72:    able to avoid that when executing a compiled or semi-compiled form.
        !            73:
        !            74:    Avoiding repeated initializing and clearing of "mpz_t"s is important.  In
        !            75:    this program the time spent parsing is obviously much greater than any
        !            76:    possible saving from this, but a proper calculator or language should
        !            77:    take some trouble over it.  Don't be surprised if an init/clear takes 3
        !            78:    or more times as long as a 10 limb addition, depending on the system (see
        !            79:    the mpz_init_realloc_clear example in tune/README).  */
        !            80:
        !            81:
        !            82: #include <stdio.h>
        !            83: #include <stdlib.h>
        !            84: #include <string.h>
        !            85: #include "gmp.h"
        !            86: #define NO_CALC_H /* because it conflicts with normal calc.c stuff */
        !            87: #include "calc-common.h"
        !            88:
        !            89:
        !            90: #define numberof(x)  (sizeof (x) / sizeof ((x)[0]))
        !            91:
        !            92:
        !            93: void
        !            94: calc_help (void)
        !            95: {
        !            96:   printf ("Examples:\n");
        !            97:   printf ("    2+3*4        expressions are evaluated\n");
        !            98:   printf ("    x=5^6        variables a to z can be set and used\n");
        !            99:   printf ("Operators:\n");
        !           100:   printf ("    + - *        arithmetic\n");
        !           101:   printf ("    / %%          division and remainder (rounding towards negative infinity)\n");
        !           102:   printf ("    ^            exponentiation\n");
        !           103:   printf ("    !            factorial\n");
        !           104:   printf ("    << >>        left and right shifts\n");
        !           105:   printf ("    <= >= >      \\ comparisons, giving 1 if true, 0 if false\n");
        !           106:   printf ("    == != <      /\n");
        !           107:   printf ("    && ||        logical and/or, giving 1 if true, 0 if false\n");
        !           108:   printf ("Functions:\n");
        !           109:   printf ("    abs(n)       absolute value\n");
        !           110:   printf ("    bin(n,m)     binomial coefficient\n");
        !           111:   printf ("    fib(n)       fibonacci number\n");
        !           112:   printf ("    gcd(a,b,..)  greatest common divisor\n");
        !           113:   printf ("    kron(a,b)    kronecker symbol\n");
        !           114:   printf ("    lcm(a,b,..)  least common multiple\n");
        !           115:   printf ("    lucnum(n)    lucas number\n");
        !           116:   printf ("    nextprime(n) next prime after n\n");
        !           117:   printf ("    powm(b,e,m)  modulo powering, b^e%%m\n");
        !           118:   printf ("    root(n,r)    r-th root\n");
        !           119:   printf ("    sqrt(n)      square root\n");
        !           120:   printf ("Other:\n");
        !           121:   printf ("    hex          \\ set hex or decimal for input and output\n");
        !           122:   printf ("    decimal      /   (\"0x\" can be used for hex too)\n");
        !           123:   printf ("    quit         exit program (EOF works too)\n");
        !           124:   printf ("    ;            statements are separated with a ; or newline\n");
        !           125:   printf ("    \\            continue expressions with \\ before newline\n");
        !           126:   printf ("    # xxx        comments are # though to newline\n");
        !           127:   printf ("Hex numbers must be entered in upper case, to distinguish them from the\n");
        !           128:   printf ("variables a to f (like in bc).\n");
        !           129: }
        !           130:
        !           131:
        !           132: int  ibase = 0;
        !           133: int  obase = 10;
        !           134:
        !           135:
        !           136: /* The stack is a fixed size, which means there's a limit on the nesting
        !           137:    allowed in expressions.  A more sophisticated program could let it grow
        !           138:    dynamically.  */
        !           139:
        !           140: mpz_t    stack[100];
        !           141: mpz_ptr  sp = stack[0];
        !           142:
        !           143: #define CHECK_OVERFLOW()                                                  \
        !           144:   if (sp >= stack[numberof(stack)])                                       \
        !           145:     {                                                                     \
        !           146:       fprintf (stderr,                                                    \
        !           147:                "Value stack overflow, too much nesting in expression\n"); \
        !           148:       YYERROR;                                                            \
        !           149:     }
        !           150:
        !           151: #define CHECK_EMPTY()                                                   \
        !           152:   if (sp != stack[0])                                                   \
        !           153:     {                                                                   \
        !           154:       fprintf (stderr, "Oops, expected the value stack to be empty\n"); \
        !           155:       sp = stack[0];                                                    \
        !           156:     }
        !           157:
        !           158:
        !           159: mpz_t  variable[26];
        !           160:
        !           161: #define CHECK_VARIABLE(var)                                             \
        !           162:   if ((var) < 0 || (var) >= numberof (variable))                        \
        !           163:     {                                                                   \
        !           164:       fprintf (stderr, "Oops, bad variable somehow: %d\n", var);        \
        !           165:       YYERROR;                                                          \
        !           166:     }
        !           167:
        !           168:
        !           169: #define CHECK_UI(name,z)                        \
        !           170:   if (! mpz_fits_ulong_p (z))                   \
        !           171:     {                                           \
        !           172:       fprintf (stderr, "%s too big\n", name);   \
        !           173:       YYERROR;                                  \
        !           174:     }
        !           175:
        !           176:
        !           177: #line 143 "calc.y"
        !           178: #ifndef YYSTYPE
        !           179: typedef union {
        !           180:   char  *str;
        !           181:   int   var;
        !           182: } yystype;
        !           183: # define YYSTYPE yystype
        !           184: #endif
        !           185: #ifndef YYDEBUG
        !           186: # define YYDEBUG 0
        !           187: #endif
        !           188:
        !           189:
        !           190:
        !           191: #define        YYFINAL         118
        !           192: #define        YYFLAG          -32768
        !           193: #define        YYNTBASE        44
        !           194:
        !           195: /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
        !           196: #define YYTRANSLATE(x) ((unsigned)(x) <= 284 ? yytranslate[x] : 50)
        !           197:
        !           198: /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
        !           199: static const char yytranslate[] =
        !           200: {
        !           201:        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           202:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           203:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           204:        2,     2,     2,    39,     2,     2,     2,    36,     2,     2,
        !           205:       41,    42,    34,    32,    43,    33,     2,    35,     2,     2,
        !           206:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           207:       24,    40,    25,     2,     2,     2,     2,     2,     2,     2,
        !           208:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           209:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           210:        2,     2,     2,     2,    38,     2,     2,     2,     2,     2,
        !           211:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           212:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           213:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           214:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           215:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           216:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           217:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           218:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           219:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           220:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           221:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           222:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           223:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           224:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           225:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           226:        2,     2,     2,     2,     2,     2,     1,     3,     4,     5,
        !           227:        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
        !           228:       16,    17,    18,    19,    20,    21,    22,    23,    26,    27,
        !           229:       28,    29,    30,    31,    37
        !           230: };
        !           231:
        !           232: #if YYDEBUG
        !           233: static const short yyprhs[] =
        !           234: {
        !           235:        0,     0,     2,     5,     8,    12,    15,    16,    18,    22,
        !           236:       24,    26,    28,    30,    34,    38,    42,    46,    50,    54,
        !           237:       58,    62,    66,    69,    72,    76,    80,    84,    88,    92,
        !           238:       96,   100,   104,   109,   116,   121,   126,   133,   138,   143,
        !           239:      148,   157,   164,   169,   171,   173,   175,   179,   181
        !           240: };
        !           241: static const short yyrhs[] =
        !           242: {
        !           243:       46,     0,    45,    46,     0,    46,     3,     0,    45,    46,
        !           244:        3,     0,     1,     3,     0,     0,    47,     0,    21,    40,
        !           245:       47,     0,     5,     0,     6,     0,     7,     0,     8,     0,
        !           246:       41,    47,    42,     0,    47,    32,    47,     0,    47,    33,
        !           247:       47,     0,    47,    34,    47,     0,    47,    35,    47,     0,
        !           248:       47,    36,    47,     0,    47,    38,    47,     0,    47,    30,
        !           249:       47,     0,    47,    31,    47,     0,    47,    39,     0,    33,
        !           250:       47,     0,    47,    24,    47,     0,    47,    28,    47,     0,
        !           251:       47,    26,    47,     0,    47,    27,    47,     0,    47,    29,
        !           252:       47,     0,    47,    25,    47,     0,    47,    23,    47,     0,
        !           253:       47,    22,    47,     0,     9,    41,    47,    42,     0,    10,
        !           254:       41,    47,    43,    47,    42,     0,    11,    41,    47,    42,
        !           255:        0,    12,    41,    48,    42,     0,    13,    41,    47,    43,
        !           256:       47,    42,     0,    14,    41,    49,    42,     0,    15,    41,
        !           257:       47,    42,     0,    16,    41,    47,    42,     0,    17,    41,
        !           258:       47,    43,    47,    43,    47,    42,     0,    18,    41,    47,
        !           259:       43,    47,    42,     0,    19,    41,    47,    42,     0,    21,
        !           260:        0,    20,     0,    47,     0,    48,    43,    47,     0,    47,
        !           261:        0,    49,    43,    47,     0
        !           262: };
        !           263:
        !           264: #endif
        !           265:
        !           266: #if YYDEBUG
        !           267: /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
        !           268: static const short yyrline[] =
        !           269: {
        !           270:        0,   167,   169,   171,   173,   174,   176,   178,   183,   189,
        !           271:      190,   191,   192,   197,   199,   200,   201,   202,   203,   204,
        !           272:      206,   208,   210,   212,   214,   215,   216,   217,   218,   219,
        !           273:      221,   222,   224,   225,   227,   229,   230,   232,   233,   235,
        !           274:      236,   237,   239,   241,   247,   257,   259,   261,   263
        !           275: };
        !           276: #endif
        !           277:
        !           278:
        !           279: #if (YYDEBUG) || defined YYERROR_VERBOSE
        !           280:
        !           281: /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
        !           282: static const char *const yytname[] =
        !           283: {
        !           284:   "$", "error", "$undefined.", "EOS", "BAD", "HELP", "HEX", "DECIMAL",
        !           285:   "QUIT", "ABS", "BIN", "FIB", "GCD", "KRON", "LCM", "LUCNUM",
        !           286:   "NEXTPRIME", "POWM", "ROOT", "SQRT", "NUMBER", "VARIABLE", "LOR",
        !           287:   "LAND", "'<'", "'>'", "EQ", "NE", "LE", "GE", "LSHIFT", "RSHIFT", "'+'",
        !           288:   "'-'", "'*'", "'/'", "'%'", "UMINUS", "'^'", "'!'", "'='", "'('", "')'",
        !           289:   "','", "top", "statements", "statement", "e", "gcdlist", "lcmlist", 0
        !           290: };
        !           291: #endif
        !           292:
        !           293: /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
        !           294: static const short yyr1[] =
        !           295: {
        !           296:        0,    44,    44,    45,    45,    45,    46,    46,    46,    46,
        !           297:       46,    46,    46,    47,    47,    47,    47,    47,    47,    47,
        !           298:       47,    47,    47,    47,    47,    47,    47,    47,    47,    47,
        !           299:       47,    47,    47,    47,    47,    47,    47,    47,    47,    47,
        !           300:       47,    47,    47,    47,    47,    48,    48,    49,    49
        !           301: };
        !           302:
        !           303: /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
        !           304: static const short yyr2[] =
        !           305: {
        !           306:        0,     1,     2,     2,     3,     2,     0,     1,     3,     1,
        !           307:        1,     1,     1,     3,     3,     3,     3,     3,     3,     3,
        !           308:        3,     3,     2,     2,     3,     3,     3,     3,     3,     3,
        !           309:        3,     3,     4,     6,     4,     4,     6,     4,     4,     4,
        !           310:        8,     6,     4,     1,     1,     1,     3,     1,     3
        !           311: };
        !           312:
        !           313: /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
        !           314:    doesn't specify something else to do.  Zero means the default is an
        !           315:    error. */
        !           316: static const short yydefact[] =
        !           317: {
        !           318:        0,     0,     9,    10,    11,    12,     0,     0,     0,     0,
        !           319:        0,     0,     0,     0,     0,     0,     0,    44,    43,     0,
        !           320:        0,     6,     1,     7,     5,     0,     0,     0,     0,     0,
        !           321:        0,     0,     0,     0,     0,     0,     0,    43,    23,     0,
        !           322:        2,     3,     0,     0,     0,     0,     0,     0,     0,     0,
        !           323:        0,     0,     0,     0,     0,     0,     0,     0,    22,     0,
        !           324:        0,     0,    45,     0,     0,    47,     0,     0,     0,     0,
        !           325:        0,     0,     8,    13,     4,    31,    30,    24,    29,    26,
        !           326:       27,    25,    28,    20,    21,    14,    15,    16,    17,    18,
        !           327:       19,    32,     0,    34,    35,     0,     0,    37,     0,    38,
        !           328:       39,     0,     0,    42,     0,    46,     0,    48,     0,     0,
        !           329:       33,    36,     0,    41,     0,    40,     0,     0,     0
        !           330: };
        !           331:
        !           332: static const short yydefgoto[] =
        !           333: {
        !           334:      116,    21,    22,    23,    63,    66
        !           335: };
        !           336:
        !           337: static const short yypact[] =
        !           338: {
        !           339:       39,    17,-32768,-32768,-32768,-32768,   -20,     0,     2,    25,
        !           340:       28,    30,    33,    34,    37,    40,    46,-32768,   -18,   122,
        !           341:      122,    89,    67,   462,-32768,   122,   122,   122,   122,   122,
        !           342:      122,   122,   122,   122,   122,   122,   122,-32768,   -36,   252,
        !           343:       87,-32768,   122,   122,   122,   122,   122,   122,   122,   122,
        !           344:      122,   122,   122,   122,   122,   122,   122,   122,-32768,   273,
        !           345:      142,   294,   462,   -38,   164,   462,   -24,   315,   336,   186,
        !           346:      208,   357,   462,-32768,-32768,   479,   495,   511,   511,   511,
        !           347:      511,   511,   511,    29,    29,    50,    50,   -36,   -36,   -36,
        !           348:      -36,-32768,   122,-32768,-32768,   122,   122,-32768,   122,-32768,
        !           349:   -32768,   122,   122,-32768,   378,   462,   399,   462,   230,   420,
        !           350:   -32768,-32768,   122,-32768,   441,-32768,    91,    92,-32768
        !           351: };
        !           352:
        !           353: static const short yypgoto[] =
        !           354: {
        !           355:   -32768,-32768,    90,   -19,-32768,-32768
        !           356: };
        !           357:
        !           358:
        !           359: #define        YYLAST          550
        !           360:
        !           361:
        !           362: static const short yytable[] =
        !           363: {
        !           364:       38,    39,    57,    58,    94,    95,    59,    60,    61,    62,
        !           365:       64,    65,    67,    68,    69,    70,    71,    72,    97,    98,
        !           366:       24,    25,    36,    75,    76,    77,    78,    79,    80,    81,
        !           367:       82,    83,    84,    85,    86,    87,    88,    89,    90,    -6,
        !           368:        1,    26,    -6,    27,     2,     3,     4,     5,     6,     7,
        !           369:        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
        !           370:       18,    52,    53,    54,    55,    56,    28,    57,    58,    29,
        !           371:       41,    30,    19,   104,    31,    32,   105,   106,    33,   107,
        !           372:       20,    34,   108,   109,    54,    55,    56,    35,    57,    58,
        !           373:       74,   117,   118,   114,     2,     3,     4,     5,     6,     7,
        !           374:        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
        !           375:       18,    40,     0,     0,     0,     0,     0,     0,     0,     0,
        !           376:        0,     0,    19,     0,     0,     0,     0,     0,     0,     0,
        !           377:       20,     6,     7,     8,     9,    10,    11,    12,    13,    14,
        !           378:       15,    16,    17,    37,     0,     0,     0,     0,     0,     0,
        !           379:        0,     0,     0,     0,     0,    19,     0,     0,     0,     0,
        !           380:        0,     0,     0,    20,    42,    43,    44,    45,    46,    47,
        !           381:       48,    49,    50,    51,    52,    53,    54,    55,    56,     0,
        !           382:       57,    58,     0,     0,     0,    92,    42,    43,    44,    45,
        !           383:       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
        !           384:       56,     0,    57,    58,     0,     0,     0,    96,    42,    43,
        !           385:       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
        !           386:       54,    55,    56,     0,    57,    58,     0,     0,     0,   101,
        !           387:       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
        !           388:       52,    53,    54,    55,    56,     0,    57,    58,     0,     0,
        !           389:        0,   102,    42,    43,    44,    45,    46,    47,    48,    49,
        !           390:       50,    51,    52,    53,    54,    55,    56,     0,    57,    58,
        !           391:        0,     0,     0,   112,    42,    43,    44,    45,    46,    47,
        !           392:       48,    49,    50,    51,    52,    53,    54,    55,    56,     0,
        !           393:       57,    58,     0,     0,    73,    42,    43,    44,    45,    46,
        !           394:       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
        !           395:        0,    57,    58,     0,     0,    91,    42,    43,    44,    45,
        !           396:       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
        !           397:       56,     0,    57,    58,     0,     0,    93,    42,    43,    44,
        !           398:       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
        !           399:       55,    56,     0,    57,    58,     0,     0,    99,    42,    43,
        !           400:       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
        !           401:       54,    55,    56,     0,    57,    58,     0,     0,   100,    42,
        !           402:       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
        !           403:       53,    54,    55,    56,     0,    57,    58,     0,     0,   103,
        !           404:       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
        !           405:       52,    53,    54,    55,    56,     0,    57,    58,     0,     0,
        !           406:      110,    42,    43,    44,    45,    46,    47,    48,    49,    50,
        !           407:       51,    52,    53,    54,    55,    56,     0,    57,    58,     0,
        !           408:        0,   111,    42,    43,    44,    45,    46,    47,    48,    49,
        !           409:       50,    51,    52,    53,    54,    55,    56,     0,    57,    58,
        !           410:        0,     0,   113,    42,    43,    44,    45,    46,    47,    48,
        !           411:       49,    50,    51,    52,    53,    54,    55,    56,     0,    57,
        !           412:       58,     0,     0,   115,    42,    43,    44,    45,    46,    47,
        !           413:       48,    49,    50,    51,    52,    53,    54,    55,    56,     0,
        !           414:       57,    58,    43,    44,    45,    46,    47,    48,    49,    50,
        !           415:       51,    52,    53,    54,    55,    56,     0,    57,    58,    44,
        !           416:       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
        !           417:       55,    56,     0,    57,    58,-32768,-32768,-32768,-32768,-32768,
        !           418:   -32768,    50,    51,    52,    53,    54,    55,    56,     0,    57,
        !           419:       58
        !           420: };
        !           421:
        !           422: static const short yycheck[] =
        !           423: {
        !           424:       19,    20,    38,    39,    42,    43,    25,    26,    27,    28,
        !           425:       29,    30,    31,    32,    33,    34,    35,    36,    42,    43,
        !           426:        3,    41,    40,    42,    43,    44,    45,    46,    47,    48,
        !           427:       49,    50,    51,    52,    53,    54,    55,    56,    57,     0,
        !           428:        1,    41,     3,    41,     5,     6,     7,     8,     9,    10,
        !           429:       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
        !           430:       21,    32,    33,    34,    35,    36,    41,    38,    39,    41,
        !           431:        3,    41,    33,    92,    41,    41,    95,    96,    41,    98,
        !           432:       41,    41,   101,   102,    34,    35,    36,    41,    38,    39,
        !           433:        3,     0,     0,   112,     5,     6,     7,     8,     9,    10,
        !           434:       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
        !           435:       21,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        !           436:       -1,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        !           437:       41,     9,    10,    11,    12,    13,    14,    15,    16,    17,
        !           438:       18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
        !           439:       -1,    -1,    -1,    -1,    -1,    33,    -1,    -1,    -1,    -1,
        !           440:       -1,    -1,    -1,    41,    22,    23,    24,    25,    26,    27,
        !           441:       28,    29,    30,    31,    32,    33,    34,    35,    36,    -1,
        !           442:       38,    39,    -1,    -1,    -1,    43,    22,    23,    24,    25,
        !           443:       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
        !           444:       36,    -1,    38,    39,    -1,    -1,    -1,    43,    22,    23,
        !           445:       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
        !           446:       34,    35,    36,    -1,    38,    39,    -1,    -1,    -1,    43,
        !           447:       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
        !           448:       32,    33,    34,    35,    36,    -1,    38,    39,    -1,    -1,
        !           449:       -1,    43,    22,    23,    24,    25,    26,    27,    28,    29,
        !           450:       30,    31,    32,    33,    34,    35,    36,    -1,    38,    39,
        !           451:       -1,    -1,    -1,    43,    22,    23,    24,    25,    26,    27,
        !           452:       28,    29,    30,    31,    32,    33,    34,    35,    36,    -1,
        !           453:       38,    39,    -1,    -1,    42,    22,    23,    24,    25,    26,
        !           454:       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
        !           455:       -1,    38,    39,    -1,    -1,    42,    22,    23,    24,    25,
        !           456:       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
        !           457:       36,    -1,    38,    39,    -1,    -1,    42,    22,    23,    24,
        !           458:       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
        !           459:       35,    36,    -1,    38,    39,    -1,    -1,    42,    22,    23,
        !           460:       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
        !           461:       34,    35,    36,    -1,    38,    39,    -1,    -1,    42,    22,
        !           462:       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
        !           463:       33,    34,    35,    36,    -1,    38,    39,    -1,    -1,    42,
        !           464:       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
        !           465:       32,    33,    34,    35,    36,    -1,    38,    39,    -1,    -1,
        !           466:       42,    22,    23,    24,    25,    26,    27,    28,    29,    30,
        !           467:       31,    32,    33,    34,    35,    36,    -1,    38,    39,    -1,
        !           468:       -1,    42,    22,    23,    24,    25,    26,    27,    28,    29,
        !           469:       30,    31,    32,    33,    34,    35,    36,    -1,    38,    39,
        !           470:       -1,    -1,    42,    22,    23,    24,    25,    26,    27,    28,
        !           471:       29,    30,    31,    32,    33,    34,    35,    36,    -1,    38,
        !           472:       39,    -1,    -1,    42,    22,    23,    24,    25,    26,    27,
        !           473:       28,    29,    30,    31,    32,    33,    34,    35,    36,    -1,
        !           474:       38,    39,    23,    24,    25,    26,    27,    28,    29,    30,
        !           475:       31,    32,    33,    34,    35,    36,    -1,    38,    39,    24,
        !           476:       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
        !           477:       35,    36,    -1,    38,    39,    24,    25,    26,    27,    28,
        !           478:       29,    30,    31,    32,    33,    34,    35,    36,    -1,    38,
        !           479:       39
        !           480: };
        !           481: /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
        !           482: #line 3 "/usr/share/bison/bison.simple"
        !           483:
        !           484: /* Skeleton output parser for bison,
        !           485:
        !           486:    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
        !           487:    Foundation, Inc.
        !           488:
        !           489:    This program is free software; you can redistribute it and/or modify
        !           490:    it under the terms of the GNU General Public License as published by
        !           491:    the Free Software Foundation; either version 2, or (at your option)
        !           492:    any later version.
        !           493:
        !           494:    This program is distributed in the hope that it will be useful,
        !           495:    but WITHOUT ANY WARRANTY; without even the implied warranty of
        !           496:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !           497:    GNU General Public License for more details.
        !           498:
        !           499:    You should have received a copy of the GNU General Public License
        !           500:    along with this program; if not, write to the Free Software
        !           501:    Foundation, Inc., 59 Temple Place - Suite 330,
        !           502:    Boston, MA 02111-1307, USA.  */
        !           503:
        !           504: /* As a special exception, when this file is copied by Bison into a
        !           505:    Bison output file, you may use that output file without restriction.
        !           506:    This special exception was added by the Free Software Foundation
        !           507:    in version 1.24 of Bison.  */
        !           508:
        !           509: /* This is the parser code that is written into each bison parser when
        !           510:    the %semantic_parser declaration is not specified in the grammar.
        !           511:    It was written by Richard Stallman by simplifying the hairy parser
        !           512:    used when %semantic_parser is specified.  */
        !           513:
        !           514: /* All symbols defined below should begin with yy or YY, to avoid
        !           515:    infringing on user name space.  This should be done even for local
        !           516:    variables, as they might otherwise be expanded by user macros.
        !           517:    There are some unavoidable exceptions within include files to
        !           518:    define necessary library symbols; they are noted "INFRINGES ON
        !           519:    USER NAME SPACE" below.  */
        !           520:
        !           521: #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
        !           522:
        !           523: /* The parser invokes alloca or malloc; define the necessary symbols.  */
        !           524:
        !           525: # if YYSTACK_USE_ALLOCA
        !           526: #  define YYSTACK_ALLOC alloca
        !           527: # else
        !           528: #  ifndef YYSTACK_USE_ALLOCA
        !           529: #   if defined (alloca) || defined (_ALLOCA_H)
        !           530: #    define YYSTACK_ALLOC alloca
        !           531: #   else
        !           532: #    ifdef __GNUC__
        !           533: #     define YYSTACK_ALLOC __builtin_alloca
        !           534: #    endif
        !           535: #   endif
        !           536: #  endif
        !           537: # endif
        !           538:
        !           539: # ifdef YYSTACK_ALLOC
        !           540:    /* Pacify GCC's `empty if-body' warning. */
        !           541: #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
        !           542: # else
        !           543: #  if defined (__STDC__) || defined (__cplusplus)
        !           544: #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
        !           545: #   define YYSIZE_T size_t
        !           546: #  endif
        !           547: #  define YYSTACK_ALLOC malloc
        !           548: #  define YYSTACK_FREE free
        !           549: # endif
        !           550:
        !           551: /* A type that is properly aligned for any stack member.  */
        !           552: union yyalloc
        !           553: {
        !           554:   short yyss;
        !           555:   YYSTYPE yyvs;
        !           556: # if YYLSP_NEEDED
        !           557:   YYLTYPE yyls;
        !           558: # endif
        !           559: };
        !           560:
        !           561: /* The size of the maximum gap between one aligned stack and the next.  */
        !           562: # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
        !           563:
        !           564: /* The size of an array large to enough to hold all stacks, each with
        !           565:    N elements.  */
        !           566: # if YYLSP_NEEDED
        !           567: #  define YYSTACK_BYTES(N) \
        !           568:      ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
        !           569:       + 2 * YYSTACK_GAP_MAX)
        !           570: # else
        !           571: #  define YYSTACK_BYTES(N) \
        !           572:      ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
        !           573:       + YYSTACK_GAP_MAX)
        !           574: # endif
        !           575:
        !           576: /* Relocate the TYPE STACK from its old location to the new one.  The
        !           577:    local variables YYSIZE and YYSTACKSIZE give the old and new number of
        !           578:    elements in the stack, and YYPTR gives the new location of the
        !           579:    stack.  Advance YYPTR to a properly aligned location for the next
        !           580:    stack.  */
        !           581: # define YYSTACK_RELOCATE(Type, Stack)                                 \
        !           582:     do                                                                 \
        !           583:       {                                                                        \
        !           584:        YYSIZE_T yynewbytes;                                            \
        !           585:        yymemcpy ((char *) yyptr, (char *) (Stack),                     \
        !           586:                  yysize * (YYSIZE_T) sizeof (Type));                   \
        !           587:        Stack = &yyptr->Stack;                                          \
        !           588:        yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX;     \
        !           589:        yyptr += yynewbytes / sizeof (*yyptr);                          \
        !           590:       }                                                                        \
        !           591:     while (0)
        !           592:
        !           593: #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
        !           594:
        !           595:
        !           596: #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
        !           597: # define YYSIZE_T __SIZE_TYPE__
        !           598: #endif
        !           599: #if ! defined (YYSIZE_T) && defined (size_t)
        !           600: # define YYSIZE_T size_t
        !           601: #endif
        !           602: #if ! defined (YYSIZE_T)
        !           603: # if defined (__STDC__) || defined (__cplusplus)
        !           604: #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
        !           605: #  define YYSIZE_T size_t
        !           606: # endif
        !           607: #endif
        !           608: #if ! defined (YYSIZE_T)
        !           609: # define YYSIZE_T unsigned int
        !           610: #endif
        !           611:
        !           612: #define yyerrok                (yyerrstatus = 0)
        !           613: #define yyclearin      (yychar = YYEMPTY)
        !           614: #define YYEMPTY                -2
        !           615: #define YYEOF          0
        !           616: #define YYACCEPT       goto yyacceptlab
        !           617: #define YYABORT        goto yyabortlab
        !           618: #define YYERROR                goto yyerrlab1
        !           619: /* Like YYERROR except do call yyerror.  This remains here temporarily
        !           620:    to ease the transition to the new meaning of YYERROR, for GCC.
        !           621:    Once GCC version 2 has supplanted version 1, this can go.  */
        !           622: #define YYFAIL         goto yyerrlab
        !           623: #define YYRECOVERING()  (!!yyerrstatus)
        !           624: #define YYBACKUP(Token, Value)                                 \
        !           625: do                                                             \
        !           626:   if (yychar == YYEMPTY && yylen == 1)                         \
        !           627:     {                                                          \
        !           628:       yychar = (Token);                                                \
        !           629:       yylval = (Value);                                                \
        !           630:       yychar1 = YYTRANSLATE (yychar);                          \
        !           631:       YYPOPSTACK;                                              \
        !           632:       goto yybackup;                                           \
        !           633:     }                                                          \
        !           634:   else                                                         \
        !           635:     {                                                          \
        !           636:       yyerror ("syntax error: cannot back up");                        \
        !           637:       YYERROR;                                                 \
        !           638:     }                                                          \
        !           639: while (0)
        !           640:
        !           641: #define YYTERROR       1
        !           642: #define YYERRCODE      256
        !           643:
        !           644:
        !           645: /* YYLLOC_DEFAULT -- Compute the default location (before the actions
        !           646:    are run).
        !           647:
        !           648:    When YYLLOC_DEFAULT is run, CURRENT is set the location of the
        !           649:    first token.  By default, to implement support for ranges, extend
        !           650:    its range to the last symbol.  */
        !           651:
        !           652: #ifndef YYLLOC_DEFAULT
        !           653: # define YYLLOC_DEFAULT(Current, Rhs, N)               \
        !           654:    Current.last_line   = Rhs[N].last_line;     \
        !           655:    Current.last_column = Rhs[N].last_column;
        !           656: #endif
        !           657:
        !           658:
        !           659: /* YYLEX -- calling `yylex' with the right arguments.  */
        !           660:
        !           661: #if YYPURE
        !           662: # if YYLSP_NEEDED
        !           663: #  ifdef YYLEX_PARAM
        !           664: #   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
        !           665: #  else
        !           666: #   define YYLEX               yylex (&yylval, &yylloc)
        !           667: #  endif
        !           668: # else /* !YYLSP_NEEDED */
        !           669: #  ifdef YYLEX_PARAM
        !           670: #   define YYLEX               yylex (&yylval, YYLEX_PARAM)
        !           671: #  else
        !           672: #   define YYLEX               yylex (&yylval)
        !           673: #  endif
        !           674: # endif /* !YYLSP_NEEDED */
        !           675: #else /* !YYPURE */
        !           676: # define YYLEX                 yylex ()
        !           677: #endif /* !YYPURE */
        !           678:
        !           679:
        !           680: /* Enable debugging if requested.  */
        !           681: #if YYDEBUG
        !           682:
        !           683: # ifndef YYFPRINTF
        !           684: #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
        !           685: #  define YYFPRINTF fprintf
        !           686: # endif
        !           687:
        !           688: # define YYDPRINTF(Args)                       \
        !           689: do {                                           \
        !           690:   if (yydebug)                                 \
        !           691:     YYFPRINTF Args;                            \
        !           692: } while (0)
        !           693: /* Nonzero means print parse trace.  It is left uninitialized so that
        !           694:    multiple parsers can coexist.  */
        !           695: int yydebug;
        !           696: #else /* !YYDEBUG */
        !           697: # define YYDPRINTF(Args)
        !           698: #endif /* !YYDEBUG */
        !           699:
        !           700: /* YYINITDEPTH -- initial size of the parser's stacks.  */
        !           701: #ifndef        YYINITDEPTH
        !           702: # define YYINITDEPTH 200
        !           703: #endif
        !           704:
        !           705: /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
        !           706:    if the built-in stack extension method is used).
        !           707:
        !           708:    Do not make this value too large; the results are undefined if
        !           709:    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
        !           710:    evaluated with infinite-precision integer arithmetic.  */
        !           711:
        !           712: #if YYMAXDEPTH == 0
        !           713: # undef YYMAXDEPTH
        !           714: #endif
        !           715:
        !           716: #ifndef YYMAXDEPTH
        !           717: # define YYMAXDEPTH 10000
        !           718: #endif
        !           719: 
        !           720: #if ! defined (yyoverflow) && ! defined (yymemcpy)
        !           721: # if __GNUC__ > 1              /* GNU C and GNU C++ define this.  */
        !           722: #  define yymemcpy __builtin_memcpy
        !           723: # else                         /* not GNU C or C++ */
        !           724:
        !           725: /* This is the most reliable way to avoid incompatibilities
        !           726:    in available built-in functions on various systems.  */
        !           727: static void
        !           728: #  if defined (__STDC__) || defined (__cplusplus)
        !           729: yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
        !           730: #  else
        !           731: yymemcpy (yyto, yyfrom, yycount)
        !           732:      char *yyto;
        !           733:      const char *yyfrom;
        !           734:      YYSIZE_T yycount;
        !           735: #  endif
        !           736: {
        !           737:   register const char *yyf = yyfrom;
        !           738:   register char *yyt = yyto;
        !           739:   register YYSIZE_T yyi = yycount;
        !           740:
        !           741:   while (yyi-- != 0)
        !           742:     *yyt++ = *yyf++;
        !           743: }
        !           744: # endif
        !           745: #endif
        !           746:
        !           747: #ifdef YYERROR_VERBOSE
        !           748:
        !           749: # ifndef yystrlen
        !           750: #  if defined (__GLIBC__) && defined (_STRING_H)
        !           751: #   define yystrlen strlen
        !           752: #  else
        !           753: /* Return the length of YYSTR.  */
        !           754: static YYSIZE_T
        !           755: #   if defined (__STDC__) || defined (__cplusplus)
        !           756: yystrlen (const char *yystr)
        !           757: #   else
        !           758: yystrlen (yystr)
        !           759:      const char *yystr;
        !           760: #   endif
        !           761: {
        !           762:   register const char *yys = yystr;
        !           763:
        !           764:   while (*yys++ != '\0')
        !           765:     continue;
        !           766:
        !           767:   return yys - yystr - 1;
        !           768: }
        !           769: #  endif
        !           770: # endif
        !           771:
        !           772: # ifndef yystpcpy
        !           773: #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
        !           774: #   define yystpcpy stpcpy
        !           775: #  else
        !           776: /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
        !           777:    YYDEST.  */
        !           778: static char *
        !           779: #   if defined (__STDC__) || defined (__cplusplus)
        !           780: yystpcpy (char *yydest, const char *yysrc)
        !           781: #   else
        !           782: yystpcpy (yydest, yysrc)
        !           783:      char *yydest;
        !           784:      const char *yysrc;
        !           785: #   endif
        !           786: {
        !           787:   register char *yyd = yydest;
        !           788:   register const char *yys = yysrc;
        !           789:
        !           790:   while ((*yyd++ = *yys++) != '\0')
        !           791:     continue;
        !           792:
        !           793:   return yyd - 1;
        !           794: }
        !           795: #  endif
        !           796: # endif
        !           797: #endif
        !           798: 
        !           799: #line 319 "/usr/share/bison/bison.simple"
        !           800:
        !           801:
        !           802: /* The user can define YYPARSE_PARAM as the name of an argument to be passed
        !           803:    into yyparse.  The argument should have type void *.
        !           804:    It should actually point to an object.
        !           805:    Grammar actions can access the variable by casting it
        !           806:    to the proper pointer type.  */
        !           807:
        !           808: #ifdef YYPARSE_PARAM
        !           809: # if defined (__STDC__) || defined (__cplusplus)
        !           810: #  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
        !           811: #  define YYPARSE_PARAM_DECL
        !           812: # else
        !           813: #  define YYPARSE_PARAM_ARG YYPARSE_PARAM
        !           814: #  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
        !           815: # endif
        !           816: #else /* !YYPARSE_PARAM */
        !           817: # define YYPARSE_PARAM_ARG
        !           818: # define YYPARSE_PARAM_DECL
        !           819: #endif /* !YYPARSE_PARAM */
        !           820:
        !           821: /* Prevent warning if -Wstrict-prototypes.  */
        !           822: #ifdef __GNUC__
        !           823: # ifdef YYPARSE_PARAM
        !           824: int yyparse (void *);
        !           825: # else
        !           826: int yyparse (void);
        !           827: # endif
        !           828: #endif
        !           829:
        !           830: /* YY_DECL_VARIABLES -- depending whether we use a pure parser,
        !           831:    variables are global, or local to YYPARSE.  */
        !           832:
        !           833: #define YY_DECL_NON_LSP_VARIABLES                      \
        !           834: /* The lookahead symbol.  */                           \
        !           835: int yychar;                                            \
        !           836:                                                        \
        !           837: /* The semantic value of the lookahead symbol. */      \
        !           838: YYSTYPE yylval;                                                \
        !           839:                                                        \
        !           840: /* Number of parse errors so far.  */                  \
        !           841: int yynerrs;
        !           842:
        !           843: #if YYLSP_NEEDED
        !           844: # define YY_DECL_VARIABLES                     \
        !           845: YY_DECL_NON_LSP_VARIABLES                      \
        !           846:                                                \
        !           847: /* Location data for the lookahead symbol.  */ \
        !           848: YYLTYPE yylloc;
        !           849: #else
        !           850: # define YY_DECL_VARIABLES                     \
        !           851: YY_DECL_NON_LSP_VARIABLES
        !           852: #endif
        !           853:
        !           854:
        !           855: /* If nonreentrant, generate the variables here. */
        !           856:
        !           857: #if !YYPURE
        !           858: YY_DECL_VARIABLES
        !           859: #endif  /* !YYPURE */
        !           860:
        !           861: int
        !           862: yyparse (YYPARSE_PARAM_ARG)
        !           863:      YYPARSE_PARAM_DECL
        !           864: {
        !           865:   /* If reentrant, generate the variables here. */
        !           866: #if YYPURE
        !           867:   YY_DECL_VARIABLES
        !           868: #endif  /* !YYPURE */
        !           869:
        !           870:   register int yystate;
        !           871:   register int yyn;
        !           872:   int yyresult;
        !           873:   /* Number of tokens to shift before error messages enabled.  */
        !           874:   int yyerrstatus;
        !           875:   /* Lookahead token as an internal (translated) token number.  */
        !           876:   int yychar1 = 0;
        !           877:
        !           878:   /* Three stacks and their tools:
        !           879:      `yyss': related to states,
        !           880:      `yyvs': related to semantic values,
        !           881:      `yyls': related to locations.
        !           882:
        !           883:      Refer to the stacks thru separate pointers, to allow yyoverflow
        !           884:      to reallocate them elsewhere.  */
        !           885:
        !           886:   /* The state stack. */
        !           887:   short        yyssa[YYINITDEPTH];
        !           888:   short *yyss = yyssa;
        !           889:   register short *yyssp;
        !           890:
        !           891:   /* The semantic value stack.  */
        !           892:   YYSTYPE yyvsa[YYINITDEPTH];
        !           893:   YYSTYPE *yyvs = yyvsa;
        !           894:   register YYSTYPE *yyvsp;
        !           895:
        !           896: #if YYLSP_NEEDED
        !           897:   /* The location stack.  */
        !           898:   YYLTYPE yylsa[YYINITDEPTH];
        !           899:   YYLTYPE *yyls = yylsa;
        !           900:   YYLTYPE *yylsp;
        !           901: #endif
        !           902:
        !           903: #if YYLSP_NEEDED
        !           904: # define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
        !           905: #else
        !           906: # define YYPOPSTACK   (yyvsp--, yyssp--)
        !           907: #endif
        !           908:
        !           909:   YYSIZE_T yystacksize = YYINITDEPTH;
        !           910:
        !           911:
        !           912:   /* The variables used to return semantic value and location from the
        !           913:      action routines.  */
        !           914:   YYSTYPE yyval;
        !           915: #if YYLSP_NEEDED
        !           916:   YYLTYPE yyloc;
        !           917: #endif
        !           918:
        !           919:   /* When reducing, the number of symbols on the RHS of the reduced
        !           920:      rule. */
        !           921:   int yylen;
        !           922:
        !           923:   YYDPRINTF ((stderr, "Starting parse\n"));
        !           924:
        !           925:   yystate = 0;
        !           926:   yyerrstatus = 0;
        !           927:   yynerrs = 0;
        !           928:   yychar = YYEMPTY;            /* Cause a token to be read.  */
        !           929:
        !           930:   /* Initialize stack pointers.
        !           931:      Waste one element of value and location stack
        !           932:      so that they stay on the same level as the state stack.
        !           933:      The wasted elements are never initialized.  */
        !           934:
        !           935:   yyssp = yyss;
        !           936:   yyvsp = yyvs;
        !           937: #if YYLSP_NEEDED
        !           938:   yylsp = yyls;
        !           939: #endif
        !           940:   goto yysetstate;
        !           941:
        !           942: /*------------------------------------------------------------.
        !           943: | yynewstate -- Push a new state, which is found in yystate.  |
        !           944: `------------------------------------------------------------*/
        !           945:  yynewstate:
        !           946:   /* In all cases, when you get here, the value and location stacks
        !           947:      have just been pushed. so pushing a state here evens the stacks.
        !           948:      */
        !           949:   yyssp++;
        !           950:
        !           951:  yysetstate:
        !           952:   *yyssp = yystate;
        !           953:
        !           954:   if (yyssp >= yyss + yystacksize - 1)
        !           955:     {
        !           956:       /* Get the current used size of the three stacks, in elements.  */
        !           957:       YYSIZE_T yysize = yyssp - yyss + 1;
        !           958:
        !           959: #ifdef yyoverflow
        !           960:       {
        !           961:        /* Give user a chance to reallocate the stack. Use copies of
        !           962:           these so that the &'s don't force the real ones into
        !           963:           memory.  */
        !           964:        YYSTYPE *yyvs1 = yyvs;
        !           965:        short *yyss1 = yyss;
        !           966:
        !           967:        /* Each stack pointer address is followed by the size of the
        !           968:           data in use in that stack, in bytes.  */
        !           969: # if YYLSP_NEEDED
        !           970:        YYLTYPE *yyls1 = yyls;
        !           971:        /* This used to be a conditional around just the two extra args,
        !           972:           but that might be undefined if yyoverflow is a macro.  */
        !           973:        yyoverflow ("parser stack overflow",
        !           974:                    &yyss1, yysize * sizeof (*yyssp),
        !           975:                    &yyvs1, yysize * sizeof (*yyvsp),
        !           976:                    &yyls1, yysize * sizeof (*yylsp),
        !           977:                    &yystacksize);
        !           978:        yyls = yyls1;
        !           979: # else
        !           980:        yyoverflow ("parser stack overflow",
        !           981:                    &yyss1, yysize * sizeof (*yyssp),
        !           982:                    &yyvs1, yysize * sizeof (*yyvsp),
        !           983:                    &yystacksize);
        !           984: # endif
        !           985:        yyss = yyss1;
        !           986:        yyvs = yyvs1;
        !           987:       }
        !           988: #else /* no yyoverflow */
        !           989:       /* Extend the stack our own way.  */
        !           990:       if (yystacksize >= YYMAXDEPTH)
        !           991:        goto yyoverflowlab;
        !           992:       yystacksize *= 2;
        !           993:       if (yystacksize > YYMAXDEPTH)
        !           994:        yystacksize = YYMAXDEPTH;
        !           995:
        !           996:       {
        !           997:        short *yyss1 = yyss;
        !           998:        union yyalloc *yyptr =
        !           999:          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
        !          1000:        if (! yyptr)
        !          1001:          goto yyoverflowlab;
        !          1002:        YYSTACK_RELOCATE (short, yyss);
        !          1003:        YYSTACK_RELOCATE (YYSTYPE, yyvs);
        !          1004: # if YYLSP_NEEDED
        !          1005:        YYSTACK_RELOCATE (YYLTYPE, yyls);
        !          1006: # endif
        !          1007: # undef YYSTACK_RELOCATE
        !          1008:        if (yyss1 != yyssa)
        !          1009:          YYSTACK_FREE (yyss1);
        !          1010:       }
        !          1011: #endif /* no yyoverflow */
        !          1012:
        !          1013:       yyssp = yyss + yysize - 1;
        !          1014:       yyvsp = yyvs + yysize - 1;
        !          1015: #if YYLSP_NEEDED
        !          1016:       yylsp = yyls + yysize - 1;
        !          1017: #endif
        !          1018:
        !          1019:       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
        !          1020:                  (unsigned long int) yystacksize));
        !          1021:
        !          1022:       if (yyssp >= yyss + yystacksize - 1)
        !          1023:        YYABORT;
        !          1024:     }
        !          1025:
        !          1026:   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
        !          1027:
        !          1028:   goto yybackup;
        !          1029:
        !          1030:
        !          1031: /*-----------.
        !          1032: | yybackup.  |
        !          1033: `-----------*/
        !          1034: yybackup:
        !          1035:
        !          1036: /* Do appropriate processing given the current state.  */
        !          1037: /* Read a lookahead token if we need one and don't already have one.  */
        !          1038: /* yyresume: */
        !          1039:
        !          1040:   /* First try to decide what to do without reference to lookahead token.  */
        !          1041:
        !          1042:   yyn = yypact[yystate];
        !          1043:   if (yyn == YYFLAG)
        !          1044:     goto yydefault;
        !          1045:
        !          1046:   /* Not known => get a lookahead token if don't already have one.  */
        !          1047:
        !          1048:   /* yychar is either YYEMPTY or YYEOF
        !          1049:      or a valid token in external form.  */
        !          1050:
        !          1051:   if (yychar == YYEMPTY)
        !          1052:     {
        !          1053:       YYDPRINTF ((stderr, "Reading a token: "));
        !          1054:       yychar = YYLEX;
        !          1055:     }
        !          1056:
        !          1057:   /* Convert token to internal form (in yychar1) for indexing tables with */
        !          1058:
        !          1059:   if (yychar <= 0)             /* This means end of input. */
        !          1060:     {
        !          1061:       yychar1 = 0;
        !          1062:       yychar = YYEOF;          /* Don't call YYLEX any more */
        !          1063:
        !          1064:       YYDPRINTF ((stderr, "Now at end of input.\n"));
        !          1065:     }
        !          1066:   else
        !          1067:     {
        !          1068:       yychar1 = YYTRANSLATE (yychar);
        !          1069:
        !          1070: #if YYDEBUG
        !          1071:      /* We have to keep this `#if YYDEBUG', since we use variables
        !          1072:        which are defined only if `YYDEBUG' is set.  */
        !          1073:       if (yydebug)
        !          1074:        {
        !          1075:          YYFPRINTF (stderr, "Next token is %d (%s",
        !          1076:                     yychar, yytname[yychar1]);
        !          1077:          /* Give the individual parser a way to print the precise
        !          1078:             meaning of a token, for further debugging info.  */
        !          1079: # ifdef YYPRINT
        !          1080:          YYPRINT (stderr, yychar, yylval);
        !          1081: # endif
        !          1082:          YYFPRINTF (stderr, ")\n");
        !          1083:        }
        !          1084: #endif
        !          1085:     }
        !          1086:
        !          1087:   yyn += yychar1;
        !          1088:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
        !          1089:     goto yydefault;
        !          1090:
        !          1091:   yyn = yytable[yyn];
        !          1092:
        !          1093:   /* yyn is what to do for this token type in this state.
        !          1094:      Negative => reduce, -yyn is rule number.
        !          1095:      Positive => shift, yyn is new state.
        !          1096:        New state is final state => don't bother to shift,
        !          1097:        just return success.
        !          1098:      0, or most negative number => error.  */
        !          1099:
        !          1100:   if (yyn < 0)
        !          1101:     {
        !          1102:       if (yyn == YYFLAG)
        !          1103:        goto yyerrlab;
        !          1104:       yyn = -yyn;
        !          1105:       goto yyreduce;
        !          1106:     }
        !          1107:   else if (yyn == 0)
        !          1108:     goto yyerrlab;
        !          1109:
        !          1110:   if (yyn == YYFINAL)
        !          1111:     YYACCEPT;
        !          1112:
        !          1113:   /* Shift the lookahead token.  */
        !          1114:   YYDPRINTF ((stderr, "Shifting token %d (%s), ",
        !          1115:              yychar, yytname[yychar1]));
        !          1116:
        !          1117:   /* Discard the token being shifted unless it is eof.  */
        !          1118:   if (yychar != YYEOF)
        !          1119:     yychar = YYEMPTY;
        !          1120:
        !          1121:   *++yyvsp = yylval;
        !          1122: #if YYLSP_NEEDED
        !          1123:   *++yylsp = yylloc;
        !          1124: #endif
        !          1125:
        !          1126:   /* Count tokens shifted since error; after three, turn off error
        !          1127:      status.  */
        !          1128:   if (yyerrstatus)
        !          1129:     yyerrstatus--;
        !          1130:
        !          1131:   yystate = yyn;
        !          1132:   goto yynewstate;
        !          1133:
        !          1134:
        !          1135: /*-----------------------------------------------------------.
        !          1136: | yydefault -- do the default action for the current state.  |
        !          1137: `-----------------------------------------------------------*/
        !          1138: yydefault:
        !          1139:   yyn = yydefact[yystate];
        !          1140:   if (yyn == 0)
        !          1141:     goto yyerrlab;
        !          1142:   goto yyreduce;
        !          1143:
        !          1144:
        !          1145: /*-----------------------------.
        !          1146: | yyreduce -- Do a reduction.  |
        !          1147: `-----------------------------*/
        !          1148: yyreduce:
        !          1149:   /* yyn is the number of a rule to reduce with.  */
        !          1150:   yylen = yyr2[yyn];
        !          1151:
        !          1152:   /* If YYLEN is nonzero, implement the default value of the action:
        !          1153:      `$$ = $1'.
        !          1154:
        !          1155:      Otherwise, the following line sets YYVAL to the semantic value of
        !          1156:      the lookahead token.  This behavior is undocumented and Bison
        !          1157:      users should not rely upon it.  Assigning to YYVAL
        !          1158:      unconditionally makes the parser a bit smaller, and it avoids a
        !          1159:      GCC warning that YYVAL may be used uninitialized.  */
        !          1160:   yyval = yyvsp[1-yylen];
        !          1161:
        !          1162: #if YYLSP_NEEDED
        !          1163:   /* Similarly for the default location.  Let the user run additional
        !          1164:      commands if for instance locations are ranges.  */
        !          1165:   yyloc = yylsp[1-yylen];
        !          1166:   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
        !          1167: #endif
        !          1168:
        !          1169: #if YYDEBUG
        !          1170:   /* We have to keep this `#if YYDEBUG', since we use variables which
        !          1171:      are defined only if `YYDEBUG' is set.  */
        !          1172:   if (yydebug)
        !          1173:     {
        !          1174:       int yyi;
        !          1175:
        !          1176:       YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
        !          1177:                 yyn, yyrline[yyn]);
        !          1178:
        !          1179:       /* Print the symbols being reduced, and their result.  */
        !          1180:       for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
        !          1181:        YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
        !          1182:       YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
        !          1183:     }
        !          1184: #endif
        !          1185:
        !          1186:   switch (yyn) {
        !          1187:
        !          1188: case 5:
        !          1189: #line 174 "calc.y"
        !          1190: { sp = stack[0]; yyerrok; }
        !          1191:     break;
        !          1192: case 7:
        !          1193: #line 178 "calc.y"
        !          1194: {
        !          1195:       mpz_out_str (stdout, obase, sp); putchar ('\n');
        !          1196:       sp--;
        !          1197:       CHECK_EMPTY ();
        !          1198:     }
        !          1199:     break;
        !          1200: case 8:
        !          1201: #line 183 "calc.y"
        !          1202: {
        !          1203:       CHECK_VARIABLE (yyvsp[-2].var);
        !          1204:       mpz_swap (variable[yyvsp[-2].var], sp);
        !          1205:       sp--;
        !          1206:       CHECK_EMPTY ();
        !          1207:     }
        !          1208:     break;
        !          1209: case 9:
        !          1210: #line 189 "calc.y"
        !          1211: { calc_help (); }
        !          1212:     break;
        !          1213: case 10:
        !          1214: #line 190 "calc.y"
        !          1215: { ibase = 16; obase = -16; }
        !          1216:     break;
        !          1217: case 11:
        !          1218: #line 191 "calc.y"
        !          1219: { ibase = 0;  obase = 10; }
        !          1220:     break;
        !          1221: case 12:
        !          1222: #line 192 "calc.y"
        !          1223: { exit (0); }
        !          1224:     break;
        !          1225: case 14:
        !          1226: #line 199 "calc.y"
        !          1227: { sp--; mpz_add    (sp, sp, sp+1); }
        !          1228:     break;
        !          1229: case 15:
        !          1230: #line 200 "calc.y"
        !          1231: { sp--; mpz_sub    (sp, sp, sp+1); }
        !          1232:     break;
        !          1233: case 16:
        !          1234: #line 201 "calc.y"
        !          1235: { sp--; mpz_mul    (sp, sp, sp+1); }
        !          1236:     break;
        !          1237: case 17:
        !          1238: #line 202 "calc.y"
        !          1239: { sp--; mpz_fdiv_q (sp, sp, sp+1); }
        !          1240:     break;
        !          1241: case 18:
        !          1242: #line 203 "calc.y"
        !          1243: { sp--; mpz_fdiv_r (sp, sp, sp+1); }
        !          1244:     break;
        !          1245: case 19:
        !          1246: #line 204 "calc.y"
        !          1247: { CHECK_UI ("Exponent", sp);
        !          1248:                      sp--; mpz_pow_ui (sp, sp, mpz_get_ui (sp+1)); }
        !          1249:     break;
        !          1250: case 20:
        !          1251: #line 206 "calc.y"
        !          1252: { CHECK_UI ("Shift count", sp);
        !          1253:                      sp--; mpz_mul_2exp (sp, sp, mpz_get_ui (sp+1)); }
        !          1254:     break;
        !          1255: case 21:
        !          1256: #line 208 "calc.y"
        !          1257: { CHECK_UI ("Shift count", sp);
        !          1258:                      sp--; mpz_fdiv_q_2exp (sp, sp, mpz_get_ui (sp+1)); }
        !          1259:     break;
        !          1260: case 22:
        !          1261: #line 210 "calc.y"
        !          1262: { CHECK_UI ("Factorial", sp);
        !          1263:                      mpz_fac_ui (sp, mpz_get_ui (sp)); }
        !          1264:     break;
        !          1265: case 23:
        !          1266: #line 212 "calc.y"
        !          1267: { mpz_neg (sp, sp); }
        !          1268:     break;
        !          1269: case 24:
        !          1270: #line 214 "calc.y"
        !          1271: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <  0); }
        !          1272:     break;
        !          1273: case 25:
        !          1274: #line 215 "calc.y"
        !          1275: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <= 0); }
        !          1276:     break;
        !          1277: case 26:
        !          1278: #line 216 "calc.y"
        !          1279: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) == 0); }
        !          1280:     break;
        !          1281: case 27:
        !          1282: #line 217 "calc.y"
        !          1283: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) != 0); }
        !          1284:     break;
        !          1285: case 28:
        !          1286: #line 218 "calc.y"
        !          1287: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >= 0); }
        !          1288:     break;
        !          1289: case 29:
        !          1290: #line 219 "calc.y"
        !          1291: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >  0); }
        !          1292:     break;
        !          1293: case 30:
        !          1294: #line 221 "calc.y"
        !          1295: { sp--; mpz_set_ui (sp, mpz_sgn (sp) && mpz_sgn (sp+1)); }
        !          1296:     break;
        !          1297: case 31:
        !          1298: #line 222 "calc.y"
        !          1299: { sp--; mpz_set_ui (sp, mpz_sgn (sp) || mpz_sgn (sp+1)); }
        !          1300:     break;
        !          1301: case 32:
        !          1302: #line 224 "calc.y"
        !          1303: { mpz_abs (sp, sp); }
        !          1304:     break;
        !          1305: case 33:
        !          1306: #line 225 "calc.y"
        !          1307: { sp--; CHECK_UI ("Binomial base", sp+1);
        !          1308:                                     mpz_bin_ui (sp, sp, mpz_get_ui (sp+1)); }
        !          1309:     break;
        !          1310: case 34:
        !          1311: #line 227 "calc.y"
        !          1312: { CHECK_UI ("Fibonacci", sp);
        !          1313:                                     mpz_fib_ui (sp, mpz_get_ui (sp)); }
        !          1314:     break;
        !          1315: case 36:
        !          1316: #line 230 "calc.y"
        !          1317: { sp--; mpz_set_si (sp,
        !          1318:                                           mpz_kronecker (sp, sp+1)); }
        !          1319:     break;
        !          1320: case 38:
        !          1321: #line 233 "calc.y"
        !          1322: { CHECK_UI ("Lucas number", sp);
        !          1323:                                     mpz_lucnum_ui (sp, mpz_get_ui (sp)); }
        !          1324:     break;
        !          1325: case 39:
        !          1326: #line 235 "calc.y"
        !          1327: { mpz_nextprime (sp, sp); }
        !          1328:     break;
        !          1329: case 40:
        !          1330: #line 236 "calc.y"
        !          1331: { sp -= 2; mpz_powm (sp, sp, sp+1, sp+2); }
        !          1332:     break;
        !          1333: case 41:
        !          1334: #line 237 "calc.y"
        !          1335: { sp--; CHECK_UI ("Nth-root", sp+1);
        !          1336:                                     mpz_root (sp, sp, mpz_get_ui (sp+1)); }
        !          1337:     break;
        !          1338: case 42:
        !          1339: #line 239 "calc.y"
        !          1340: { mpz_sqrt (sp, sp); }
        !          1341:     break;
        !          1342: case 43:
        !          1343: #line 241 "calc.y"
        !          1344: {
        !          1345:         sp++;
        !          1346:         CHECK_OVERFLOW ();
        !          1347:         CHECK_VARIABLE (yyvsp[0].var);
        !          1348:         mpz_set (sp, variable[yyvsp[0].var]);
        !          1349:       }
        !          1350:     break;
        !          1351: case 44:
        !          1352: #line 247 "calc.y"
        !          1353: {
        !          1354:         sp++;
        !          1355:         CHECK_OVERFLOW ();
        !          1356:         if (mpz_set_str (sp, yyvsp[0].str, ibase) != 0)
        !          1357:           {
        !          1358:             fprintf (stderr, "Invalid number: %s\n", yyvsp[0].str);
        !          1359:             YYERROR;
        !          1360:           }
        !          1361:       }
        !          1362:     break;
        !          1363: case 46:
        !          1364: #line 259 "calc.y"
        !          1365: { sp--; mpz_gcd (sp, sp, sp+1); }
        !          1366:     break;
        !          1367: case 48:
        !          1368: #line 263 "calc.y"
        !          1369: { sp--; mpz_lcm (sp, sp, sp+1); }
        !          1370:     break;
        !          1371: }
        !          1372:
        !          1373: #line 705 "/usr/share/bison/bison.simple"
        !          1374:
        !          1375: 
        !          1376:   yyvsp -= yylen;
        !          1377:   yyssp -= yylen;
        !          1378: #if YYLSP_NEEDED
        !          1379:   yylsp -= yylen;
        !          1380: #endif
        !          1381:
        !          1382: #if YYDEBUG
        !          1383:   if (yydebug)
        !          1384:     {
        !          1385:       short *yyssp1 = yyss - 1;
        !          1386:       YYFPRINTF (stderr, "state stack now");
        !          1387:       while (yyssp1 != yyssp)
        !          1388:        YYFPRINTF (stderr, " %d", *++yyssp1);
        !          1389:       YYFPRINTF (stderr, "\n");
        !          1390:     }
        !          1391: #endif
        !          1392:
        !          1393:   *++yyvsp = yyval;
        !          1394: #if YYLSP_NEEDED
        !          1395:   *++yylsp = yyloc;
        !          1396: #endif
        !          1397:
        !          1398:   /* Now `shift' the result of the reduction.  Determine what state
        !          1399:      that goes to, based on the state we popped back to and the rule
        !          1400:      number reduced by.  */
        !          1401:
        !          1402:   yyn = yyr1[yyn];
        !          1403:
        !          1404:   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
        !          1405:   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
        !          1406:     yystate = yytable[yystate];
        !          1407:   else
        !          1408:     yystate = yydefgoto[yyn - YYNTBASE];
        !          1409:
        !          1410:   goto yynewstate;
        !          1411:
        !          1412:
        !          1413: /*------------------------------------.
        !          1414: | yyerrlab -- here on detecting error |
        !          1415: `------------------------------------*/
        !          1416: yyerrlab:
        !          1417:   /* If not already recovering from an error, report this error.  */
        !          1418:   if (!yyerrstatus)
        !          1419:     {
        !          1420:       ++yynerrs;
        !          1421:
        !          1422: #ifdef YYERROR_VERBOSE
        !          1423:       yyn = yypact[yystate];
        !          1424:
        !          1425:       if (yyn > YYFLAG && yyn < YYLAST)
        !          1426:        {
        !          1427:          YYSIZE_T yysize = 0;
        !          1428:          char *yymsg;
        !          1429:          int yyx, yycount;
        !          1430:
        !          1431:          yycount = 0;
        !          1432:          /* Start YYX at -YYN if negative to avoid negative indexes in
        !          1433:             YYCHECK.  */
        !          1434:          for (yyx = yyn < 0 ? -yyn : 0;
        !          1435:               yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
        !          1436:            if (yycheck[yyx + yyn] == yyx)
        !          1437:              yysize += yystrlen (yytname[yyx]) + 15, yycount++;
        !          1438:          yysize += yystrlen ("parse error, unexpected ") + 1;
        !          1439:          yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
        !          1440:          yymsg = (char *) YYSTACK_ALLOC (yysize);
        !          1441:          if (yymsg != 0)
        !          1442:            {
        !          1443:              char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
        !          1444:              yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
        !          1445:
        !          1446:              if (yycount < 5)
        !          1447:                {
        !          1448:                  yycount = 0;
        !          1449:                  for (yyx = yyn < 0 ? -yyn : 0;
        !          1450:                       yyx < (int) (sizeof (yytname) / sizeof (char *));
        !          1451:                       yyx++)
        !          1452:                    if (yycheck[yyx + yyn] == yyx)
        !          1453:                      {
        !          1454:                        const char *yyq = ! yycount ? ", expecting " : " or ";
        !          1455:                        yyp = yystpcpy (yyp, yyq);
        !          1456:                        yyp = yystpcpy (yyp, yytname[yyx]);
        !          1457:                        yycount++;
        !          1458:                      }
        !          1459:                }
        !          1460:              yyerror (yymsg);
        !          1461:              YYSTACK_FREE (yymsg);
        !          1462:            }
        !          1463:          else
        !          1464:            yyerror ("parse error; also virtual memory exhausted");
        !          1465:        }
        !          1466:       else
        !          1467: #endif /* defined (YYERROR_VERBOSE) */
        !          1468:        yyerror ("parse error");
        !          1469:     }
        !          1470:   goto yyerrlab1;
        !          1471:
        !          1472:
        !          1473: /*--------------------------------------------------.
        !          1474: | yyerrlab1 -- error raised explicitly by an action |
        !          1475: `--------------------------------------------------*/
        !          1476: yyerrlab1:
        !          1477:   if (yyerrstatus == 3)
        !          1478:     {
        !          1479:       /* If just tried and failed to reuse lookahead token after an
        !          1480:         error, discard it.  */
        !          1481:
        !          1482:       /* return failure if at end of input */
        !          1483:       if (yychar == YYEOF)
        !          1484:        YYABORT;
        !          1485:       YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
        !          1486:                  yychar, yytname[yychar1]));
        !          1487:       yychar = YYEMPTY;
        !          1488:     }
        !          1489:
        !          1490:   /* Else will try to reuse lookahead token after shifting the error
        !          1491:      token.  */
        !          1492:
        !          1493:   yyerrstatus = 3;             /* Each real token shifted decrements this */
        !          1494:
        !          1495:   goto yyerrhandle;
        !          1496:
        !          1497:
        !          1498: /*-------------------------------------------------------------------.
        !          1499: | yyerrdefault -- current state does not do anything special for the |
        !          1500: | error token.                                                       |
        !          1501: `-------------------------------------------------------------------*/
        !          1502: yyerrdefault:
        !          1503: #if 0
        !          1504:   /* This is wrong; only states that explicitly want error tokens
        !          1505:      should shift them.  */
        !          1506:
        !          1507:   /* If its default is to accept any token, ok.  Otherwise pop it.  */
        !          1508:   yyn = yydefact[yystate];
        !          1509:   if (yyn)
        !          1510:     goto yydefault;
        !          1511: #endif
        !          1512:
        !          1513:
        !          1514: /*---------------------------------------------------------------.
        !          1515: | yyerrpop -- pop the current state because it cannot handle the |
        !          1516: | error token                                                    |
        !          1517: `---------------------------------------------------------------*/
        !          1518: yyerrpop:
        !          1519:   if (yyssp == yyss)
        !          1520:     YYABORT;
        !          1521:   yyvsp--;
        !          1522:   yystate = *--yyssp;
        !          1523: #if YYLSP_NEEDED
        !          1524:   yylsp--;
        !          1525: #endif
        !          1526:
        !          1527: #if YYDEBUG
        !          1528:   if (yydebug)
        !          1529:     {
        !          1530:       short *yyssp1 = yyss - 1;
        !          1531:       YYFPRINTF (stderr, "Error: state stack now");
        !          1532:       while (yyssp1 != yyssp)
        !          1533:        YYFPRINTF (stderr, " %d", *++yyssp1);
        !          1534:       YYFPRINTF (stderr, "\n");
        !          1535:     }
        !          1536: #endif
        !          1537:
        !          1538: /*--------------.
        !          1539: | yyerrhandle.  |
        !          1540: `--------------*/
        !          1541: yyerrhandle:
        !          1542:   yyn = yypact[yystate];
        !          1543:   if (yyn == YYFLAG)
        !          1544:     goto yyerrdefault;
        !          1545:
        !          1546:   yyn += YYTERROR;
        !          1547:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
        !          1548:     goto yyerrdefault;
        !          1549:
        !          1550:   yyn = yytable[yyn];
        !          1551:   if (yyn < 0)
        !          1552:     {
        !          1553:       if (yyn == YYFLAG)
        !          1554:        goto yyerrpop;
        !          1555:       yyn = -yyn;
        !          1556:       goto yyreduce;
        !          1557:     }
        !          1558:   else if (yyn == 0)
        !          1559:     goto yyerrpop;
        !          1560:
        !          1561:   if (yyn == YYFINAL)
        !          1562:     YYACCEPT;
        !          1563:
        !          1564:   YYDPRINTF ((stderr, "Shifting error token, "));
        !          1565:
        !          1566:   *++yyvsp = yylval;
        !          1567: #if YYLSP_NEEDED
        !          1568:   *++yylsp = yylloc;
        !          1569: #endif
        !          1570:
        !          1571:   yystate = yyn;
        !          1572:   goto yynewstate;
        !          1573:
        !          1574:
        !          1575: /*-------------------------------------.
        !          1576: | yyacceptlab -- YYACCEPT comes here.  |
        !          1577: `-------------------------------------*/
        !          1578: yyacceptlab:
        !          1579:   yyresult = 0;
        !          1580:   goto yyreturn;
        !          1581:
        !          1582: /*-----------------------------------.
        !          1583: | yyabortlab -- YYABORT comes here.  |
        !          1584: `-----------------------------------*/
        !          1585: yyabortlab:
        !          1586:   yyresult = 1;
        !          1587:   goto yyreturn;
        !          1588:
        !          1589: /*---------------------------------------------.
        !          1590: | yyoverflowab -- parser overflow comes here.  |
        !          1591: `---------------------------------------------*/
        !          1592: yyoverflowlab:
        !          1593:   yyerror ("parser stack overflow");
        !          1594:   yyresult = 2;
        !          1595:   /* Fall through.  */
        !          1596:
        !          1597: yyreturn:
        !          1598: #ifndef yyoverflow
        !          1599:   if (yyss != yyssa)
        !          1600:     YYSTACK_FREE (yyss);
        !          1601: #endif
        !          1602:   return yyresult;
        !          1603: }
        !          1604: #line 265 "calc.y"
        !          1605:
        !          1606:
        !          1607: yyerror (char *s)
        !          1608: {
        !          1609:   fprintf (stderr, "%s\n", s);
        !          1610: }
        !          1611:
        !          1612: int calc_option_readline = -1;
        !          1613:
        !          1614: int
        !          1615: main (int argc, char *argv[])
        !          1616: {
        !          1617:   int  i;
        !          1618:
        !          1619:   for (i = 1; i < argc; i++)
        !          1620:     {
        !          1621:       if (strcmp (argv[i], "--readline") == 0)
        !          1622:         calc_option_readline = 1;
        !          1623:       else if (strcmp (argv[i], "--noreadline") == 0)
        !          1624:         calc_option_readline = 0;
        !          1625:       else if (strcmp (argv[i], "--help") == 0)
        !          1626:         {
        !          1627:           printf ("Usage: calc [--option]...\n");
        !          1628:           printf ("  --readline    use readline\n");
        !          1629:           printf ("  --noreadline  don't use readline\n");
        !          1630:           printf ("  --help        this message\n");
        !          1631:           printf ("Readline is only available when compiled in,\n");
        !          1632:           printf ("and in that case it's the default on a tty.\n");
        !          1633:           exit (0);
        !          1634:         }
        !          1635:       else
        !          1636:         {
        !          1637:           fprintf (stderr, "Unrecognised option: %s\n", argv[i]);
        !          1638:           exit (1);
        !          1639:         }
        !          1640:     }
        !          1641:
        !          1642: #if WITH_READLINE
        !          1643:   calc_init_readline ();
        !          1644: #else
        !          1645:   if (calc_option_readline == 1)
        !          1646:     {
        !          1647:       fprintf (stderr, "Readline support not available\n");
        !          1648:       exit (1);
        !          1649:     }
        !          1650: #endif
        !          1651:
        !          1652:   for (i = 0; i < numberof (variable); i++)
        !          1653:     mpz_init (variable[i]);
        !          1654:
        !          1655:   for (i = 0; i < numberof (stack); i++)
        !          1656:     mpz_init (stack[i]);
        !          1657:
        !          1658:   return yyparse ();
        !          1659: }

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