Home | History | Annotate | Line # | Download | only in calc
calc.c revision 1.1.1.4
      1  1.1.1.4  mrg /* original parser id follows */
      2  1.1.1.4  mrg /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
      3  1.1.1.4  mrg /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
      4  1.1.1.4  mrg 
      5  1.1.1.4  mrg #define YYBYACC 1
      6  1.1.1.4  mrg #define YYMAJOR 1
      7  1.1.1.4  mrg #define YYMINOR 9
      8  1.1.1.4  mrg #define YYPATCH 20170201
      9  1.1.1.4  mrg 
     10  1.1.1.4  mrg #define YYEMPTY        (-1)
     11  1.1.1.4  mrg #define yyclearin      (yychar = YYEMPTY)
     12  1.1.1.4  mrg #define yyerrok        (yyerrflag = 0)
     13  1.1.1.4  mrg #define YYRECOVERING() (yyerrflag != 0)
     14  1.1.1.4  mrg #define YYENOMEM       (-2)
     15  1.1.1.4  mrg #define YYEOF          0
     16  1.1.1.4  mrg #define YYPREFIX "yy"
     17      1.1  mrg 
     18      1.1  mrg #define YYPURE 0
     19      1.1  mrg 
     20  1.1.1.4  mrg #line 2 "../../../gmp/demos/calc/calc.y"
     21      1.1  mrg /* A simple integer desk calculator using yacc and gmp.
     22      1.1  mrg 
     23  1.1.1.3  mrg Copyright 2000-2002 Free Software Foundation, Inc.
     24      1.1  mrg 
     25      1.1  mrg This file is part of the GNU MP Library.
     26      1.1  mrg 
     27      1.1  mrg This program is free software; you can redistribute it and/or modify it under
     28      1.1  mrg the terms of the GNU General Public License as published by the Free Software
     29      1.1  mrg Foundation; either version 3 of the License, or (at your option) any later
     30      1.1  mrg version.
     31      1.1  mrg 
     32      1.1  mrg This program is distributed in the hope that it will be useful, but WITHOUT ANY
     33      1.1  mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
     34      1.1  mrg PARTICULAR PURPOSE.  See the GNU General Public License for more details.
     35      1.1  mrg 
     36      1.1  mrg You should have received a copy of the GNU General Public License along with
     37  1.1.1.3  mrg this program.  If not, see https://www.gnu.org/licenses/.  */
     38      1.1  mrg 
     39      1.1  mrg 
     40      1.1  mrg /* This is a simple program, meant only to show one way to use GMP for this
     41      1.1  mrg    sort of thing.  There's few features, and error checking is minimal.
     42      1.1  mrg    Standard input is read, calc_help() below shows the inputs accepted.
     43      1.1  mrg 
     44      1.1  mrg    Expressions are evaluated as they're read.  If user defined functions
     45      1.1  mrg    were wanted it'd be necessary to build a parse tree like pexpr.c does, or
     46      1.1  mrg    a list of operations for a stack based evaluator.  That would also make
     47      1.1  mrg    it possible to detect and optimize evaluations "mod m" like pexpr.c does.
     48      1.1  mrg 
     49      1.1  mrg    A stack is used for intermediate values in the expression evaluation,
     50      1.1  mrg    separate from the yacc parser stack.  This is simple, makes error
     51      1.1  mrg    recovery easy, minimizes the junk around mpz calls in the rules, and
     52      1.1  mrg    saves initializing or clearing "mpz_t"s during a calculation.  A
     53      1.1  mrg    disadvantage though is that variables must be copied to the stack to be
     54      1.1  mrg    worked on.  A more sophisticated calculator or language system might be
     55      1.1  mrg    able to avoid that when executing a compiled or semi-compiled form.
     56      1.1  mrg 
     57      1.1  mrg    Avoiding repeated initializing and clearing of "mpz_t"s is important.  In
     58      1.1  mrg    this program the time spent parsing is obviously much greater than any
     59      1.1  mrg    possible saving from this, but a proper calculator or language should
     60      1.1  mrg    take some trouble over it.  Don't be surprised if an init/clear takes 3
     61      1.1  mrg    or more times as long as a 10 limb addition, depending on the system (see
     62      1.1  mrg    the mpz_init_realloc_clear example in tune/README).  */
     63      1.1  mrg 
     64      1.1  mrg 
     65      1.1  mrg #include <stdio.h>
     66      1.1  mrg #include <stdlib.h>
     67      1.1  mrg #include <string.h>
     68      1.1  mrg #include "gmp.h"
     69      1.1  mrg #define NO_CALC_H /* because it conflicts with normal calc.c stuff */
     70      1.1  mrg #include "calc-common.h"
     71      1.1  mrg 
     72      1.1  mrg 
     73      1.1  mrg #define numberof(x)  (sizeof (x) / sizeof ((x)[0]))
     74      1.1  mrg 
     75      1.1  mrg 
     76      1.1  mrg void
     77      1.1  mrg calc_help (void)
     78      1.1  mrg {
     79      1.1  mrg   printf ("Examples:\n");
     80      1.1  mrg   printf ("    2+3*4        expressions are evaluated\n");
     81      1.1  mrg   printf ("    x=5^6        variables a to z can be set and used\n");
     82      1.1  mrg   printf ("Operators:\n");
     83      1.1  mrg   printf ("    + - *        arithmetic\n");
     84      1.1  mrg   printf ("    / %%          division and remainder (rounding towards negative infinity)\n");
     85      1.1  mrg   printf ("    ^            exponentiation\n");
     86      1.1  mrg   printf ("    !            factorial\n");
     87      1.1  mrg   printf ("    << >>        left and right shifts\n");
     88      1.1  mrg   printf ("    <= >= >      \\ comparisons, giving 1 if true, 0 if false\n");
     89      1.1  mrg   printf ("    == != <      /\n");
     90      1.1  mrg   printf ("    && ||        logical and/or, giving 1 if true, 0 if false\n");
     91      1.1  mrg   printf ("Functions:\n");
     92      1.1  mrg   printf ("    abs(n)       absolute value\n");
     93      1.1  mrg   printf ("    bin(n,m)     binomial coefficient\n");
     94      1.1  mrg   printf ("    fib(n)       fibonacci number\n");
     95      1.1  mrg   printf ("    gcd(a,b,..)  greatest common divisor\n");
     96      1.1  mrg   printf ("    kron(a,b)    kronecker symbol\n");
     97      1.1  mrg   printf ("    lcm(a,b,..)  least common multiple\n");
     98      1.1  mrg   printf ("    lucnum(n)    lucas number\n");
     99      1.1  mrg   printf ("    nextprime(n) next prime after n\n");
    100      1.1  mrg   printf ("    powm(b,e,m)  modulo powering, b^e%%m\n");
    101      1.1  mrg   printf ("    root(n,r)    r-th root\n");
    102      1.1  mrg   printf ("    sqrt(n)      square root\n");
    103      1.1  mrg   printf ("Other:\n");
    104      1.1  mrg   printf ("    hex          \\ set hex or decimal for input and output\n");
    105      1.1  mrg   printf ("    decimal      /   (\"0x\" can be used for hex too)\n");
    106      1.1  mrg   printf ("    quit         exit program (EOF works too)\n");
    107      1.1  mrg   printf ("    ;            statements are separated with a ; or newline\n");
    108      1.1  mrg   printf ("    \\            continue expressions with \\ before newline\n");
    109      1.1  mrg   printf ("    # xxx        comments are # though to newline\n");
    110      1.1  mrg   printf ("Hex numbers must be entered in upper case, to distinguish them from the\n");
    111      1.1  mrg   printf ("variables a to f (like in bc).\n");
    112      1.1  mrg }
    113      1.1  mrg 
    114      1.1  mrg 
    115      1.1  mrg int  ibase = 0;
    116      1.1  mrg int  obase = 10;
    117      1.1  mrg 
    118      1.1  mrg 
    119      1.1  mrg /* The stack is a fixed size, which means there's a limit on the nesting
    120      1.1  mrg    allowed in expressions.  A more sophisticated program could let it grow
    121      1.1  mrg    dynamically.  */
    122      1.1  mrg 
    123      1.1  mrg mpz_t    stack[100];
    124      1.1  mrg mpz_ptr  sp = stack[0];
    125      1.1  mrg 
    126      1.1  mrg #define CHECK_OVERFLOW()                                                  \
    127      1.1  mrg   if (sp >= stack[numberof(stack)])	/* FIXME */			\
    128      1.1  mrg     {                                                                     \
    129      1.1  mrg       fprintf (stderr,                                                    \
    130      1.1  mrg                "Value stack overflow, too much nesting in expression\n"); \
    131      1.1  mrg       YYERROR;                                                            \
    132      1.1  mrg     }
    133      1.1  mrg 
    134      1.1  mrg #define CHECK_EMPTY()                                                   \
    135      1.1  mrg   if (sp != stack[0])                                                   \
    136      1.1  mrg     {                                                                   \
    137      1.1  mrg       fprintf (stderr, "Oops, expected the value stack to be empty\n"); \
    138      1.1  mrg       sp = stack[0];                                                    \
    139      1.1  mrg     }
    140      1.1  mrg 
    141      1.1  mrg 
    142      1.1  mrg mpz_t  variable[26];
    143      1.1  mrg 
    144      1.1  mrg #define CHECK_VARIABLE(var)                                             \
    145      1.1  mrg   if ((var) < 0 || (var) >= numberof (variable))                        \
    146      1.1  mrg     {                                                                   \
    147      1.1  mrg       fprintf (stderr, "Oops, bad variable somehow: %d\n", var);        \
    148      1.1  mrg       YYERROR;                                                          \
    149      1.1  mrg     }
    150      1.1  mrg 
    151      1.1  mrg 
    152      1.1  mrg #define CHECK_UI(name,z)                        \
    153      1.1  mrg   if (! mpz_fits_ulong_p (z))                   \
    154      1.1  mrg     {                                           \
    155      1.1  mrg       fprintf (stderr, "%s too big\n", name);   \
    156      1.1  mrg       YYERROR;                                  \
    157      1.1  mrg     }
    158      1.1  mrg 
    159  1.1.1.4  mrg #ifdef YYSTYPE
    160  1.1.1.4  mrg #undef  YYSTYPE_IS_DECLARED
    161  1.1.1.4  mrg #define YYSTYPE_IS_DECLARED 1
    162      1.1  mrg #endif
    163  1.1.1.4  mrg #ifndef YYSTYPE_IS_DECLARED
    164  1.1.1.4  mrg #define YYSTYPE_IS_DECLARED 1
    165  1.1.1.3  mrg #line 142 "../../../gmp/demos/calc/calc.y"
    166  1.1.1.4  mrg typedef union {
    167      1.1  mrg   char  *str;
    168      1.1  mrg   int   var;
    169      1.1  mrg } YYSTYPE;
    170  1.1.1.4  mrg #endif /* !YYSTYPE_IS_DECLARED */
    171  1.1.1.4  mrg #line 172 "calc.c"
    172      1.1  mrg 
    173  1.1.1.4  mrg /* compatibility with bison */
    174  1.1.1.2  mrg #ifdef YYPARSE_PARAM
    175  1.1.1.4  mrg /* compatibility with FreeBSD */
    176  1.1.1.4  mrg # ifdef YYPARSE_PARAM_TYPE
    177  1.1.1.4  mrg #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
    178      1.1  mrg # else
    179  1.1.1.4  mrg #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
    180      1.1  mrg # endif
    181      1.1  mrg #else
    182  1.1.1.4  mrg # define YYPARSE_DECL() yyparse(void)
    183      1.1  mrg #endif
    184      1.1  mrg 
    185  1.1.1.4  mrg /* Parameters sent to lex. */
    186  1.1.1.4  mrg #ifdef YYLEX_PARAM
    187  1.1.1.4  mrg # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
    188  1.1.1.4  mrg # define YYLEX yylex(YYLEX_PARAM)
    189      1.1  mrg #else
    190  1.1.1.4  mrg # define YYLEX_DECL() yylex(void)
    191  1.1.1.4  mrg # define YYLEX yylex()
    192      1.1  mrg #endif
    193      1.1  mrg 
    194  1.1.1.4  mrg /* Parameters sent to yyerror. */
    195  1.1.1.4  mrg #ifndef YYERROR_DECL
    196  1.1.1.4  mrg #define YYERROR_DECL() yyerror(const char *s)
    197  1.1.1.4  mrg #endif
    198  1.1.1.4  mrg #ifndef YYERROR_CALL
    199  1.1.1.4  mrg #define YYERROR_CALL(msg) yyerror(msg)
    200  1.1.1.4  mrg #endif
    201  1.1.1.4  mrg 
    202  1.1.1.4  mrg extern int YYPARSE_DECL();
    203  1.1.1.4  mrg 
    204  1.1.1.4  mrg #define EOS 257
    205  1.1.1.4  mrg #define BAD 258
    206  1.1.1.4  mrg #define HELP 259
    207  1.1.1.4  mrg #define HEX 260
    208  1.1.1.4  mrg #define DECIMAL 261
    209  1.1.1.4  mrg #define QUIT 262
    210  1.1.1.4  mrg #define ABS 263
    211  1.1.1.4  mrg #define BIN 264
    212  1.1.1.4  mrg #define FIB 265
    213  1.1.1.4  mrg #define GCD 266
    214  1.1.1.4  mrg #define KRON 267
    215  1.1.1.4  mrg #define LCM 268
    216  1.1.1.4  mrg #define LUCNUM 269
    217  1.1.1.4  mrg #define NEXTPRIME 270
    218  1.1.1.4  mrg #define POWM 271
    219  1.1.1.4  mrg #define ROOT 272
    220  1.1.1.4  mrg #define SQRT 273
    221  1.1.1.4  mrg #define NUMBER 274
    222  1.1.1.4  mrg #define VARIABLE 275
    223  1.1.1.4  mrg #define LOR 276
    224  1.1.1.4  mrg #define LAND 277
    225  1.1.1.4  mrg #define EQ 278
    226  1.1.1.4  mrg #define NE 279
    227  1.1.1.4  mrg #define LE 280
    228  1.1.1.4  mrg #define GE 281
    229  1.1.1.4  mrg #define LSHIFT 282
    230  1.1.1.4  mrg #define RSHIFT 283
    231  1.1.1.4  mrg #define UMINUS 284
    232  1.1.1.4  mrg #define YYERRCODE 256
    233  1.1.1.4  mrg typedef int YYINT;
    234  1.1.1.4  mrg static const YYINT yylhs[] = {                           -1,
    235  1.1.1.4  mrg     0,    0,    2,    2,    2,    1,    1,    1,    1,    1,
    236  1.1.1.4  mrg     1,    1,    3,    3,    3,    3,    3,    3,    3,    3,
    237  1.1.1.4  mrg     3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
    238  1.1.1.4  mrg     3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
    239  1.1.1.4  mrg     3,    3,    3,    3,    4,    4,    5,    5,
    240      1.1  mrg };
    241  1.1.1.4  mrg static const YYINT yylen[] = {                            2,
    242  1.1.1.4  mrg     1,    2,    2,    3,    2,    0,    1,    3,    1,    1,
    243  1.1.1.4  mrg     1,    1,    3,    3,    3,    3,    3,    3,    3,    3,
    244  1.1.1.4  mrg     3,    2,    2,    3,    3,    3,    3,    3,    3,    3,
    245  1.1.1.4  mrg     3,    4,    6,    4,    4,    6,    4,    4,    4,    8,
    246  1.1.1.4  mrg     6,    4,    1,    1,    1,    3,    1,    3,
    247      1.1  mrg };
    248  1.1.1.4  mrg static const YYINT yydefred[] = {                         0,
    249  1.1.1.4  mrg     0,    9,   10,   11,   12,    0,    0,    0,    0,    0,
    250  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,   44,    0,    0,    0,
    251  1.1.1.4  mrg     0,    0,    0,    0,    5,    0,    0,    0,    0,    0,
    252  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,   43,    0,    0,
    253  1.1.1.4  mrg     3,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    254  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,   22,    0,
    255  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    256  1.1.1.4  mrg     0,    0,    0,   13,    4,    0,    0,    0,    0,    0,
    257  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    258  1.1.1.4  mrg     0,   32,    0,   34,   35,    0,    0,   37,    0,   38,
    259  1.1.1.4  mrg    39,    0,    0,   42,    0,    0,    0,    0,    0,    0,
    260  1.1.1.4  mrg    33,   36,    0,   41,    0,   40,
    261      1.1  mrg };
    262  1.1.1.4  mrg static const YYINT yydgoto[] = {                         21,
    263  1.1.1.4  mrg    22,   23,   24,   64,   67,
    264      1.1  mrg };
    265  1.1.1.4  mrg static const YYINT yysindex[] = {                       742,
    266  1.1.1.4  mrg  -257,    0,    0,    0,    0,  -22,  -20,  -17,   -5,    5,
    267  1.1.1.4  mrg    18,   20,   22,   25,   28,   29,    0,  -54,  808,  808,
    268  1.1.1.4  mrg     0, -244,  786,  667,    0,  808,  808,  808,  808,  808,
    269  1.1.1.4  mrg   808,  808,  808,  808,  808,  808,  808,    0,  -27,  203,
    270  1.1.1.4  mrg     0, -217,  808,  808,  808,  808,  808,  808,  808,  808,
    271  1.1.1.4  mrg   808,  808,  808,  808,  808,  808,  808,  808,    0,  454,
    272  1.1.1.4  mrg   465,  487,  667,  -33,  498,  667,  -16,  520,  531,  542,
    273  1.1.1.4  mrg   564,  586,  667,    0,    0,  678,  929,  -28,  -28,  -28,
    274  1.1.1.4  mrg   -28,  -28,  -28,  -21,  -21,   -6,   -6,  -27,  -27,  -27,
    275  1.1.1.4  mrg   -27,    0,  808,    0,    0,  808,  808,    0,  808,    0,
    276  1.1.1.4  mrg     0,  808,  808,    0,  597,  667,  608,  667,  619,  645,
    277  1.1.1.4  mrg     0,    0,  808,    0,  656,    0,
    278      1.1  mrg };
    279  1.1.1.4  mrg static const YYINT yyrindex[] = {                         2,
    280  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    281  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    1,    0,    0,
    282  1.1.1.4  mrg     0,   50,    2,    3,    0,    0,    0,    0,    0,    0,
    283  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,   10,    0,
    284  1.1.1.4  mrg     0,   71,    0,    0,    0,    0,    0,    0,    0,    0,
    285  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    286  1.1.1.4  mrg     0,    0,  -12,    0,    0,  -11,    0,    0,    0,    0,
    287  1.1.1.4  mrg     0,    0,    4,    0,    0,  193,   64,  166,  178,  182,
    288  1.1.1.4  mrg   187,  189,  191,  139,  151,  112,  124,   37,   49,   76,
    289  1.1.1.4  mrg    85,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    290  1.1.1.4  mrg     0,    0,    0,    0,    0,   -2,    0,   15,    0,    0,
    291  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,
    292      1.1  mrg };
    293  1.1.1.4  mrg static const YYINT yygindex[] = {                         0,
    294  1.1.1.4  mrg    52,    0, 1065,    0,    0,
    295      1.1  mrg };
    296  1.1.1.4  mrg #define YYTABLESIZE 1212
    297  1.1.1.4  mrg static const YYINT yytable[] = {                         25,
    298  1.1.1.4  mrg    43,    6,    7,    8,   59,   59,   37,   95,   57,   23,
    299  1.1.1.4  mrg    96,   59,   41,   55,   53,   57,   54,   26,   56,   27,
    300  1.1.1.4  mrg    55,   53,   28,   54,   98,   56,   59,   99,   45,   47,
    301  1.1.1.4  mrg    57,   45,   47,   43,   29,   55,   16,   43,   46,   75,
    302  1.1.1.4  mrg    56,   46,   43,   43,   30,   43,   23,   43,   17,    1,
    303  1.1.1.4  mrg    23,   23,   23,   23,   23,   48,   23,   31,   48,   32,
    304  1.1.1.4  mrg    43,   33,   43,   30,   34,   58,   58,   35,   36,   23,
    305  1.1.1.4  mrg     2,   23,   58,   16,   42,   18,    0,   16,   16,   16,
    306  1.1.1.4  mrg    16,   16,    0,   16,   19,   17,    0,   58,    0,   17,
    307  1.1.1.4  mrg    17,   17,   17,   17,   43,   17,   16,    0,   16,    0,
    308  1.1.1.4  mrg     0,    0,    0,    0,   30,    0,    0,   30,   17,    0,
    309  1.1.1.4  mrg    17,   14,   18,    0,    0,    0,   18,   18,   18,   18,
    310  1.1.1.4  mrg    18,   19,   18,   15,    0,   19,   19,   19,   19,   19,
    311  1.1.1.4  mrg     0,   19,    0,    0,    0,   18,    0,   18,   20,    0,
    312  1.1.1.4  mrg     0,    0,    0,    0,   19,    0,   19,    0,    0,    0,
    313  1.1.1.4  mrg    21,    0,   14,    0,   14,   14,   14,    0,    0,    0,
    314  1.1.1.4  mrg     0,    0,    0,    0,   15,   24,   15,   15,   15,    0,
    315  1.1.1.4  mrg     0,   14,    0,   14,    0,    0,    0,   29,    0,   20,
    316  1.1.1.4  mrg     0,   26,   20,   15,    0,   15,   27,    0,   25,    0,
    317  1.1.1.4  mrg    28,   21,   31,    0,   21,    0,    0,    0,   20,    0,
    318  1.1.1.4  mrg    20,    0,    0,    0,    0,    0,   24,    0,    0,   24,
    319  1.1.1.4  mrg    21,    0,   21,    0,    0,    0,    0,    0,   29,    0,
    320  1.1.1.4  mrg     0,   29,   26,    0,    0,   26,    0,   27,    0,   25,
    321  1.1.1.4  mrg    27,   28,   25,   31,   28,   59,   31,    0,    0,   57,
    322  1.1.1.4  mrg     0,    0,    0,   74,   55,   53,    0,   54,    0,   56,
    323  1.1.1.4  mrg     0,    0,    0,   51,   52,    0,    0,   43,    6,    7,
    324  1.1.1.4  mrg     8,    0,   45,    0,   46,    0,   23,    0,    0,    0,
    325  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,   43,   43,   43,   43,
    326  1.1.1.4  mrg    43,   43,   43,   43,    0,   23,   23,   23,   23,   23,
    327  1.1.1.4  mrg    23,   23,   23,   16,    0,    0,   58,    0,    0,    0,
    328  1.1.1.4  mrg     0,    0,    0,    0,    0,   17,    0,    0,    0,    0,
    329  1.1.1.4  mrg     0,    0,   16,   16,   16,   16,   16,   16,   16,   16,
    330  1.1.1.4  mrg    30,    0,    0,    0,   17,   17,   17,   17,   17,   17,
    331  1.1.1.4  mrg    17,   17,   18,    0,    0,    0,    0,    0,    0,   30,
    332  1.1.1.4  mrg    30,   19,    0,    0,    0,    0,    0,    0,    0,    0,
    333  1.1.1.4  mrg     0,   18,   18,   18,   18,   18,   18,   18,   18,    0,
    334  1.1.1.4  mrg    19,   19,   19,   19,   19,   19,   19,   19,   14,    0,
    335  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    336  1.1.1.4  mrg    15,    0,    0,    0,    0,    0,    0,   14,   14,   14,
    337  1.1.1.4  mrg    14,   14,   14,   14,   14,   20,    0,    0,    0,   15,
    338  1.1.1.4  mrg    15,   15,   15,   15,   15,   15,   15,   21,    0,    0,
    339  1.1.1.4  mrg     0,    0,    0,    0,   20,   20,   20,   20,   20,   20,
    340  1.1.1.4  mrg    20,   20,   24,    0,    0,    0,   21,   21,   21,   21,
    341  1.1.1.4  mrg    21,   21,   21,   21,   29,    0,    0,    0,   26,    0,
    342  1.1.1.4  mrg     0,   24,   24,   27,    0,   25,    0,   28,    0,   31,
    343  1.1.1.4  mrg     0,    0,    0,   29,   29,    0,    0,   26,   26,    0,
    344  1.1.1.4  mrg     0,    0,   27,   27,   25,   25,   28,   28,   31,    0,
    345  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,   43,   44,
    346  1.1.1.4  mrg    47,   48,   49,   50,   51,   52,   59,    0,    0,    0,
    347  1.1.1.4  mrg    57,    0,    0,    0,   92,   55,   53,   59,   54,    0,
    348  1.1.1.4  mrg    56,   57,    0,    0,    0,    0,   55,   53,   93,   54,
    349  1.1.1.4  mrg     0,   56,    0,   45,    0,   46,    0,    0,    0,   59,
    350  1.1.1.4  mrg     0,    0,    0,   57,   45,    0,   46,   94,   55,   53,
    351  1.1.1.4  mrg    59,   54,    0,   56,   57,    0,    0,    0,    0,   55,
    352  1.1.1.4  mrg    53,   97,   54,    0,   56,    0,   45,   58,   46,    0,
    353  1.1.1.4  mrg     0,    0,   59,    0,    0,    0,   57,   45,   58,   46,
    354  1.1.1.4  mrg   100,   55,   53,   59,   54,    0,   56,   57,    0,    0,
    355  1.1.1.4  mrg     0,  101,   55,   53,   59,   54,    0,   56,   57,   45,
    356  1.1.1.4  mrg    58,   46,    0,   55,   53,  102,   54,    0,   56,    0,
    357  1.1.1.4  mrg    45,   58,   46,    0,    0,    0,   59,    0,    0,    0,
    358  1.1.1.4  mrg    57,   45,    0,   46,    0,   55,   53,  103,   54,    0,
    359  1.1.1.4  mrg    56,    0,    0,   58,    0,    0,    0,    0,   59,    0,
    360  1.1.1.4  mrg     0,    0,   57,   45,   58,   46,  104,   55,   53,   59,
    361  1.1.1.4  mrg    54,    0,   56,   57,    0,   58,    0,  111,   55,   53,
    362  1.1.1.4  mrg    59,   54,    0,   56,   57,   45,    0,   46,  112,   55,
    363  1.1.1.4  mrg    53,   59,   54,    0,   56,   57,   45,   58,   46,    0,
    364  1.1.1.4  mrg    55,   53,  113,   54,    0,   56,    0,   45,    0,   46,
    365  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,   59,   45,   58,
    366  1.1.1.4  mrg    46,   57,    0,    0,    0,  114,   55,   53,   59,   54,
    367  1.1.1.4  mrg    58,   56,   57,    0,    0,    0,  116,   55,   53,   59,
    368  1.1.1.4  mrg    54,   58,   56,   57,   45,    0,   46,    0,   55,   53,
    369  1.1.1.4  mrg    59,   54,   58,   56,   57,   45,    0,   46,    0,   55,
    370  1.1.1.4  mrg    53,    0,   54,    0,   56,    0,   45,    0,   46,   43,
    371  1.1.1.4  mrg    44,   47,   48,   49,   50,   51,   52,   45,   58,   46,
    372  1.1.1.4  mrg    43,   44,   47,   48,   49,   50,   51,   52,    0,   58,
    373  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    374  1.1.1.4  mrg    58,    0,   43,   44,   47,   48,   49,   50,   51,   52,
    375  1.1.1.4  mrg     0,   58,    0,   43,   44,   47,   48,   49,   50,   51,
    376  1.1.1.4  mrg    52,   20,    0,    0,    0,    0,   19,    0,    0,    0,
    377  1.1.1.4  mrg     0,    0,    0,    0,    0,   43,   44,   47,   48,   49,
    378  1.1.1.4  mrg    50,   51,   52,    0,    0,    0,   43,   44,   47,   48,
    379  1.1.1.4  mrg    49,   50,   51,   52,    0,    0,    0,   43,   44,   47,
    380  1.1.1.4  mrg    48,   49,   50,   51,   52,   20,    0,    0,    0,    0,
    381  1.1.1.4  mrg    19,    0,    0,    0,    0,    0,    0,    0,    0,   43,
    382  1.1.1.4  mrg    44,   47,   48,   49,   50,   51,   52,   20,    0,    0,
    383  1.1.1.4  mrg     0,    0,   19,    0,    0,    0,    0,    0,    0,    0,
    384  1.1.1.4  mrg     0,   43,   44,   47,   48,   49,   50,   51,   52,    0,
    385  1.1.1.4  mrg     0,    0,   43,   44,   47,   48,   49,   50,   51,   52,
    386  1.1.1.4  mrg     0,    0,    0,   43,   44,   47,   48,   49,   50,   51,
    387  1.1.1.4  mrg    52,    0,    0,    0,   43,   44,   47,   48,   49,   50,
    388  1.1.1.4  mrg    51,   52,    0,    0,    0,    0,    0,    0,    0,    0,
    389  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    390  1.1.1.4  mrg    43,   44,   47,   48,   49,   50,   51,   52,    0,    0,
    391  1.1.1.4  mrg     0,   43,   44,   47,   48,   49,   50,   51,   52,    0,
    392  1.1.1.4  mrg     0,    0,   43,   44,   47,   48,   49,   50,   51,   52,
    393  1.1.1.4  mrg     0,    0,    0,    0,   44,   47,   48,   49,   50,   51,
    394  1.1.1.4  mrg    52,   59,    0,    0,    0,   57,    0,    0,    0,    0,
    395  1.1.1.4  mrg    55,   53,    0,   54,    0,   56,    0,    0,    0,    0,
    396  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,   45,    0,
    397  1.1.1.4  mrg    46,    0,    0,    0,    0,    0,    0,    1,    0,    0,
    398  1.1.1.4  mrg     2,    3,    4,    5,    6,    7,    8,    9,   10,   11,
    399  1.1.1.4  mrg    12,   13,   14,   15,   16,   17,   18,    0,    0,    0,
    400  1.1.1.4  mrg     0,    0,   58,    0,    0,    0,    0,    0,    0,    0,
    401  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    402  1.1.1.4  mrg     0,    0,    0,    0,    2,    3,    4,    5,    6,    7,
    403  1.1.1.4  mrg     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
    404  1.1.1.4  mrg    18,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    405  1.1.1.4  mrg     6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
    406  1.1.1.4  mrg    16,   17,   38,   39,   40,    0,    0,    0,    0,    0,
    407  1.1.1.4  mrg    60,   61,   62,   63,   65,   66,   68,   69,   70,   71,
    408  1.1.1.4  mrg    72,   73,    0,    0,    0,    0,    0,   76,   77,   78,
    409  1.1.1.4  mrg    79,   80,   81,   82,   83,   84,   85,   86,   87,   88,
    410  1.1.1.4  mrg    89,   90,   91,    0,    0,    0,    0,    0,    0,    0,
    411  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    412  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    413  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,  105,    0,    0,
    414  1.1.1.4  mrg   106,  107,    0,  108,    0,    0,  109,  110,    0,    0,
    415  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,  115,    0,    0,
    416  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    417  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    418  1.1.1.4  mrg     0,    0,    0,    0,    0,    0,   47,   48,   49,   50,
    419  1.1.1.4  mrg    51,   52,
    420      1.1  mrg };
    421  1.1.1.4  mrg static const YYINT yycheck[] = {                        257,
    422  1.1.1.4  mrg     0,    0,    0,    0,   33,   33,   61,   41,   37,    0,
    423  1.1.1.4  mrg    44,   33,  257,   42,   43,   37,   45,   40,   47,   40,
    424  1.1.1.4  mrg    42,   43,   40,   45,   41,   47,   33,   44,   41,   41,
    425  1.1.1.4  mrg    37,   44,   44,   33,   40,   42,    0,   37,   41,  257,
    426  1.1.1.4  mrg    47,   44,   42,   43,   40,   45,   37,   47,    0,    0,
    427  1.1.1.4  mrg    41,   42,   43,   44,   45,   41,   47,   40,   44,   40,
    428  1.1.1.4  mrg    60,   40,   62,    0,   40,   94,   94,   40,   40,   60,
    429  1.1.1.4  mrg     0,   62,   94,   37,   23,    0,   -1,   41,   42,   43,
    430  1.1.1.4  mrg    44,   45,   -1,   47,    0,   37,   -1,   94,   -1,   41,
    431  1.1.1.4  mrg    42,   43,   44,   45,   94,   47,   60,   -1,   62,   -1,
    432  1.1.1.4  mrg    -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   60,   -1,
    433  1.1.1.4  mrg    62,    0,   37,   -1,   -1,   -1,   41,   42,   43,   44,
    434  1.1.1.4  mrg    45,   37,   47,    0,   -1,   41,   42,   43,   44,   45,
    435  1.1.1.4  mrg    -1,   47,   -1,   -1,   -1,   60,   -1,   62,    0,   -1,
    436  1.1.1.4  mrg    -1,   -1,   -1,   -1,   60,   -1,   62,   -1,   -1,   -1,
    437  1.1.1.4  mrg     0,   -1,   41,   -1,   43,   44,   45,   -1,   -1,   -1,
    438  1.1.1.4  mrg    -1,   -1,   -1,   -1,   41,    0,   43,   44,   45,   -1,
    439  1.1.1.4  mrg    -1,   60,   -1,   62,   -1,   -1,   -1,    0,   -1,   41,
    440  1.1.1.4  mrg    -1,    0,   44,   60,   -1,   62,    0,   -1,    0,   -1,
    441  1.1.1.4  mrg     0,   41,    0,   -1,   44,   -1,   -1,   -1,   60,   -1,
    442  1.1.1.4  mrg    62,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,
    443  1.1.1.4  mrg    60,   -1,   62,   -1,   -1,   -1,   -1,   -1,   41,   -1,
    444  1.1.1.4  mrg    -1,   44,   41,   -1,   -1,   44,   -1,   41,   -1,   41,
    445  1.1.1.4  mrg    44,   41,   44,   41,   44,   33,   44,   -1,   -1,   37,
    446  1.1.1.4  mrg    -1,   -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,
    447  1.1.1.4  mrg    -1,   -1,   -1,  282,  283,   -1,   -1,  257,  257,  257,
    448  1.1.1.4  mrg   257,   -1,   60,   -1,   62,   -1,  257,   -1,   -1,   -1,
    449  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,  276,  277,  278,  279,
    450  1.1.1.4  mrg   280,  281,  282,  283,   -1,  276,  277,  278,  279,  280,
    451  1.1.1.4  mrg   281,  282,  283,  257,   -1,   -1,   94,   -1,   -1,   -1,
    452  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,  257,   -1,   -1,   -1,   -1,
    453  1.1.1.4  mrg    -1,   -1,  276,  277,  278,  279,  280,  281,  282,  283,
    454  1.1.1.4  mrg   257,   -1,   -1,   -1,  276,  277,  278,  279,  280,  281,
    455  1.1.1.4  mrg   282,  283,  257,   -1,   -1,   -1,   -1,   -1,   -1,  276,
    456  1.1.1.4  mrg   277,  257,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    457  1.1.1.4  mrg    -1,  276,  277,  278,  279,  280,  281,  282,  283,   -1,
    458  1.1.1.4  mrg   276,  277,  278,  279,  280,  281,  282,  283,  257,   -1,
    459  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    460  1.1.1.4  mrg   257,   -1,   -1,   -1,   -1,   -1,   -1,  276,  277,  278,
    461  1.1.1.4  mrg   279,  280,  281,  282,  283,  257,   -1,   -1,   -1,  276,
    462  1.1.1.4  mrg   277,  278,  279,  280,  281,  282,  283,  257,   -1,   -1,
    463  1.1.1.4  mrg    -1,   -1,   -1,   -1,  276,  277,  278,  279,  280,  281,
    464  1.1.1.4  mrg   282,  283,  257,   -1,   -1,   -1,  276,  277,  278,  279,
    465  1.1.1.4  mrg   280,  281,  282,  283,  257,   -1,   -1,   -1,  257,   -1,
    466  1.1.1.4  mrg    -1,  276,  277,  257,   -1,  257,   -1,  257,   -1,  257,
    467  1.1.1.4  mrg    -1,   -1,   -1,  276,  277,   -1,   -1,  276,  277,   -1,
    468  1.1.1.4  mrg    -1,   -1,  276,  277,  276,  277,  276,  277,  276,   -1,
    469  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,  277,
    470  1.1.1.4  mrg   278,  279,  280,  281,  282,  283,   33,   -1,   -1,   -1,
    471  1.1.1.4  mrg    37,   -1,   -1,   -1,   41,   42,   43,   33,   45,   -1,
    472  1.1.1.4  mrg    47,   37,   -1,   -1,   -1,   -1,   42,   43,   44,   45,
    473  1.1.1.4  mrg    -1,   47,   -1,   60,   -1,   62,   -1,   -1,   -1,   33,
    474  1.1.1.4  mrg    -1,   -1,   -1,   37,   60,   -1,   62,   41,   42,   43,
    475  1.1.1.4  mrg    33,   45,   -1,   47,   37,   -1,   -1,   -1,   -1,   42,
    476  1.1.1.4  mrg    43,   44,   45,   -1,   47,   -1,   60,   94,   62,   -1,
    477  1.1.1.4  mrg    -1,   -1,   33,   -1,   -1,   -1,   37,   60,   94,   62,
    478  1.1.1.4  mrg    41,   42,   43,   33,   45,   -1,   47,   37,   -1,   -1,
    479  1.1.1.4  mrg    -1,   41,   42,   43,   33,   45,   -1,   47,   37,   60,
    480  1.1.1.4  mrg    94,   62,   -1,   42,   43,   44,   45,   -1,   47,   -1,
    481  1.1.1.4  mrg    60,   94,   62,   -1,   -1,   -1,   33,   -1,   -1,   -1,
    482  1.1.1.4  mrg    37,   60,   -1,   62,   -1,   42,   43,   44,   45,   -1,
    483  1.1.1.4  mrg    47,   -1,   -1,   94,   -1,   -1,   -1,   -1,   33,   -1,
    484  1.1.1.4  mrg    -1,   -1,   37,   60,   94,   62,   41,   42,   43,   33,
    485  1.1.1.4  mrg    45,   -1,   47,   37,   -1,   94,   -1,   41,   42,   43,
    486  1.1.1.4  mrg    33,   45,   -1,   47,   37,   60,   -1,   62,   41,   42,
    487  1.1.1.4  mrg    43,   33,   45,   -1,   47,   37,   60,   94,   62,   -1,
    488  1.1.1.4  mrg    42,   43,   44,   45,   -1,   47,   -1,   60,   -1,   62,
    489  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,   60,   94,
    490  1.1.1.4  mrg    62,   37,   -1,   -1,   -1,   41,   42,   43,   33,   45,
    491  1.1.1.4  mrg    94,   47,   37,   -1,   -1,   -1,   41,   42,   43,   33,
    492  1.1.1.4  mrg    45,   94,   47,   37,   60,   -1,   62,   -1,   42,   43,
    493  1.1.1.4  mrg    33,   45,   94,   47,   37,   60,   -1,   62,   -1,   42,
    494  1.1.1.4  mrg    43,   -1,   45,   -1,   47,   -1,   60,   -1,   62,  276,
    495  1.1.1.4  mrg   277,  278,  279,  280,  281,  282,  283,   60,   94,   62,
    496  1.1.1.4  mrg   276,  277,  278,  279,  280,  281,  282,  283,   -1,   94,
    497  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    498  1.1.1.4  mrg    94,   -1,  276,  277,  278,  279,  280,  281,  282,  283,
    499  1.1.1.4  mrg    -1,   94,   -1,  276,  277,  278,  279,  280,  281,  282,
    500  1.1.1.4  mrg   283,   40,   -1,   -1,   -1,   -1,   45,   -1,   -1,   -1,
    501  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,  276,  277,  278,  279,  280,
    502  1.1.1.4  mrg   281,  282,  283,   -1,   -1,   -1,  276,  277,  278,  279,
    503  1.1.1.4  mrg   280,  281,  282,  283,   -1,   -1,   -1,  276,  277,  278,
    504  1.1.1.4  mrg   279,  280,  281,  282,  283,   40,   -1,   -1,   -1,   -1,
    505  1.1.1.4  mrg    45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  276,
    506  1.1.1.4  mrg   277,  278,  279,  280,  281,  282,  283,   40,   -1,   -1,
    507  1.1.1.4  mrg    -1,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    508  1.1.1.4  mrg    -1,  276,  277,  278,  279,  280,  281,  282,  283,   -1,
    509  1.1.1.4  mrg    -1,   -1,  276,  277,  278,  279,  280,  281,  282,  283,
    510  1.1.1.4  mrg    -1,   -1,   -1,  276,  277,  278,  279,  280,  281,  282,
    511  1.1.1.4  mrg   283,   -1,   -1,   -1,  276,  277,  278,  279,  280,  281,
    512  1.1.1.4  mrg   282,  283,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    513  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    514  1.1.1.4  mrg   276,  277,  278,  279,  280,  281,  282,  283,   -1,   -1,
    515  1.1.1.4  mrg    -1,  276,  277,  278,  279,  280,  281,  282,  283,   -1,
    516  1.1.1.4  mrg    -1,   -1,  276,  277,  278,  279,  280,  281,  282,  283,
    517  1.1.1.4  mrg    -1,   -1,   -1,   -1,  277,  278,  279,  280,  281,  282,
    518  1.1.1.4  mrg   283,   33,   -1,   -1,   -1,   37,   -1,   -1,   -1,   -1,
    519  1.1.1.4  mrg    42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,   -1,
    520  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   -1,
    521  1.1.1.4  mrg    62,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,
    522  1.1.1.4  mrg   259,  260,  261,  262,  263,  264,  265,  266,  267,  268,
    523  1.1.1.4  mrg   269,  270,  271,  272,  273,  274,  275,   -1,   -1,   -1,
    524  1.1.1.4  mrg    -1,   -1,   94,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    525  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    526  1.1.1.4  mrg    -1,   -1,   -1,   -1,  259,  260,  261,  262,  263,  264,
    527  1.1.1.4  mrg   265,  266,  267,  268,  269,  270,  271,  272,  273,  274,
    528  1.1.1.4  mrg   275,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    529  1.1.1.4  mrg   263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
    530  1.1.1.4  mrg   273,  274,  275,   19,   20,   -1,   -1,   -1,   -1,   -1,
    531  1.1.1.4  mrg    26,   27,   28,   29,   30,   31,   32,   33,   34,   35,
    532  1.1.1.4  mrg    36,   37,   -1,   -1,   -1,   -1,   -1,   43,   44,   45,
    533  1.1.1.4  mrg    46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
    534  1.1.1.4  mrg    56,   57,   58,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    535  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    536  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    537  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,
    538  1.1.1.4  mrg    96,   97,   -1,   99,   -1,   -1,  102,  103,   -1,   -1,
    539  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,  113,   -1,   -1,
    540  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    541  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    542  1.1.1.4  mrg    -1,   -1,   -1,   -1,   -1,   -1,  278,  279,  280,  281,
    543  1.1.1.4  mrg   282,  283,
    544      1.1  mrg };
    545  1.1.1.4  mrg #define YYFINAL 21
    546  1.1.1.4  mrg #ifndef YYDEBUG
    547  1.1.1.4  mrg #define YYDEBUG 0
    548  1.1.1.4  mrg #endif
    549  1.1.1.4  mrg #define YYMAXTOKEN 284
    550  1.1.1.4  mrg #define YYUNDFTOKEN 292
    551  1.1.1.4  mrg #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
    552  1.1.1.4  mrg #if YYDEBUG
    553  1.1.1.4  mrg static const char *const yyname[] = {
    554      1.1  mrg 
    555  1.1.1.4  mrg "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    556  1.1.1.4  mrg "'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,
    557  1.1.1.4  mrg 0,0,0,0,0,"'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    558  1.1.1.4  mrg 0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    559  1.1.1.4  mrg 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    560  1.1.1.4  mrg 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    561  1.1.1.4  mrg 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    562  1.1.1.4  mrg 0,0,0,0,0,0,0,0,0,0,"EOS","BAD","HELP","HEX","DECIMAL","QUIT","ABS","BIN","FIB",
    563  1.1.1.4  mrg "GCD","KRON","LCM","LUCNUM","NEXTPRIME","POWM","ROOT","SQRT","NUMBER",
    564  1.1.1.4  mrg "VARIABLE","LOR","LAND","EQ","NE","LE","GE","LSHIFT","RSHIFT","UMINUS",0,0,0,0,
    565  1.1.1.4  mrg 0,0,0,"illegal-symbol",
    566      1.1  mrg };
    567  1.1.1.4  mrg static const char *const yyrule[] = {
    568  1.1.1.4  mrg "$accept : top",
    569  1.1.1.4  mrg "top : statement",
    570  1.1.1.4  mrg "top : statements statement",
    571  1.1.1.4  mrg "statements : statement EOS",
    572  1.1.1.4  mrg "statements : statements statement EOS",
    573  1.1.1.4  mrg "statements : error EOS",
    574  1.1.1.4  mrg "statement :",
    575  1.1.1.4  mrg "statement : e",
    576  1.1.1.4  mrg "statement : VARIABLE '=' e",
    577  1.1.1.4  mrg "statement : HELP",
    578  1.1.1.4  mrg "statement : HEX",
    579  1.1.1.4  mrg "statement : DECIMAL",
    580  1.1.1.4  mrg "statement : QUIT",
    581  1.1.1.4  mrg "e : '(' e ')'",
    582  1.1.1.4  mrg "e : e '+' e",
    583  1.1.1.4  mrg "e : e '-' e",
    584  1.1.1.4  mrg "e : e '*' e",
    585  1.1.1.4  mrg "e : e '/' e",
    586  1.1.1.4  mrg "e : e '%' e",
    587  1.1.1.4  mrg "e : e '^' e",
    588  1.1.1.4  mrg "e : e LSHIFT e",
    589  1.1.1.4  mrg "e : e RSHIFT e",
    590  1.1.1.4  mrg "e : e '!'",
    591  1.1.1.4  mrg "e : '-' e",
    592  1.1.1.4  mrg "e : e '<' e",
    593  1.1.1.4  mrg "e : e LE e",
    594  1.1.1.4  mrg "e : e EQ e",
    595  1.1.1.4  mrg "e : e NE e",
    596  1.1.1.4  mrg "e : e GE e",
    597  1.1.1.4  mrg "e : e '>' e",
    598  1.1.1.4  mrg "e : e LAND e",
    599  1.1.1.4  mrg "e : e LOR e",
    600  1.1.1.4  mrg "e : ABS '(' e ')'",
    601  1.1.1.4  mrg "e : BIN '(' e ',' e ')'",
    602  1.1.1.4  mrg "e : FIB '(' e ')'",
    603  1.1.1.4  mrg "e : GCD '(' gcdlist ')'",
    604  1.1.1.4  mrg "e : KRON '(' e ',' e ')'",
    605  1.1.1.4  mrg "e : LCM '(' lcmlist ')'",
    606  1.1.1.4  mrg "e : LUCNUM '(' e ')'",
    607  1.1.1.4  mrg "e : NEXTPRIME '(' e ')'",
    608  1.1.1.4  mrg "e : POWM '(' e ',' e ',' e ')'",
    609  1.1.1.4  mrg "e : ROOT '(' e ',' e ')'",
    610  1.1.1.4  mrg "e : SQRT '(' e ')'",
    611  1.1.1.4  mrg "e : VARIABLE",
    612  1.1.1.4  mrg "e : NUMBER",
    613  1.1.1.4  mrg "gcdlist : e",
    614  1.1.1.4  mrg "gcdlist : gcdlist ',' e",
    615  1.1.1.4  mrg "lcmlist : e",
    616  1.1.1.4  mrg "lcmlist : lcmlist ',' e",
    617      1.1  mrg 
    618      1.1  mrg };
    619      1.1  mrg #endif
    620      1.1  mrg 
    621  1.1.1.4  mrg int      yydebug;
    622  1.1.1.4  mrg int      yynerrs;
    623      1.1  mrg 
    624  1.1.1.4  mrg int      yyerrflag;
    625  1.1.1.4  mrg int      yychar;
    626  1.1.1.4  mrg YYSTYPE  yyval;
    627  1.1.1.4  mrg YYSTYPE  yylval;
    628  1.1.1.4  mrg 
    629  1.1.1.4  mrg /* define the initial stack-sizes */
    630  1.1.1.4  mrg #ifdef YYSTACKSIZE
    631  1.1.1.4  mrg #undef YYMAXDEPTH
    632  1.1.1.4  mrg #define YYMAXDEPTH  YYSTACKSIZE
    633  1.1.1.4  mrg #else
    634  1.1.1.4  mrg #ifdef YYMAXDEPTH
    635  1.1.1.4  mrg #define YYSTACKSIZE YYMAXDEPTH
    636  1.1.1.4  mrg #else
    637  1.1.1.4  mrg #define YYSTACKSIZE 10000
    638  1.1.1.4  mrg #define YYMAXDEPTH  10000
    639  1.1.1.4  mrg #endif
    640      1.1  mrg #endif
    641      1.1  mrg 
    642  1.1.1.4  mrg #define YYINITSTACKSIZE 200
    643  1.1.1.4  mrg 
    644  1.1.1.4  mrg typedef struct {
    645  1.1.1.4  mrg     unsigned stacksize;
    646  1.1.1.4  mrg     YYINT    *s_base;
    647  1.1.1.4  mrg     YYINT    *s_mark;
    648  1.1.1.4  mrg     YYINT    *s_last;
    649  1.1.1.4  mrg     YYSTYPE  *l_base;
    650  1.1.1.4  mrg     YYSTYPE  *l_mark;
    651  1.1.1.4  mrg } YYSTACKDATA;
    652  1.1.1.4  mrg /* variables for the parser stack */
    653  1.1.1.4  mrg static YYSTACKDATA yystack;
    654  1.1.1.4  mrg #line 265 "../../../gmp/demos/calc/calc.y"
    655      1.1  mrg 
    656  1.1.1.4  mrg yyerror (char *s)
    657      1.1  mrg {
    658  1.1.1.4  mrg   fprintf (stderr, "%s\n", s);
    659      1.1  mrg }
    660      1.1  mrg 
    661  1.1.1.4  mrg int calc_option_readline = -1;
    662      1.1  mrg 
    663  1.1.1.4  mrg int
    664  1.1.1.4  mrg main (int argc, char *argv[])
    665      1.1  mrg {
    666  1.1.1.4  mrg   int  i;
    667      1.1  mrg 
    668  1.1.1.4  mrg   for (i = 1; i < argc; i++)
    669      1.1  mrg     {
    670  1.1.1.4  mrg       if (strcmp (argv[i], "--readline") == 0)
    671  1.1.1.4  mrg         calc_option_readline = 1;
    672  1.1.1.4  mrg       else if (strcmp (argv[i], "--noreadline") == 0)
    673  1.1.1.4  mrg         calc_option_readline = 0;
    674  1.1.1.4  mrg       else if (strcmp (argv[i], "--help") == 0)
    675  1.1.1.4  mrg         {
    676  1.1.1.4  mrg           printf ("Usage: calc [--option]...\n");
    677  1.1.1.4  mrg           printf ("  --readline    use readline\n");
    678  1.1.1.4  mrg           printf ("  --noreadline  don't use readline\n");
    679  1.1.1.4  mrg           printf ("  --help        this message\n");
    680  1.1.1.4  mrg           printf ("Readline is only available when compiled in,\n");
    681  1.1.1.4  mrg           printf ("and in that case it's the default on a tty.\n");
    682  1.1.1.4  mrg           exit (0);
    683  1.1.1.4  mrg         }
    684  1.1.1.4  mrg       else
    685  1.1.1.4  mrg         {
    686  1.1.1.4  mrg           fprintf (stderr, "Unrecognised option: %s\n", argv[i]);
    687  1.1.1.4  mrg           exit (1);
    688  1.1.1.4  mrg         }
    689      1.1  mrg     }
    690      1.1  mrg 
    691  1.1.1.4  mrg #if WITH_READLINE
    692  1.1.1.4  mrg   calc_init_readline ();
    693      1.1  mrg #else
    694  1.1.1.4  mrg   if (calc_option_readline == 1)
    695      1.1  mrg     {
    696  1.1.1.4  mrg       fprintf (stderr, "Readline support not available\n");
    697  1.1.1.4  mrg       exit (1);
    698      1.1  mrg     }
    699      1.1  mrg #endif
    700      1.1  mrg 
    701  1.1.1.4  mrg   for (i = 0; i < numberof (variable); i++)
    702  1.1.1.4  mrg     mpz_init (variable[i]);
    703      1.1  mrg 
    704  1.1.1.4  mrg   for (i = 0; i < numberof (stack); i++)
    705  1.1.1.4  mrg     mpz_init (stack[i]);
    706  1.1.1.4  mrg 
    707  1.1.1.4  mrg   return yyparse ();
    708      1.1  mrg }
    709  1.1.1.4  mrg #line 710 "calc.c"
    710      1.1  mrg 
    711  1.1.1.4  mrg #if YYDEBUG
    712  1.1.1.4  mrg #include <stdio.h>	/* needed for printf */
    713      1.1  mrg #endif
    714      1.1  mrg 
    715  1.1.1.4  mrg #include <stdlib.h>	/* needed for malloc, etc */
    716  1.1.1.4  mrg #include <string.h>	/* needed for memset */
    717      1.1  mrg 
    718  1.1.1.4  mrg /* allocate initial stack or double stack size, up to YYMAXDEPTH */
    719  1.1.1.4  mrg static int yygrowstack(YYSTACKDATA *data)
    720      1.1  mrg {
    721  1.1.1.4  mrg     int i;
    722  1.1.1.4  mrg     unsigned newsize;
    723  1.1.1.4  mrg     YYINT *newss;
    724  1.1.1.4  mrg     YYSTYPE *newvs;
    725      1.1  mrg 
    726  1.1.1.4  mrg     if ((newsize = data->stacksize) == 0)
    727  1.1.1.4  mrg         newsize = YYINITSTACKSIZE;
    728  1.1.1.4  mrg     else if (newsize >= YYMAXDEPTH)
    729  1.1.1.4  mrg         return YYENOMEM;
    730  1.1.1.4  mrg     else if ((newsize *= 2) > YYMAXDEPTH)
    731  1.1.1.4  mrg         newsize = YYMAXDEPTH;
    732      1.1  mrg 
    733  1.1.1.4  mrg     i = (int) (data->s_mark - data->s_base);
    734  1.1.1.4  mrg     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
    735  1.1.1.4  mrg     if (newss == 0)
    736  1.1.1.4  mrg         return YYENOMEM;
    737      1.1  mrg 
    738  1.1.1.4  mrg     data->s_base = newss;
    739  1.1.1.4  mrg     data->s_mark = newss + i;
    740      1.1  mrg 
    741  1.1.1.4  mrg     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
    742  1.1.1.4  mrg     if (newvs == 0)
    743  1.1.1.4  mrg         return YYENOMEM;
    744      1.1  mrg 
    745  1.1.1.4  mrg     data->l_base = newvs;
    746  1.1.1.4  mrg     data->l_mark = newvs + i;
    747  1.1.1.2  mrg 
    748  1.1.1.4  mrg     data->stacksize = newsize;
    749  1.1.1.4  mrg     data->s_last = data->s_base + newsize - 1;
    750  1.1.1.4  mrg     return 0;
    751      1.1  mrg }
    752      1.1  mrg 
    753  1.1.1.4  mrg #if YYPURE || defined(YY_NO_LEAKS)
    754  1.1.1.4  mrg static void yyfreestack(YYSTACKDATA *data)
    755      1.1  mrg {
    756  1.1.1.4  mrg     free(data->s_base);
    757  1.1.1.4  mrg     free(data->l_base);
    758  1.1.1.4  mrg     memset(data, 0, sizeof(*data));
    759      1.1  mrg }
    760  1.1.1.4  mrg #else
    761  1.1.1.4  mrg #define yyfreestack(data) /* nothing */
    762  1.1.1.2  mrg #endif
    763  1.1.1.2  mrg 
    764  1.1.1.4  mrg #define YYABORT  goto yyabort
    765  1.1.1.4  mrg #define YYREJECT goto yyabort
    766  1.1.1.4  mrg #define YYACCEPT goto yyaccept
    767  1.1.1.4  mrg #define YYERROR  goto yyerrlab
    768      1.1  mrg 
    769      1.1  mrg int
    770  1.1.1.4  mrg YYPARSE_DECL()
    771      1.1  mrg {
    772  1.1.1.4  mrg     int yym, yyn, yystate;
    773  1.1.1.4  mrg #if YYDEBUG
    774  1.1.1.4  mrg     const char *yys;
    775      1.1  mrg 
    776  1.1.1.4  mrg     if ((yys = getenv("YYDEBUG")) != 0)
    777      1.1  mrg     {
    778  1.1.1.4  mrg         yyn = *yys;
    779  1.1.1.4  mrg         if (yyn >= '0' && yyn <= '9')
    780  1.1.1.4  mrg             yydebug = yyn - '0';
    781      1.1  mrg     }
    782  1.1.1.4  mrg #endif
    783      1.1  mrg 
    784  1.1.1.4  mrg     yym = 0;
    785  1.1.1.4  mrg     yyn = 0;
    786  1.1.1.4  mrg     yynerrs = 0;
    787  1.1.1.4  mrg     yyerrflag = 0;
    788  1.1.1.4  mrg     yychar = YYEMPTY;
    789  1.1.1.4  mrg     yystate = 0;
    790      1.1  mrg 
    791  1.1.1.4  mrg #if YYPURE
    792  1.1.1.4  mrg     memset(&yystack, 0, sizeof(yystack));
    793  1.1.1.4  mrg #endif
    794      1.1  mrg 
    795  1.1.1.4  mrg     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    796  1.1.1.4  mrg     yystack.s_mark = yystack.s_base;
    797  1.1.1.4  mrg     yystack.l_mark = yystack.l_base;
    798  1.1.1.4  mrg     yystate = 0;
    799  1.1.1.4  mrg     *yystack.s_mark = 0;
    800      1.1  mrg 
    801  1.1.1.4  mrg yyloop:
    802  1.1.1.4  mrg     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    803  1.1.1.4  mrg     if (yychar < 0)
    804      1.1  mrg     {
    805  1.1.1.4  mrg         yychar = YYLEX;
    806  1.1.1.4  mrg         if (yychar < 0) yychar = YYEOF;
    807  1.1.1.4  mrg #if YYDEBUG
    808  1.1.1.4  mrg         if (yydebug)
    809  1.1.1.4  mrg         {
    810  1.1.1.4  mrg             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
    811  1.1.1.4  mrg             printf("%sdebug: state %d, reading %d (%s)\n",
    812  1.1.1.4  mrg                     YYPREFIX, yystate, yychar, yys);
    813  1.1.1.4  mrg         }
    814  1.1.1.4  mrg #endif
    815      1.1  mrg     }
    816  1.1.1.4  mrg     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
    817  1.1.1.4  mrg             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
    818      1.1  mrg     {
    819  1.1.1.4  mrg #if YYDEBUG
    820  1.1.1.4  mrg         if (yydebug)
    821  1.1.1.4  mrg             printf("%sdebug: state %d, shifting to state %d\n",
    822  1.1.1.4  mrg                     YYPREFIX, yystate, yytable[yyn]);
    823  1.1.1.4  mrg #endif
    824  1.1.1.4  mrg         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    825  1.1.1.4  mrg         yystate = yytable[yyn];
    826  1.1.1.4  mrg         *++yystack.s_mark = yytable[yyn];
    827  1.1.1.4  mrg         *++yystack.l_mark = yylval;
    828  1.1.1.4  mrg         yychar = YYEMPTY;
    829  1.1.1.4  mrg         if (yyerrflag > 0)  --yyerrflag;
    830  1.1.1.4  mrg         goto yyloop;
    831      1.1  mrg     }
    832  1.1.1.4  mrg     if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
    833  1.1.1.4  mrg             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
    834      1.1  mrg     {
    835  1.1.1.4  mrg         yyn = yytable[yyn];
    836  1.1.1.4  mrg         goto yyreduce;
    837      1.1  mrg     }
    838  1.1.1.4  mrg     if (yyerrflag != 0) goto yyinrecovery;
    839  1.1.1.4  mrg 
    840  1.1.1.4  mrg     YYERROR_CALL("syntax error");
    841  1.1.1.4  mrg 
    842  1.1.1.4  mrg     goto yyerrlab; /* redundant goto avoids 'unused label' warning */
    843  1.1.1.4  mrg yyerrlab:
    844  1.1.1.4  mrg     ++yynerrs;
    845      1.1  mrg 
    846  1.1.1.4  mrg yyinrecovery:
    847  1.1.1.4  mrg     if (yyerrflag < 3)
    848      1.1  mrg     {
    849  1.1.1.4  mrg         yyerrflag = 3;
    850  1.1.1.4  mrg         for (;;)
    851  1.1.1.4  mrg         {
    852  1.1.1.4  mrg             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
    853  1.1.1.4  mrg                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
    854  1.1.1.4  mrg             {
    855  1.1.1.4  mrg #if YYDEBUG
    856  1.1.1.4  mrg                 if (yydebug)
    857  1.1.1.4  mrg                     printf("%sdebug: state %d, error recovery shifting\
    858  1.1.1.4  mrg  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
    859  1.1.1.4  mrg #endif
    860  1.1.1.4  mrg                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    861  1.1.1.4  mrg                 yystate = yytable[yyn];
    862  1.1.1.4  mrg                 *++yystack.s_mark = yytable[yyn];
    863  1.1.1.4  mrg                 *++yystack.l_mark = yylval;
    864  1.1.1.4  mrg                 goto yyloop;
    865  1.1.1.4  mrg             }
    866  1.1.1.4  mrg             else
    867  1.1.1.4  mrg             {
    868  1.1.1.4  mrg #if YYDEBUG
    869  1.1.1.4  mrg                 if (yydebug)
    870  1.1.1.4  mrg                     printf("%sdebug: error recovery discarding state %d\n",
    871  1.1.1.4  mrg                             YYPREFIX, *yystack.s_mark);
    872  1.1.1.4  mrg #endif
    873  1.1.1.4  mrg                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
    874  1.1.1.4  mrg                 --yystack.s_mark;
    875  1.1.1.4  mrg                 --yystack.l_mark;
    876  1.1.1.4  mrg             }
    877  1.1.1.4  mrg         }
    878  1.1.1.4  mrg     }
    879  1.1.1.4  mrg     else
    880  1.1.1.4  mrg     {
    881  1.1.1.4  mrg         if (yychar == YYEOF) goto yyabort;
    882  1.1.1.4  mrg #if YYDEBUG
    883  1.1.1.4  mrg         if (yydebug)
    884  1.1.1.4  mrg         {
    885  1.1.1.4  mrg             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
    886  1.1.1.4  mrg             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
    887  1.1.1.4  mrg                     YYPREFIX, yystate, yychar, yys);
    888  1.1.1.4  mrg         }
    889  1.1.1.4  mrg #endif
    890  1.1.1.4  mrg         yychar = YYEMPTY;
    891  1.1.1.4  mrg         goto yyloop;
    892      1.1  mrg     }
    893      1.1  mrg 
    894      1.1  mrg yyreduce:
    895  1.1.1.4  mrg #if YYDEBUG
    896  1.1.1.4  mrg     if (yydebug)
    897  1.1.1.4  mrg         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
    898  1.1.1.4  mrg                 YYPREFIX, yystate, yyn, yyrule[yyn]);
    899  1.1.1.4  mrg #endif
    900  1.1.1.4  mrg     yym = yylen[yyn];
    901  1.1.1.4  mrg     if (yym > 0)
    902  1.1.1.4  mrg         yyval = yystack.l_mark[1-yym];
    903  1.1.1.4  mrg     else
    904  1.1.1.4  mrg         memset(&yyval, 0, sizeof yyval);
    905      1.1  mrg 
    906  1.1.1.4  mrg     switch (yyn)
    907      1.1  mrg     {
    908  1.1.1.4  mrg case 5:
    909  1.1.1.3  mrg #line 173 "../../../gmp/demos/calc/calc.y"
    910  1.1.1.4  mrg 	{ sp = stack[0]; yyerrok; }
    911  1.1.1.4  mrg break;
    912  1.1.1.4  mrg case 7:
    913  1.1.1.3  mrg #line 177 "../../../gmp/demos/calc/calc.y"
    914  1.1.1.4  mrg 	{
    915      1.1  mrg       mpz_out_str (stdout, obase, sp); putchar ('\n');
    916      1.1  mrg       sp--;
    917      1.1  mrg       CHECK_EMPTY ();
    918      1.1  mrg     }
    919  1.1.1.4  mrg break;
    920  1.1.1.4  mrg case 8:
    921  1.1.1.3  mrg #line 182 "../../../gmp/demos/calc/calc.y"
    922  1.1.1.4  mrg 	{
    923  1.1.1.4  mrg       CHECK_VARIABLE (yystack.l_mark[-2].var);
    924  1.1.1.4  mrg       mpz_swap (variable[yystack.l_mark[-2].var], sp);
    925      1.1  mrg       sp--;
    926      1.1  mrg       CHECK_EMPTY ();
    927      1.1  mrg     }
    928  1.1.1.4  mrg break;
    929  1.1.1.4  mrg case 9:
    930  1.1.1.3  mrg #line 188 "../../../gmp/demos/calc/calc.y"
    931  1.1.1.4  mrg 	{ calc_help (); }
    932  1.1.1.4  mrg break;
    933  1.1.1.4  mrg case 10:
    934  1.1.1.3  mrg #line 189 "../../../gmp/demos/calc/calc.y"
    935  1.1.1.4  mrg 	{ ibase = 16; obase = -16; }
    936  1.1.1.4  mrg break;
    937  1.1.1.4  mrg case 11:
    938  1.1.1.3  mrg #line 190 "../../../gmp/demos/calc/calc.y"
    939  1.1.1.4  mrg 	{ ibase = 0;  obase = 10; }
    940  1.1.1.4  mrg break;
    941  1.1.1.4  mrg case 12:
    942  1.1.1.3  mrg #line 191 "../../../gmp/demos/calc/calc.y"
    943  1.1.1.4  mrg 	{ exit (0); }
    944  1.1.1.4  mrg break;
    945  1.1.1.4  mrg case 14:
    946  1.1.1.3  mrg #line 198 "../../../gmp/demos/calc/calc.y"
    947  1.1.1.4  mrg 	{ sp--; mpz_add    (sp, sp, sp+1); }
    948  1.1.1.4  mrg break;
    949  1.1.1.4  mrg case 15:
    950  1.1.1.3  mrg #line 199 "../../../gmp/demos/calc/calc.y"
    951  1.1.1.4  mrg 	{ sp--; mpz_sub    (sp, sp, sp+1); }
    952  1.1.1.4  mrg break;
    953  1.1.1.4  mrg case 16:
    954  1.1.1.3  mrg #line 200 "../../../gmp/demos/calc/calc.y"
    955  1.1.1.4  mrg 	{ sp--; mpz_mul    (sp, sp, sp+1); }
    956  1.1.1.4  mrg break;
    957  1.1.1.4  mrg case 17:
    958  1.1.1.3  mrg #line 201 "../../../gmp/demos/calc/calc.y"
    959  1.1.1.4  mrg 	{ sp--; mpz_fdiv_q (sp, sp, sp+1); }
    960  1.1.1.4  mrg break;
    961  1.1.1.4  mrg case 18:
    962  1.1.1.3  mrg #line 202 "../../../gmp/demos/calc/calc.y"
    963  1.1.1.4  mrg 	{ sp--; mpz_fdiv_r (sp, sp, sp+1); }
    964  1.1.1.4  mrg break;
    965  1.1.1.4  mrg case 19:
    966  1.1.1.3  mrg #line 203 "../../../gmp/demos/calc/calc.y"
    967  1.1.1.4  mrg 	{ CHECK_UI ("Exponent", sp);
    968      1.1  mrg                     sp--; mpz_pow_ui (sp, sp, mpz_get_ui (sp+1)); }
    969  1.1.1.4  mrg break;
    970  1.1.1.4  mrg case 20:
    971  1.1.1.3  mrg #line 205 "../../../gmp/demos/calc/calc.y"
    972  1.1.1.4  mrg 	{ CHECK_UI ("Shift count", sp);
    973      1.1  mrg                     sp--; mpz_mul_2exp (sp, sp, mpz_get_ui (sp+1)); }
    974  1.1.1.4  mrg break;
    975  1.1.1.4  mrg case 21:
    976  1.1.1.3  mrg #line 207 "../../../gmp/demos/calc/calc.y"
    977  1.1.1.4  mrg 	{ CHECK_UI ("Shift count", sp);
    978      1.1  mrg                     sp--; mpz_fdiv_q_2exp (sp, sp, mpz_get_ui (sp+1)); }
    979  1.1.1.4  mrg break;
    980  1.1.1.4  mrg case 22:
    981  1.1.1.3  mrg #line 209 "../../../gmp/demos/calc/calc.y"
    982  1.1.1.4  mrg 	{ CHECK_UI ("Factorial", sp);
    983      1.1  mrg                     mpz_fac_ui (sp, mpz_get_ui (sp)); }
    984  1.1.1.4  mrg break;
    985  1.1.1.4  mrg case 23:
    986  1.1.1.3  mrg #line 211 "../../../gmp/demos/calc/calc.y"
    987  1.1.1.4  mrg 	{ mpz_neg (sp, sp); }
    988  1.1.1.4  mrg break;
    989  1.1.1.4  mrg case 24:
    990  1.1.1.3  mrg #line 213 "../../../gmp/demos/calc/calc.y"
    991  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <  0); }
    992  1.1.1.4  mrg break;
    993  1.1.1.4  mrg case 25:
    994  1.1.1.3  mrg #line 214 "../../../gmp/demos/calc/calc.y"
    995  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <= 0); }
    996  1.1.1.4  mrg break;
    997  1.1.1.4  mrg case 26:
    998  1.1.1.3  mrg #line 215 "../../../gmp/demos/calc/calc.y"
    999  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) == 0); }
   1000  1.1.1.4  mrg break;
   1001  1.1.1.4  mrg case 27:
   1002  1.1.1.3  mrg #line 216 "../../../gmp/demos/calc/calc.y"
   1003  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) != 0); }
   1004  1.1.1.4  mrg break;
   1005  1.1.1.4  mrg case 28:
   1006  1.1.1.3  mrg #line 217 "../../../gmp/demos/calc/calc.y"
   1007  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >= 0); }
   1008  1.1.1.4  mrg break;
   1009  1.1.1.4  mrg case 29:
   1010  1.1.1.3  mrg #line 218 "../../../gmp/demos/calc/calc.y"
   1011  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >  0); }
   1012  1.1.1.4  mrg break;
   1013  1.1.1.4  mrg case 30:
   1014  1.1.1.3  mrg #line 220 "../../../gmp/demos/calc/calc.y"
   1015  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_sgn (sp) && mpz_sgn (sp+1)); }
   1016  1.1.1.4  mrg break;
   1017  1.1.1.4  mrg case 31:
   1018  1.1.1.3  mrg #line 221 "../../../gmp/demos/calc/calc.y"
   1019  1.1.1.4  mrg 	{ sp--; mpz_set_ui (sp, mpz_sgn (sp) || mpz_sgn (sp+1)); }
   1020  1.1.1.4  mrg break;
   1021  1.1.1.4  mrg case 32:
   1022  1.1.1.3  mrg #line 223 "../../../gmp/demos/calc/calc.y"
   1023  1.1.1.4  mrg 	{ mpz_abs (sp, sp); }
   1024  1.1.1.4  mrg break;
   1025  1.1.1.4  mrg case 33:
   1026  1.1.1.3  mrg #line 224 "../../../gmp/demos/calc/calc.y"
   1027  1.1.1.4  mrg 	{ sp--; CHECK_UI ("Binomial base", sp+1);
   1028      1.1  mrg                                    mpz_bin_ui (sp, sp, mpz_get_ui (sp+1)); }
   1029  1.1.1.4  mrg break;
   1030  1.1.1.4  mrg case 34:
   1031  1.1.1.3  mrg #line 226 "../../../gmp/demos/calc/calc.y"
   1032  1.1.1.4  mrg 	{ CHECK_UI ("Fibonacci", sp);
   1033      1.1  mrg                                    mpz_fib_ui (sp, mpz_get_ui (sp)); }
   1034  1.1.1.4  mrg break;
   1035  1.1.1.4  mrg case 36:
   1036  1.1.1.3  mrg #line 229 "../../../gmp/demos/calc/calc.y"
   1037  1.1.1.4  mrg 	{ sp--; mpz_set_si (sp,
   1038      1.1  mrg                                          mpz_kronecker (sp, sp+1)); }
   1039  1.1.1.4  mrg break;
   1040  1.1.1.4  mrg case 38:
   1041  1.1.1.3  mrg #line 232 "../../../gmp/demos/calc/calc.y"
   1042  1.1.1.4  mrg 	{ CHECK_UI ("Lucas number", sp);
   1043      1.1  mrg                                    mpz_lucnum_ui (sp, mpz_get_ui (sp)); }
   1044  1.1.1.4  mrg break;
   1045  1.1.1.4  mrg case 39:
   1046  1.1.1.3  mrg #line 234 "../../../gmp/demos/calc/calc.y"
   1047  1.1.1.4  mrg 	{ mpz_nextprime (sp, sp); }
   1048  1.1.1.4  mrg break;
   1049  1.1.1.4  mrg case 40:
   1050  1.1.1.3  mrg #line 235 "../../../gmp/demos/calc/calc.y"
   1051  1.1.1.4  mrg 	{ sp -= 2; mpz_powm (sp, sp, sp+1, sp+2); }
   1052  1.1.1.4  mrg break;
   1053  1.1.1.4  mrg case 41:
   1054  1.1.1.3  mrg #line 236 "../../../gmp/demos/calc/calc.y"
   1055  1.1.1.4  mrg 	{ sp--; CHECK_UI ("Nth-root", sp+1);
   1056      1.1  mrg                                    mpz_root (sp, sp, mpz_get_ui (sp+1)); }
   1057  1.1.1.4  mrg break;
   1058  1.1.1.4  mrg case 42:
   1059  1.1.1.3  mrg #line 238 "../../../gmp/demos/calc/calc.y"
   1060  1.1.1.4  mrg 	{ mpz_sqrt (sp, sp); }
   1061  1.1.1.4  mrg break;
   1062  1.1.1.4  mrg case 43:
   1063  1.1.1.3  mrg #line 240 "../../../gmp/demos/calc/calc.y"
   1064  1.1.1.4  mrg 	{
   1065      1.1  mrg         sp++;
   1066      1.1  mrg         CHECK_OVERFLOW ();
   1067  1.1.1.4  mrg         CHECK_VARIABLE (yystack.l_mark[0].var);
   1068  1.1.1.4  mrg         mpz_set (sp, variable[yystack.l_mark[0].var]);
   1069      1.1  mrg       }
   1070  1.1.1.4  mrg break;
   1071  1.1.1.4  mrg case 44:
   1072  1.1.1.3  mrg #line 246 "../../../gmp/demos/calc/calc.y"
   1073  1.1.1.4  mrg 	{
   1074      1.1  mrg         sp++;
   1075      1.1  mrg         CHECK_OVERFLOW ();
   1076  1.1.1.4  mrg         if (mpz_set_str (sp, yystack.l_mark[0].str, ibase) != 0)
   1077      1.1  mrg           {
   1078  1.1.1.4  mrg             fprintf (stderr, "Invalid number: %s\n", yystack.l_mark[0].str);
   1079      1.1  mrg             YYERROR;
   1080      1.1  mrg           }
   1081      1.1  mrg       }
   1082  1.1.1.4  mrg break;
   1083  1.1.1.4  mrg case 46:
   1084  1.1.1.3  mrg #line 258 "../../../gmp/demos/calc/calc.y"
   1085  1.1.1.4  mrg 	{ sp--; mpz_gcd (sp, sp, sp+1); }
   1086  1.1.1.4  mrg break;
   1087  1.1.1.4  mrg case 48:
   1088  1.1.1.3  mrg #line 262 "../../../gmp/demos/calc/calc.y"
   1089  1.1.1.4  mrg 	{ sp--; mpz_lcm (sp, sp, sp+1); }
   1090  1.1.1.4  mrg break;
   1091  1.1.1.4  mrg #line 1092 "calc.c"
   1092  1.1.1.4  mrg     }
   1093  1.1.1.4  mrg     yystack.s_mark -= yym;
   1094  1.1.1.4  mrg     yystate = *yystack.s_mark;
   1095  1.1.1.4  mrg     yystack.l_mark -= yym;
   1096  1.1.1.4  mrg     yym = yylhs[yyn];
   1097  1.1.1.4  mrg     if (yystate == 0 && yym == 0)
   1098      1.1  mrg     {
   1099  1.1.1.4  mrg #if YYDEBUG
   1100  1.1.1.4  mrg         if (yydebug)
   1101  1.1.1.4  mrg             printf("%sdebug: after reduction, shifting from state 0 to\
   1102  1.1.1.4  mrg  state %d\n", YYPREFIX, YYFINAL);
   1103  1.1.1.4  mrg #endif
   1104  1.1.1.4  mrg         yystate = YYFINAL;
   1105  1.1.1.4  mrg         *++yystack.s_mark = YYFINAL;
   1106  1.1.1.4  mrg         *++yystack.l_mark = yyval;
   1107  1.1.1.4  mrg         if (yychar < 0)
   1108      1.1  mrg         {
   1109  1.1.1.4  mrg             yychar = YYLEX;
   1110  1.1.1.4  mrg             if (yychar < 0) yychar = YYEOF;
   1111  1.1.1.4  mrg #if YYDEBUG
   1112  1.1.1.4  mrg             if (yydebug)
   1113  1.1.1.4  mrg             {
   1114  1.1.1.4  mrg                 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
   1115  1.1.1.4  mrg                 printf("%sdebug: state %d, reading %d (%s)\n",
   1116  1.1.1.4  mrg                         YYPREFIX, YYFINAL, yychar, yys);
   1117  1.1.1.4  mrg             }
   1118  1.1.1.4  mrg #endif
   1119      1.1  mrg         }
   1120  1.1.1.4  mrg         if (yychar == YYEOF) goto yyaccept;
   1121  1.1.1.4  mrg         goto yyloop;
   1122      1.1  mrg     }
   1123  1.1.1.4  mrg     if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
   1124  1.1.1.4  mrg             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
   1125  1.1.1.4  mrg         yystate = yytable[yyn];
   1126  1.1.1.4  mrg     else
   1127  1.1.1.4  mrg         yystate = yydgoto[yym];
   1128  1.1.1.4  mrg #if YYDEBUG
   1129  1.1.1.4  mrg     if (yydebug)
   1130  1.1.1.4  mrg         printf("%sdebug: after reduction, shifting from state %d \
   1131  1.1.1.4  mrg to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
   1132  1.1.1.4  mrg #endif
   1133  1.1.1.4  mrg     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
   1134  1.1.1.4  mrg     *++yystack.s_mark = (YYINT) yystate;
   1135  1.1.1.4  mrg     *++yystack.l_mark = yyval;
   1136  1.1.1.4  mrg     goto yyloop;
   1137  1.1.1.4  mrg 
   1138  1.1.1.4  mrg yyoverflow:
   1139  1.1.1.4  mrg     YYERROR_CALL("yacc stack overflow");
   1140  1.1.1.4  mrg 
   1141  1.1.1.4  mrg yyabort:
   1142  1.1.1.4  mrg     yyfreestack(&yystack);
   1143  1.1.1.4  mrg     return (1);
   1144  1.1.1.4  mrg 
   1145  1.1.1.4  mrg yyaccept:
   1146  1.1.1.4  mrg     yyfreestack(&yystack);
   1147  1.1.1.4  mrg     return (0);
   1148      1.1  mrg }
   1149