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