Annotation of OpenXM_contrib/gmp/demos/calc/calc.c, Revision 1.1
1.1 ! ohara 1: /* A Bison parser, made from calc.y
! 2: by GNU bison 1.34. */
! 3:
! 4: #define YYBISON 1 /* Identify Bison output. */
! 5:
! 6: # define EOS 257
! 7: # define BAD 258
! 8: # define HELP 259
! 9: # define HEX 260
! 10: # define DECIMAL 261
! 11: # define QUIT 262
! 12: # define ABS 263
! 13: # define BIN 264
! 14: # define FIB 265
! 15: # define GCD 266
! 16: # define KRON 267
! 17: # define LCM 268
! 18: # define LUCNUM 269
! 19: # define NEXTPRIME 270
! 20: # define POWM 271
! 21: # define ROOT 272
! 22: # define SQRT 273
! 23: # define NUMBER 274
! 24: # define VARIABLE 275
! 25: # define LOR 276
! 26: # define LAND 277
! 27: # define EQ 278
! 28: # define NE 279
! 29: # define LE 280
! 30: # define GE 281
! 31: # define LSHIFT 282
! 32: # define RSHIFT 283
! 33: # define UMINUS 284
! 34:
! 35: #line 1 "calc.y"
! 36:
! 37: /* A simple integer desk calculator using yacc and gmp.
! 38:
! 39: Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
! 40:
! 41: This file is part of the GNU MP Library.
! 42:
! 43: This program is free software; you can redistribute it and/or modify it under
! 44: the terms of the GNU General Public License as published by the Free Software
! 45: Foundation; either version 2 of the License, or (at your option) any later
! 46: version.
! 47:
! 48: This program is distributed in the hope that it will be useful, but WITHOUT ANY
! 49: WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
! 50: PARTICULAR PURPOSE. See the GNU General Public License for more details.
! 51:
! 52: You should have received a copy of the GNU General Public License along with
! 53: this program; if not, write to the Free Software Foundation, Inc., 59 Temple
! 54: Place - Suite 330, Boston, MA 02111-1307, USA. */
! 55:
! 56:
! 57: /* This is a simple program, meant only to show one way to use GMP for this
! 58: sort of thing. There's few features, and error checking is minimal.
! 59: Standard input is read, calc_help() below shows the inputs accepted.
! 60:
! 61: Expressions are evaluated as they're read. If user defined functions
! 62: were wanted it'd be necessary to build a parse tree like pexpr.c does, or
! 63: a list of operations for a stack based evaluator. That would also make
! 64: it possible to detect and optimize evaluations "mod m" like pexpr.c does.
! 65:
! 66: A stack is used for intermediate values in the expression evaluation,
! 67: separate from the yacc parser stack. This is simple, makes error
! 68: recovery easy, minimizes the junk around mpz calls in the rules, and
! 69: saves initializing or clearing "mpz_t"s during a calculation. A
! 70: disadvantage though is that variables must be copied to the stack to be
! 71: worked on. A more sophisticated calculator or language system might be
! 72: able to avoid that when executing a compiled or semi-compiled form.
! 73:
! 74: Avoiding repeated initializing and clearing of "mpz_t"s is important. In
! 75: this program the time spent parsing is obviously much greater than any
! 76: possible saving from this, but a proper calculator or language should
! 77: take some trouble over it. Don't be surprised if an init/clear takes 3
! 78: or more times as long as a 10 limb addition, depending on the system (see
! 79: the mpz_init_realloc_clear example in tune/README). */
! 80:
! 81:
! 82: #include <stdio.h>
! 83: #include <stdlib.h>
! 84: #include <string.h>
! 85: #include "gmp.h"
! 86: #define NO_CALC_H /* because it conflicts with normal calc.c stuff */
! 87: #include "calc-common.h"
! 88:
! 89:
! 90: #define numberof(x) (sizeof (x) / sizeof ((x)[0]))
! 91:
! 92:
! 93: void
! 94: calc_help (void)
! 95: {
! 96: printf ("Examples:\n");
! 97: printf (" 2+3*4 expressions are evaluated\n");
! 98: printf (" x=5^6 variables a to z can be set and used\n");
! 99: printf ("Operators:\n");
! 100: printf (" + - * arithmetic\n");
! 101: printf (" / %% division and remainder (rounding towards negative infinity)\n");
! 102: printf (" ^ exponentiation\n");
! 103: printf (" ! factorial\n");
! 104: printf (" << >> left and right shifts\n");
! 105: printf (" <= >= > \\ comparisons, giving 1 if true, 0 if false\n");
! 106: printf (" == != < /\n");
! 107: printf (" && || logical and/or, giving 1 if true, 0 if false\n");
! 108: printf ("Functions:\n");
! 109: printf (" abs(n) absolute value\n");
! 110: printf (" bin(n,m) binomial coefficient\n");
! 111: printf (" fib(n) fibonacci number\n");
! 112: printf (" gcd(a,b,..) greatest common divisor\n");
! 113: printf (" kron(a,b) kronecker symbol\n");
! 114: printf (" lcm(a,b,..) least common multiple\n");
! 115: printf (" lucnum(n) lucas number\n");
! 116: printf (" nextprime(n) next prime after n\n");
! 117: printf (" powm(b,e,m) modulo powering, b^e%%m\n");
! 118: printf (" root(n,r) r-th root\n");
! 119: printf (" sqrt(n) square root\n");
! 120: printf ("Other:\n");
! 121: printf (" hex \\ set hex or decimal for input and output\n");
! 122: printf (" decimal / (\"0x\" can be used for hex too)\n");
! 123: printf (" quit exit program (EOF works too)\n");
! 124: printf (" ; statements are separated with a ; or newline\n");
! 125: printf (" \\ continue expressions with \\ before newline\n");
! 126: printf (" # xxx comments are # though to newline\n");
! 127: printf ("Hex numbers must be entered in upper case, to distinguish them from the\n");
! 128: printf ("variables a to f (like in bc).\n");
! 129: }
! 130:
! 131:
! 132: int ibase = 0;
! 133: int obase = 10;
! 134:
! 135:
! 136: /* The stack is a fixed size, which means there's a limit on the nesting
! 137: allowed in expressions. A more sophisticated program could let it grow
! 138: dynamically. */
! 139:
! 140: mpz_t stack[100];
! 141: mpz_ptr sp = stack[0];
! 142:
! 143: #define CHECK_OVERFLOW() \
! 144: if (sp >= stack[numberof(stack)]) \
! 145: { \
! 146: fprintf (stderr, \
! 147: "Value stack overflow, too much nesting in expression\n"); \
! 148: YYERROR; \
! 149: }
! 150:
! 151: #define CHECK_EMPTY() \
! 152: if (sp != stack[0]) \
! 153: { \
! 154: fprintf (stderr, "Oops, expected the value stack to be empty\n"); \
! 155: sp = stack[0]; \
! 156: }
! 157:
! 158:
! 159: mpz_t variable[26];
! 160:
! 161: #define CHECK_VARIABLE(var) \
! 162: if ((var) < 0 || (var) >= numberof (variable)) \
! 163: { \
! 164: fprintf (stderr, "Oops, bad variable somehow: %d\n", var); \
! 165: YYERROR; \
! 166: }
! 167:
! 168:
! 169: #define CHECK_UI(name,z) \
! 170: if (! mpz_fits_ulong_p (z)) \
! 171: { \
! 172: fprintf (stderr, "%s too big\n", name); \
! 173: YYERROR; \
! 174: }
! 175:
! 176:
! 177: #line 143 "calc.y"
! 178: #ifndef YYSTYPE
! 179: typedef union {
! 180: char *str;
! 181: int var;
! 182: } yystype;
! 183: # define YYSTYPE yystype
! 184: #endif
! 185: #ifndef YYDEBUG
! 186: # define YYDEBUG 0
! 187: #endif
! 188:
! 189:
! 190:
! 191: #define YYFINAL 118
! 192: #define YYFLAG -32768
! 193: #define YYNTBASE 44
! 194:
! 195: /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
! 196: #define YYTRANSLATE(x) ((unsigned)(x) <= 284 ? yytranslate[x] : 50)
! 197:
! 198: /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
! 199: static const char yytranslate[] =
! 200: {
! 201: 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 202: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 203: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 204: 2, 2, 2, 39, 2, 2, 2, 36, 2, 2,
! 205: 41, 42, 34, 32, 43, 33, 2, 35, 2, 2,
! 206: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 207: 24, 40, 25, 2, 2, 2, 2, 2, 2, 2,
! 208: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 209: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 210: 2, 2, 2, 2, 38, 2, 2, 2, 2, 2,
! 211: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 212: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 213: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 214: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 215: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 216: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 217: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 218: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 219: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 220: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 221: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 222: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 223: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 224: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 225: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 226: 2, 2, 2, 2, 2, 2, 1, 3, 4, 5,
! 227: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
! 228: 16, 17, 18, 19, 20, 21, 22, 23, 26, 27,
! 229: 28, 29, 30, 31, 37
! 230: };
! 231:
! 232: #if YYDEBUG
! 233: static const short yyprhs[] =
! 234: {
! 235: 0, 0, 2, 5, 8, 12, 15, 16, 18, 22,
! 236: 24, 26, 28, 30, 34, 38, 42, 46, 50, 54,
! 237: 58, 62, 66, 69, 72, 76, 80, 84, 88, 92,
! 238: 96, 100, 104, 109, 116, 121, 126, 133, 138, 143,
! 239: 148, 157, 164, 169, 171, 173, 175, 179, 181
! 240: };
! 241: static const short yyrhs[] =
! 242: {
! 243: 46, 0, 45, 46, 0, 46, 3, 0, 45, 46,
! 244: 3, 0, 1, 3, 0, 0, 47, 0, 21, 40,
! 245: 47, 0, 5, 0, 6, 0, 7, 0, 8, 0,
! 246: 41, 47, 42, 0, 47, 32, 47, 0, 47, 33,
! 247: 47, 0, 47, 34, 47, 0, 47, 35, 47, 0,
! 248: 47, 36, 47, 0, 47, 38, 47, 0, 47, 30,
! 249: 47, 0, 47, 31, 47, 0, 47, 39, 0, 33,
! 250: 47, 0, 47, 24, 47, 0, 47, 28, 47, 0,
! 251: 47, 26, 47, 0, 47, 27, 47, 0, 47, 29,
! 252: 47, 0, 47, 25, 47, 0, 47, 23, 47, 0,
! 253: 47, 22, 47, 0, 9, 41, 47, 42, 0, 10,
! 254: 41, 47, 43, 47, 42, 0, 11, 41, 47, 42,
! 255: 0, 12, 41, 48, 42, 0, 13, 41, 47, 43,
! 256: 47, 42, 0, 14, 41, 49, 42, 0, 15, 41,
! 257: 47, 42, 0, 16, 41, 47, 42, 0, 17, 41,
! 258: 47, 43, 47, 43, 47, 42, 0, 18, 41, 47,
! 259: 43, 47, 42, 0, 19, 41, 47, 42, 0, 21,
! 260: 0, 20, 0, 47, 0, 48, 43, 47, 0, 47,
! 261: 0, 49, 43, 47, 0
! 262: };
! 263:
! 264: #endif
! 265:
! 266: #if YYDEBUG
! 267: /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! 268: static const short yyrline[] =
! 269: {
! 270: 0, 167, 169, 171, 173, 174, 176, 178, 183, 189,
! 271: 190, 191, 192, 197, 199, 200, 201, 202, 203, 204,
! 272: 206, 208, 210, 212, 214, 215, 216, 217, 218, 219,
! 273: 221, 222, 224, 225, 227, 229, 230, 232, 233, 235,
! 274: 236, 237, 239, 241, 247, 257, 259, 261, 263
! 275: };
! 276: #endif
! 277:
! 278:
! 279: #if (YYDEBUG) || defined YYERROR_VERBOSE
! 280:
! 281: /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
! 282: static const char *const yytname[] =
! 283: {
! 284: "$", "error", "$undefined.", "EOS", "BAD", "HELP", "HEX", "DECIMAL",
! 285: "QUIT", "ABS", "BIN", "FIB", "GCD", "KRON", "LCM", "LUCNUM",
! 286: "NEXTPRIME", "POWM", "ROOT", "SQRT", "NUMBER", "VARIABLE", "LOR",
! 287: "LAND", "'<'", "'>'", "EQ", "NE", "LE", "GE", "LSHIFT", "RSHIFT", "'+'",
! 288: "'-'", "'*'", "'/'", "'%'", "UMINUS", "'^'", "'!'", "'='", "'('", "')'",
! 289: "','", "top", "statements", "statement", "e", "gcdlist", "lcmlist", 0
! 290: };
! 291: #endif
! 292:
! 293: /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! 294: static const short yyr1[] =
! 295: {
! 296: 0, 44, 44, 45, 45, 45, 46, 46, 46, 46,
! 297: 46, 46, 46, 47, 47, 47, 47, 47, 47, 47,
! 298: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
! 299: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
! 300: 47, 47, 47, 47, 47, 48, 48, 49, 49
! 301: };
! 302:
! 303: /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
! 304: static const short yyr2[] =
! 305: {
! 306: 0, 1, 2, 2, 3, 2, 0, 1, 3, 1,
! 307: 1, 1, 1, 3, 3, 3, 3, 3, 3, 3,
! 308: 3, 3, 2, 2, 3, 3, 3, 3, 3, 3,
! 309: 3, 3, 4, 6, 4, 4, 6, 4, 4, 4,
! 310: 8, 6, 4, 1, 1, 1, 3, 1, 3
! 311: };
! 312:
! 313: /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
! 314: doesn't specify something else to do. Zero means the default is an
! 315: error. */
! 316: static const short yydefact[] =
! 317: {
! 318: 0, 0, 9, 10, 11, 12, 0, 0, 0, 0,
! 319: 0, 0, 0, 0, 0, 0, 0, 44, 43, 0,
! 320: 0, 6, 1, 7, 5, 0, 0, 0, 0, 0,
! 321: 0, 0, 0, 0, 0, 0, 0, 43, 23, 0,
! 322: 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
! 323: 0, 0, 0, 0, 0, 0, 0, 0, 22, 0,
! 324: 0, 0, 45, 0, 0, 47, 0, 0, 0, 0,
! 325: 0, 0, 8, 13, 4, 31, 30, 24, 29, 26,
! 326: 27, 25, 28, 20, 21, 14, 15, 16, 17, 18,
! 327: 19, 32, 0, 34, 35, 0, 0, 37, 0, 38,
! 328: 39, 0, 0, 42, 0, 46, 0, 48, 0, 0,
! 329: 33, 36, 0, 41, 0, 40, 0, 0, 0
! 330: };
! 331:
! 332: static const short yydefgoto[] =
! 333: {
! 334: 116, 21, 22, 23, 63, 66
! 335: };
! 336:
! 337: static const short yypact[] =
! 338: {
! 339: 39, 17,-32768,-32768,-32768,-32768, -20, 0, 2, 25,
! 340: 28, 30, 33, 34, 37, 40, 46,-32768, -18, 122,
! 341: 122, 89, 67, 462,-32768, 122, 122, 122, 122, 122,
! 342: 122, 122, 122, 122, 122, 122, 122,-32768, -36, 252,
! 343: 87,-32768, 122, 122, 122, 122, 122, 122, 122, 122,
! 344: 122, 122, 122, 122, 122, 122, 122, 122,-32768, 273,
! 345: 142, 294, 462, -38, 164, 462, -24, 315, 336, 186,
! 346: 208, 357, 462,-32768,-32768, 479, 495, 511, 511, 511,
! 347: 511, 511, 511, 29, 29, 50, 50, -36, -36, -36,
! 348: -36,-32768, 122,-32768,-32768, 122, 122,-32768, 122,-32768,
! 349: -32768, 122, 122,-32768, 378, 462, 399, 462, 230, 420,
! 350: -32768,-32768, 122,-32768, 441,-32768, 91, 92,-32768
! 351: };
! 352:
! 353: static const short yypgoto[] =
! 354: {
! 355: -32768,-32768, 90, -19,-32768,-32768
! 356: };
! 357:
! 358:
! 359: #define YYLAST 550
! 360:
! 361:
! 362: static const short yytable[] =
! 363: {
! 364: 38, 39, 57, 58, 94, 95, 59, 60, 61, 62,
! 365: 64, 65, 67, 68, 69, 70, 71, 72, 97, 98,
! 366: 24, 25, 36, 75, 76, 77, 78, 79, 80, 81,
! 367: 82, 83, 84, 85, 86, 87, 88, 89, 90, -6,
! 368: 1, 26, -6, 27, 2, 3, 4, 5, 6, 7,
! 369: 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
! 370: 18, 52, 53, 54, 55, 56, 28, 57, 58, 29,
! 371: 41, 30, 19, 104, 31, 32, 105, 106, 33, 107,
! 372: 20, 34, 108, 109, 54, 55, 56, 35, 57, 58,
! 373: 74, 117, 118, 114, 2, 3, 4, 5, 6, 7,
! 374: 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
! 375: 18, 40, 0, 0, 0, 0, 0, 0, 0, 0,
! 376: 0, 0, 19, 0, 0, 0, 0, 0, 0, 0,
! 377: 20, 6, 7, 8, 9, 10, 11, 12, 13, 14,
! 378: 15, 16, 17, 37, 0, 0, 0, 0, 0, 0,
! 379: 0, 0, 0, 0, 0, 19, 0, 0, 0, 0,
! 380: 0, 0, 0, 20, 42, 43, 44, 45, 46, 47,
! 381: 48, 49, 50, 51, 52, 53, 54, 55, 56, 0,
! 382: 57, 58, 0, 0, 0, 92, 42, 43, 44, 45,
! 383: 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
! 384: 56, 0, 57, 58, 0, 0, 0, 96, 42, 43,
! 385: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
! 386: 54, 55, 56, 0, 57, 58, 0, 0, 0, 101,
! 387: 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
! 388: 52, 53, 54, 55, 56, 0, 57, 58, 0, 0,
! 389: 0, 102, 42, 43, 44, 45, 46, 47, 48, 49,
! 390: 50, 51, 52, 53, 54, 55, 56, 0, 57, 58,
! 391: 0, 0, 0, 112, 42, 43, 44, 45, 46, 47,
! 392: 48, 49, 50, 51, 52, 53, 54, 55, 56, 0,
! 393: 57, 58, 0, 0, 73, 42, 43, 44, 45, 46,
! 394: 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
! 395: 0, 57, 58, 0, 0, 91, 42, 43, 44, 45,
! 396: 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
! 397: 56, 0, 57, 58, 0, 0, 93, 42, 43, 44,
! 398: 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
! 399: 55, 56, 0, 57, 58, 0, 0, 99, 42, 43,
! 400: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
! 401: 54, 55, 56, 0, 57, 58, 0, 0, 100, 42,
! 402: 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
! 403: 53, 54, 55, 56, 0, 57, 58, 0, 0, 103,
! 404: 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
! 405: 52, 53, 54, 55, 56, 0, 57, 58, 0, 0,
! 406: 110, 42, 43, 44, 45, 46, 47, 48, 49, 50,
! 407: 51, 52, 53, 54, 55, 56, 0, 57, 58, 0,
! 408: 0, 111, 42, 43, 44, 45, 46, 47, 48, 49,
! 409: 50, 51, 52, 53, 54, 55, 56, 0, 57, 58,
! 410: 0, 0, 113, 42, 43, 44, 45, 46, 47, 48,
! 411: 49, 50, 51, 52, 53, 54, 55, 56, 0, 57,
! 412: 58, 0, 0, 115, 42, 43, 44, 45, 46, 47,
! 413: 48, 49, 50, 51, 52, 53, 54, 55, 56, 0,
! 414: 57, 58, 43, 44, 45, 46, 47, 48, 49, 50,
! 415: 51, 52, 53, 54, 55, 56, 0, 57, 58, 44,
! 416: 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
! 417: 55, 56, 0, 57, 58,-32768,-32768,-32768,-32768,-32768,
! 418: -32768, 50, 51, 52, 53, 54, 55, 56, 0, 57,
! 419: 58
! 420: };
! 421:
! 422: static const short yycheck[] =
! 423: {
! 424: 19, 20, 38, 39, 42, 43, 25, 26, 27, 28,
! 425: 29, 30, 31, 32, 33, 34, 35, 36, 42, 43,
! 426: 3, 41, 40, 42, 43, 44, 45, 46, 47, 48,
! 427: 49, 50, 51, 52, 53, 54, 55, 56, 57, 0,
! 428: 1, 41, 3, 41, 5, 6, 7, 8, 9, 10,
! 429: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
! 430: 21, 32, 33, 34, 35, 36, 41, 38, 39, 41,
! 431: 3, 41, 33, 92, 41, 41, 95, 96, 41, 98,
! 432: 41, 41, 101, 102, 34, 35, 36, 41, 38, 39,
! 433: 3, 0, 0, 112, 5, 6, 7, 8, 9, 10,
! 434: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
! 435: 21, 21, -1, -1, -1, -1, -1, -1, -1, -1,
! 436: -1, -1, 33, -1, -1, -1, -1, -1, -1, -1,
! 437: 41, 9, 10, 11, 12, 13, 14, 15, 16, 17,
! 438: 18, 19, 20, 21, -1, -1, -1, -1, -1, -1,
! 439: -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
! 440: -1, -1, -1, 41, 22, 23, 24, 25, 26, 27,
! 441: 28, 29, 30, 31, 32, 33, 34, 35, 36, -1,
! 442: 38, 39, -1, -1, -1, 43, 22, 23, 24, 25,
! 443: 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
! 444: 36, -1, 38, 39, -1, -1, -1, 43, 22, 23,
! 445: 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
! 446: 34, 35, 36, -1, 38, 39, -1, -1, -1, 43,
! 447: 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
! 448: 32, 33, 34, 35, 36, -1, 38, 39, -1, -1,
! 449: -1, 43, 22, 23, 24, 25, 26, 27, 28, 29,
! 450: 30, 31, 32, 33, 34, 35, 36, -1, 38, 39,
! 451: -1, -1, -1, 43, 22, 23, 24, 25, 26, 27,
! 452: 28, 29, 30, 31, 32, 33, 34, 35, 36, -1,
! 453: 38, 39, -1, -1, 42, 22, 23, 24, 25, 26,
! 454: 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
! 455: -1, 38, 39, -1, -1, 42, 22, 23, 24, 25,
! 456: 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
! 457: 36, -1, 38, 39, -1, -1, 42, 22, 23, 24,
! 458: 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
! 459: 35, 36, -1, 38, 39, -1, -1, 42, 22, 23,
! 460: 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
! 461: 34, 35, 36, -1, 38, 39, -1, -1, 42, 22,
! 462: 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
! 463: 33, 34, 35, 36, -1, 38, 39, -1, -1, 42,
! 464: 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
! 465: 32, 33, 34, 35, 36, -1, 38, 39, -1, -1,
! 466: 42, 22, 23, 24, 25, 26, 27, 28, 29, 30,
! 467: 31, 32, 33, 34, 35, 36, -1, 38, 39, -1,
! 468: -1, 42, 22, 23, 24, 25, 26, 27, 28, 29,
! 469: 30, 31, 32, 33, 34, 35, 36, -1, 38, 39,
! 470: -1, -1, 42, 22, 23, 24, 25, 26, 27, 28,
! 471: 29, 30, 31, 32, 33, 34, 35, 36, -1, 38,
! 472: 39, -1, -1, 42, 22, 23, 24, 25, 26, 27,
! 473: 28, 29, 30, 31, 32, 33, 34, 35, 36, -1,
! 474: 38, 39, 23, 24, 25, 26, 27, 28, 29, 30,
! 475: 31, 32, 33, 34, 35, 36, -1, 38, 39, 24,
! 476: 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
! 477: 35, 36, -1, 38, 39, 24, 25, 26, 27, 28,
! 478: 29, 30, 31, 32, 33, 34, 35, 36, -1, 38,
! 479: 39
! 480: };
! 481: /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
! 482: #line 3 "/usr/share/bison/bison.simple"
! 483:
! 484: /* Skeleton output parser for bison,
! 485:
! 486: Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
! 487: Foundation, Inc.
! 488:
! 489: This program is free software; you can redistribute it and/or modify
! 490: it under the terms of the GNU General Public License as published by
! 491: the Free Software Foundation; either version 2, or (at your option)
! 492: any later version.
! 493:
! 494: This program is distributed in the hope that it will be useful,
! 495: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 496: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 497: GNU General Public License for more details.
! 498:
! 499: You should have received a copy of the GNU General Public License
! 500: along with this program; if not, write to the Free Software
! 501: Foundation, Inc., 59 Temple Place - Suite 330,
! 502: Boston, MA 02111-1307, USA. */
! 503:
! 504: /* As a special exception, when this file is copied by Bison into a
! 505: Bison output file, you may use that output file without restriction.
! 506: This special exception was added by the Free Software Foundation
! 507: in version 1.24 of Bison. */
! 508:
! 509: /* This is the parser code that is written into each bison parser when
! 510: the %semantic_parser declaration is not specified in the grammar.
! 511: It was written by Richard Stallman by simplifying the hairy parser
! 512: used when %semantic_parser is specified. */
! 513:
! 514: /* All symbols defined below should begin with yy or YY, to avoid
! 515: infringing on user name space. This should be done even for local
! 516: variables, as they might otherwise be expanded by user macros.
! 517: There are some unavoidable exceptions within include files to
! 518: define necessary library symbols; they are noted "INFRINGES ON
! 519: USER NAME SPACE" below. */
! 520:
! 521: #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
! 522:
! 523: /* The parser invokes alloca or malloc; define the necessary symbols. */
! 524:
! 525: # if YYSTACK_USE_ALLOCA
! 526: # define YYSTACK_ALLOC alloca
! 527: # else
! 528: # ifndef YYSTACK_USE_ALLOCA
! 529: # if defined (alloca) || defined (_ALLOCA_H)
! 530: # define YYSTACK_ALLOC alloca
! 531: # else
! 532: # ifdef __GNUC__
! 533: # define YYSTACK_ALLOC __builtin_alloca
! 534: # endif
! 535: # endif
! 536: # endif
! 537: # endif
! 538:
! 539: # ifdef YYSTACK_ALLOC
! 540: /* Pacify GCC's `empty if-body' warning. */
! 541: # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
! 542: # else
! 543: # if defined (__STDC__) || defined (__cplusplus)
! 544: # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
! 545: # define YYSIZE_T size_t
! 546: # endif
! 547: # define YYSTACK_ALLOC malloc
! 548: # define YYSTACK_FREE free
! 549: # endif
! 550:
! 551: /* A type that is properly aligned for any stack member. */
! 552: union yyalloc
! 553: {
! 554: short yyss;
! 555: YYSTYPE yyvs;
! 556: # if YYLSP_NEEDED
! 557: YYLTYPE yyls;
! 558: # endif
! 559: };
! 560:
! 561: /* The size of the maximum gap between one aligned stack and the next. */
! 562: # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
! 563:
! 564: /* The size of an array large to enough to hold all stacks, each with
! 565: N elements. */
! 566: # if YYLSP_NEEDED
! 567: # define YYSTACK_BYTES(N) \
! 568: ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
! 569: + 2 * YYSTACK_GAP_MAX)
! 570: # else
! 571: # define YYSTACK_BYTES(N) \
! 572: ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
! 573: + YYSTACK_GAP_MAX)
! 574: # endif
! 575:
! 576: /* Relocate the TYPE STACK from its old location to the new one. The
! 577: local variables YYSIZE and YYSTACKSIZE give the old and new number of
! 578: elements in the stack, and YYPTR gives the new location of the
! 579: stack. Advance YYPTR to a properly aligned location for the next
! 580: stack. */
! 581: # define YYSTACK_RELOCATE(Type, Stack) \
! 582: do \
! 583: { \
! 584: YYSIZE_T yynewbytes; \
! 585: yymemcpy ((char *) yyptr, (char *) (Stack), \
! 586: yysize * (YYSIZE_T) sizeof (Type)); \
! 587: Stack = &yyptr->Stack; \
! 588: yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX; \
! 589: yyptr += yynewbytes / sizeof (*yyptr); \
! 590: } \
! 591: while (0)
! 592:
! 593: #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
! 594:
! 595:
! 596: #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
! 597: # define YYSIZE_T __SIZE_TYPE__
! 598: #endif
! 599: #if ! defined (YYSIZE_T) && defined (size_t)
! 600: # define YYSIZE_T size_t
! 601: #endif
! 602: #if ! defined (YYSIZE_T)
! 603: # if defined (__STDC__) || defined (__cplusplus)
! 604: # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
! 605: # define YYSIZE_T size_t
! 606: # endif
! 607: #endif
! 608: #if ! defined (YYSIZE_T)
! 609: # define YYSIZE_T unsigned int
! 610: #endif
! 611:
! 612: #define yyerrok (yyerrstatus = 0)
! 613: #define yyclearin (yychar = YYEMPTY)
! 614: #define YYEMPTY -2
! 615: #define YYEOF 0
! 616: #define YYACCEPT goto yyacceptlab
! 617: #define YYABORT goto yyabortlab
! 618: #define YYERROR goto yyerrlab1
! 619: /* Like YYERROR except do call yyerror. This remains here temporarily
! 620: to ease the transition to the new meaning of YYERROR, for GCC.
! 621: Once GCC version 2 has supplanted version 1, this can go. */
! 622: #define YYFAIL goto yyerrlab
! 623: #define YYRECOVERING() (!!yyerrstatus)
! 624: #define YYBACKUP(Token, Value) \
! 625: do \
! 626: if (yychar == YYEMPTY && yylen == 1) \
! 627: { \
! 628: yychar = (Token); \
! 629: yylval = (Value); \
! 630: yychar1 = YYTRANSLATE (yychar); \
! 631: YYPOPSTACK; \
! 632: goto yybackup; \
! 633: } \
! 634: else \
! 635: { \
! 636: yyerror ("syntax error: cannot back up"); \
! 637: YYERROR; \
! 638: } \
! 639: while (0)
! 640:
! 641: #define YYTERROR 1
! 642: #define YYERRCODE 256
! 643:
! 644:
! 645: /* YYLLOC_DEFAULT -- Compute the default location (before the actions
! 646: are run).
! 647:
! 648: When YYLLOC_DEFAULT is run, CURRENT is set the location of the
! 649: first token. By default, to implement support for ranges, extend
! 650: its range to the last symbol. */
! 651:
! 652: #ifndef YYLLOC_DEFAULT
! 653: # define YYLLOC_DEFAULT(Current, Rhs, N) \
! 654: Current.last_line = Rhs[N].last_line; \
! 655: Current.last_column = Rhs[N].last_column;
! 656: #endif
! 657:
! 658:
! 659: /* YYLEX -- calling `yylex' with the right arguments. */
! 660:
! 661: #if YYPURE
! 662: # if YYLSP_NEEDED
! 663: # ifdef YYLEX_PARAM
! 664: # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
! 665: # else
! 666: # define YYLEX yylex (&yylval, &yylloc)
! 667: # endif
! 668: # else /* !YYLSP_NEEDED */
! 669: # ifdef YYLEX_PARAM
! 670: # define YYLEX yylex (&yylval, YYLEX_PARAM)
! 671: # else
! 672: # define YYLEX yylex (&yylval)
! 673: # endif
! 674: # endif /* !YYLSP_NEEDED */
! 675: #else /* !YYPURE */
! 676: # define YYLEX yylex ()
! 677: #endif /* !YYPURE */
! 678:
! 679:
! 680: /* Enable debugging if requested. */
! 681: #if YYDEBUG
! 682:
! 683: # ifndef YYFPRINTF
! 684: # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
! 685: # define YYFPRINTF fprintf
! 686: # endif
! 687:
! 688: # define YYDPRINTF(Args) \
! 689: do { \
! 690: if (yydebug) \
! 691: YYFPRINTF Args; \
! 692: } while (0)
! 693: /* Nonzero means print parse trace. It is left uninitialized so that
! 694: multiple parsers can coexist. */
! 695: int yydebug;
! 696: #else /* !YYDEBUG */
! 697: # define YYDPRINTF(Args)
! 698: #endif /* !YYDEBUG */
! 699:
! 700: /* YYINITDEPTH -- initial size of the parser's stacks. */
! 701: #ifndef YYINITDEPTH
! 702: # define YYINITDEPTH 200
! 703: #endif
! 704:
! 705: /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
! 706: if the built-in stack extension method is used).
! 707:
! 708: Do not make this value too large; the results are undefined if
! 709: SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
! 710: evaluated with infinite-precision integer arithmetic. */
! 711:
! 712: #if YYMAXDEPTH == 0
! 713: # undef YYMAXDEPTH
! 714: #endif
! 715:
! 716: #ifndef YYMAXDEPTH
! 717: # define YYMAXDEPTH 10000
! 718: #endif
! 719:
! 720: #if ! defined (yyoverflow) && ! defined (yymemcpy)
! 721: # if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
! 722: # define yymemcpy __builtin_memcpy
! 723: # else /* not GNU C or C++ */
! 724:
! 725: /* This is the most reliable way to avoid incompatibilities
! 726: in available built-in functions on various systems. */
! 727: static void
! 728: # if defined (__STDC__) || defined (__cplusplus)
! 729: yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
! 730: # else
! 731: yymemcpy (yyto, yyfrom, yycount)
! 732: char *yyto;
! 733: const char *yyfrom;
! 734: YYSIZE_T yycount;
! 735: # endif
! 736: {
! 737: register const char *yyf = yyfrom;
! 738: register char *yyt = yyto;
! 739: register YYSIZE_T yyi = yycount;
! 740:
! 741: while (yyi-- != 0)
! 742: *yyt++ = *yyf++;
! 743: }
! 744: # endif
! 745: #endif
! 746:
! 747: #ifdef YYERROR_VERBOSE
! 748:
! 749: # ifndef yystrlen
! 750: # if defined (__GLIBC__) && defined (_STRING_H)
! 751: # define yystrlen strlen
! 752: # else
! 753: /* Return the length of YYSTR. */
! 754: static YYSIZE_T
! 755: # if defined (__STDC__) || defined (__cplusplus)
! 756: yystrlen (const char *yystr)
! 757: # else
! 758: yystrlen (yystr)
! 759: const char *yystr;
! 760: # endif
! 761: {
! 762: register const char *yys = yystr;
! 763:
! 764: while (*yys++ != '\0')
! 765: continue;
! 766:
! 767: return yys - yystr - 1;
! 768: }
! 769: # endif
! 770: # endif
! 771:
! 772: # ifndef yystpcpy
! 773: # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
! 774: # define yystpcpy stpcpy
! 775: # else
! 776: /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
! 777: YYDEST. */
! 778: static char *
! 779: # if defined (__STDC__) || defined (__cplusplus)
! 780: yystpcpy (char *yydest, const char *yysrc)
! 781: # else
! 782: yystpcpy (yydest, yysrc)
! 783: char *yydest;
! 784: const char *yysrc;
! 785: # endif
! 786: {
! 787: register char *yyd = yydest;
! 788: register const char *yys = yysrc;
! 789:
! 790: while ((*yyd++ = *yys++) != '\0')
! 791: continue;
! 792:
! 793: return yyd - 1;
! 794: }
! 795: # endif
! 796: # endif
! 797: #endif
! 798:
! 799: #line 319 "/usr/share/bison/bison.simple"
! 800:
! 801:
! 802: /* The user can define YYPARSE_PARAM as the name of an argument to be passed
! 803: into yyparse. The argument should have type void *.
! 804: It should actually point to an object.
! 805: Grammar actions can access the variable by casting it
! 806: to the proper pointer type. */
! 807:
! 808: #ifdef YYPARSE_PARAM
! 809: # if defined (__STDC__) || defined (__cplusplus)
! 810: # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
! 811: # define YYPARSE_PARAM_DECL
! 812: # else
! 813: # define YYPARSE_PARAM_ARG YYPARSE_PARAM
! 814: # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
! 815: # endif
! 816: #else /* !YYPARSE_PARAM */
! 817: # define YYPARSE_PARAM_ARG
! 818: # define YYPARSE_PARAM_DECL
! 819: #endif /* !YYPARSE_PARAM */
! 820:
! 821: /* Prevent warning if -Wstrict-prototypes. */
! 822: #ifdef __GNUC__
! 823: # ifdef YYPARSE_PARAM
! 824: int yyparse (void *);
! 825: # else
! 826: int yyparse (void);
! 827: # endif
! 828: #endif
! 829:
! 830: /* YY_DECL_VARIABLES -- depending whether we use a pure parser,
! 831: variables are global, or local to YYPARSE. */
! 832:
! 833: #define YY_DECL_NON_LSP_VARIABLES \
! 834: /* The lookahead symbol. */ \
! 835: int yychar; \
! 836: \
! 837: /* The semantic value of the lookahead symbol. */ \
! 838: YYSTYPE yylval; \
! 839: \
! 840: /* Number of parse errors so far. */ \
! 841: int yynerrs;
! 842:
! 843: #if YYLSP_NEEDED
! 844: # define YY_DECL_VARIABLES \
! 845: YY_DECL_NON_LSP_VARIABLES \
! 846: \
! 847: /* Location data for the lookahead symbol. */ \
! 848: YYLTYPE yylloc;
! 849: #else
! 850: # define YY_DECL_VARIABLES \
! 851: YY_DECL_NON_LSP_VARIABLES
! 852: #endif
! 853:
! 854:
! 855: /* If nonreentrant, generate the variables here. */
! 856:
! 857: #if !YYPURE
! 858: YY_DECL_VARIABLES
! 859: #endif /* !YYPURE */
! 860:
! 861: int
! 862: yyparse (YYPARSE_PARAM_ARG)
! 863: YYPARSE_PARAM_DECL
! 864: {
! 865: /* If reentrant, generate the variables here. */
! 866: #if YYPURE
! 867: YY_DECL_VARIABLES
! 868: #endif /* !YYPURE */
! 869:
! 870: register int yystate;
! 871: register int yyn;
! 872: int yyresult;
! 873: /* Number of tokens to shift before error messages enabled. */
! 874: int yyerrstatus;
! 875: /* Lookahead token as an internal (translated) token number. */
! 876: int yychar1 = 0;
! 877:
! 878: /* Three stacks and their tools:
! 879: `yyss': related to states,
! 880: `yyvs': related to semantic values,
! 881: `yyls': related to locations.
! 882:
! 883: Refer to the stacks thru separate pointers, to allow yyoverflow
! 884: to reallocate them elsewhere. */
! 885:
! 886: /* The state stack. */
! 887: short yyssa[YYINITDEPTH];
! 888: short *yyss = yyssa;
! 889: register short *yyssp;
! 890:
! 891: /* The semantic value stack. */
! 892: YYSTYPE yyvsa[YYINITDEPTH];
! 893: YYSTYPE *yyvs = yyvsa;
! 894: register YYSTYPE *yyvsp;
! 895:
! 896: #if YYLSP_NEEDED
! 897: /* The location stack. */
! 898: YYLTYPE yylsa[YYINITDEPTH];
! 899: YYLTYPE *yyls = yylsa;
! 900: YYLTYPE *yylsp;
! 901: #endif
! 902:
! 903: #if YYLSP_NEEDED
! 904: # define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
! 905: #else
! 906: # define YYPOPSTACK (yyvsp--, yyssp--)
! 907: #endif
! 908:
! 909: YYSIZE_T yystacksize = YYINITDEPTH;
! 910:
! 911:
! 912: /* The variables used to return semantic value and location from the
! 913: action routines. */
! 914: YYSTYPE yyval;
! 915: #if YYLSP_NEEDED
! 916: YYLTYPE yyloc;
! 917: #endif
! 918:
! 919: /* When reducing, the number of symbols on the RHS of the reduced
! 920: rule. */
! 921: int yylen;
! 922:
! 923: YYDPRINTF ((stderr, "Starting parse\n"));
! 924:
! 925: yystate = 0;
! 926: yyerrstatus = 0;
! 927: yynerrs = 0;
! 928: yychar = YYEMPTY; /* Cause a token to be read. */
! 929:
! 930: /* Initialize stack pointers.
! 931: Waste one element of value and location stack
! 932: so that they stay on the same level as the state stack.
! 933: The wasted elements are never initialized. */
! 934:
! 935: yyssp = yyss;
! 936: yyvsp = yyvs;
! 937: #if YYLSP_NEEDED
! 938: yylsp = yyls;
! 939: #endif
! 940: goto yysetstate;
! 941:
! 942: /*------------------------------------------------------------.
! 943: | yynewstate -- Push a new state, which is found in yystate. |
! 944: `------------------------------------------------------------*/
! 945: yynewstate:
! 946: /* In all cases, when you get here, the value and location stacks
! 947: have just been pushed. so pushing a state here evens the stacks.
! 948: */
! 949: yyssp++;
! 950:
! 951: yysetstate:
! 952: *yyssp = yystate;
! 953:
! 954: if (yyssp >= yyss + yystacksize - 1)
! 955: {
! 956: /* Get the current used size of the three stacks, in elements. */
! 957: YYSIZE_T yysize = yyssp - yyss + 1;
! 958:
! 959: #ifdef yyoverflow
! 960: {
! 961: /* Give user a chance to reallocate the stack. Use copies of
! 962: these so that the &'s don't force the real ones into
! 963: memory. */
! 964: YYSTYPE *yyvs1 = yyvs;
! 965: short *yyss1 = yyss;
! 966:
! 967: /* Each stack pointer address is followed by the size of the
! 968: data in use in that stack, in bytes. */
! 969: # if YYLSP_NEEDED
! 970: YYLTYPE *yyls1 = yyls;
! 971: /* This used to be a conditional around just the two extra args,
! 972: but that might be undefined if yyoverflow is a macro. */
! 973: yyoverflow ("parser stack overflow",
! 974: &yyss1, yysize * sizeof (*yyssp),
! 975: &yyvs1, yysize * sizeof (*yyvsp),
! 976: &yyls1, yysize * sizeof (*yylsp),
! 977: &yystacksize);
! 978: yyls = yyls1;
! 979: # else
! 980: yyoverflow ("parser stack overflow",
! 981: &yyss1, yysize * sizeof (*yyssp),
! 982: &yyvs1, yysize * sizeof (*yyvsp),
! 983: &yystacksize);
! 984: # endif
! 985: yyss = yyss1;
! 986: yyvs = yyvs1;
! 987: }
! 988: #else /* no yyoverflow */
! 989: /* Extend the stack our own way. */
! 990: if (yystacksize >= YYMAXDEPTH)
! 991: goto yyoverflowlab;
! 992: yystacksize *= 2;
! 993: if (yystacksize > YYMAXDEPTH)
! 994: yystacksize = YYMAXDEPTH;
! 995:
! 996: {
! 997: short *yyss1 = yyss;
! 998: union yyalloc *yyptr =
! 999: (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
! 1000: if (! yyptr)
! 1001: goto yyoverflowlab;
! 1002: YYSTACK_RELOCATE (short, yyss);
! 1003: YYSTACK_RELOCATE (YYSTYPE, yyvs);
! 1004: # if YYLSP_NEEDED
! 1005: YYSTACK_RELOCATE (YYLTYPE, yyls);
! 1006: # endif
! 1007: # undef YYSTACK_RELOCATE
! 1008: if (yyss1 != yyssa)
! 1009: YYSTACK_FREE (yyss1);
! 1010: }
! 1011: #endif /* no yyoverflow */
! 1012:
! 1013: yyssp = yyss + yysize - 1;
! 1014: yyvsp = yyvs + yysize - 1;
! 1015: #if YYLSP_NEEDED
! 1016: yylsp = yyls + yysize - 1;
! 1017: #endif
! 1018:
! 1019: YYDPRINTF ((stderr, "Stack size increased to %lu\n",
! 1020: (unsigned long int) yystacksize));
! 1021:
! 1022: if (yyssp >= yyss + yystacksize - 1)
! 1023: YYABORT;
! 1024: }
! 1025:
! 1026: YYDPRINTF ((stderr, "Entering state %d\n", yystate));
! 1027:
! 1028: goto yybackup;
! 1029:
! 1030:
! 1031: /*-----------.
! 1032: | yybackup. |
! 1033: `-----------*/
! 1034: yybackup:
! 1035:
! 1036: /* Do appropriate processing given the current state. */
! 1037: /* Read a lookahead token if we need one and don't already have one. */
! 1038: /* yyresume: */
! 1039:
! 1040: /* First try to decide what to do without reference to lookahead token. */
! 1041:
! 1042: yyn = yypact[yystate];
! 1043: if (yyn == YYFLAG)
! 1044: goto yydefault;
! 1045:
! 1046: /* Not known => get a lookahead token if don't already have one. */
! 1047:
! 1048: /* yychar is either YYEMPTY or YYEOF
! 1049: or a valid token in external form. */
! 1050:
! 1051: if (yychar == YYEMPTY)
! 1052: {
! 1053: YYDPRINTF ((stderr, "Reading a token: "));
! 1054: yychar = YYLEX;
! 1055: }
! 1056:
! 1057: /* Convert token to internal form (in yychar1) for indexing tables with */
! 1058:
! 1059: if (yychar <= 0) /* This means end of input. */
! 1060: {
! 1061: yychar1 = 0;
! 1062: yychar = YYEOF; /* Don't call YYLEX any more */
! 1063:
! 1064: YYDPRINTF ((stderr, "Now at end of input.\n"));
! 1065: }
! 1066: else
! 1067: {
! 1068: yychar1 = YYTRANSLATE (yychar);
! 1069:
! 1070: #if YYDEBUG
! 1071: /* We have to keep this `#if YYDEBUG', since we use variables
! 1072: which are defined only if `YYDEBUG' is set. */
! 1073: if (yydebug)
! 1074: {
! 1075: YYFPRINTF (stderr, "Next token is %d (%s",
! 1076: yychar, yytname[yychar1]);
! 1077: /* Give the individual parser a way to print the precise
! 1078: meaning of a token, for further debugging info. */
! 1079: # ifdef YYPRINT
! 1080: YYPRINT (stderr, yychar, yylval);
! 1081: # endif
! 1082: YYFPRINTF (stderr, ")\n");
! 1083: }
! 1084: #endif
! 1085: }
! 1086:
! 1087: yyn += yychar1;
! 1088: if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
! 1089: goto yydefault;
! 1090:
! 1091: yyn = yytable[yyn];
! 1092:
! 1093: /* yyn is what to do for this token type in this state.
! 1094: Negative => reduce, -yyn is rule number.
! 1095: Positive => shift, yyn is new state.
! 1096: New state is final state => don't bother to shift,
! 1097: just return success.
! 1098: 0, or most negative number => error. */
! 1099:
! 1100: if (yyn < 0)
! 1101: {
! 1102: if (yyn == YYFLAG)
! 1103: goto yyerrlab;
! 1104: yyn = -yyn;
! 1105: goto yyreduce;
! 1106: }
! 1107: else if (yyn == 0)
! 1108: goto yyerrlab;
! 1109:
! 1110: if (yyn == YYFINAL)
! 1111: YYACCEPT;
! 1112:
! 1113: /* Shift the lookahead token. */
! 1114: YYDPRINTF ((stderr, "Shifting token %d (%s), ",
! 1115: yychar, yytname[yychar1]));
! 1116:
! 1117: /* Discard the token being shifted unless it is eof. */
! 1118: if (yychar != YYEOF)
! 1119: yychar = YYEMPTY;
! 1120:
! 1121: *++yyvsp = yylval;
! 1122: #if YYLSP_NEEDED
! 1123: *++yylsp = yylloc;
! 1124: #endif
! 1125:
! 1126: /* Count tokens shifted since error; after three, turn off error
! 1127: status. */
! 1128: if (yyerrstatus)
! 1129: yyerrstatus--;
! 1130:
! 1131: yystate = yyn;
! 1132: goto yynewstate;
! 1133:
! 1134:
! 1135: /*-----------------------------------------------------------.
! 1136: | yydefault -- do the default action for the current state. |
! 1137: `-----------------------------------------------------------*/
! 1138: yydefault:
! 1139: yyn = yydefact[yystate];
! 1140: if (yyn == 0)
! 1141: goto yyerrlab;
! 1142: goto yyreduce;
! 1143:
! 1144:
! 1145: /*-----------------------------.
! 1146: | yyreduce -- Do a reduction. |
! 1147: `-----------------------------*/
! 1148: yyreduce:
! 1149: /* yyn is the number of a rule to reduce with. */
! 1150: yylen = yyr2[yyn];
! 1151:
! 1152: /* If YYLEN is nonzero, implement the default value of the action:
! 1153: `$$ = $1'.
! 1154:
! 1155: Otherwise, the following line sets YYVAL to the semantic value of
! 1156: the lookahead token. This behavior is undocumented and Bison
! 1157: users should not rely upon it. Assigning to YYVAL
! 1158: unconditionally makes the parser a bit smaller, and it avoids a
! 1159: GCC warning that YYVAL may be used uninitialized. */
! 1160: yyval = yyvsp[1-yylen];
! 1161:
! 1162: #if YYLSP_NEEDED
! 1163: /* Similarly for the default location. Let the user run additional
! 1164: commands if for instance locations are ranges. */
! 1165: yyloc = yylsp[1-yylen];
! 1166: YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
! 1167: #endif
! 1168:
! 1169: #if YYDEBUG
! 1170: /* We have to keep this `#if YYDEBUG', since we use variables which
! 1171: are defined only if `YYDEBUG' is set. */
! 1172: if (yydebug)
! 1173: {
! 1174: int yyi;
! 1175:
! 1176: YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
! 1177: yyn, yyrline[yyn]);
! 1178:
! 1179: /* Print the symbols being reduced, and their result. */
! 1180: for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
! 1181: YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
! 1182: YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
! 1183: }
! 1184: #endif
! 1185:
! 1186: switch (yyn) {
! 1187:
! 1188: case 5:
! 1189: #line 174 "calc.y"
! 1190: { sp = stack[0]; yyerrok; }
! 1191: break;
! 1192: case 7:
! 1193: #line 178 "calc.y"
! 1194: {
! 1195: mpz_out_str (stdout, obase, sp); putchar ('\n');
! 1196: sp--;
! 1197: CHECK_EMPTY ();
! 1198: }
! 1199: break;
! 1200: case 8:
! 1201: #line 183 "calc.y"
! 1202: {
! 1203: CHECK_VARIABLE (yyvsp[-2].var);
! 1204: mpz_swap (variable[yyvsp[-2].var], sp);
! 1205: sp--;
! 1206: CHECK_EMPTY ();
! 1207: }
! 1208: break;
! 1209: case 9:
! 1210: #line 189 "calc.y"
! 1211: { calc_help (); }
! 1212: break;
! 1213: case 10:
! 1214: #line 190 "calc.y"
! 1215: { ibase = 16; obase = -16; }
! 1216: break;
! 1217: case 11:
! 1218: #line 191 "calc.y"
! 1219: { ibase = 0; obase = 10; }
! 1220: break;
! 1221: case 12:
! 1222: #line 192 "calc.y"
! 1223: { exit (0); }
! 1224: break;
! 1225: case 14:
! 1226: #line 199 "calc.y"
! 1227: { sp--; mpz_add (sp, sp, sp+1); }
! 1228: break;
! 1229: case 15:
! 1230: #line 200 "calc.y"
! 1231: { sp--; mpz_sub (sp, sp, sp+1); }
! 1232: break;
! 1233: case 16:
! 1234: #line 201 "calc.y"
! 1235: { sp--; mpz_mul (sp, sp, sp+1); }
! 1236: break;
! 1237: case 17:
! 1238: #line 202 "calc.y"
! 1239: { sp--; mpz_fdiv_q (sp, sp, sp+1); }
! 1240: break;
! 1241: case 18:
! 1242: #line 203 "calc.y"
! 1243: { sp--; mpz_fdiv_r (sp, sp, sp+1); }
! 1244: break;
! 1245: case 19:
! 1246: #line 204 "calc.y"
! 1247: { CHECK_UI ("Exponent", sp);
! 1248: sp--; mpz_pow_ui (sp, sp, mpz_get_ui (sp+1)); }
! 1249: break;
! 1250: case 20:
! 1251: #line 206 "calc.y"
! 1252: { CHECK_UI ("Shift count", sp);
! 1253: sp--; mpz_mul_2exp (sp, sp, mpz_get_ui (sp+1)); }
! 1254: break;
! 1255: case 21:
! 1256: #line 208 "calc.y"
! 1257: { CHECK_UI ("Shift count", sp);
! 1258: sp--; mpz_fdiv_q_2exp (sp, sp, mpz_get_ui (sp+1)); }
! 1259: break;
! 1260: case 22:
! 1261: #line 210 "calc.y"
! 1262: { CHECK_UI ("Factorial", sp);
! 1263: mpz_fac_ui (sp, mpz_get_ui (sp)); }
! 1264: break;
! 1265: case 23:
! 1266: #line 212 "calc.y"
! 1267: { mpz_neg (sp, sp); }
! 1268: break;
! 1269: case 24:
! 1270: #line 214 "calc.y"
! 1271: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) < 0); }
! 1272: break;
! 1273: case 25:
! 1274: #line 215 "calc.y"
! 1275: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) <= 0); }
! 1276: break;
! 1277: case 26:
! 1278: #line 216 "calc.y"
! 1279: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) == 0); }
! 1280: break;
! 1281: case 27:
! 1282: #line 217 "calc.y"
! 1283: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) != 0); }
! 1284: break;
! 1285: case 28:
! 1286: #line 218 "calc.y"
! 1287: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) >= 0); }
! 1288: break;
! 1289: case 29:
! 1290: #line 219 "calc.y"
! 1291: { sp--; mpz_set_ui (sp, mpz_cmp (sp, sp+1) > 0); }
! 1292: break;
! 1293: case 30:
! 1294: #line 221 "calc.y"
! 1295: { sp--; mpz_set_ui (sp, mpz_sgn (sp) && mpz_sgn (sp+1)); }
! 1296: break;
! 1297: case 31:
! 1298: #line 222 "calc.y"
! 1299: { sp--; mpz_set_ui (sp, mpz_sgn (sp) || mpz_sgn (sp+1)); }
! 1300: break;
! 1301: case 32:
! 1302: #line 224 "calc.y"
! 1303: { mpz_abs (sp, sp); }
! 1304: break;
! 1305: case 33:
! 1306: #line 225 "calc.y"
! 1307: { sp--; CHECK_UI ("Binomial base", sp+1);
! 1308: mpz_bin_ui (sp, sp, mpz_get_ui (sp+1)); }
! 1309: break;
! 1310: case 34:
! 1311: #line 227 "calc.y"
! 1312: { CHECK_UI ("Fibonacci", sp);
! 1313: mpz_fib_ui (sp, mpz_get_ui (sp)); }
! 1314: break;
! 1315: case 36:
! 1316: #line 230 "calc.y"
! 1317: { sp--; mpz_set_si (sp,
! 1318: mpz_kronecker (sp, sp+1)); }
! 1319: break;
! 1320: case 38:
! 1321: #line 233 "calc.y"
! 1322: { CHECK_UI ("Lucas number", sp);
! 1323: mpz_lucnum_ui (sp, mpz_get_ui (sp)); }
! 1324: break;
! 1325: case 39:
! 1326: #line 235 "calc.y"
! 1327: { mpz_nextprime (sp, sp); }
! 1328: break;
! 1329: case 40:
! 1330: #line 236 "calc.y"
! 1331: { sp -= 2; mpz_powm (sp, sp, sp+1, sp+2); }
! 1332: break;
! 1333: case 41:
! 1334: #line 237 "calc.y"
! 1335: { sp--; CHECK_UI ("Nth-root", sp+1);
! 1336: mpz_root (sp, sp, mpz_get_ui (sp+1)); }
! 1337: break;
! 1338: case 42:
! 1339: #line 239 "calc.y"
! 1340: { mpz_sqrt (sp, sp); }
! 1341: break;
! 1342: case 43:
! 1343: #line 241 "calc.y"
! 1344: {
! 1345: sp++;
! 1346: CHECK_OVERFLOW ();
! 1347: CHECK_VARIABLE (yyvsp[0].var);
! 1348: mpz_set (sp, variable[yyvsp[0].var]);
! 1349: }
! 1350: break;
! 1351: case 44:
! 1352: #line 247 "calc.y"
! 1353: {
! 1354: sp++;
! 1355: CHECK_OVERFLOW ();
! 1356: if (mpz_set_str (sp, yyvsp[0].str, ibase) != 0)
! 1357: {
! 1358: fprintf (stderr, "Invalid number: %s\n", yyvsp[0].str);
! 1359: YYERROR;
! 1360: }
! 1361: }
! 1362: break;
! 1363: case 46:
! 1364: #line 259 "calc.y"
! 1365: { sp--; mpz_gcd (sp, sp, sp+1); }
! 1366: break;
! 1367: case 48:
! 1368: #line 263 "calc.y"
! 1369: { sp--; mpz_lcm (sp, sp, sp+1); }
! 1370: break;
! 1371: }
! 1372:
! 1373: #line 705 "/usr/share/bison/bison.simple"
! 1374:
! 1375:
! 1376: yyvsp -= yylen;
! 1377: yyssp -= yylen;
! 1378: #if YYLSP_NEEDED
! 1379: yylsp -= yylen;
! 1380: #endif
! 1381:
! 1382: #if YYDEBUG
! 1383: if (yydebug)
! 1384: {
! 1385: short *yyssp1 = yyss - 1;
! 1386: YYFPRINTF (stderr, "state stack now");
! 1387: while (yyssp1 != yyssp)
! 1388: YYFPRINTF (stderr, " %d", *++yyssp1);
! 1389: YYFPRINTF (stderr, "\n");
! 1390: }
! 1391: #endif
! 1392:
! 1393: *++yyvsp = yyval;
! 1394: #if YYLSP_NEEDED
! 1395: *++yylsp = yyloc;
! 1396: #endif
! 1397:
! 1398: /* Now `shift' the result of the reduction. Determine what state
! 1399: that goes to, based on the state we popped back to and the rule
! 1400: number reduced by. */
! 1401:
! 1402: yyn = yyr1[yyn];
! 1403:
! 1404: yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
! 1405: if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
! 1406: yystate = yytable[yystate];
! 1407: else
! 1408: yystate = yydefgoto[yyn - YYNTBASE];
! 1409:
! 1410: goto yynewstate;
! 1411:
! 1412:
! 1413: /*------------------------------------.
! 1414: | yyerrlab -- here on detecting error |
! 1415: `------------------------------------*/
! 1416: yyerrlab:
! 1417: /* If not already recovering from an error, report this error. */
! 1418: if (!yyerrstatus)
! 1419: {
! 1420: ++yynerrs;
! 1421:
! 1422: #ifdef YYERROR_VERBOSE
! 1423: yyn = yypact[yystate];
! 1424:
! 1425: if (yyn > YYFLAG && yyn < YYLAST)
! 1426: {
! 1427: YYSIZE_T yysize = 0;
! 1428: char *yymsg;
! 1429: int yyx, yycount;
! 1430:
! 1431: yycount = 0;
! 1432: /* Start YYX at -YYN if negative to avoid negative indexes in
! 1433: YYCHECK. */
! 1434: for (yyx = yyn < 0 ? -yyn : 0;
! 1435: yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
! 1436: if (yycheck[yyx + yyn] == yyx)
! 1437: yysize += yystrlen (yytname[yyx]) + 15, yycount++;
! 1438: yysize += yystrlen ("parse error, unexpected ") + 1;
! 1439: yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
! 1440: yymsg = (char *) YYSTACK_ALLOC (yysize);
! 1441: if (yymsg != 0)
! 1442: {
! 1443: char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
! 1444: yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
! 1445:
! 1446: if (yycount < 5)
! 1447: {
! 1448: yycount = 0;
! 1449: for (yyx = yyn < 0 ? -yyn : 0;
! 1450: yyx < (int) (sizeof (yytname) / sizeof (char *));
! 1451: yyx++)
! 1452: if (yycheck[yyx + yyn] == yyx)
! 1453: {
! 1454: const char *yyq = ! yycount ? ", expecting " : " or ";
! 1455: yyp = yystpcpy (yyp, yyq);
! 1456: yyp = yystpcpy (yyp, yytname[yyx]);
! 1457: yycount++;
! 1458: }
! 1459: }
! 1460: yyerror (yymsg);
! 1461: YYSTACK_FREE (yymsg);
! 1462: }
! 1463: else
! 1464: yyerror ("parse error; also virtual memory exhausted");
! 1465: }
! 1466: else
! 1467: #endif /* defined (YYERROR_VERBOSE) */
! 1468: yyerror ("parse error");
! 1469: }
! 1470: goto yyerrlab1;
! 1471:
! 1472:
! 1473: /*--------------------------------------------------.
! 1474: | yyerrlab1 -- error raised explicitly by an action |
! 1475: `--------------------------------------------------*/
! 1476: yyerrlab1:
! 1477: if (yyerrstatus == 3)
! 1478: {
! 1479: /* If just tried and failed to reuse lookahead token after an
! 1480: error, discard it. */
! 1481:
! 1482: /* return failure if at end of input */
! 1483: if (yychar == YYEOF)
! 1484: YYABORT;
! 1485: YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
! 1486: yychar, yytname[yychar1]));
! 1487: yychar = YYEMPTY;
! 1488: }
! 1489:
! 1490: /* Else will try to reuse lookahead token after shifting the error
! 1491: token. */
! 1492:
! 1493: yyerrstatus = 3; /* Each real token shifted decrements this */
! 1494:
! 1495: goto yyerrhandle;
! 1496:
! 1497:
! 1498: /*-------------------------------------------------------------------.
! 1499: | yyerrdefault -- current state does not do anything special for the |
! 1500: | error token. |
! 1501: `-------------------------------------------------------------------*/
! 1502: yyerrdefault:
! 1503: #if 0
! 1504: /* This is wrong; only states that explicitly want error tokens
! 1505: should shift them. */
! 1506:
! 1507: /* If its default is to accept any token, ok. Otherwise pop it. */
! 1508: yyn = yydefact[yystate];
! 1509: if (yyn)
! 1510: goto yydefault;
! 1511: #endif
! 1512:
! 1513:
! 1514: /*---------------------------------------------------------------.
! 1515: | yyerrpop -- pop the current state because it cannot handle the |
! 1516: | error token |
! 1517: `---------------------------------------------------------------*/
! 1518: yyerrpop:
! 1519: if (yyssp == yyss)
! 1520: YYABORT;
! 1521: yyvsp--;
! 1522: yystate = *--yyssp;
! 1523: #if YYLSP_NEEDED
! 1524: yylsp--;
! 1525: #endif
! 1526:
! 1527: #if YYDEBUG
! 1528: if (yydebug)
! 1529: {
! 1530: short *yyssp1 = yyss - 1;
! 1531: YYFPRINTF (stderr, "Error: state stack now");
! 1532: while (yyssp1 != yyssp)
! 1533: YYFPRINTF (stderr, " %d", *++yyssp1);
! 1534: YYFPRINTF (stderr, "\n");
! 1535: }
! 1536: #endif
! 1537:
! 1538: /*--------------.
! 1539: | yyerrhandle. |
! 1540: `--------------*/
! 1541: yyerrhandle:
! 1542: yyn = yypact[yystate];
! 1543: if (yyn == YYFLAG)
! 1544: goto yyerrdefault;
! 1545:
! 1546: yyn += YYTERROR;
! 1547: if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
! 1548: goto yyerrdefault;
! 1549:
! 1550: yyn = yytable[yyn];
! 1551: if (yyn < 0)
! 1552: {
! 1553: if (yyn == YYFLAG)
! 1554: goto yyerrpop;
! 1555: yyn = -yyn;
! 1556: goto yyreduce;
! 1557: }
! 1558: else if (yyn == 0)
! 1559: goto yyerrpop;
! 1560:
! 1561: if (yyn == YYFINAL)
! 1562: YYACCEPT;
! 1563:
! 1564: YYDPRINTF ((stderr, "Shifting error token, "));
! 1565:
! 1566: *++yyvsp = yylval;
! 1567: #if YYLSP_NEEDED
! 1568: *++yylsp = yylloc;
! 1569: #endif
! 1570:
! 1571: yystate = yyn;
! 1572: goto yynewstate;
! 1573:
! 1574:
! 1575: /*-------------------------------------.
! 1576: | yyacceptlab -- YYACCEPT comes here. |
! 1577: `-------------------------------------*/
! 1578: yyacceptlab:
! 1579: yyresult = 0;
! 1580: goto yyreturn;
! 1581:
! 1582: /*-----------------------------------.
! 1583: | yyabortlab -- YYABORT comes here. |
! 1584: `-----------------------------------*/
! 1585: yyabortlab:
! 1586: yyresult = 1;
! 1587: goto yyreturn;
! 1588:
! 1589: /*---------------------------------------------.
! 1590: | yyoverflowab -- parser overflow comes here. |
! 1591: `---------------------------------------------*/
! 1592: yyoverflowlab:
! 1593: yyerror ("parser stack overflow");
! 1594: yyresult = 2;
! 1595: /* Fall through. */
! 1596:
! 1597: yyreturn:
! 1598: #ifndef yyoverflow
! 1599: if (yyss != yyssa)
! 1600: YYSTACK_FREE (yyss);
! 1601: #endif
! 1602: return yyresult;
! 1603: }
! 1604: #line 265 "calc.y"
! 1605:
! 1606:
! 1607: yyerror (char *s)
! 1608: {
! 1609: fprintf (stderr, "%s\n", s);
! 1610: }
! 1611:
! 1612: int calc_option_readline = -1;
! 1613:
! 1614: int
! 1615: main (int argc, char *argv[])
! 1616: {
! 1617: int i;
! 1618:
! 1619: for (i = 1; i < argc; i++)
! 1620: {
! 1621: if (strcmp (argv[i], "--readline") == 0)
! 1622: calc_option_readline = 1;
! 1623: else if (strcmp (argv[i], "--noreadline") == 0)
! 1624: calc_option_readline = 0;
! 1625: else if (strcmp (argv[i], "--help") == 0)
! 1626: {
! 1627: printf ("Usage: calc [--option]...\n");
! 1628: printf (" --readline use readline\n");
! 1629: printf (" --noreadline don't use readline\n");
! 1630: printf (" --help this message\n");
! 1631: printf ("Readline is only available when compiled in,\n");
! 1632: printf ("and in that case it's the default on a tty.\n");
! 1633: exit (0);
! 1634: }
! 1635: else
! 1636: {
! 1637: fprintf (stderr, "Unrecognised option: %s\n", argv[i]);
! 1638: exit (1);
! 1639: }
! 1640: }
! 1641:
! 1642: #if WITH_READLINE
! 1643: calc_init_readline ();
! 1644: #else
! 1645: if (calc_option_readline == 1)
! 1646: {
! 1647: fprintf (stderr, "Readline support not available\n");
! 1648: exit (1);
! 1649: }
! 1650: #endif
! 1651:
! 1652: for (i = 0; i < numberof (variable); i++)
! 1653: mpz_init (variable[i]);
! 1654:
! 1655: for (i = 0; i < numberof (stack); i++)
! 1656: mpz_init (stack[i]);
! 1657:
! 1658: return yyparse ();
! 1659: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>