github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/demos/calc/calc.c (about) 1 /* A Bison parser, made by GNU Bison 2.7.12-4996. */ 2 3 /* Bison implementation for Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. 6 7 This program is free software: you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 /* As a special exception, you may create a larger work that contains 21 part or all of the Bison parser skeleton and distribute that work 22 under terms of your choice, so long as that work isn't itself a 23 parser generator using the skeleton or a modified version thereof 24 as a parser skeleton. Alternatively, if you modify or redistribute 25 the parser skeleton itself, you may (at your option) remove this 26 special exception, which will cause the skeleton and the resulting 27 Bison output files to be licensed under the GNU General Public 28 License without this special exception. 29 30 This special exception was added by the Free Software Foundation in 31 version 2.2 of Bison. */ 32 33 /* C LALR(1) parser skeleton written by Richard Stallman, by 34 simplifying the original so-called "semantic" parser. */ 35 36 /* All symbols defined below should begin with yy or YY, to avoid 37 infringing on user name space. This should be done even for local 38 variables, as they might otherwise be expanded by user macros. 39 There are some unavoidable exceptions within include files to 40 define necessary library symbols; they are noted "INFRINGES ON 41 USER NAME SPACE" below. */ 42 43 /* Identify Bison output. */ 44 #define YYBISON 1 45 46 /* Bison version. */ 47 #define YYBISON_VERSION "2.7.12-4996" 48 49 /* Skeleton name. */ 50 #define YYSKELETON_NAME "yacc.c" 51 52 /* Pure parsers. */ 53 #define YYPURE 0 54 55 /* Push parsers. */ 56 #define YYPUSH 0 57 58 /* Pull parsers. */ 59 #define YYPULL 1 60 61 62 63 64 /* Copy the first part of user declarations. */ 65 /* Line 371 of yacc.c */ 66 #line 1 "../../../gmp/demos/calc/calc.y" 67 68 /* A simple integer desk calculator using yacc and gmp. 69 70 Copyright 2000-2002 Free Software Foundation, Inc. 71 72 This file is part of the GNU MP Library. 73 74 This program is free software; you can redistribute it and/or modify it under 75 the terms of the GNU General Public License as published by the Free Software 76 Foundation; either version 3 of the License, or (at your option) any later 77 version. 78 79 This program is distributed in the hope that it will be useful, but WITHOUT ANY 80 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 81 PARTICULAR PURPOSE. See the GNU General Public License for more details. 82 83 You should have received a copy of the GNU General Public License along with 84 this program. If not, see https://www.gnu.org/licenses/. */ 85 86 87 /* This is a simple program, meant only to show one way to use GMP for this 88 sort of thing. There's few features, and error checking is minimal. 89 Standard input is read, calc_help() below shows the inputs accepted. 90 91 Expressions are evaluated as they're read. If user defined functions 92 were wanted it'd be necessary to build a parse tree like pexpr.c does, or 93 a list of operations for a stack based evaluator. That would also make 94 it possible to detect and optimize evaluations "mod m" like pexpr.c does. 95 96 A stack is used for intermediate values in the expression evaluation, 97 separate from the yacc parser stack. This is simple, makes error 98 recovery easy, minimizes the junk around mpz calls in the rules, and 99 saves initializing or clearing "mpz_t"s during a calculation. A 100 disadvantage though is that variables must be copied to the stack to be 101 worked on. A more sophisticated calculator or language system might be 102 able to avoid that when executing a compiled or semi-compiled form. 103 104 Avoiding repeated initializing and clearing of "mpz_t"s is important. In 105 this program the time spent parsing is obviously much greater than any 106 possible saving from this, but a proper calculator or language should 107 take some trouble over it. Don't be surprised if an init/clear takes 3 108 or more times as long as a 10 limb addition, depending on the system (see 109 the mpz_init_realloc_clear example in tune/README). */ 110 111 112 #include <stdio.h> 113 #include <stdlib.h> 114 #include <string.h> 115 #include "gmp.h" 116 #define NO_CALC_H /* because it conflicts with normal calc.c stuff */ 117 #include "calc-common.h" 118 119 120 #define numberof(x) (sizeof (x) / sizeof ((x)[0])) 121 122 123 void 124 calc_help (void) 125 { 126 printf ("Examples:\n"); 127 printf (" 2+3*4 expressions are evaluated\n"); 128 printf (" x=5^6 variables a to z can be set and used\n"); 129 printf ("Operators:\n"); 130 printf (" + - * arithmetic\n"); 131 printf (" / %% division and remainder (rounding towards negative infinity)\n"); 132 printf (" ^ exponentiation\n"); 133 printf (" ! factorial\n"); 134 printf (" << >> left and right shifts\n"); 135 printf (" <= >= > \\ comparisons, giving 1 if true, 0 if false\n"); 136 printf (" == != < /\n"); 137 printf (" && || logical and/or, giving 1 if true, 0 if false\n"); 138 printf ("Functions:\n"); 139 printf (" abs(n) absolute value\n"); 140 printf (" bin(n,m) binomial coefficient\n"); 141 printf (" fib(n) fibonacci number\n"); 142 printf (" gcd(a,b,..) greatest common divisor\n"); 143 printf (" kron(a,b) kronecker symbol\n"); 144 printf (" lcm(a,b,..) least common multiple\n"); 145 printf (" lucnum(n) lucas number\n"); 146 printf (" nextprime(n) next prime after n\n"); 147 printf (" powm(b,e,m) modulo powering, b^e%%m\n"); 148 printf (" root(n,r) r-th root\n"); 149 printf (" sqrt(n) square root\n"); 150 printf ("Other:\n"); 151 printf (" hex \\ set hex or decimal for input and output\n"); 152 printf (" decimal / (\"0x\" can be used for hex too)\n"); 153 printf (" quit exit program (EOF works too)\n"); 154 printf (" ; statements are separated with a ; or newline\n"); 155 printf (" \\ continue expressions with \\ before newline\n"); 156 printf (" # xxx comments are # though to newline\n"); 157 printf ("Hex numbers must be entered in upper case, to distinguish them from the\n"); 158 printf ("variables a to f (like in bc).\n"); 159 } 160 161 162 int ibase = 0; 163 int obase = 10; 164 165 166 /* The stack is a fixed size, which means there's a limit on the nesting 167 allowed in expressions. A more sophisticated program could let it grow 168 dynamically. */ 169 170 mpz_t stack[100]; 171 mpz_ptr sp = stack[0]; 172 173 #define CHECK_OVERFLOW() \ 174 if (sp >= stack[numberof(stack)]) /* FIXME */ \ 175 { \ 176 fprintf (stderr, \ 177 "Value stack overflow, too much nesting in expression\n"); \ 178 YYERROR; \ 179 } 180 181 #define CHECK_EMPTY() \ 182 if (sp != stack[0]) \ 183 { \ 184 fprintf (stderr, "Oops, expected the value stack to be empty\n"); \ 185 sp = stack[0]; \ 186 } 187 188 189 mpz_t variable[26]; 190 191 #define CHECK_VARIABLE(var) \ 192 if ((var) < 0 || (var) >= numberof (variable)) \ 193 { \ 194 fprintf (stderr, "Oops, bad variable somehow: %d\n", var); \ 195 YYERROR; \ 196 } 197 198 199 #define CHECK_UI(name,z) \ 200 if (! mpz_fits_ulong_p (z)) \ 201 { \ 202 fprintf (stderr, "%s too big\n", name); \ 203 YYERROR; \ 204 } 205 206 207 /* Line 371 of yacc.c */ 208 #line 209 "calc.c" 209 210 # ifndef YY_NULL 211 # if defined __cplusplus && 201103L <= __cplusplus 212 # define YY_NULL nullptr 213 # else 214 # define YY_NULL 0 215 # endif 216 # endif 217 218 /* Enabling verbose error messages. */ 219 #ifdef YYERROR_VERBOSE 220 # undef YYERROR_VERBOSE 221 # define YYERROR_VERBOSE 1 222 #else 223 # define YYERROR_VERBOSE 0 224 #endif 225 226 /* In a future release of Bison, this section will be replaced 227 by #include "y.tab.h". */ 228 #ifndef YY_YY_CALC_H_INCLUDED 229 # define YY_YY_CALC_H_INCLUDED 230 /* Enabling traces. */ 231 #ifndef YYDEBUG 232 # define YYDEBUG 0 233 #endif 234 #if YYDEBUG 235 extern int yydebug; 236 #endif 237 238 /* Tokens. */ 239 #ifndef YYTOKENTYPE 240 # define YYTOKENTYPE 241 /* Put the tokens into the symbol table, so that GDB and other debuggers 242 know about them. */ 243 enum yytokentype { 244 EOS = 258, 245 BAD = 259, 246 HELP = 260, 247 HEX = 261, 248 DECIMAL = 262, 249 QUIT = 263, 250 ABS = 264, 251 BIN = 265, 252 FIB = 266, 253 GCD = 267, 254 KRON = 268, 255 LCM = 269, 256 LUCNUM = 270, 257 NEXTPRIME = 271, 258 POWM = 272, 259 ROOT = 273, 260 SQRT = 274, 261 NUMBER = 275, 262 VARIABLE = 276, 263 LOR = 277, 264 LAND = 278, 265 GE = 279, 266 LE = 280, 267 NE = 281, 268 EQ = 282, 269 RSHIFT = 283, 270 LSHIFT = 284, 271 UMINUS = 285 272 }; 273 #endif 274 /* Tokens. */ 275 #define EOS 258 276 #define BAD 259 277 #define HELP 260 278 #define HEX 261 279 #define DECIMAL 262 280 #define QUIT 263 281 #define ABS 264 282 #define BIN 265 283 #define FIB 266 284 #define GCD 267 285 #define KRON 268 286 #define LCM 269 287 #define LUCNUM 270 288 #define NEXTPRIME 271 289 #define POWM 272 290 #define ROOT 273 291 #define SQRT 274 292 #define NUMBER 275 293 #define VARIABLE 276 294 #define LOR 277 295 #define LAND 278 296 #define GE 279 297 #define LE 280 298 #define NE 281 299 #define EQ 282 300 #define RSHIFT 283 301 #define LSHIFT 284 302 #define UMINUS 285 303 304 305 306 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 307 typedef union YYSTYPE 308 { 309 /* Line 387 of yacc.c */ 310 #line 142 "../../../gmp/demos/calc/calc.y" 311 312 char *str; 313 int var; 314 315 316 /* Line 387 of yacc.c */ 317 #line 318 "calc.c" 318 } YYSTYPE; 319 # define YYSTYPE_IS_TRIVIAL 1 320 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 321 # define YYSTYPE_IS_DECLARED 1 322 #endif 323 324 extern YYSTYPE yylval; 325 326 #ifdef YYPARSE_PARAM 327 #if defined __STDC__ || defined __cplusplus 328 int yyparse (void *YYPARSE_PARAM); 329 #else 330 int yyparse (); 331 #endif 332 #else /* ! YYPARSE_PARAM */ 333 #if defined __STDC__ || defined __cplusplus 334 int yyparse (void); 335 #else 336 int yyparse (); 337 #endif 338 #endif /* ! YYPARSE_PARAM */ 339 340 #endif /* !YY_YY_CALC_H_INCLUDED */ 341 342 /* Copy the second part of user declarations. */ 343 344 /* Line 390 of yacc.c */ 345 #line 346 "calc.c" 346 347 #ifdef short 348 # undef short 349 #endif 350 351 #ifdef YYTYPE_UINT8 352 typedef YYTYPE_UINT8 yytype_uint8; 353 #else 354 typedef unsigned char yytype_uint8; 355 #endif 356 357 #ifdef YYTYPE_INT8 358 typedef YYTYPE_INT8 yytype_int8; 359 #elif (defined __STDC__ || defined __C99__FUNC__ \ 360 || defined __cplusplus || defined _MSC_VER) 361 typedef signed char yytype_int8; 362 #else 363 typedef short int yytype_int8; 364 #endif 365 366 #ifdef YYTYPE_UINT16 367 typedef YYTYPE_UINT16 yytype_uint16; 368 #else 369 typedef unsigned short int yytype_uint16; 370 #endif 371 372 #ifdef YYTYPE_INT16 373 typedef YYTYPE_INT16 yytype_int16; 374 #else 375 typedef short int yytype_int16; 376 #endif 377 378 #ifndef YYSIZE_T 379 # ifdef __SIZE_TYPE__ 380 # define YYSIZE_T __SIZE_TYPE__ 381 # elif defined size_t 382 # define YYSIZE_T size_t 383 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 384 || defined __cplusplus || defined _MSC_VER) 385 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 386 # define YYSIZE_T size_t 387 # else 388 # define YYSIZE_T unsigned int 389 # endif 390 #endif 391 392 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 393 394 #ifndef YY_ 395 # if defined YYENABLE_NLS && YYENABLE_NLS 396 # if ENABLE_NLS 397 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 398 # define YY_(Msgid) dgettext ("bison-runtime", Msgid) 399 # endif 400 # endif 401 # ifndef YY_ 402 # define YY_(Msgid) Msgid 403 # endif 404 #endif 405 406 #ifndef __attribute__ 407 /* This feature is available in gcc versions 2.5 and later. */ 408 # if (! defined __GNUC__ || __GNUC__ < 2 \ 409 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) 410 # define __attribute__(Spec) /* empty */ 411 # endif 412 #endif 413 414 /* Suppress unused-variable warnings by "using" E. */ 415 #if ! defined lint || defined __GNUC__ 416 # define YYUSE(E) ((void) (E)) 417 #else 418 # define YYUSE(E) /* empty */ 419 #endif 420 421 422 /* Identity function, used to suppress warnings about constant conditions. */ 423 #ifndef lint 424 # define YYID(N) (N) 425 #else 426 #if (defined __STDC__ || defined __C99__FUNC__ \ 427 || defined __cplusplus || defined _MSC_VER) 428 static int 429 YYID (int yyi) 430 #else 431 static int 432 YYID (yyi) 433 int yyi; 434 #endif 435 { 436 return yyi; 437 } 438 #endif 439 440 #if ! defined yyoverflow || YYERROR_VERBOSE 441 442 /* The parser invokes alloca or malloc; define the necessary symbols. */ 443 444 # ifdef YYSTACK_USE_ALLOCA 445 # if YYSTACK_USE_ALLOCA 446 # ifdef __GNUC__ 447 # define YYSTACK_ALLOC __builtin_alloca 448 # elif defined __BUILTIN_VA_ARG_INCR 449 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 450 # elif defined _AIX 451 # define YYSTACK_ALLOC __alloca 452 # elif defined _MSC_VER 453 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 454 # define alloca _alloca 455 # else 456 # define YYSTACK_ALLOC alloca 457 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 458 || defined __cplusplus || defined _MSC_VER) 459 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 460 /* Use EXIT_SUCCESS as a witness for stdlib.h. */ 461 # ifndef EXIT_SUCCESS 462 # define EXIT_SUCCESS 0 463 # endif 464 # endif 465 # endif 466 # endif 467 # endif 468 469 # ifdef YYSTACK_ALLOC 470 /* Pacify GCC's `empty if-body' warning. */ 471 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 472 # ifndef YYSTACK_ALLOC_MAXIMUM 473 /* The OS might guarantee only one guard page at the bottom of the stack, 474 and a page size can be as small as 4096 bytes. So we cannot safely 475 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 476 to allow for a few compiler-allocated temporary stack slots. */ 477 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 478 # endif 479 # else 480 # define YYSTACK_ALLOC YYMALLOC 481 # define YYSTACK_FREE YYFREE 482 # ifndef YYSTACK_ALLOC_MAXIMUM 483 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 484 # endif 485 # if (defined __cplusplus && ! defined EXIT_SUCCESS \ 486 && ! ((defined YYMALLOC || defined malloc) \ 487 && (defined YYFREE || defined free))) 488 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 489 # ifndef EXIT_SUCCESS 490 # define EXIT_SUCCESS 0 491 # endif 492 # endif 493 # ifndef YYMALLOC 494 # define YYMALLOC malloc 495 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 496 || defined __cplusplus || defined _MSC_VER) 497 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 498 # endif 499 # endif 500 # ifndef YYFREE 501 # define YYFREE free 502 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 503 || defined __cplusplus || defined _MSC_VER) 504 void free (void *); /* INFRINGES ON USER NAME SPACE */ 505 # endif 506 # endif 507 # endif 508 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 509 510 511 #if (! defined yyoverflow \ 512 && (! defined __cplusplus \ 513 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 514 515 /* A type that is properly aligned for any stack member. */ 516 union yyalloc 517 { 518 yytype_int16 yyss_alloc; 519 YYSTYPE yyvs_alloc; 520 }; 521 522 /* The size of the maximum gap between one aligned stack and the next. */ 523 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 524 525 /* The size of an array large to enough to hold all stacks, each with 526 N elements. */ 527 # define YYSTACK_BYTES(N) \ 528 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 529 + YYSTACK_GAP_MAXIMUM) 530 531 # define YYCOPY_NEEDED 1 532 533 /* Relocate STACK from its old location to the new one. The 534 local variables YYSIZE and YYSTACKSIZE give the old and new number of 535 elements in the stack, and YYPTR gives the new location of the 536 stack. Advance YYPTR to a properly aligned location for the next 537 stack. */ 538 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 539 do \ 540 { \ 541 YYSIZE_T yynewbytes; \ 542 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 543 Stack = &yyptr->Stack_alloc; \ 544 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 545 yyptr += yynewbytes / sizeof (*yyptr); \ 546 } \ 547 while (YYID (0)) 548 549 #endif 550 551 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED 552 /* Copy COUNT objects from SRC to DST. The source and destination do 553 not overlap. */ 554 # ifndef YYCOPY 555 # if defined __GNUC__ && 1 < __GNUC__ 556 # define YYCOPY(Dst, Src, Count) \ 557 __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) 558 # else 559 # define YYCOPY(Dst, Src, Count) \ 560 do \ 561 { \ 562 YYSIZE_T yyi; \ 563 for (yyi = 0; yyi < (Count); yyi++) \ 564 (Dst)[yyi] = (Src)[yyi]; \ 565 } \ 566 while (YYID (0)) 567 # endif 568 # endif 569 #endif /* !YYCOPY_NEEDED */ 570 571 /* YYFINAL -- State number of the termination state. */ 572 #define YYFINAL 41 573 /* YYLAST -- Last index in YYTABLE. */ 574 #define YYLAST 552 575 576 /* YYNTOKENS -- Number of terminals. */ 577 #define YYNTOKENS 44 578 /* YYNNTS -- Number of nonterminals. */ 579 #define YYNNTS 7 580 /* YYNRULES -- Number of rules. */ 581 #define YYNRULES 49 582 /* YYNRULES -- Number of states. */ 583 #define YYNSTATES 118 584 585 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 586 #define YYUNDEFTOK 2 587 #define YYMAXUTOK 285 588 589 #define YYTRANSLATE(YYX) \ 590 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 591 592 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 593 static const yytype_uint8 yytranslate[] = 594 { 595 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 596 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 597 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 598 2, 2, 2, 39, 2, 2, 2, 36, 2, 2, 599 41, 42, 34, 32, 43, 33, 2, 35, 2, 2, 600 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 601 24, 40, 25, 2, 2, 2, 2, 2, 2, 2, 602 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 603 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 604 2, 2, 2, 2, 38, 2, 2, 2, 2, 2, 605 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 606 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 607 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 608 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 609 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 610 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 611 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 612 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 613 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 614 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 615 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 616 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 617 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 618 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 619 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 620 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 621 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 622 15, 16, 17, 18, 19, 20, 21, 22, 23, 26, 623 27, 28, 29, 30, 31, 37 624 }; 625 626 #if YYDEBUG 627 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 628 YYRHS. */ 629 static const yytype_uint8 yyprhs[] = 630 { 631 0, 0, 3, 5, 8, 11, 15, 18, 19, 21, 632 25, 27, 29, 31, 33, 37, 41, 45, 49, 53, 633 57, 61, 65, 69, 72, 75, 79, 83, 87, 91, 634 95, 99, 103, 107, 112, 119, 124, 129, 136, 141, 635 146, 151, 160, 167, 172, 174, 176, 178, 182, 184 636 }; 637 638 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 639 static const yytype_int8 yyrhs[] = 640 { 641 45, 0, -1, 47, -1, 46, 47, -1, 47, 3, 642 -1, 46, 47, 3, -1, 1, 3, -1, -1, 48, 643 -1, 21, 40, 48, -1, 5, -1, 6, -1, 7, 644 -1, 8, -1, 41, 48, 42, -1, 48, 32, 48, 645 -1, 48, 33, 48, -1, 48, 34, 48, -1, 48, 646 35, 48, -1, 48, 36, 48, -1, 48, 38, 48, 647 -1, 48, 31, 48, -1, 48, 30, 48, -1, 48, 648 39, -1, 33, 48, -1, 48, 24, 48, -1, 48, 649 27, 48, -1, 48, 29, 48, -1, 48, 28, 48, 650 -1, 48, 26, 48, -1, 48, 25, 48, -1, 48, 651 23, 48, -1, 48, 22, 48, -1, 9, 41, 48, 652 42, -1, 10, 41, 48, 43, 48, 42, -1, 11, 653 41, 48, 42, -1, 12, 41, 49, 42, -1, 13, 654 41, 48, 43, 48, 42, -1, 14, 41, 50, 42, 655 -1, 15, 41, 48, 42, -1, 16, 41, 48, 42, 656 -1, 17, 41, 48, 43, 48, 43, 48, 42, -1, 657 18, 41, 48, 43, 48, 42, -1, 19, 41, 48, 658 42, -1, 21, -1, 20, -1, 48, -1, 49, 43, 659 48, -1, 48, -1, 50, 43, 48, -1 660 }; 661 662 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 663 static const yytype_uint16 yyrline[] = 664 { 665 0, 167, 167, 168, 171, 172, 173, 175, 177, 182, 666 188, 189, 190, 191, 197, 198, 199, 200, 201, 202, 667 203, 205, 207, 209, 211, 213, 214, 215, 216, 217, 668 218, 220, 221, 223, 224, 226, 228, 229, 231, 232, 669 234, 235, 236, 238, 240, 246, 257, 258, 261, 262 670 }; 671 #endif 672 673 #if YYDEBUG || YYERROR_VERBOSE || 0 674 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 675 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 676 static const char *const yytname[] = 677 { 678 "$end", "error", "$undefined", "EOS", "BAD", "HELP", "HEX", "DECIMAL", 679 "QUIT", "ABS", "BIN", "FIB", "GCD", "KRON", "LCM", "LUCNUM", "NEXTPRIME", 680 "POWM", "ROOT", "SQRT", "NUMBER", "VARIABLE", "LOR", "LAND", "'<'", 681 "'>'", "GE", "LE", "NE", "EQ", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", 682 "'/'", "'%'", "UMINUS", "'^'", "'!'", "'='", "'('", "')'", "','", 683 "$accept", "top", "statements", "statement", "e", "gcdlist", "lcmlist", YY_NULL 684 }; 685 #endif 686 687 # ifdef YYPRINT 688 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 689 token YYLEX-NUM. */ 690 static const yytype_uint16 yytoknum[] = 691 { 692 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 693 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 694 275, 276, 277, 278, 60, 62, 279, 280, 281, 282, 695 283, 284, 43, 45, 42, 47, 37, 285, 94, 33, 696 61, 40, 41, 44 697 }; 698 # endif 699 700 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 701 static const yytype_uint8 yyr1[] = 702 { 703 0, 44, 45, 45, 46, 46, 46, 47, 47, 47, 704 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 705 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 706 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 707 48, 48, 48, 48, 48, 48, 49, 49, 50, 50 708 }; 709 710 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 711 static const yytype_uint8 yyr2[] = 712 { 713 0, 2, 1, 2, 2, 3, 2, 0, 1, 3, 714 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 715 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 716 3, 3, 3, 4, 6, 4, 4, 6, 4, 4, 717 4, 8, 6, 4, 1, 1, 1, 3, 1, 3 718 }; 719 720 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. 721 Performed when YYTABLE doesn't specify something else to do. Zero 722 means the default is an error. */ 723 static const yytype_uint8 yydefact[] = 724 { 725 0, 0, 10, 11, 12, 13, 0, 0, 0, 0, 726 0, 0, 0, 0, 0, 0, 0, 45, 44, 0, 727 0, 0, 7, 2, 8, 6, 0, 0, 0, 0, 728 0, 0, 0, 0, 0, 0, 0, 0, 44, 24, 729 0, 1, 3, 4, 0, 0, 0, 0, 0, 0, 730 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731 23, 0, 0, 0, 46, 0, 0, 48, 0, 0, 732 0, 0, 0, 0, 9, 14, 5, 32, 31, 25, 733 30, 29, 26, 28, 27, 22, 21, 15, 16, 17, 734 18, 19, 20, 33, 0, 35, 36, 0, 0, 38, 735 0, 39, 40, 0, 0, 43, 0, 47, 0, 49, 736 0, 0, 34, 37, 0, 42, 0, 41 737 }; 738 739 /* YYDEFGOTO[NTERM-NUM]. */ 740 static const yytype_int8 yydefgoto[] = 741 { 742 -1, 21, 22, 23, 24, 65, 68 743 }; 744 745 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 746 STATE-NUM. */ 747 #define YYPACT_NINF -39 748 static const yytype_int16 yypact[] = 749 { 750 41, 3, -39, -39, -39, -39, 2, 4, 27, 32, 751 35, 36, 39, 42, 45, 46, 47, -39, -18, 124, 752 124, 89, 91, 87, 464, -39, 124, 124, 124, 124, 753 124, 124, 124, 124, 124, 124, 124, 124, -39, -36, 754 254, -39, 88, -39, 124, 124, 124, 124, 124, 124, 755 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 756 -39, 275, 144, 296, 464, -38, 166, 464, 29, 317, 757 338, 188, 210, 359, 464, -39, -39, 481, 497, 513, 758 513, 513, 513, 513, 513, 31, 31, -15, -15, -36, 759 -36, -36, -36, -39, 124, -39, -39, 124, 124, -39, 760 124, -39, -39, 124, 124, -39, 380, 464, 401, 464, 761 232, 422, -39, -39, 124, -39, 443, -39 762 }; 763 764 /* YYPGOTO[NTERM-NUM]. */ 765 static const yytype_int8 yypgoto[] = 766 { 767 -39, -39, -39, 70, -19, -39, -39 768 }; 769 770 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 771 positive, shift that token. If negative, reduce the rule which 772 number is the opposite. If YYTABLE_NINF, syntax error. */ 773 #define YYTABLE_NINF -8 774 static const yytype_int8 yytable[] = 775 { 776 39, 40, 59, 60, 96, 97, 25, 61, 62, 63, 777 64, 66, 67, 69, 70, 71, 72, 73, 74, 56, 778 57, 58, 37, 59, 60, 77, 78, 79, 80, 81, 779 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 780 92, -7, 1, 26, -7, 27, 2, 3, 4, 5, 781 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 782 16, 17, 18, 54, 55, 56, 57, 58, 28, 59, 783 60, 99, 100, 29, 19, 106, 30, 31, 107, 108, 784 32, 109, 20, 33, 110, 111, 34, 35, 36, 41, 785 43, 76, 42, 0, 0, 116, 2, 3, 4, 5, 786 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 787 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 788 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 789 0, 0, 20, 6, 7, 8, 9, 10, 11, 12, 790 13, 14, 15, 16, 17, 38, 0, 0, 0, 0, 791 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 792 0, 0, 0, 0, 0, 20, 44, 45, 46, 47, 793 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 794 58, 0, 59, 60, 0, 0, 0, 94, 44, 45, 795 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 796 56, 57, 58, 0, 59, 60, 0, 0, 0, 98, 797 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 798 54, 55, 56, 57, 58, 0, 59, 60, 0, 0, 799 0, 103, 44, 45, 46, 47, 48, 49, 50, 51, 800 52, 53, 54, 55, 56, 57, 58, 0, 59, 60, 801 0, 0, 0, 104, 44, 45, 46, 47, 48, 49, 802 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 803 59, 60, 0, 0, 0, 114, 44, 45, 46, 47, 804 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 805 58, 0, 59, 60, 0, 0, 75, 44, 45, 46, 806 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 807 57, 58, 0, 59, 60, 0, 0, 93, 44, 45, 808 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 809 56, 57, 58, 0, 59, 60, 0, 0, 95, 44, 810 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 811 55, 56, 57, 58, 0, 59, 60, 0, 0, 101, 812 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 813 54, 55, 56, 57, 58, 0, 59, 60, 0, 0, 814 102, 44, 45, 46, 47, 48, 49, 50, 51, 52, 815 53, 54, 55, 56, 57, 58, 0, 59, 60, 0, 816 0, 105, 44, 45, 46, 47, 48, 49, 50, 51, 817 52, 53, 54, 55, 56, 57, 58, 0, 59, 60, 818 0, 0, 112, 44, 45, 46, 47, 48, 49, 50, 819 51, 52, 53, 54, 55, 56, 57, 58, 0, 59, 820 60, 0, 0, 113, 44, 45, 46, 47, 48, 49, 821 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 822 59, 60, 0, 0, 115, 44, 45, 46, 47, 48, 823 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 824 0, 59, 60, 0, 0, 117, 44, 45, 46, 47, 825 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 826 58, 0, 59, 60, 45, 46, 47, 48, 49, 50, 827 51, 52, 53, 54, 55, 56, 57, 58, 0, 59, 828 60, 46, 47, 48, 49, 50, 51, 52, 53, 54, 829 55, 56, 57, 58, 0, 59, 60, -8, -8, -8, 830 -8, -8, -8, 52, 53, 54, 55, 56, 57, 58, 831 0, 59, 60 832 }; 833 834 #define yypact_value_is_default(Yystate) \ 835 (!!((Yystate) == (-39))) 836 837 #define yytable_value_is_error(Yytable_value) \ 838 (!!((Yytable_value) == (-8))) 839 840 static const yytype_int8 yycheck[] = 841 { 842 19, 20, 38, 39, 42, 43, 3, 26, 27, 28, 843 29, 30, 31, 32, 33, 34, 35, 36, 37, 34, 844 35, 36, 40, 38, 39, 44, 45, 46, 47, 48, 845 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 846 59, 0, 1, 41, 3, 41, 5, 6, 7, 8, 847 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 848 19, 20, 21, 32, 33, 34, 35, 36, 41, 38, 849 39, 42, 43, 41, 33, 94, 41, 41, 97, 98, 850 41, 100, 41, 41, 103, 104, 41, 41, 41, 0, 851 3, 3, 22, -1, -1, 114, 5, 6, 7, 8, 852 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 853 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, 854 -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, 855 -1, -1, 41, 9, 10, 11, 12, 13, 14, 15, 856 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, 857 -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, 858 -1, -1, -1, -1, -1, 41, 22, 23, 24, 25, 859 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 860 36, -1, 38, 39, -1, -1, -1, 43, 22, 23, 861 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 862 34, 35, 36, -1, 38, 39, -1, -1, -1, 43, 863 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 864 32, 33, 34, 35, 36, -1, 38, 39, -1, -1, 865 -1, 43, 22, 23, 24, 25, 26, 27, 28, 29, 866 30, 31, 32, 33, 34, 35, 36, -1, 38, 39, 867 -1, -1, -1, 43, 22, 23, 24, 25, 26, 27, 868 28, 29, 30, 31, 32, 33, 34, 35, 36, -1, 869 38, 39, -1, -1, -1, 43, 22, 23, 24, 25, 870 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 871 36, -1, 38, 39, -1, -1, 42, 22, 23, 24, 872 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 873 35, 36, -1, 38, 39, -1, -1, 42, 22, 23, 874 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 875 34, 35, 36, -1, 38, 39, -1, -1, 42, 22, 876 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 877 33, 34, 35, 36, -1, 38, 39, -1, -1, 42, 878 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 879 32, 33, 34, 35, 36, -1, 38, 39, -1, -1, 880 42, 22, 23, 24, 25, 26, 27, 28, 29, 30, 881 31, 32, 33, 34, 35, 36, -1, 38, 39, -1, 882 -1, 42, 22, 23, 24, 25, 26, 27, 28, 29, 883 30, 31, 32, 33, 34, 35, 36, -1, 38, 39, 884 -1, -1, 42, 22, 23, 24, 25, 26, 27, 28, 885 29, 30, 31, 32, 33, 34, 35, 36, -1, 38, 886 39, -1, -1, 42, 22, 23, 24, 25, 26, 27, 887 28, 29, 30, 31, 32, 33, 34, 35, 36, -1, 888 38, 39, -1, -1, 42, 22, 23, 24, 25, 26, 889 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 890 -1, 38, 39, -1, -1, 42, 22, 23, 24, 25, 891 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 892 36, -1, 38, 39, 23, 24, 25, 26, 27, 28, 893 29, 30, 31, 32, 33, 34, 35, 36, -1, 38, 894 39, 24, 25, 26, 27, 28, 29, 30, 31, 32, 895 33, 34, 35, 36, -1, 38, 39, 24, 25, 26, 896 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 897 -1, 38, 39 898 }; 899 900 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 901 symbol of state STATE-NUM. */ 902 static const yytype_uint8 yystos[] = 903 { 904 0, 1, 5, 6, 7, 8, 9, 10, 11, 12, 905 13, 14, 15, 16, 17, 18, 19, 20, 21, 33, 906 41, 45, 46, 47, 48, 3, 41, 41, 41, 41, 907 41, 41, 41, 41, 41, 41, 41, 40, 21, 48, 908 48, 0, 47, 3, 22, 23, 24, 25, 26, 27, 909 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 910 39, 48, 48, 48, 48, 49, 48, 48, 50, 48, 911 48, 48, 48, 48, 48, 42, 3, 48, 48, 48, 912 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 913 48, 48, 48, 42, 43, 42, 42, 43, 43, 42, 914 43, 42, 42, 43, 43, 42, 48, 48, 48, 48, 915 48, 48, 42, 42, 43, 42, 48, 42 916 }; 917 918 #define yyerrok (yyerrstatus = 0) 919 #define yyclearin (yychar = YYEMPTY) 920 #define YYEMPTY (-2) 921 #define YYEOF 0 922 923 #define YYACCEPT goto yyacceptlab 924 #define YYABORT goto yyabortlab 925 #define YYERROR goto yyerrorlab 926 927 928 /* Like YYERROR except do call yyerror. This remains here temporarily 929 to ease the transition to the new meaning of YYERROR, for GCC. 930 Once GCC version 2 has supplanted version 1, this can go. However, 931 YYFAIL appears to be in use. Nevertheless, it is formally deprecated 932 in Bison 2.4.2's NEWS entry, where a plan to phase it out is 933 discussed. */ 934 935 #define YYFAIL goto yyerrlab 936 #if defined YYFAIL 937 /* This is here to suppress warnings from the GCC cpp's 938 -Wunused-macros. Normally we don't worry about that warning, but 939 some users do, and we want to make it easy for users to remove 940 YYFAIL uses, which will produce warnings from Bison 2.5. */ 941 #endif 942 943 #define YYRECOVERING() (!!yyerrstatus) 944 945 #define YYBACKUP(Token, Value) \ 946 do \ 947 if (yychar == YYEMPTY) \ 948 { \ 949 yychar = (Token); \ 950 yylval = (Value); \ 951 YYPOPSTACK (yylen); \ 952 yystate = *yyssp; \ 953 goto yybackup; \ 954 } \ 955 else \ 956 { \ 957 yyerror (YY_("syntax error: cannot back up")); \ 958 YYERROR; \ 959 } \ 960 while (YYID (0)) 961 962 /* Error token number */ 963 #define YYTERROR 1 964 #define YYERRCODE 256 965 966 967 /* This macro is provided for backward compatibility. */ 968 #ifndef YY_LOCATION_PRINT 969 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 970 #endif 971 972 973 /* YYLEX -- calling `yylex' with the right arguments. */ 974 #ifdef YYLEX_PARAM 975 # define YYLEX yylex (YYLEX_PARAM) 976 #else 977 # define YYLEX yylex () 978 #endif 979 980 /* Enable debugging if requested. */ 981 #if YYDEBUG 982 983 # ifndef YYFPRINTF 984 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 985 # define YYFPRINTF fprintf 986 # endif 987 988 # define YYDPRINTF(Args) \ 989 do { \ 990 if (yydebug) \ 991 YYFPRINTF Args; \ 992 } while (YYID (0)) 993 994 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 995 do { \ 996 if (yydebug) \ 997 { \ 998 YYFPRINTF (stderr, "%s ", Title); \ 999 yy_symbol_print (stderr, \ 1000 Type, Value); \ 1001 YYFPRINTF (stderr, "\n"); \ 1002 } \ 1003 } while (YYID (0)) 1004 1005 1006 /*--------------------------------. 1007 | Print this symbol on YYOUTPUT. | 1008 `--------------------------------*/ 1009 1010 /*ARGSUSED*/ 1011 #if (defined __STDC__ || defined __C99__FUNC__ \ 1012 || defined __cplusplus || defined _MSC_VER) 1013 static void 1014 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1015 #else 1016 static void 1017 yy_symbol_value_print (yyoutput, yytype, yyvaluep) 1018 FILE *yyoutput; 1019 int yytype; 1020 YYSTYPE const * const yyvaluep; 1021 #endif 1022 { 1023 FILE *yyo = yyoutput; 1024 YYUSE (yyo); 1025 if (!yyvaluep) 1026 return; 1027 # ifdef YYPRINT 1028 if (yytype < YYNTOKENS) 1029 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 1030 # else 1031 YYUSE (yyoutput); 1032 # endif 1033 YYUSE (yytype); 1034 } 1035 1036 1037 /*--------------------------------. 1038 | Print this symbol on YYOUTPUT. | 1039 `--------------------------------*/ 1040 1041 #if (defined __STDC__ || defined __C99__FUNC__ \ 1042 || defined __cplusplus || defined _MSC_VER) 1043 static void 1044 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1045 #else 1046 static void 1047 yy_symbol_print (yyoutput, yytype, yyvaluep) 1048 FILE *yyoutput; 1049 int yytype; 1050 YYSTYPE const * const yyvaluep; 1051 #endif 1052 { 1053 if (yytype < YYNTOKENS) 1054 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 1055 else 1056 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 1057 1058 yy_symbol_value_print (yyoutput, yytype, yyvaluep); 1059 YYFPRINTF (yyoutput, ")"); 1060 } 1061 1062 /*------------------------------------------------------------------. 1063 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 1064 | TOP (included). | 1065 `------------------------------------------------------------------*/ 1066 1067 #if (defined __STDC__ || defined __C99__FUNC__ \ 1068 || defined __cplusplus || defined _MSC_VER) 1069 static void 1070 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 1071 #else 1072 static void 1073 yy_stack_print (yybottom, yytop) 1074 yytype_int16 *yybottom; 1075 yytype_int16 *yytop; 1076 #endif 1077 { 1078 YYFPRINTF (stderr, "Stack now"); 1079 for (; yybottom <= yytop; yybottom++) 1080 { 1081 int yybot = *yybottom; 1082 YYFPRINTF (stderr, " %d", yybot); 1083 } 1084 YYFPRINTF (stderr, "\n"); 1085 } 1086 1087 # define YY_STACK_PRINT(Bottom, Top) \ 1088 do { \ 1089 if (yydebug) \ 1090 yy_stack_print ((Bottom), (Top)); \ 1091 } while (YYID (0)) 1092 1093 1094 /*------------------------------------------------. 1095 | Report that the YYRULE is going to be reduced. | 1096 `------------------------------------------------*/ 1097 1098 #if (defined __STDC__ || defined __C99__FUNC__ \ 1099 || defined __cplusplus || defined _MSC_VER) 1100 static void 1101 yy_reduce_print (YYSTYPE *yyvsp, int yyrule) 1102 #else 1103 static void 1104 yy_reduce_print (yyvsp, yyrule) 1105 YYSTYPE *yyvsp; 1106 int yyrule; 1107 #endif 1108 { 1109 int yynrhs = yyr2[yyrule]; 1110 int yyi; 1111 unsigned long int yylno = yyrline[yyrule]; 1112 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 1113 yyrule - 1, yylno); 1114 /* The symbols being reduced. */ 1115 for (yyi = 0; yyi < yynrhs; yyi++) 1116 { 1117 YYFPRINTF (stderr, " $%d = ", yyi + 1); 1118 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 1119 &(yyvsp[(yyi + 1) - (yynrhs)]) 1120 ); 1121 YYFPRINTF (stderr, "\n"); 1122 } 1123 } 1124 1125 # define YY_REDUCE_PRINT(Rule) \ 1126 do { \ 1127 if (yydebug) \ 1128 yy_reduce_print (yyvsp, Rule); \ 1129 } while (YYID (0)) 1130 1131 /* Nonzero means print parse trace. It is left uninitialized so that 1132 multiple parsers can coexist. */ 1133 int yydebug; 1134 #else /* !YYDEBUG */ 1135 # define YYDPRINTF(Args) 1136 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 1137 # define YY_STACK_PRINT(Bottom, Top) 1138 # define YY_REDUCE_PRINT(Rule) 1139 #endif /* !YYDEBUG */ 1140 1141 1142 /* YYINITDEPTH -- initial size of the parser's stacks. */ 1143 #ifndef YYINITDEPTH 1144 # define YYINITDEPTH 200 1145 #endif 1146 1147 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 1148 if the built-in stack extension method is used). 1149 1150 Do not make this value too large; the results are undefined if 1151 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 1152 evaluated with infinite-precision integer arithmetic. */ 1153 1154 #ifndef YYMAXDEPTH 1155 # define YYMAXDEPTH 10000 1156 #endif 1157 1158 1159 #if YYERROR_VERBOSE 1160 1161 # ifndef yystrlen 1162 # if defined __GLIBC__ && defined _STRING_H 1163 # define yystrlen strlen 1164 # else 1165 /* Return the length of YYSTR. */ 1166 #if (defined __STDC__ || defined __C99__FUNC__ \ 1167 || defined __cplusplus || defined _MSC_VER) 1168 static YYSIZE_T 1169 yystrlen (const char *yystr) 1170 #else 1171 static YYSIZE_T 1172 yystrlen (yystr) 1173 const char *yystr; 1174 #endif 1175 { 1176 YYSIZE_T yylen; 1177 for (yylen = 0; yystr[yylen]; yylen++) 1178 continue; 1179 return yylen; 1180 } 1181 # endif 1182 # endif 1183 1184 # ifndef yystpcpy 1185 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 1186 # define yystpcpy stpcpy 1187 # else 1188 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 1189 YYDEST. */ 1190 #if (defined __STDC__ || defined __C99__FUNC__ \ 1191 || defined __cplusplus || defined _MSC_VER) 1192 static char * 1193 yystpcpy (char *yydest, const char *yysrc) 1194 #else 1195 static char * 1196 yystpcpy (yydest, yysrc) 1197 char *yydest; 1198 const char *yysrc; 1199 #endif 1200 { 1201 char *yyd = yydest; 1202 const char *yys = yysrc; 1203 1204 while ((*yyd++ = *yys++) != '\0') 1205 continue; 1206 1207 return yyd - 1; 1208 } 1209 # endif 1210 # endif 1211 1212 # ifndef yytnamerr 1213 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 1214 quotes and backslashes, so that it's suitable for yyerror. The 1215 heuristic is that double-quoting is unnecessary unless the string 1216 contains an apostrophe, a comma, or backslash (other than 1217 backslash-backslash). YYSTR is taken from yytname. If YYRES is 1218 null, do not copy; instead, return the length of what the result 1219 would have been. */ 1220 static YYSIZE_T 1221 yytnamerr (char *yyres, const char *yystr) 1222 { 1223 if (*yystr == '"') 1224 { 1225 YYSIZE_T yyn = 0; 1226 char const *yyp = yystr; 1227 1228 for (;;) 1229 switch (*++yyp) 1230 { 1231 case '\'': 1232 case ',': 1233 goto do_not_strip_quotes; 1234 1235 case '\\': 1236 if (*++yyp != '\\') 1237 goto do_not_strip_quotes; 1238 /* Fall through. */ 1239 default: 1240 if (yyres) 1241 yyres[yyn] = *yyp; 1242 yyn++; 1243 break; 1244 1245 case '"': 1246 if (yyres) 1247 yyres[yyn] = '\0'; 1248 return yyn; 1249 } 1250 do_not_strip_quotes: ; 1251 } 1252 1253 if (! yyres) 1254 return yystrlen (yystr); 1255 1256 return yystpcpy (yyres, yystr) - yyres; 1257 } 1258 # endif 1259 1260 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message 1261 about the unexpected token YYTOKEN for the state stack whose top is 1262 YYSSP. 1263 1264 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is 1265 not large enough to hold the message. In that case, also set 1266 *YYMSG_ALLOC to the required number of bytes. Return 2 if the 1267 required number of bytes is too large to store. */ 1268 static int 1269 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 1270 yytype_int16 *yyssp, int yytoken) 1271 { 1272 YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); 1273 YYSIZE_T yysize = yysize0; 1274 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 1275 /* Internationalized format string. */ 1276 const char *yyformat = YY_NULL; 1277 /* Arguments of yyformat. */ 1278 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 1279 /* Number of reported tokens (one for the "unexpected", one per 1280 "expected"). */ 1281 int yycount = 0; 1282 1283 /* There are many possibilities here to consider: 1284 - Assume YYFAIL is not used. It's too flawed to consider. See 1285 <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> 1286 for details. YYERROR is fine as it does not invoke this 1287 function. 1288 - If this state is a consistent state with a default action, then 1289 the only way this function was invoked is if the default action 1290 is an error action. In that case, don't check for expected 1291 tokens because there are none. 1292 - The only way there can be no lookahead present (in yychar) is if 1293 this state is a consistent state with a default action. Thus, 1294 detecting the absence of a lookahead is sufficient to determine 1295 that there is no unexpected or expected token to report. In that 1296 case, just report a simple "syntax error". 1297 - Don't assume there isn't a lookahead just because this state is a 1298 consistent state with a default action. There might have been a 1299 previous inconsistent state, consistent state with a non-default 1300 action, or user semantic action that manipulated yychar. 1301 - Of course, the expected token list depends on states to have 1302 correct lookahead information, and it depends on the parser not 1303 to perform extra reductions after fetching a lookahead from the 1304 scanner and before detecting a syntax error. Thus, state merging 1305 (from LALR or IELR) and default reductions corrupt the expected 1306 token list. However, the list is correct for canonical LR with 1307 one exception: it will still contain any token that will not be 1308 accepted due to an error action in a later state. 1309 */ 1310 if (yytoken != YYEMPTY) 1311 { 1312 int yyn = yypact[*yyssp]; 1313 yyarg[yycount++] = yytname[yytoken]; 1314 if (!yypact_value_is_default (yyn)) 1315 { 1316 /* Start YYX at -YYN if negative to avoid negative indexes in 1317 YYCHECK. In other words, skip the first -YYN actions for 1318 this state because they are default actions. */ 1319 int yyxbegin = yyn < 0 ? -yyn : 0; 1320 /* Stay within bounds of both yycheck and yytname. */ 1321 int yychecklim = YYLAST - yyn + 1; 1322 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 1323 int yyx; 1324 1325 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 1326 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR 1327 && !yytable_value_is_error (yytable[yyx + yyn])) 1328 { 1329 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 1330 { 1331 yycount = 1; 1332 yysize = yysize0; 1333 break; 1334 } 1335 yyarg[yycount++] = yytname[yyx]; 1336 { 1337 YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); 1338 if (! (yysize <= yysize1 1339 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1340 return 2; 1341 yysize = yysize1; 1342 } 1343 } 1344 } 1345 } 1346 1347 switch (yycount) 1348 { 1349 # define YYCASE_(N, S) \ 1350 case N: \ 1351 yyformat = S; \ 1352 break 1353 YYCASE_(0, YY_("syntax error")); 1354 YYCASE_(1, YY_("syntax error, unexpected %s")); 1355 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); 1356 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); 1357 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); 1358 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); 1359 # undef YYCASE_ 1360 } 1361 1362 { 1363 YYSIZE_T yysize1 = yysize + yystrlen (yyformat); 1364 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1365 return 2; 1366 yysize = yysize1; 1367 } 1368 1369 if (*yymsg_alloc < yysize) 1370 { 1371 *yymsg_alloc = 2 * yysize; 1372 if (! (yysize <= *yymsg_alloc 1373 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) 1374 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; 1375 return 1; 1376 } 1377 1378 /* Avoid sprintf, as that infringes on the user's name space. 1379 Don't have undefined behavior even if the translation 1380 produced a string with the wrong number of "%s"s. */ 1381 { 1382 char *yyp = *yymsg; 1383 int yyi = 0; 1384 while ((*yyp = *yyformat) != '\0') 1385 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) 1386 { 1387 yyp += yytnamerr (yyp, yyarg[yyi++]); 1388 yyformat += 2; 1389 } 1390 else 1391 { 1392 yyp++; 1393 yyformat++; 1394 } 1395 } 1396 return 0; 1397 } 1398 #endif /* YYERROR_VERBOSE */ 1399 1400 /*-----------------------------------------------. 1401 | Release the memory associated to this symbol. | 1402 `-----------------------------------------------*/ 1403 1404 /*ARGSUSED*/ 1405 #if (defined __STDC__ || defined __C99__FUNC__ \ 1406 || defined __cplusplus || defined _MSC_VER) 1407 static void 1408 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) 1409 #else 1410 static void 1411 yydestruct (yymsg, yytype, yyvaluep) 1412 const char *yymsg; 1413 int yytype; 1414 YYSTYPE *yyvaluep; 1415 #endif 1416 { 1417 YYUSE (yyvaluep); 1418 1419 if (!yymsg) 1420 yymsg = "Deleting"; 1421 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 1422 1423 YYUSE (yytype); 1424 } 1425 1426 1427 1428 1429 /* The lookahead symbol. */ 1430 int yychar; 1431 1432 1433 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1434 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1435 # define YY_IGNORE_MAYBE_UNINITIALIZED_END 1436 #endif 1437 #ifndef YY_INITIAL_VALUE 1438 # define YY_INITIAL_VALUE(Value) /* Nothing. */ 1439 #endif 1440 1441 /* The semantic value of the lookahead symbol. */ 1442 YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); 1443 1444 /* Number of syntax errors so far. */ 1445 int yynerrs; 1446 1447 1448 /*----------. 1449 | yyparse. | 1450 `----------*/ 1451 1452 #ifdef YYPARSE_PARAM 1453 #if (defined __STDC__ || defined __C99__FUNC__ \ 1454 || defined __cplusplus || defined _MSC_VER) 1455 int 1456 yyparse (void *YYPARSE_PARAM) 1457 #else 1458 int 1459 yyparse (YYPARSE_PARAM) 1460 void *YYPARSE_PARAM; 1461 #endif 1462 #else /* ! YYPARSE_PARAM */ 1463 #if (defined __STDC__ || defined __C99__FUNC__ \ 1464 || defined __cplusplus || defined _MSC_VER) 1465 int 1466 yyparse (void) 1467 #else 1468 int 1469 yyparse () 1470 1471 #endif 1472 #endif 1473 { 1474 int yystate; 1475 /* Number of tokens to shift before error messages enabled. */ 1476 int yyerrstatus; 1477 1478 /* The stacks and their tools: 1479 `yyss': related to states. 1480 `yyvs': related to semantic values. 1481 1482 Refer to the stacks through separate pointers, to allow yyoverflow 1483 to reallocate them elsewhere. */ 1484 1485 /* The state stack. */ 1486 yytype_int16 yyssa[YYINITDEPTH]; 1487 yytype_int16 *yyss; 1488 yytype_int16 *yyssp; 1489 1490 /* The semantic value stack. */ 1491 YYSTYPE yyvsa[YYINITDEPTH]; 1492 YYSTYPE *yyvs; 1493 YYSTYPE *yyvsp; 1494 1495 YYSIZE_T yystacksize; 1496 1497 int yyn; 1498 int yyresult; 1499 /* Lookahead token as an internal (translated) token number. */ 1500 int yytoken = 0; 1501 /* The variables used to return semantic value and location from the 1502 action routines. */ 1503 YYSTYPE yyval; 1504 1505 #if YYERROR_VERBOSE 1506 /* Buffer for error messages, and its allocated size. */ 1507 char yymsgbuf[128]; 1508 char *yymsg = yymsgbuf; 1509 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 1510 #endif 1511 1512 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 1513 1514 /* The number of symbols on the RHS of the reduced rule. 1515 Keep to zero when no symbol should be popped. */ 1516 int yylen = 0; 1517 1518 yyssp = yyss = yyssa; 1519 yyvsp = yyvs = yyvsa; 1520 yystacksize = YYINITDEPTH; 1521 1522 YYDPRINTF ((stderr, "Starting parse\n")); 1523 1524 yystate = 0; 1525 yyerrstatus = 0; 1526 yynerrs = 0; 1527 yychar = YYEMPTY; /* Cause a token to be read. */ 1528 goto yysetstate; 1529 1530 /*------------------------------------------------------------. 1531 | yynewstate -- Push a new state, which is found in yystate. | 1532 `------------------------------------------------------------*/ 1533 yynewstate: 1534 /* In all cases, when you get here, the value and location stacks 1535 have just been pushed. So pushing a state here evens the stacks. */ 1536 yyssp++; 1537 1538 yysetstate: 1539 *yyssp = yystate; 1540 1541 if (yyss + yystacksize - 1 <= yyssp) 1542 { 1543 /* Get the current used size of the three stacks, in elements. */ 1544 YYSIZE_T yysize = yyssp - yyss + 1; 1545 1546 #ifdef yyoverflow 1547 { 1548 /* Give user a chance to reallocate the stack. Use copies of 1549 these so that the &'s don't force the real ones into 1550 memory. */ 1551 YYSTYPE *yyvs1 = yyvs; 1552 yytype_int16 *yyss1 = yyss; 1553 1554 /* Each stack pointer address is followed by the size of the 1555 data in use in that stack, in bytes. This used to be a 1556 conditional around just the two extra args, but that might 1557 be undefined if yyoverflow is a macro. */ 1558 yyoverflow (YY_("memory exhausted"), 1559 &yyss1, yysize * sizeof (*yyssp), 1560 &yyvs1, yysize * sizeof (*yyvsp), 1561 &yystacksize); 1562 1563 yyss = yyss1; 1564 yyvs = yyvs1; 1565 } 1566 #else /* no yyoverflow */ 1567 # ifndef YYSTACK_RELOCATE 1568 goto yyexhaustedlab; 1569 # else 1570 /* Extend the stack our own way. */ 1571 if (YYMAXDEPTH <= yystacksize) 1572 goto yyexhaustedlab; 1573 yystacksize *= 2; 1574 if (YYMAXDEPTH < yystacksize) 1575 yystacksize = YYMAXDEPTH; 1576 1577 { 1578 yytype_int16 *yyss1 = yyss; 1579 union yyalloc *yyptr = 1580 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 1581 if (! yyptr) 1582 goto yyexhaustedlab; 1583 YYSTACK_RELOCATE (yyss_alloc, yyss); 1584 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 1585 # undef YYSTACK_RELOCATE 1586 if (yyss1 != yyssa) 1587 YYSTACK_FREE (yyss1); 1588 } 1589 # endif 1590 #endif /* no yyoverflow */ 1591 1592 yyssp = yyss + yysize - 1; 1593 yyvsp = yyvs + yysize - 1; 1594 1595 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 1596 (unsigned long int) yystacksize)); 1597 1598 if (yyss + yystacksize - 1 <= yyssp) 1599 YYABORT; 1600 } 1601 1602 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 1603 1604 if (yystate == YYFINAL) 1605 YYACCEPT; 1606 1607 goto yybackup; 1608 1609 /*-----------. 1610 | yybackup. | 1611 `-----------*/ 1612 yybackup: 1613 1614 /* Do appropriate processing given the current state. Read a 1615 lookahead token if we need one and don't already have one. */ 1616 1617 /* First try to decide what to do without reference to lookahead token. */ 1618 yyn = yypact[yystate]; 1619 if (yypact_value_is_default (yyn)) 1620 goto yydefault; 1621 1622 /* Not known => get a lookahead token if don't already have one. */ 1623 1624 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 1625 if (yychar == YYEMPTY) 1626 { 1627 YYDPRINTF ((stderr, "Reading a token: ")); 1628 yychar = YYLEX; 1629 } 1630 1631 if (yychar <= YYEOF) 1632 { 1633 yychar = yytoken = YYEOF; 1634 YYDPRINTF ((stderr, "Now at end of input.\n")); 1635 } 1636 else 1637 { 1638 yytoken = YYTRANSLATE (yychar); 1639 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 1640 } 1641 1642 /* If the proper action on seeing token YYTOKEN is to reduce or to 1643 detect an error, take that action. */ 1644 yyn += yytoken; 1645 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 1646 goto yydefault; 1647 yyn = yytable[yyn]; 1648 if (yyn <= 0) 1649 { 1650 if (yytable_value_is_error (yyn)) 1651 goto yyerrlab; 1652 yyn = -yyn; 1653 goto yyreduce; 1654 } 1655 1656 /* Count tokens shifted since error; after three, turn off error 1657 status. */ 1658 if (yyerrstatus) 1659 yyerrstatus--; 1660 1661 /* Shift the lookahead token. */ 1662 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 1663 1664 /* Discard the shifted token. */ 1665 yychar = YYEMPTY; 1666 1667 yystate = yyn; 1668 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1669 *++yyvsp = yylval; 1670 YY_IGNORE_MAYBE_UNINITIALIZED_END 1671 1672 goto yynewstate; 1673 1674 1675 /*-----------------------------------------------------------. 1676 | yydefault -- do the default action for the current state. | 1677 `-----------------------------------------------------------*/ 1678 yydefault: 1679 yyn = yydefact[yystate]; 1680 if (yyn == 0) 1681 goto yyerrlab; 1682 goto yyreduce; 1683 1684 1685 /*-----------------------------. 1686 | yyreduce -- Do a reduction. | 1687 `-----------------------------*/ 1688 yyreduce: 1689 /* yyn is the number of a rule to reduce with. */ 1690 yylen = yyr2[yyn]; 1691 1692 /* If YYLEN is nonzero, implement the default value of the action: 1693 `$$ = $1'. 1694 1695 Otherwise, the following line sets YYVAL to garbage. 1696 This behavior is undocumented and Bison 1697 users should not rely upon it. Assigning to YYVAL 1698 unconditionally makes the parser a bit smaller, and it avoids a 1699 GCC warning that YYVAL may be used uninitialized. */ 1700 yyval = yyvsp[1-yylen]; 1701 1702 1703 YY_REDUCE_PRINT (yyn); 1704 switch (yyn) 1705 { 1706 case 6: 1707 /* Line 1787 of yacc.c */ 1708 #line 173 "../../../gmp/demos/calc/calc.y" 1709 { sp = stack[0]; yyerrok; } 1710 break; 1711 1712 case 8: 1713 /* Line 1787 of yacc.c */ 1714 #line 177 "../../../gmp/demos/calc/calc.y" 1715 { 1716 mpz_out_str (stdout, obase, sp); putchar ('\n'); 1717 sp--; 1718 CHECK_EMPTY (); 1719 } 1720 break; 1721 1722 case 9: 1723 /* Line 1787 of yacc.c */ 1724 #line 182 "../../../gmp/demos/calc/calc.y" 1725 { 1726 CHECK_VARIABLE ((yyvsp[(1) - (3)].var)); 1727 mpz_swap (variable[(yyvsp[(1) - (3)].var)], sp); 1728 sp--; 1729 CHECK_EMPTY (); 1730 } 1731 break; 1732 1733 case 10: 1734 /* Line 1787 of yacc.c */ 1735 #line 188 "../../../gmp/demos/calc/calc.y" 1736 { calc_help (); } 1737 break; 1738 1739 case 11: 1740 /* Line 1787 of yacc.c */ 1741 #line 189 "../../../gmp/demos/calc/calc.y" 1742 { ibase = 16; obase = -16; } 1743 break; 1744 1745 case 12: 1746 /* Line 1787 of yacc.c */ 1747 #line 190 "../../../gmp/demos/calc/calc.y" 1748 { ibase = 0; obase = 10; } 1749 break; 1750 1751 case 13: 1752 /* Line 1787 of yacc.c */ 1753 #line 191 "../../../gmp/demos/calc/calc.y" 1754 { exit (0); } 1755 break; 1756 1757 case 15: 1758 /* Line 1787 of yacc.c */ 1759 #line 198 "../../../gmp/demos/calc/calc.y" 1760 { sp--; mpz_add (sp, sp, sp+1); } 1761 break; 1762 1763 case 16: 1764 /* Line 1787 of yacc.c */ 1765 #line 199 "../../../gmp/demos/calc/calc.y" 1766 { sp--; mpz_sub (sp, sp, sp+1); } 1767 break; 1768 1769 case 17: 1770 /* Line 1787 of yacc.c */ 1771 #line 200 "../../../gmp/demos/calc/calc.y" 1772 { sp--; mpz_mul (sp, sp, sp+1); } 1773 break; 1774 1775 case 18: 1776 /* Line 1787 of yacc.c */ 1777 #line 201 "../../../gmp/demos/calc/calc.y" 1778 { sp--; mpz_fdiv_q (sp, sp, sp+1); } 1779 break; 1780 1781 case 19: 1782 /* Line 1787 of yacc.c */ 1783 #line 202 "../../../gmp/demos/calc/calc.y" 1784 { sp--; mpz_fdiv_r (sp, sp, sp+1); } 1785 break; 1786 1787 case 20: 1788 /* Line 1787 of yacc.c */ 1789 #line 203 "../../../gmp/demos/calc/calc.y" 1790 { CHECK_UI ("Exponent", sp); 1791 sp--; mpz_pow_ui (sp, sp, mpz_get_ui (sp+1)); } 1792 break; 1793 1794 case 21: 1795 /* Line 1787 of yacc.c */ 1796 #line 205 "../../../gmp/demos/calc/calc.y" 1797 { CHECK_UI ("Shift count", sp); 1798 sp--; mpz_mul_2exp (sp, sp, mpz_get_ui (sp+1)); } 1799 break; 1800 1801 case 22: 1802 /* Line 1787 of yacc.c */ 1803 #line 207 "../../../gmp/demos/calc/calc.y" 1804 { CHECK_UI ("Shift count", sp); 1805 sp--; mpz_fdiv_q_2exp (sp, sp, mpz_get_ui (sp+1)); } 1806 break; 1807 1808 case 23: 1809 /* Line 1787 of yacc.c */ 1810 #line 209 "../../../gmp/demos/calc/calc.y" 1811 { CHECK_UI ("Factorial", sp); 1812 mpz_fac_ui (sp, mpz_get_ui (sp)); } 1813 break; 1814 1815 case 24: 1816 /* Line 1787 of yacc.c */ 1817 #line 211 "../../../gmp/demos/calc/calc.y" 1818 { mpz_neg (sp, sp); } 1819 break; 1820 1821 case 25: 1822 /* Line 1787 of yacc.c */ 1823 #line 213 "../../../gmp/demos/calc/calc.y" 1824 { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) < 0); } 1825 break; 1826 1827 case 26: 1828 /* Line 1787 of yacc.c */ 1829 #line 214 "../../../gmp/demos/calc/calc.y" 1830 { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <= 0); } 1831 break; 1832 1833 case 27: 1834 /* Line 1787 of yacc.c */ 1835 #line 215 "../../../gmp/demos/calc/calc.y" 1836 { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) == 0); } 1837 break; 1838 1839 case 28: 1840 /* Line 1787 of yacc.c */ 1841 #line 216 "../../../gmp/demos/calc/calc.y" 1842 { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) != 0); } 1843 break; 1844 1845 case 29: 1846 /* Line 1787 of yacc.c */ 1847 #line 217 "../../../gmp/demos/calc/calc.y" 1848 { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >= 0); } 1849 break; 1850 1851 case 30: 1852 /* Line 1787 of yacc.c */ 1853 #line 218 "../../../gmp/demos/calc/calc.y" 1854 { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) > 0); } 1855 break; 1856 1857 case 31: 1858 /* Line 1787 of yacc.c */ 1859 #line 220 "../../../gmp/demos/calc/calc.y" 1860 { sp--; mpz_set_ui (sp, mpz_sgn (sp) && mpz_sgn (sp+1)); } 1861 break; 1862 1863 case 32: 1864 /* Line 1787 of yacc.c */ 1865 #line 221 "../../../gmp/demos/calc/calc.y" 1866 { sp--; mpz_set_ui (sp, mpz_sgn (sp) || mpz_sgn (sp+1)); } 1867 break; 1868 1869 case 33: 1870 /* Line 1787 of yacc.c */ 1871 #line 223 "../../../gmp/demos/calc/calc.y" 1872 { mpz_abs (sp, sp); } 1873 break; 1874 1875 case 34: 1876 /* Line 1787 of yacc.c */ 1877 #line 224 "../../../gmp/demos/calc/calc.y" 1878 { sp--; CHECK_UI ("Binomial base", sp+1); 1879 mpz_bin_ui (sp, sp, mpz_get_ui (sp+1)); } 1880 break; 1881 1882 case 35: 1883 /* Line 1787 of yacc.c */ 1884 #line 226 "../../../gmp/demos/calc/calc.y" 1885 { CHECK_UI ("Fibonacci", sp); 1886 mpz_fib_ui (sp, mpz_get_ui (sp)); } 1887 break; 1888 1889 case 37: 1890 /* Line 1787 of yacc.c */ 1891 #line 229 "../../../gmp/demos/calc/calc.y" 1892 { sp--; mpz_set_si (sp, 1893 mpz_kronecker (sp, sp+1)); } 1894 break; 1895 1896 case 39: 1897 /* Line 1787 of yacc.c */ 1898 #line 232 "../../../gmp/demos/calc/calc.y" 1899 { CHECK_UI ("Lucas number", sp); 1900 mpz_lucnum_ui (sp, mpz_get_ui (sp)); } 1901 break; 1902 1903 case 40: 1904 /* Line 1787 of yacc.c */ 1905 #line 234 "../../../gmp/demos/calc/calc.y" 1906 { mpz_nextprime (sp, sp); } 1907 break; 1908 1909 case 41: 1910 /* Line 1787 of yacc.c */ 1911 #line 235 "../../../gmp/demos/calc/calc.y" 1912 { sp -= 2; mpz_powm (sp, sp, sp+1, sp+2); } 1913 break; 1914 1915 case 42: 1916 /* Line 1787 of yacc.c */ 1917 #line 236 "../../../gmp/demos/calc/calc.y" 1918 { sp--; CHECK_UI ("Nth-root", sp+1); 1919 mpz_root (sp, sp, mpz_get_ui (sp+1)); } 1920 break; 1921 1922 case 43: 1923 /* Line 1787 of yacc.c */ 1924 #line 238 "../../../gmp/demos/calc/calc.y" 1925 { mpz_sqrt (sp, sp); } 1926 break; 1927 1928 case 44: 1929 /* Line 1787 of yacc.c */ 1930 #line 240 "../../../gmp/demos/calc/calc.y" 1931 { 1932 sp++; 1933 CHECK_OVERFLOW (); 1934 CHECK_VARIABLE ((yyvsp[(1) - (1)].var)); 1935 mpz_set (sp, variable[(yyvsp[(1) - (1)].var)]); 1936 } 1937 break; 1938 1939 case 45: 1940 /* Line 1787 of yacc.c */ 1941 #line 246 "../../../gmp/demos/calc/calc.y" 1942 { 1943 sp++; 1944 CHECK_OVERFLOW (); 1945 if (mpz_set_str (sp, (yyvsp[(1) - (1)].str), ibase) != 0) 1946 { 1947 fprintf (stderr, "Invalid number: %s\n", (yyvsp[(1) - (1)].str)); 1948 YYERROR; 1949 } 1950 } 1951 break; 1952 1953 case 47: 1954 /* Line 1787 of yacc.c */ 1955 #line 258 "../../../gmp/demos/calc/calc.y" 1956 { sp--; mpz_gcd (sp, sp, sp+1); } 1957 break; 1958 1959 case 49: 1960 /* Line 1787 of yacc.c */ 1961 #line 262 "../../../gmp/demos/calc/calc.y" 1962 { sp--; mpz_lcm (sp, sp, sp+1); } 1963 break; 1964 1965 1966 /* Line 1787 of yacc.c */ 1967 #line 1968 "calc.c" 1968 default: break; 1969 } 1970 /* User semantic actions sometimes alter yychar, and that requires 1971 that yytoken be updated with the new translation. We take the 1972 approach of translating immediately before every use of yytoken. 1973 One alternative is translating here after every semantic action, 1974 but that translation would be missed if the semantic action invokes 1975 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 1976 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 1977 incorrect destructor might then be invoked immediately. In the 1978 case of YYERROR or YYBACKUP, subsequent parser actions might lead 1979 to an incorrect destructor call or verbose syntax error message 1980 before the lookahead is translated. */ 1981 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 1982 1983 YYPOPSTACK (yylen); 1984 yylen = 0; 1985 YY_STACK_PRINT (yyss, yyssp); 1986 1987 *++yyvsp = yyval; 1988 1989 /* Now `shift' the result of the reduction. Determine what state 1990 that goes to, based on the state we popped back to and the rule 1991 number reduced by. */ 1992 1993 yyn = yyr1[yyn]; 1994 1995 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 1996 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 1997 yystate = yytable[yystate]; 1998 else 1999 yystate = yydefgoto[yyn - YYNTOKENS]; 2000 2001 goto yynewstate; 2002 2003 2004 /*------------------------------------. 2005 | yyerrlab -- here on detecting error | 2006 `------------------------------------*/ 2007 yyerrlab: 2008 /* Make sure we have latest lookahead translation. See comments at 2009 user semantic actions for why this is necessary. */ 2010 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); 2011 2012 /* If not already recovering from an error, report this error. */ 2013 if (!yyerrstatus) 2014 { 2015 ++yynerrs; 2016 #if ! YYERROR_VERBOSE 2017 yyerror (YY_("syntax error")); 2018 #else 2019 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ 2020 yyssp, yytoken) 2021 { 2022 char const *yymsgp = YY_("syntax error"); 2023 int yysyntax_error_status; 2024 yysyntax_error_status = YYSYNTAX_ERROR; 2025 if (yysyntax_error_status == 0) 2026 yymsgp = yymsg; 2027 else if (yysyntax_error_status == 1) 2028 { 2029 if (yymsg != yymsgbuf) 2030 YYSTACK_FREE (yymsg); 2031 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); 2032 if (!yymsg) 2033 { 2034 yymsg = yymsgbuf; 2035 yymsg_alloc = sizeof yymsgbuf; 2036 yysyntax_error_status = 2; 2037 } 2038 else 2039 { 2040 yysyntax_error_status = YYSYNTAX_ERROR; 2041 yymsgp = yymsg; 2042 } 2043 } 2044 yyerror (yymsgp); 2045 if (yysyntax_error_status == 2) 2046 goto yyexhaustedlab; 2047 } 2048 # undef YYSYNTAX_ERROR 2049 #endif 2050 } 2051 2052 2053 2054 if (yyerrstatus == 3) 2055 { 2056 /* If just tried and failed to reuse lookahead token after an 2057 error, discard it. */ 2058 2059 if (yychar <= YYEOF) 2060 { 2061 /* Return failure if at end of input. */ 2062 if (yychar == YYEOF) 2063 YYABORT; 2064 } 2065 else 2066 { 2067 yydestruct ("Error: discarding", 2068 yytoken, &yylval); 2069 yychar = YYEMPTY; 2070 } 2071 } 2072 2073 /* Else will try to reuse lookahead token after shifting the error 2074 token. */ 2075 goto yyerrlab1; 2076 2077 2078 /*---------------------------------------------------. 2079 | yyerrorlab -- error raised explicitly by YYERROR. | 2080 `---------------------------------------------------*/ 2081 yyerrorlab: 2082 2083 /* Pacify compilers like GCC when the user code never invokes 2084 YYERROR and the label yyerrorlab therefore never appears in user 2085 code. */ 2086 if (/*CONSTCOND*/ 0) 2087 goto yyerrorlab; 2088 2089 /* Do not reclaim the symbols of the rule which action triggered 2090 this YYERROR. */ 2091 YYPOPSTACK (yylen); 2092 yylen = 0; 2093 YY_STACK_PRINT (yyss, yyssp); 2094 yystate = *yyssp; 2095 goto yyerrlab1; 2096 2097 2098 /*-------------------------------------------------------------. 2099 | yyerrlab1 -- common code for both syntax error and YYERROR. | 2100 `-------------------------------------------------------------*/ 2101 yyerrlab1: 2102 yyerrstatus = 3; /* Each real token shifted decrements this. */ 2103 2104 for (;;) 2105 { 2106 yyn = yypact[yystate]; 2107 if (!yypact_value_is_default (yyn)) 2108 { 2109 yyn += YYTERROR; 2110 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 2111 { 2112 yyn = yytable[yyn]; 2113 if (0 < yyn) 2114 break; 2115 } 2116 } 2117 2118 /* Pop the current state because it cannot handle the error token. */ 2119 if (yyssp == yyss) 2120 YYABORT; 2121 2122 2123 yydestruct ("Error: popping", 2124 yystos[yystate], yyvsp); 2125 YYPOPSTACK (1); 2126 yystate = *yyssp; 2127 YY_STACK_PRINT (yyss, yyssp); 2128 } 2129 2130 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 2131 *++yyvsp = yylval; 2132 YY_IGNORE_MAYBE_UNINITIALIZED_END 2133 2134 2135 /* Shift the error token. */ 2136 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 2137 2138 yystate = yyn; 2139 goto yynewstate; 2140 2141 2142 /*-------------------------------------. 2143 | yyacceptlab -- YYACCEPT comes here. | 2144 `-------------------------------------*/ 2145 yyacceptlab: 2146 yyresult = 0; 2147 goto yyreturn; 2148 2149 /*-----------------------------------. 2150 | yyabortlab -- YYABORT comes here. | 2151 `-----------------------------------*/ 2152 yyabortlab: 2153 yyresult = 1; 2154 goto yyreturn; 2155 2156 #if !defined yyoverflow || YYERROR_VERBOSE 2157 /*-------------------------------------------------. 2158 | yyexhaustedlab -- memory exhaustion comes here. | 2159 `-------------------------------------------------*/ 2160 yyexhaustedlab: 2161 yyerror (YY_("memory exhausted")); 2162 yyresult = 2; 2163 /* Fall through. */ 2164 #endif 2165 2166 yyreturn: 2167 if (yychar != YYEMPTY) 2168 { 2169 /* Make sure we have latest lookahead translation. See comments at 2170 user semantic actions for why this is necessary. */ 2171 yytoken = YYTRANSLATE (yychar); 2172 yydestruct ("Cleanup: discarding lookahead", 2173 yytoken, &yylval); 2174 } 2175 /* Do not reclaim the symbols of the rule which action triggered 2176 this YYABORT or YYACCEPT. */ 2177 YYPOPSTACK (yylen); 2178 YY_STACK_PRINT (yyss, yyssp); 2179 while (yyssp != yyss) 2180 { 2181 yydestruct ("Cleanup: popping", 2182 yystos[*yyssp], yyvsp); 2183 YYPOPSTACK (1); 2184 } 2185 #ifndef yyoverflow 2186 if (yyss != yyssa) 2187 YYSTACK_FREE (yyss); 2188 #endif 2189 #if YYERROR_VERBOSE 2190 if (yymsg != yymsgbuf) 2191 YYSTACK_FREE (yymsg); 2192 #endif 2193 /* Make sure YYID is used. */ 2194 return YYID (yyresult); 2195 } 2196 2197 2198 /* Line 2050 of yacc.c */ 2199 #line 264 "../../../gmp/demos/calc/calc.y" 2200 2201 2202 yyerror (char *s) 2203 { 2204 fprintf (stderr, "%s\n", s); 2205 } 2206 2207 int calc_option_readline = -1; 2208 2209 int 2210 main (int argc, char *argv[]) 2211 { 2212 int i; 2213 2214 for (i = 1; i < argc; i++) 2215 { 2216 if (strcmp (argv[i], "--readline") == 0) 2217 calc_option_readline = 1; 2218 else if (strcmp (argv[i], "--noreadline") == 0) 2219 calc_option_readline = 0; 2220 else if (strcmp (argv[i], "--help") == 0) 2221 { 2222 printf ("Usage: calc [--option]...\n"); 2223 printf (" --readline use readline\n"); 2224 printf (" --noreadline don't use readline\n"); 2225 printf (" --help this message\n"); 2226 printf ("Readline is only available when compiled in,\n"); 2227 printf ("and in that case it's the default on a tty.\n"); 2228 exit (0); 2229 } 2230 else 2231 { 2232 fprintf (stderr, "Unrecognised option: %s\n", argv[i]); 2233 exit (1); 2234 } 2235 } 2236 2237 #if WITH_READLINE 2238 calc_init_readline (); 2239 #else 2240 if (calc_option_readline == 1) 2241 { 2242 fprintf (stderr, "Readline support not available\n"); 2243 exit (1); 2244 } 2245 #endif 2246 2247 for (i = 0; i < numberof (variable); i++) 2248 mpz_init (variable[i]); 2249 2250 for (i = 0; i < numberof (stack); i++) 2251 mpz_init (stack[i]); 2252 2253 return yyparse (); 2254 }