Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

563292 views
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 "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_Y_TAB_H_INCLUDED
229
# define YY_YY_Y_TAB_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 "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_Y_TAB_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 "calc.y"
1709
{ sp = stack[0]; yyerrok; }
1710
break;
1711
1712
case 8:
1713
/* Line 1787 of yacc.c */
1714
#line 177 "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 "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 "calc.y"
1736
{ calc_help (); }
1737
break;
1738
1739
case 11:
1740
/* Line 1787 of yacc.c */
1741
#line 189 "calc.y"
1742
{ ibase = 16; obase = -16; }
1743
break;
1744
1745
case 12:
1746
/* Line 1787 of yacc.c */
1747
#line 190 "calc.y"
1748
{ ibase = 0; obase = 10; }
1749
break;
1750
1751
case 13:
1752
/* Line 1787 of yacc.c */
1753
#line 191 "calc.y"
1754
{ exit (0); }
1755
break;
1756
1757
case 15:
1758
/* Line 1787 of yacc.c */
1759
#line 198 "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 "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 "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 "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 "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 "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 "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 "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 "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 "calc.y"
1818
{ mpz_neg (sp, sp); }
1819
break;
1820
1821
case 25:
1822
/* Line 1787 of yacc.c */
1823
#line 213 "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 "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 "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 "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 "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 "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 "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 "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 "calc.y"
1872
{ mpz_abs (sp, sp); }
1873
break;
1874
1875
case 34:
1876
/* Line 1787 of yacc.c */
1877
#line 224 "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 "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 "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 "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 "calc.y"
1906
{ mpz_nextprime (sp, sp); }
1907
break;
1908
1909
case 41:
1910
/* Line 1787 of yacc.c */
1911
#line 235 "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 "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 "calc.y"
1925
{ mpz_sqrt (sp, sp); }
1926
break;
1927
1928
case 44:
1929
/* Line 1787 of yacc.c */
1930
#line 240 "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 "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 "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 "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 "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
}
2255
2256