Path: blob/main/contrib/byacc/test/btyacc/calc1.tab.c
48082 views
/* original parser id follows */1/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */2/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */34#define YYBYACC 15#define YYMAJOR 26#define YYMINOR 07#define YYCHECK "yyyymmdd"89#define YYEMPTY (-1)10#define yyclearin (yychar = YYEMPTY)11#define yyerrok (yyerrflag = 0)12#define YYRECOVERING() (yyerrflag != 0)13#define YYENOMEM (-2)14#define YYEOF 015#undef YYBTYACC16#define YYBTYACC 017#define YYDEBUGSTR YYPREFIX "debug"1819#ifndef yyparse20#define yyparse calc1_parse21#endif /* yyparse */2223#ifndef yylex24#define yylex calc1_lex25#endif /* yylex */2627#ifndef yyerror28#define yyerror calc1_error29#endif /* yyerror */3031#ifndef yychar32#define yychar calc1_char33#endif /* yychar */3435#ifndef yyval36#define yyval calc1_val37#endif /* yyval */3839#ifndef yylval40#define yylval calc1_lval41#endif /* yylval */4243#ifndef yydebug44#define yydebug calc1_debug45#endif /* yydebug */4647#ifndef yynerrs48#define yynerrs calc1_nerrs49#endif /* yynerrs */5051#ifndef yyerrflag52#define yyerrflag calc1_errflag53#endif /* yyerrflag */5455#ifndef yylhs56#define yylhs calc1_lhs57#endif /* yylhs */5859#ifndef yylen60#define yylen calc1_len61#endif /* yylen */6263#ifndef yydefred64#define yydefred calc1_defred65#endif /* yydefred */6667#ifndef yystos68#define yystos calc1_stos69#endif /* yystos */7071#ifndef yydgoto72#define yydgoto calc1_dgoto73#endif /* yydgoto */7475#ifndef yysindex76#define yysindex calc1_sindex77#endif /* yysindex */7879#ifndef yyrindex80#define yyrindex calc1_rindex81#endif /* yyrindex */8283#ifndef yygindex84#define yygindex calc1_gindex85#endif /* yygindex */8687#ifndef yytable88#define yytable calc1_table89#endif /* yytable */9091#ifndef yycheck92#define yycheck calc1_check93#endif /* yycheck */9495#ifndef yyname96#define yyname calc1_name97#endif /* yyname */9899#ifndef yyrule100#define yyrule calc1_rule101#endif /* yyrule */102103#if YYBTYACC104105#ifndef yycindex106#define yycindex calc1_cindex107#endif /* yycindex */108109#ifndef yyctable110#define yyctable calc1_ctable111#endif /* yyctable */112113#endif /* YYBTYACC */114115#define YYPREFIX "calc1_"116117#define YYPURE 0118119#line 2 "calc1.y"120121/* http://dinosaur.compilertools.net/yacc/index.html */122123#include <stdlib.h>124#include <stdio.h>125#include <ctype.h>126#include <math.h>127128typedef struct interval129{130double lo, hi;131}132INTERVAL;133134INTERVAL vmul(double, double, INTERVAL);135INTERVAL vdiv(double, double, INTERVAL);136137extern int yylex(void);138static void yyerror(const char *s);139140int dcheck(INTERVAL);141142double dreg[26];143INTERVAL vreg[26];144145#ifdef YYSTYPE146#undef YYSTYPE_IS_DECLARED147#define YYSTYPE_IS_DECLARED 1148#endif149#ifndef YYSTYPE_IS_DECLARED150#define YYSTYPE_IS_DECLARED 1151#line 31 "calc1.y"152typedef union YYSTYPE153{154int ival;155double dval;156INTERVAL vval;157} YYSTYPE;158#endif /* !YYSTYPE_IS_DECLARED */159#line 161 "calc1.tab.c"160161/* compatibility with bison */162#ifdef YYPARSE_PARAM163/* compatibility with FreeBSD */164# ifdef YYPARSE_PARAM_TYPE165# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)166# else167# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)168# endif169#else170# define YYPARSE_DECL() yyparse(void)171#endif172173/* Parameters sent to lex. */174#ifdef YYLEX_PARAM175# define YYLEX_DECL() yylex(void *YYLEX_PARAM)176# define YYLEX yylex(YYLEX_PARAM)177#else178# define YYLEX_DECL() yylex(void)179# define YYLEX yylex()180#endif181182/* Parameters sent to yyerror. */183#ifndef YYERROR_DECL184#define YYERROR_DECL() yyerror(const char *s)185#endif186#ifndef YYERROR_CALL187#define YYERROR_CALL(msg) yyerror(msg)188#endif189190extern int YYPARSE_DECL();191192#define DREG 257193#define VREG 258194#define CONST 259195#define UMINUS 260196#define YYERRCODE 256197typedef int YYINT;198static const YYINT calc1_lhs[] = { -1,1993, 3, 0, 0, 0, 0, 0, 1, 1, 1,2001, 1, 1, 1, 1, 2, 2, 2, 2, 2,2012, 2, 2, 2, 2, 2, 2, 2,202};203static const YYINT calc1_len[] = { 2,2040, 2, 2, 2, 4, 4, 2, 1, 1, 3,2053, 3, 3, 2, 3, 1, 5, 1, 3, 3,2063, 3, 3, 3, 3, 3, 2, 3,207};208static const YYINT calc1_defred[] = { 0,2090, 0, 0, 8, 0, 0, 0, 0, 0, 7,2100, 0, 9, 18, 14, 27, 0, 0, 0, 0,2110, 0, 3, 0, 0, 0, 0, 4, 0, 0,2120, 0, 0, 15, 0, 28, 0, 0, 0, 0,21312, 24, 13, 26, 0, 0, 23, 25, 14, 0,2140, 0, 0, 0, 5, 6, 0, 0, 0, 12,21513, 17,216};217#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)218static const YYINT calc1_stos[] = { 0,219256, 257, 258, 259, 45, 40, 262, 263, 264, 10,22061, 61, 257, 258, 263, 264, 263, 264, 43, 45,22142, 47, 10, 43, 45, 42, 47, 10, 45, 40,222263, 263, 264, 41, 44, 41, 263, 264, 263, 264,223263, 264, 263, 264, 264, 264, 264, 264, 263, 263,22443, 45, 42, 47, 10, 10, 263, 263, 263, 263,225263, 41,226};227#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */228static const YYINT calc1_dgoto[] = { 7,22932, 9, 0,230};231static const YYINT calc1_sindex[] = { -40,232-8, -48, -47, 0, -37, -37, 0, 2, 17, 0,233-34, -37, 0, 0, 0, 0, -25, 90, -37, -37,234-37, -37, 0, -37, -37, -37, -37, 0, -34, -34,23525, 125, 31, 0, -34, 0, -11, 37, -11, 37,2360, 0, 0, 0, 37, 37, 0, 0, 0, 111,237-34, -34, -34, -34, 0, 0, 118, 69, 69, 0,2380, 0,239};240static const YYINT calc1_rindex[] = { 0,2410, 38, 44, 0, 0, 0, 0, 0, 0, 0,2420, 0, 0, 0, 0, 0, 0, 0, 0, 0,2430, 0, 0, 0, 0, 0, 0, 0, 0, 0,2440, -9, 0, 0, 0, 0, 51, -3, 56, 61,2450, 0, 0, 0, 67, 72, 0, 0, 0, 0,2460, 0, 0, 0, 0, 0, 0, 78, 83, 0,2470, 0,248};249#if YYBTYACC250static const YYINT calc1_cindex[] = { 0,2510, 0, 0, 0, 0, 0, 0, 0, 0, 0,2520, 0, 0, 0, 0, 0, 0, 0, 0, 0,2530, 0, 0, 0, 0, 0, 0, 0, 0, 0,2540, 0, 0, 0, 0, 0, 0, 0, 0, 0,2550, 0, 0, 0, 0, 0, 0, 0, 0, 0,2560, 0, 0, 0, 0, 0, 0, 0, 0, 0,2570, 0,258};259#endif260static const YYINT calc1_gindex[] = { 0,2614, 124, 0,262};263#define YYTABLESIZE 225264static const YYINT calc1_table[] = { 6,26516, 10, 6, 8, 5, 30, 20, 5, 15, 17,26629, 23, 11, 12, 31, 34, 21, 19, 35, 20,2670, 22, 37, 39, 41, 43, 28, 0, 0, 0,26821, 16, 49, 50, 55, 22, 0, 20, 57, 20,26956, 20, 0, 21, 19, 0, 20, 9, 22, 0,2700, 0, 0, 18, 58, 59, 60, 61, 26, 24,27110, 25, 0, 27, 0, 11, 53, 51, 0, 52,27222, 54, 26, 24, 0, 25, 19, 27, 26, 9,2739, 21, 9, 27, 9, 18, 18, 10, 18, 0,27418, 10, 11, 10, 10, 10, 11, 0, 11, 11,27511, 22, 0, 22, 0, 22, 0, 19, 0, 19,27653, 19, 21, 0, 21, 54, 21, 0, 10, 0,27710, 0, 10, 11, 0, 11, 0, 11, 16, 18,27836, 26, 24, 0, 25, 33, 27, 0, 0, 0,2790, 0, 38, 40, 42, 44, 0, 45, 46, 47,28048, 34, 53, 51, 0, 52, 0, 54, 62, 53,28151, 0, 52, 0, 54, 0, 21, 19, 0, 20,2820, 22, 0, 0, 0, 0, 0, 0, 0, 0,2830, 0, 0, 0, 0, 0, 0, 0, 0, 0,2840, 0, 0, 0, 0, 0, 0, 0, 0, 0,2850, 0, 0, 0, 0, 0, 0, 0, 0, 0,2860, 0, 0, 0, 0, 1, 2, 3, 4, 13,28714, 4, 13, 0, 4,288};289static const YYINT calc1_check[] = { 40,29010, 10, 40, 0, 45, 40, 10, 45, 5, 6,29145, 10, 61, 61, 11, 41, 42, 43, 44, 45,292-1, 47, 19, 20, 21, 22, 10, -1, -1, -1,29342, 41, 29, 30, 10, 47, -1, 41, 35, 43,29410, 45, -1, 42, 43, -1, 45, 10, 47, -1,295-1, -1, -1, 10, 51, 52, 53, 54, 42, 43,29610, 45, -1, 47, -1, 10, 42, 43, -1, 45,29710, 47, 42, 43, -1, 45, 10, 47, 42, 42,29843, 10, 45, 47, 47, 42, 43, 10, 45, -1,29947, 41, 10, 43, 44, 45, 41, -1, 43, 44,30045, 41, -1, 43, -1, 45, -1, 41, -1, 43,30142, 45, 41, -1, 43, 47, 45, -1, 41, -1,30243, -1, 45, 41, -1, 43, -1, 45, 5, 6,30341, 42, 43, -1, 45, 12, 47, -1, -1, -1,304-1, -1, 19, 20, 21, 22, -1, 24, 25, 26,30527, 41, 42, 43, -1, 45, -1, 47, 41, 42,30643, -1, 45, -1, 47, -1, 42, 43, -1, 45,307-1, 47, -1, -1, -1, -1, -1, -1, -1, -1,308-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,309-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,310-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,311-1, -1, -1, -1, -1, 256, 257, 258, 259, 257,312258, 259, 257, -1, 259,313};314#if YYBTYACC315static const YYINT calc1_ctable[] = { -1,316-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,317-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,318-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,319-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,320-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,321-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,322-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,323-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,324-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,325-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,326-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,327-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,328-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,329-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,330-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,331-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,332-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,333-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,334-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,335-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,336-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,337-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,338-1, -1, -1, -1,339};340#endif341#define YYFINAL 7342#ifndef YYDEBUG343#define YYDEBUG 0344#endif345#define YYMAXTOKEN 260346#define YYUNDFTOKEN 266347#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))348#if YYDEBUG349static const char *const calc1_name[] = {350351"$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3520,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,3530,"'='",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,3540,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,3550,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,3560,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,3570,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,358"error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines",359"illegal-symbol",360};361static const char *const calc1_rule[] = {362"$accept : line",363"lines :",364"lines : lines line",365"line : dexp '\\n'",366"line : vexp '\\n'",367"line : DREG '=' dexp '\\n'",368"line : VREG '=' vexp '\\n'",369"line : error '\\n'",370"dexp : CONST",371"dexp : DREG",372"dexp : dexp '+' dexp",373"dexp : dexp '-' dexp",374"dexp : dexp '*' dexp",375"dexp : dexp '/' dexp",376"dexp : '-' dexp",377"dexp : '(' dexp ')'",378"vexp : dexp",379"vexp : '(' dexp ',' dexp ')'",380"vexp : VREG",381"vexp : vexp '+' vexp",382"vexp : dexp '+' vexp",383"vexp : vexp '-' vexp",384"vexp : dexp '-' vexp",385"vexp : vexp '*' vexp",386"vexp : dexp '*' vexp",387"vexp : vexp '/' vexp",388"vexp : dexp '/' vexp",389"vexp : '-' vexp",390"vexp : '(' vexp ')'",391392};393#endif394395#if YYDEBUG396int yydebug;397#endif398399int yyerrflag;400int yychar;401YYSTYPE yyval;402YYSTYPE yylval;403int yynerrs;404405#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)406YYLTYPE yyloc; /* position returned by actions */407YYLTYPE yylloc; /* position from the lexer */408#endif409410#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)411#ifndef YYLLOC_DEFAULT412#define YYLLOC_DEFAULT(loc, rhs, n) \413do \414{ \415if (n == 0) \416{ \417(loc).first_line = YYRHSLOC(rhs, 0).last_line; \418(loc).first_column = YYRHSLOC(rhs, 0).last_column; \419(loc).last_line = YYRHSLOC(rhs, 0).last_line; \420(loc).last_column = YYRHSLOC(rhs, 0).last_column; \421} \422else \423{ \424(loc).first_line = YYRHSLOC(rhs, 1).first_line; \425(loc).first_column = YYRHSLOC(rhs, 1).first_column; \426(loc).last_line = YYRHSLOC(rhs, n).last_line; \427(loc).last_column = YYRHSLOC(rhs, n).last_column; \428} \429} while (0)430#endif /* YYLLOC_DEFAULT */431#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */432#if YYBTYACC433434#ifndef YYLVQUEUEGROWTH435#define YYLVQUEUEGROWTH 32436#endif437#endif /* YYBTYACC */438439/* define the initial stack-sizes */440#ifdef YYSTACKSIZE441#undef YYMAXDEPTH442#define YYMAXDEPTH YYSTACKSIZE443#else444#ifdef YYMAXDEPTH445#define YYSTACKSIZE YYMAXDEPTH446#else447#define YYSTACKSIZE 10000448#define YYMAXDEPTH 10000449#endif450#endif451452#ifndef YYINITSTACKSIZE453#define YYINITSTACKSIZE 200454#endif455456typedef struct {457unsigned stacksize;458YYINT *s_base;459YYINT *s_mark;460YYINT *s_last;461YYSTYPE *l_base;462YYSTYPE *l_mark;463#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)464YYLTYPE *p_base;465YYLTYPE *p_mark;466#endif467} YYSTACKDATA;468#if YYBTYACC469470struct YYParseState_s471{472struct YYParseState_s *save; /* Previously saved parser state */473YYSTACKDATA yystack; /* saved parser stack */474int state; /* saved parser state */475int errflag; /* saved error recovery status */476int lexeme; /* saved index of the conflict lexeme in the lexical queue */477YYINT ctry; /* saved index in yyctable[] for this conflict */478};479typedef struct YYParseState_s YYParseState;480#endif /* YYBTYACC */481/* variables for the parser stack */482static YYSTACKDATA yystack;483#if YYBTYACC484485/* Current parser state */486static YYParseState *yyps = 0;487488/* yypath != NULL: do the full parse, starting at *yypath parser state. */489static YYParseState *yypath = 0;490491/* Base of the lexical value queue */492static YYSTYPE *yylvals = 0;493494/* Current position at lexical value queue */495static YYSTYPE *yylvp = 0;496497/* End position of lexical value queue */498static YYSTYPE *yylve = 0;499500/* The last allocated position at the lexical value queue */501static YYSTYPE *yylvlim = 0;502503#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)504/* Base of the lexical position queue */505static YYLTYPE *yylpsns = 0;506507/* Current position at lexical position queue */508static YYLTYPE *yylpp = 0;509510/* End position of lexical position queue */511static YYLTYPE *yylpe = 0;512513/* The last allocated position at the lexical position queue */514static YYLTYPE *yylplim = 0;515#endif516517/* Current position at lexical token queue */518static YYINT *yylexp = 0;519520static YYINT *yylexemes = 0;521#endif /* YYBTYACC */522#line 176 "calc1.y"523/* beginning of subroutines section */524525#define BSZ 50 /* buffer size for floating point numbers */526527/* lexical analysis */528529static void530yyerror(const char *s)531{532fprintf(stderr, "%s\n", s);533}534535int536yylex(void)537{538int c;539540while ((c = getchar()) == ' ')541{ /* skip over blanks */542}543544if (isupper(c))545{546yylval.ival = c - 'A';547return (VREG);548}549if (islower(c))550{551yylval.ival = c - 'a';552return (DREG);553}554555if (isdigit(c) || c == '.')556{557/* gobble up digits, points, exponents */558char buf[BSZ + 1], *cp = buf;559int dot = 0, expr = 0;560561for (; (cp - buf) < BSZ; ++cp, c = getchar())562{563564*cp = (char) c;565if (isdigit(c))566continue;567if (c == '.')568{569if (dot++ || expr)570return ('.'); /* will cause syntax error */571continue;572}573574if (c == 'e')575{576if (expr++)577return ('e'); /* will cause syntax error */578continue;579}580581/* end of number */582break;583}584*cp = '\0';585586if ((cp - buf) >= BSZ)587printf("constant too long: truncated\n");588else589ungetc(c, stdin); /* push back last char read */590yylval.dval = atof(buf);591return (CONST);592}593return (c);594}595596static INTERVAL597hilo(double a, double b, double c, double d)598{599/* returns the smallest interval containing a, b, c, and d */600/* used by *, / routines */601INTERVAL v;602603if (a > b)604{605v.hi = a;606v.lo = b;607}608else609{610v.hi = b;611v.lo = a;612}613614if (c > d)615{616if (c > v.hi)617v.hi = c;618if (d < v.lo)619v.lo = d;620}621else622{623if (d > v.hi)624v.hi = d;625if (c < v.lo)626v.lo = c;627}628return (v);629}630631INTERVAL632vmul(double a, double b, INTERVAL v)633{634return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));635}636637int638dcheck(INTERVAL v)639{640if (v.hi >= 0. && v.lo <= 0.)641{642printf("divisor interval contains 0.\n");643return (1);644}645return (0);646}647648INTERVAL649vdiv(double a, double b, INTERVAL v)650{651return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));652}653#line 655 "calc1.tab.c"654655/* For use in generated program */656#define yydepth (int)(yystack.s_mark - yystack.s_base)657#if YYBTYACC658#define yytrial (yyps->save)659#endif /* YYBTYACC */660661#if YYDEBUG662#include <stdio.h> /* needed for printf */663#endif664665#include <stdlib.h> /* needed for malloc, etc */666#include <string.h> /* needed for memset */667668/* allocate initial stack or double stack size, up to YYMAXDEPTH */669static int yygrowstack(YYSTACKDATA *data)670{671int i;672unsigned newsize;673YYINT *newss;674YYSTYPE *newvs;675#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)676YYLTYPE *newps;677#endif678679if ((newsize = data->stacksize) == 0)680newsize = YYINITSTACKSIZE;681else if (newsize >= YYMAXDEPTH)682return YYENOMEM;683else if ((newsize *= 2) > YYMAXDEPTH)684newsize = YYMAXDEPTH;685686i = (int) (data->s_mark - data->s_base);687newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));688if (newss == NULL)689return YYENOMEM;690691data->s_base = newss;692data->s_mark = newss + i;693694newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));695if (newvs == NULL)696return YYENOMEM;697698data->l_base = newvs;699data->l_mark = newvs + i;700701#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)702newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));703if (newps == NULL)704return YYENOMEM;705706data->p_base = newps;707data->p_mark = newps + i;708#endif709710data->stacksize = newsize;711data->s_last = data->s_base + newsize - 1;712713#if YYDEBUG714if (yydebug)715fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);716#endif717return 0;718}719720#if YYPURE || defined(YY_NO_LEAKS)721static void yyfreestack(YYSTACKDATA *data)722{723free(data->s_base);724free(data->l_base);725#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)726free(data->p_base);727#endif728memset(data, 0, sizeof(*data));729}730#else731#define yyfreestack(data) /* nothing */732#endif /* YYPURE || defined(YY_NO_LEAKS) */733#if YYBTYACC734735static YYParseState *736yyNewState(unsigned size)737{738YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));739if (p == NULL) return NULL;740741p->yystack.stacksize = size;742if (size == 0)743{744p->yystack.s_base = NULL;745p->yystack.l_base = NULL;746#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)747p->yystack.p_base = NULL;748#endif749return p;750}751p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));752if (p->yystack.s_base == NULL) return NULL;753p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));754if (p->yystack.l_base == NULL) return NULL;755memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));756#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)757p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));758if (p->yystack.p_base == NULL) return NULL;759memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));760#endif761762return p;763}764765static void766yyFreeState(YYParseState *p)767{768yyfreestack(&p->yystack);769free(p);770}771#endif /* YYBTYACC */772773#define YYABORT goto yyabort774#define YYREJECT goto yyabort775#define YYACCEPT goto yyaccept776#define YYERROR goto yyerrlab777#if YYBTYACC778#define YYVALID do { if (yyps->save) goto yyvalid; } while(0)779#define YYVALID_NESTED do { if (yyps->save && \780yyps->save->save == 0) goto yyvalid; } while(0)781#endif /* YYBTYACC */782783int784YYPARSE_DECL()785{786int yym, yyn, yystate, yyresult;787#if YYBTYACC788int yynewerrflag;789YYParseState *yyerrctx = NULL;790#endif /* YYBTYACC */791#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)792YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */793#endif794#if YYDEBUG795const char *yys;796797if ((yys = getenv("YYDEBUG")) != NULL)798{799yyn = *yys;800if (yyn >= '0' && yyn <= '9')801yydebug = yyn - '0';802}803if (yydebug)804fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);805#endif806#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)807memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));808#endif809810#if YYBTYACC811yyps = yyNewState(0); if (yyps == 0) goto yyenomem;812yyps->save = 0;813#endif /* YYBTYACC */814yym = 0;815/* yyn is set below */816yynerrs = 0;817yyerrflag = 0;818yychar = YYEMPTY;819yystate = 0;820821#if YYPURE822memset(&yystack, 0, sizeof(yystack));823#endif824825if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;826yystack.s_mark = yystack.s_base;827yystack.l_mark = yystack.l_base;828#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)829yystack.p_mark = yystack.p_base;830#endif831yystate = 0;832*yystack.s_mark = 0;833834yyloop:835if ((yyn = yydefred[yystate]) != 0) goto yyreduce;836if (yychar < 0)837{838#if YYBTYACC839do {840if (yylvp < yylve)841{842/* we're currently re-reading tokens */843yylval = *yylvp++;844#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)845yylloc = *yylpp++;846#endif847yychar = *yylexp++;848break;849}850if (yyps->save)851{852/* in trial mode; save scanner results for future parse attempts */853if (yylvp == yylvlim)854{ /* Enlarge lexical value queue */855size_t p = (size_t) (yylvp - yylvals);856size_t s = (size_t) (yylvlim - yylvals);857858s += YYLVQUEUEGROWTH;859if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;860if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;861#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)862if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;863#endif864yylvp = yylve = yylvals + p;865yylvlim = yylvals + s;866#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)867yylpp = yylpe = yylpsns + p;868yylplim = yylpsns + s;869#endif870yylexp = yylexemes + p;871}872*yylexp = (YYINT) YYLEX;873*yylvp++ = yylval;874yylve++;875#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)876*yylpp++ = yylloc;877yylpe++;878#endif879yychar = *yylexp++;880break;881}882/* normal operation, no conflict encountered */883#endif /* YYBTYACC */884yychar = YYLEX;885#if YYBTYACC886} while (0);887#endif /* YYBTYACC */888if (yychar < 0) yychar = YYEOF;889#if YYDEBUG890if (yydebug)891{892if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];893fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",894YYDEBUGSTR, yydepth, yystate, yychar, yys);895#ifdef YYSTYPE_TOSTRING896#if YYBTYACC897if (!yytrial)898#endif /* YYBTYACC */899fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));900#endif901fputc('\n', stderr);902}903#endif904}905#if YYBTYACC906907/* Do we have a conflict? */908if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&909yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)910{911YYINT ctry;912913if (yypath)914{915YYParseState *save;916#if YYDEBUG917if (yydebug)918fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",919YYDEBUGSTR, yydepth, yystate);920#endif921/* Switch to the next conflict context */922save = yypath;923yypath = save->save;924save->save = NULL;925ctry = save->ctry;926if (save->state != yystate) YYABORT;927yyFreeState(save);928929}930else931{932933/* Unresolved conflict - start/continue trial parse */934YYParseState *save;935#if YYDEBUG936if (yydebug)937{938fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);939if (yyps->save)940fputs("ALREADY in conflict, continuing trial parse.\n", stderr);941else942fputs("Starting trial parse.\n", stderr);943}944#endif945save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));946if (save == NULL) goto yyenomem;947save->save = yyps->save;948save->state = yystate;949save->errflag = yyerrflag;950save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);951memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));952save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);953memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));954#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)955save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);956memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));957#endif958ctry = yytable[yyn];959if (yyctable[ctry] == -1)960{961#if YYDEBUG962if (yydebug && yychar >= YYEOF)963fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);964#endif965ctry++;966}967save->ctry = ctry;968if (yyps->save == NULL)969{970/* If this is a first conflict in the stack, start saving lexemes */971if (!yylexemes)972{973yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));974if (yylexemes == NULL) goto yyenomem;975yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));976if (yylvals == NULL) goto yyenomem;977yylvlim = yylvals + YYLVQUEUEGROWTH;978#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)979yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));980if (yylpsns == NULL) goto yyenomem;981yylplim = yylpsns + YYLVQUEUEGROWTH;982#endif983}984if (yylvp == yylve)985{986yylvp = yylve = yylvals;987#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)988yylpp = yylpe = yylpsns;989#endif990yylexp = yylexemes;991if (yychar >= YYEOF)992{993*yylve++ = yylval;994#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)995*yylpe++ = yylloc;996#endif997*yylexp = (YYINT) yychar;998yychar = YYEMPTY;999}1000}1001}1002if (yychar >= YYEOF)1003{1004yylvp--;1005#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1006yylpp--;1007#endif1008yylexp--;1009yychar = YYEMPTY;1010}1011save->lexeme = (int) (yylvp - yylvals);1012yyps->save = save;1013}1014if (yytable[yyn] == ctry)1015{1016#if YYDEBUG1017if (yydebug)1018fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",1019YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);1020#endif1021if (yychar < 0)1022{1023yylvp++;1024#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1025yylpp++;1026#endif1027yylexp++;1028}1029if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)1030goto yyoverflow;1031yystate = yyctable[ctry];1032*++yystack.s_mark = (YYINT) yystate;1033*++yystack.l_mark = yylval;1034#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1035*++yystack.p_mark = yylloc;1036#endif1037yychar = YYEMPTY;1038if (yyerrflag > 0) --yyerrflag;1039goto yyloop;1040}1041else1042{1043yyn = yyctable[ctry];1044goto yyreduce;1045}1046} /* End of code dealing with conflicts */1047#endif /* YYBTYACC */1048if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&1049yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)1050{1051#if YYDEBUG1052if (yydebug)1053fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",1054YYDEBUGSTR, yydepth, yystate, yytable[yyn]);1055#endif1056if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1057yystate = yytable[yyn];1058*++yystack.s_mark = yytable[yyn];1059*++yystack.l_mark = yylval;1060#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1061*++yystack.p_mark = yylloc;1062#endif1063yychar = YYEMPTY;1064if (yyerrflag > 0) --yyerrflag;1065goto yyloop;1066}1067if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&1068yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)1069{1070yyn = yytable[yyn];1071goto yyreduce;1072}1073if (yyerrflag != 0) goto yyinrecovery;1074#if YYBTYACC10751076yynewerrflag = 1;1077goto yyerrhandler;1078goto yyerrlab; /* redundant goto avoids 'unused label' warning */10791080yyerrlab:1081/* explicit YYERROR from an action -- pop the rhs of the rule reduced1082* before looking for error recovery */1083yystack.s_mark -= yym;1084yystate = *yystack.s_mark;1085yystack.l_mark -= yym;1086#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1087yystack.p_mark -= yym;1088#endif10891090yynewerrflag = 0;1091yyerrhandler:1092while (yyps->save)1093{1094int ctry;1095YYParseState *save = yyps->save;1096#if YYDEBUG1097if (yydebug)1098fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",1099YYDEBUGSTR, yydepth, yystate, yyps->save->state,1100(int)(yylvp - yylvals - yyps->save->lexeme));1101#endif1102/* Memorize most forward-looking error state in case it's really an error. */1103if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)1104{1105/* Free old saved error context state */1106if (yyerrctx) yyFreeState(yyerrctx);1107/* Create and fill out new saved error context state */1108yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));1109if (yyerrctx == NULL) goto yyenomem;1110yyerrctx->save = yyps->save;1111yyerrctx->state = yystate;1112yyerrctx->errflag = yyerrflag;1113yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);1114memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1115yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);1116memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1117#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1118yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);1119memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1120#endif1121yyerrctx->lexeme = (int) (yylvp - yylvals);1122}1123yylvp = yylvals + save->lexeme;1124#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1125yylpp = yylpsns + save->lexeme;1126#endif1127yylexp = yylexemes + save->lexeme;1128yychar = YYEMPTY;1129yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);1130memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1131yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);1132memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1133#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1134yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);1135memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1136#endif1137ctry = ++save->ctry;1138yystate = save->state;1139/* We tried shift, try reduce now */1140if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;1141yyps->save = save->save;1142save->save = NULL;1143yyFreeState(save);11441145/* Nothing left on the stack -- error */1146if (!yyps->save)1147{1148#if YYDEBUG1149if (yydebug)1150fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",1151YYPREFIX, yydepth);1152#endif1153/* Restore state as it was in the most forward-advanced error */1154yylvp = yylvals + yyerrctx->lexeme;1155#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1156yylpp = yylpsns + yyerrctx->lexeme;1157#endif1158yylexp = yylexemes + yyerrctx->lexeme;1159yychar = yylexp[-1];1160yylval = yylvp[-1];1161#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1162yylloc = yylpp[-1];1163#endif1164yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);1165memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1166yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);1167memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1168#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1169yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);1170memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1171#endif1172yystate = yyerrctx->state;1173yyFreeState(yyerrctx);1174yyerrctx = NULL;1175}1176yynewerrflag = 1;1177}1178if (yynewerrflag == 0) goto yyinrecovery;1179#endif /* YYBTYACC */11801181YYERROR_CALL("syntax error");1182#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1183yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */1184#endif11851186#if !YYBTYACC1187goto yyerrlab; /* redundant goto avoids 'unused label' warning */1188yyerrlab:1189#endif1190++yynerrs;11911192yyinrecovery:1193if (yyerrflag < 3)1194{1195yyerrflag = 3;1196for (;;)1197{1198if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&1199yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)1200{1201#if YYDEBUG1202if (yydebug)1203fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",1204YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);1205#endif1206if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1207yystate = yytable[yyn];1208*++yystack.s_mark = yytable[yyn];1209*++yystack.l_mark = yylval;1210#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1211/* lookahead position is error end position */1212yyerror_loc_range[2] = yylloc;1213YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */1214*++yystack.p_mark = yyloc;1215#endif1216goto yyloop;1217}1218else1219{1220#if YYDEBUG1221if (yydebug)1222fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",1223YYDEBUGSTR, yydepth, *yystack.s_mark);1224#endif1225if (yystack.s_mark <= yystack.s_base) goto yyabort;1226#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1227/* the current TOS position is the error start position */1228yyerror_loc_range[1] = *yystack.p_mark;1229#endif1230#if defined(YYDESTRUCT_CALL)1231#if YYBTYACC1232if (!yytrial)1233#endif /* YYBTYACC */1234#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1235YYDESTRUCT_CALL("error: discarding state",1236yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);1237#else1238YYDESTRUCT_CALL("error: discarding state",1239yystos[*yystack.s_mark], yystack.l_mark);1240#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1241#endif /* defined(YYDESTRUCT_CALL) */1242--yystack.s_mark;1243--yystack.l_mark;1244#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1245--yystack.p_mark;1246#endif1247}1248}1249}1250else1251{1252if (yychar == YYEOF) goto yyabort;1253#if YYDEBUG1254if (yydebug)1255{1256if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1257fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",1258YYDEBUGSTR, yydepth, yystate, yychar, yys);1259}1260#endif1261#if defined(YYDESTRUCT_CALL)1262#if YYBTYACC1263if (!yytrial)1264#endif /* YYBTYACC */1265#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1266YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);1267#else1268YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);1269#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1270#endif /* defined(YYDESTRUCT_CALL) */1271yychar = YYEMPTY;1272goto yyloop;1273}12741275yyreduce:1276yym = yylen[yyn];1277#if YYDEBUG1278if (yydebug)1279{1280fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",1281YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);1282#ifdef YYSTYPE_TOSTRING1283#if YYBTYACC1284if (!yytrial)1285#endif /* YYBTYACC */1286if (yym > 0)1287{1288int i;1289fputc('<', stderr);1290for (i = yym; i > 0; i--)1291{1292if (i != yym) fputs(", ", stderr);1293fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],1294yystack.l_mark[1-i]), stderr);1295}1296fputc('>', stderr);1297}1298#endif1299fputc('\n', stderr);1300}1301#endif1302if (yym > 0)1303yyval = yystack.l_mark[1-yym];1304else1305memset(&yyval, 0, sizeof yyval);1306#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)13071308/* Perform position reduction */1309memset(&yyloc, 0, sizeof(yyloc));1310#if YYBTYACC1311if (!yytrial)1312#endif /* YYBTYACC */1313{1314YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);1315/* just in case YYERROR is invoked within the action, save1316the start of the rhs as the error start position */1317yyerror_loc_range[1] = yystack.p_mark[1-yym];1318}1319#endif13201321switch (yyn)1322{1323case 3:1324#line 57 "calc1.y"1325{1326(void) printf("%15.8f\n", yystack.l_mark[-1].dval);1327}1328#line 1330 "calc1.tab.c"1329break;1330case 4:1331#line 61 "calc1.y"1332{1333(void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);1334}1335#line 1337 "calc1.tab.c"1336break;1337case 5:1338#line 65 "calc1.y"1339{1340dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;1341}1342#line 1344 "calc1.tab.c"1343break;1344case 6:1345#line 69 "calc1.y"1346{1347vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;1348}1349#line 1351 "calc1.tab.c"1350break;1351case 7:1352#line 73 "calc1.y"1353{1354yyerrok;1355}1356#line 1358 "calc1.tab.c"1357break;1358case 9:1359#line 80 "calc1.y"1360{1361yyval.dval = dreg[yystack.l_mark[0].ival];1362}1363#line 1365 "calc1.tab.c"1364break;1365case 10:1366#line 84 "calc1.y"1367{1368yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;1369}1370#line 1372 "calc1.tab.c"1371break;1372case 11:1373#line 88 "calc1.y"1374{1375yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;1376}1377#line 1379 "calc1.tab.c"1378break;1379case 12:1380#line 92 "calc1.y"1381{1382yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;1383}1384#line 1386 "calc1.tab.c"1385break;1386case 13:1387#line 96 "calc1.y"1388{1389yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;1390}1391#line 1393 "calc1.tab.c"1392break;1393case 14:1394#line 100 "calc1.y"1395{1396yyval.dval = -yystack.l_mark[0].dval;1397}1398#line 1400 "calc1.tab.c"1399break;1400case 15:1401#line 104 "calc1.y"1402{1403yyval.dval = yystack.l_mark[-1].dval;1404}1405#line 1407 "calc1.tab.c"1406break;1407case 16:1408#line 110 "calc1.y"1409{1410yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;1411}1412#line 1414 "calc1.tab.c"1413break;1414case 17:1415#line 114 "calc1.y"1416{1417yyval.vval.lo = yystack.l_mark[-3].dval;1418yyval.vval.hi = yystack.l_mark[-1].dval;1419if ( yyval.vval.lo > yyval.vval.hi )1420{1421(void) printf("interval out of order\n");1422YYERROR;1423}1424}1425#line 1427 "calc1.tab.c"1426break;1427case 18:1428#line 124 "calc1.y"1429{1430yyval.vval = vreg[yystack.l_mark[0].ival];1431}1432#line 1434 "calc1.tab.c"1433break;1434case 19:1435#line 128 "calc1.y"1436{1437yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;1438yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;1439}1440#line 1442 "calc1.tab.c"1441break;1442case 20:1443#line 133 "calc1.y"1444{1445yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;1446yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;1447}1448#line 1450 "calc1.tab.c"1449break;1450case 21:1451#line 138 "calc1.y"1452{1453yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;1454yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;1455}1456#line 1458 "calc1.tab.c"1457break;1458case 22:1459#line 143 "calc1.y"1460{1461yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;1462yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;1463}1464#line 1466 "calc1.tab.c"1465break;1466case 23:1467#line 148 "calc1.y"1468{1469yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );1470}1471#line 1473 "calc1.tab.c"1472break;1473case 24:1474#line 152 "calc1.y"1475{1476yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );1477}1478#line 1480 "calc1.tab.c"1479break;1480case 25:1481#line 156 "calc1.y"1482{1483if (dcheck(yystack.l_mark[0].vval)) YYERROR;1484yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );1485}1486#line 1488 "calc1.tab.c"1487break;1488case 26:1489#line 161 "calc1.y"1490{1491if (dcheck ( yystack.l_mark[0].vval )) YYERROR;1492yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );1493}1494#line 1496 "calc1.tab.c"1495break;1496case 27:1497#line 166 "calc1.y"1498{1499yyval.vval.hi = -yystack.l_mark[0].vval.lo;1500yyval.vval.lo = -yystack.l_mark[0].vval.hi;1501}1502#line 1504 "calc1.tab.c"1503break;1504case 28:1505#line 171 "calc1.y"1506{1507yyval.vval = yystack.l_mark[-1].vval;1508}1509#line 1511 "calc1.tab.c"1510break;1511#line 1513 "calc1.tab.c"1512default:1513break;1514}1515yystack.s_mark -= yym;1516yystate = *yystack.s_mark;1517yystack.l_mark -= yym;1518#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1519yystack.p_mark -= yym;1520#endif1521yym = yylhs[yyn];1522if (yystate == 0 && yym == 0)1523{1524#if YYDEBUG1525if (yydebug)1526{1527fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1528#ifdef YYSTYPE_TOSTRING1529#if YYBTYACC1530if (!yytrial)1531#endif /* YYBTYACC */1532fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));1533#endif1534fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);1535}1536#endif1537yystate = YYFINAL;1538*++yystack.s_mark = YYFINAL;1539*++yystack.l_mark = yyval;1540#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1541*++yystack.p_mark = yyloc;1542#endif1543if (yychar < 0)1544{1545#if YYBTYACC1546do {1547if (yylvp < yylve)1548{1549/* we're currently re-reading tokens */1550yylval = *yylvp++;1551#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1552yylloc = *yylpp++;1553#endif1554yychar = *yylexp++;1555break;1556}1557if (yyps->save)1558{1559/* in trial mode; save scanner results for future parse attempts */1560if (yylvp == yylvlim)1561{ /* Enlarge lexical value queue */1562size_t p = (size_t) (yylvp - yylvals);1563size_t s = (size_t) (yylvlim - yylvals);15641565s += YYLVQUEUEGROWTH;1566if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)1567goto yyenomem;1568if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)1569goto yyenomem;1570#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1571if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)1572goto yyenomem;1573#endif1574yylvp = yylve = yylvals + p;1575yylvlim = yylvals + s;1576#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1577yylpp = yylpe = yylpsns + p;1578yylplim = yylpsns + s;1579#endif1580yylexp = yylexemes + p;1581}1582*yylexp = (YYINT) YYLEX;1583*yylvp++ = yylval;1584yylve++;1585#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1586*yylpp++ = yylloc;1587yylpe++;1588#endif1589yychar = *yylexp++;1590break;1591}1592/* normal operation, no conflict encountered */1593#endif /* YYBTYACC */1594yychar = YYLEX;1595#if YYBTYACC1596} while (0);1597#endif /* YYBTYACC */1598if (yychar < 0) yychar = YYEOF;1599#if YYDEBUG1600if (yydebug)1601{1602if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1603fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",1604YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);1605}1606#endif1607}1608if (yychar == YYEOF) goto yyaccept;1609goto yyloop;1610}1611if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&1612yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)1613yystate = yytable[yyn];1614else1615yystate = yydgoto[yym];1616#if YYDEBUG1617if (yydebug)1618{1619fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1620#ifdef YYSTYPE_TOSTRING1621#if YYBTYACC1622if (!yytrial)1623#endif /* YYBTYACC */1624fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));1625#endif1626fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);1627}1628#endif1629if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1630*++yystack.s_mark = (YYINT) yystate;1631*++yystack.l_mark = yyval;1632#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1633*++yystack.p_mark = yyloc;1634#endif1635goto yyloop;1636#if YYBTYACC16371638/* Reduction declares that this path is valid. Set yypath and do a full parse */1639yyvalid:1640if (yypath) YYABORT;1641while (yyps->save)1642{1643YYParseState *save = yyps->save;1644yyps->save = save->save;1645save->save = yypath;1646yypath = save;1647}1648#if YYDEBUG1649if (yydebug)1650fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",1651YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));1652#endif1653if (yyerrctx)1654{1655yyFreeState(yyerrctx);1656yyerrctx = NULL;1657}1658yylvp = yylvals + yypath->lexeme;1659#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1660yylpp = yylpsns + yypath->lexeme;1661#endif1662yylexp = yylexemes + yypath->lexeme;1663yychar = YYEMPTY;1664yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);1665memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1666yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);1667memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1668#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1669yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);1670memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1671#endif1672yystate = yypath->state;1673goto yyloop;1674#endif /* YYBTYACC */16751676yyoverflow:1677YYERROR_CALL("yacc stack overflow");1678#if YYBTYACC1679goto yyabort_nomem;1680yyenomem:1681YYERROR_CALL("memory exhausted");1682yyabort_nomem:1683#endif /* YYBTYACC */1684yyresult = 2;1685goto yyreturn;16861687yyabort:1688yyresult = 1;1689goto yyreturn;16901691yyaccept:1692#if YYBTYACC1693if (yyps->save) goto yyvalid;1694#endif /* YYBTYACC */1695yyresult = 0;16961697yyreturn:1698#if defined(YYDESTRUCT_CALL)1699if (yychar != YYEOF && yychar != YYEMPTY)1700#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1701YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);1702#else1703YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);1704#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */17051706{1707YYSTYPE *pv;1708#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1709YYLTYPE *pp;17101711for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)1712YYDESTRUCT_CALL("cleanup: discarding state",1713yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);1714#else1715for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)1716YYDESTRUCT_CALL("cleanup: discarding state",1717yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);1718#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1719}1720#endif /* defined(YYDESTRUCT_CALL) */17211722#if YYBTYACC1723if (yyerrctx)1724{1725yyFreeState(yyerrctx);1726yyerrctx = NULL;1727}1728while (yyps)1729{1730YYParseState *save = yyps;1731yyps = save->save;1732save->save = NULL;1733yyFreeState(save);1734}1735while (yypath)1736{1737YYParseState *save = yypath;1738yypath = save->save;1739save->save = NULL;1740yyFreeState(save);1741}1742#endif /* YYBTYACC */1743yyfreestack(&yystack);1744return (yyresult);1745}174617471748