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