Path: blob/main/contrib/byacc/test/btyacc/btyacc_calc1.tab.c
109754 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 117#define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : 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 1118119#line 3 "btyacc_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);136137int dcheck(INTERVAL);138139double dreg[26];140INTERVAL vreg[26];141142#ifdef YYSTYPE143#undef YYSTYPE_IS_DECLARED144#define YYSTYPE_IS_DECLARED 1145#endif146#ifndef YYSTYPE_IS_DECLARED147#define YYSTYPE_IS_DECLARED 1148#line 29 "btyacc_calc1.y"149typedef union YYSTYPE150{151int ival;152double dval;153INTERVAL vval;154} YYSTYPE;155#endif /* !YYSTYPE_IS_DECLARED */156#line 158 "btyacc_calc1.tab.c"157158/* compatibility with bison */159#ifdef YYPARSE_PARAM160/* compatibility with FreeBSD */161# ifdef YYPARSE_PARAM_TYPE162# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)163# else164# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)165# endif166#else167# define YYPARSE_DECL() yyparse(void)168#endif169170/* Parameters sent to lex. */171#ifdef YYLEX_PARAM172# ifdef YYLEX_PARAM_TYPE173# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)174# else175# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)176# endif177# define YYLEX yylex(&yylval, YYLEX_PARAM)178#else179# define YYLEX_DECL() yylex(YYSTYPE *yylval)180# define YYLEX yylex(&yylval)181#endif182183/* Parameters sent to yyerror. */184#ifndef YYERROR_DECL185#define YYERROR_DECL() yyerror(const char *s)186#endif187#ifndef YYERROR_CALL188#define YYERROR_CALL(msg) yyerror(msg)189#endif190191extern int YYPARSE_DECL();192193#define DREG 257194#define VREG 258195#define CONST 259196#define UMINUS 260197#define YYERRCODE 256198typedef int YYINT;199static const YYINT calc1_lhs[] = { -1,2000, 0, 0, 3, 3, 3, 3, 1, 1, 1,2011, 1, 1, 1, 1, 2, 2, 2, 2, 2,2022, 2, 2, 2, 2, 2, 2, 2,203};204static const YYINT calc1_len[] = { 2,2050, 3, 3, 1, 1, 3, 3, 1, 1, 3,2063, 3, 3, 2, 3, 1, 5, 1, 3, 3,2073, 3, 3, 3, 3, 3, 2, 3,208};209static const YYINT calc1_defred[] = { 1,2100, 0, 0, 0, 8, 0, 0, 0, 0, 0,2113, 0, 0, 9, 18, 0, 27, 0, 0, 0,2120, 0, 0, 0, 0, 0, 0, 2, 0, 0,2130, 0, 0, 15, 0, 28, 0, 0, 0, 0,2140, 24, 0, 26, 0, 0, 23, 25, 14, 0,2150, 0, 0, 0, 0, 0, 0, 12, 13, 17,216};217#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)218static const YYINT calc1_stos[] = { 0,219262, 256, 257, 258, 259, 45, 40, 263, 264, 265,22010, 61, 61, 257, 258, 263, 264, 263, 264, 43,22145, 42, 47, 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, 263, 263, 263, 263, 263, 41,225};226#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */227static const YYINT calc1_dgoto[] = { 1,22832, 9, 10,229};230static const YYINT calc1_sindex[] = { 0,231-40, -9, -59, -54, 0, -37, -37, 0, 82, 4,2320, -34, -37, 0, 0, 0, 0, -31, -25, -37,233-37, -37, -37, -37, -37, -37, -37, 0, -34, -34,234132, 0, 82, 0, -34, 0, 0, -12, 0, -12,2350, 0, 0, 0, -12, -12, 0, 0, 0, 112,236-34, -34, -34, -34, 119, -11, -11, 0, 0, 0,237};238static const YYINT calc1_rindex[] = { 0,2390, 0, 51, 58, 0, 0, 0, 0, 11, 0,2400, 0, 0, 0, 0, -16, 0, 0, 0, 0,2410, 0, 0, 0, 0, 0, 0, 0, 0, 0,24219, 9, 27, 0, 0, 0, -5, 41, -4, 77,243-2, 0, 8, 0, 78, 85, 0, 0, 0, 0,2440, 0, 0, 0, 0, 92, 99, 0, 0, 0,245};246#if YYBTYACC247static const YYINT calc1_cindex[] = { 0,2480, 0, 0, 0, 0, 0, 0, 65, 0, 0,2490, 0, 0, 0, 0, 2, 0, 126, 0, 0,2500, 0, 0, 0, 0, 0, 0, 0, 0, 0,2510, 138, 0, 0, 0, 0, 17, 0, 24, 0,25231, 0, 38, 0, 0, 0, 0, 0, 0, 0,2530, 0, 0, 0, 0, 0, 0, 0, 0, 0,254};255#endif256static const YYINT calc1_gindex[] = { 0,2573, 125, 0,258};259#define YYTABLESIZE 225260static const YYINT calc1_table[] = { 7,26111, 12, 7, 8, 6, 30, 13, 6, 16, 18,26229, 14, 35, 28, 31, 36, 26, 24, 16, 25,2635, 27, 37, 39, 41, 43, 20, 14, 6, 26,26453, 49, 50, 23, 27, 54, 7, 55, 10, 11,26526, 12, 14, 14, 14, 0, 14, 29, 14, 16,26620, 13, 0, 56, 57, 58, 59, 20, 6, 20,2679, 20, 0, 9, 23, 6, 23, 18, 23, 0,2689, 26, 26, 26, 11, 26, 0, 26, 29, 29,26929, 20, 29, 20, 29, 20, 22, 19, 0, 0,2700, 0, 9, 9, 21, 9, 0, 9, 0, 18,27118, 10, 18, 0, 18, 0, 6, 0, 11, 3,2720, 9, 0, 0, 0, 0, 0, 22, 19, 22,27319, 22, 19, 26, 24, 21, 25, 21, 27, 21,27417, 19, 10, 0, 10, 0, 10, 33, 0, 11,2750, 11, 0, 11, 38, 40, 42, 44, 45, 46,27647, 48, 34, 53, 51, 0, 52, 0, 54, 60,27753, 51, 0, 52, 0, 54, 18, 6, 0, 0,2783, 0, 9, 53, 51, 0, 52, 0, 54, 6,2790, 0, 3, 0, 9, 0, 0, 0, 0, 0,2800, 0, 0, 0, 0, 0, 0, 0, 0, 0,2810, 0, 0, 0, 0, 0, 0, 0, 0, 0,2820, 0, 0, 0, 0, 2, 3, 4, 5, 14,28315, 5, 14, 0, 5,284};285static const YYINT calc1_check[] = { 40,28610, 61, 40, 1, 45, 40, 61, 45, 6, 7,28745, 10, 44, 10, 12, 41, 42, 43, 10, 45,28810, 47, 20, 21, 22, 23, 10, 44, 10, 42,28942, 29, 30, 10, 47, 47, 10, 35, 44, 44,29010, 44, 41, 42, 43, -1, 45, 10, 47, 41,29110, 44, -1, 51, 52, 53, 54, 41, 42, 43,29210, 45, -1, 47, 41, 42, 43, 10, 45, -1,29347, 41, 42, 43, 10, 45, -1, 47, 41, 42,29443, 41, 45, 43, 47, 45, 10, 10, -1, -1,295-1, -1, 42, 43, 10, 45, -1, 47, -1, 42,29643, 10, 45, -1, 47, -1, 42, 43, 10, 45,297-1, 47, -1, -1, -1, -1, -1, 41, 41, 43,29843, 45, 45, 42, 43, 41, 45, 43, 47, 45,2996, 7, 41, -1, 43, -1, 45, 13, -1, 41,300-1, 43, -1, 45, 20, 21, 22, 23, 24, 25,30126, 27, 41, 42, 43, -1, 45, -1, 47, 41,30242, 43, -1, 45, -1, 47, 41, 42, 43, -1,30345, -1, 47, 42, 43, -1, 45, -1, 47, 42,30443, -1, 45, -1, 47, -1, -1, -1, -1, -1,305-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,306-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,307-1, -1, -1, -1, -1, 256, 257, 258, 259, 257,308258, 259, 257, -1, 259,309};310#if YYBTYACC311static const YYINT calc1_ctable[] = { 20,31216, -1, 21, 16, -1, 22, 16, -1, 23, 16,313-1, 4, 16, -1, 14, 16, -1, 34, 16, -1,31410, 16, -1, 11, 16, -1, 12, 16, -1, 13,31516, -1, -1, -1, -1, -1, -1, -1, -1, -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,335};336#endif337#define YYFINAL 1338#ifndef YYDEBUG339#define YYDEBUG 0340#endif341#define YYMAXTOKEN 260342#define YYUNDFTOKEN 266343#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))344#if YYDEBUG345static const char *const calc1_name[] = {346347"$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,3480,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,3490,"'='",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,3500,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,3510,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,3520,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,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,0,354"error","DREG","VREG","CONST","UMINUS","$accept","lines","dexp","vexp","line",355"illegal-symbol",356};357static const char *const calc1_rule[] = {358"$accept : lines",359"lines :",360"lines : lines line '\\n'",361"lines : lines error '\\n'",362"line : dexp",363"line : vexp",364"line : DREG '=' dexp",365"line : VREG '=' vexp",366"dexp : CONST",367"dexp : DREG",368"dexp : dexp '+' dexp",369"dexp : dexp '-' dexp",370"dexp : dexp '*' dexp",371"dexp : dexp '/' dexp",372"dexp : '-' dexp",373"dexp : '(' dexp ')'",374"vexp : dexp",375"vexp : '(' dexp ',' dexp ')'",376"vexp : VREG",377"vexp : vexp '+' vexp",378"vexp : dexp '+' vexp",379"vexp : vexp '-' vexp",380"vexp : dexp '-' vexp",381"vexp : vexp '*' vexp",382"vexp : dexp '*' vexp",383"vexp : vexp '/' vexp",384"vexp : dexp '/' vexp",385"vexp : '-' vexp",386"vexp : '(' vexp ')'",387388};389#endif390391#if YYDEBUG392int yydebug;393#endif394395#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)396#ifndef YYLLOC_DEFAULT397#define YYLLOC_DEFAULT(loc, rhs, n) \398do \399{ \400if (n == 0) \401{ \402(loc).first_line = YYRHSLOC(rhs, 0).last_line; \403(loc).first_column = YYRHSLOC(rhs, 0).last_column; \404(loc).last_line = YYRHSLOC(rhs, 0).last_line; \405(loc).last_column = YYRHSLOC(rhs, 0).last_column; \406} \407else \408{ \409(loc).first_line = YYRHSLOC(rhs, 1).first_line; \410(loc).first_column = YYRHSLOC(rhs, 1).first_column; \411(loc).last_line = YYRHSLOC(rhs, n).last_line; \412(loc).last_column = YYRHSLOC(rhs, n).last_column; \413} \414} while (0)415#endif /* YYLLOC_DEFAULT */416#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */417#if YYBTYACC418419#ifndef YYLVQUEUEGROWTH420#define YYLVQUEUEGROWTH 32421#endif422#endif /* YYBTYACC */423424/* define the initial stack-sizes */425#ifdef YYSTACKSIZE426#undef YYMAXDEPTH427#define YYMAXDEPTH YYSTACKSIZE428#else429#ifdef YYMAXDEPTH430#define YYSTACKSIZE YYMAXDEPTH431#else432#define YYSTACKSIZE 10000433#define YYMAXDEPTH 10000434#endif435#endif436437#ifndef YYINITSTACKSIZE438#define YYINITSTACKSIZE 200439#endif440441typedef struct {442unsigned stacksize;443YYINT *s_base;444YYINT *s_mark;445YYINT *s_last;446YYSTYPE *l_base;447YYSTYPE *l_mark;448#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)449YYLTYPE *p_base;450YYLTYPE *p_mark;451#endif452} YYSTACKDATA;453#if YYBTYACC454455struct YYParseState_s456{457struct YYParseState_s *save; /* Previously saved parser state */458YYSTACKDATA yystack; /* saved parser stack */459int state; /* saved parser state */460int errflag; /* saved error recovery status */461int lexeme; /* saved index of the conflict lexeme in the lexical queue */462YYINT ctry; /* saved index in yyctable[] for this conflict */463};464typedef struct YYParseState_s YYParseState;465#endif /* YYBTYACC */466#line 174 "btyacc_calc1.y"467/* beginning of subroutines section */468469int470main (void)471{472while(!feof(stdin)) {473yyparse();474}475return 0;476}477478#define BSZ 50 /* buffer size for floating point numbers */479480static void481YYERROR_DECL()482{483fprintf(stderr, "%s\n", s);484}485486/* lexical analysis */487488static int489YYLEX_DECL()490{491int c;492493while ((c = getchar()) == ' ')494{ /* skip over blanks */495}496497if (isupper(c))498{499#if YYPURE500(*yylval).ival = c - 'A';501#else502yylval.ival = c - 'A';503#endif504return (VREG);505}506if (islower(c))507{508#if YYPURE509(*yylval).ival = c - 'a';510#else511yylval.ival = c - 'a';512#endif513return (DREG);514}515516if (isdigit(c) || c == '.')517{518/* gobble up digits, points, exponents */519char buf[BSZ + 1], *cp = buf;520int dot = 0, expr = 0;521522for (; (cp - buf) < BSZ; ++cp, c = getchar())523{524525*cp = (char) c;526if (isdigit(c))527continue;528if (c == '.')529{530if (dot++ || expr)531return ('.'); /* will cause syntax error */532continue;533}534535if (c == 'e')536{537if (expr++)538return ('e'); /* will cause syntax error */539continue;540}541542/* end of number */543break;544}545*cp = '\0';546547if ((cp - buf) >= BSZ)548printf("constant too long: truncated\n");549else550ungetc(c, stdin); /* push back last char read */551#if YYPURE552(*yylval).dval = atof(buf);553#else554yylval.dval = atof(buf);555#endif556return (CONST);557}558return (c);559}560561static INTERVAL562hilo(double a, double b, double c, double d)563{564/* returns the smallest interval containing a, b, c, and d */565/* used by *, / routines */566INTERVAL v;567568if (a > b)569{570v.hi = a;571v.lo = b;572}573else574{575v.hi = b;576v.lo = a;577}578579if (c > d)580{581if (c > v.hi)582v.hi = c;583if (d < v.lo)584v.lo = d;585}586else587{588if (d > v.hi)589v.hi = d;590if (c < v.lo)591v.lo = c;592}593return (v);594}595596INTERVAL597vmul(double a, double b, INTERVAL v)598{599return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));600}601602int603dcheck(INTERVAL v)604{605if (v.hi >= 0. && v.lo <= 0.)606{607printf("divisor interval contains 0.\n");608return (1);609}610return (0);611}612613INTERVAL614vdiv(double a, double b, INTERVAL v)615{616return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));617}618#line 620 "btyacc_calc1.tab.c"619620/* For use in generated program */621#define yydepth (int)(yystack.s_mark - yystack.s_base)622#if YYBTYACC623#define yytrial (yyps->save)624#endif /* YYBTYACC */625626#if YYDEBUG627#include <stdio.h> /* needed for printf */628#endif629630#include <stdlib.h> /* needed for malloc, etc */631#include <string.h> /* needed for memset */632633/* allocate initial stack or double stack size, up to YYMAXDEPTH */634static int yygrowstack(YYSTACKDATA *data)635{636int i;637unsigned newsize;638YYINT *newss;639YYSTYPE *newvs;640#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)641YYLTYPE *newps;642#endif643644if ((newsize = data->stacksize) == 0)645newsize = YYINITSTACKSIZE;646else if (newsize >= YYMAXDEPTH)647return YYENOMEM;648else if ((newsize *= 2) > YYMAXDEPTH)649newsize = YYMAXDEPTH;650651i = (int) (data->s_mark - data->s_base);652newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));653if (newss == NULL)654return YYENOMEM;655656data->s_base = newss;657data->s_mark = newss + i;658659newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));660if (newvs == NULL)661return YYENOMEM;662663data->l_base = newvs;664data->l_mark = newvs + i;665666#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)667newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));668if (newps == NULL)669return YYENOMEM;670671data->p_base = newps;672data->p_mark = newps + i;673#endif674675data->stacksize = newsize;676data->s_last = data->s_base + newsize - 1;677678#if YYDEBUG679if (yydebug)680fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);681#endif682return 0;683}684685#if YYPURE || defined(YY_NO_LEAKS)686static void yyfreestack(YYSTACKDATA *data)687{688free(data->s_base);689free(data->l_base);690#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)691free(data->p_base);692#endif693memset(data, 0, sizeof(*data));694}695#else696#define yyfreestack(data) /* nothing */697#endif /* YYPURE || defined(YY_NO_LEAKS) */698#if YYBTYACC699700static YYParseState *701yyNewState(unsigned size)702{703YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));704if (p == NULL) return NULL;705706p->yystack.stacksize = size;707if (size == 0)708{709p->yystack.s_base = NULL;710p->yystack.l_base = NULL;711#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)712p->yystack.p_base = NULL;713#endif714return p;715}716p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));717if (p->yystack.s_base == NULL) return NULL;718p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));719if (p->yystack.l_base == NULL) return NULL;720memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));721#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)722p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));723if (p->yystack.p_base == NULL) return NULL;724memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));725#endif726727return p;728}729730static void731yyFreeState(YYParseState *p)732{733yyfreestack(&p->yystack);734free(p);735}736#endif /* YYBTYACC */737738#define YYABORT goto yyabort739#define YYREJECT goto yyabort740#define YYACCEPT goto yyaccept741#define YYERROR goto yyerrlab742#if YYBTYACC743#define YYVALID do { if (yyps->save) goto yyvalid; } while(0)744#define YYVALID_NESTED do { if (yyps->save && \745yyps->save->save == 0) goto yyvalid; } while(0)746#endif /* YYBTYACC */747748int749YYPARSE_DECL()750{751int yyerrflag;752int yychar;753YYSTYPE yyval;754YYSTYPE yylval;755int yynerrs;756757#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)758YYLTYPE yyloc; /* position returned by actions */759YYLTYPE yylloc; /* position from the lexer */760#endif761762/* variables for the parser stack */763YYSTACKDATA yystack;764#if YYBTYACC765766/* Current parser state */767static YYParseState *yyps = 0;768769/* yypath != NULL: do the full parse, starting at *yypath parser state. */770static YYParseState *yypath = 0;771772/* Base of the lexical value queue */773static YYSTYPE *yylvals = 0;774775/* Current position at lexical value queue */776static YYSTYPE *yylvp = 0;777778/* End position of lexical value queue */779static YYSTYPE *yylve = 0;780781/* The last allocated position at the lexical value queue */782static YYSTYPE *yylvlim = 0;783784#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)785/* Base of the lexical position queue */786static YYLTYPE *yylpsns = 0;787788/* Current position at lexical position queue */789static YYLTYPE *yylpp = 0;790791/* End position of lexical position queue */792static YYLTYPE *yylpe = 0;793794/* The last allocated position at the lexical position queue */795static YYLTYPE *yylplim = 0;796#endif797798/* Current position at lexical token queue */799static YYINT *yylexp = 0;800801static YYINT *yylexemes = 0;802#endif /* YYBTYACC */803int yym, yyn, yystate, yyresult;804#if YYBTYACC805int yynewerrflag;806YYParseState *yyerrctx = NULL;807#endif /* YYBTYACC */808#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)809YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */810#endif811#if YYDEBUG812const char *yys;813814if ((yys = getenv("YYDEBUG")) != NULL)815{816yyn = *yys;817if (yyn >= '0' && yyn <= '9')818yydebug = yyn - '0';819}820if (yydebug)821fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);822#endif823#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)824memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));825#endif826827yyerrflag = 0;828yychar = 0;829memset(&yyval, 0, sizeof(yyval));830memset(&yylval, 0, sizeof(yylval));831#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)832memset(&yyloc, 0, sizeof(yyloc));833memset(&yylloc, 0, sizeof(yylloc));834#endif835836#if YYBTYACC837yyps = yyNewState(0); if (yyps == 0) goto yyenomem;838yyps->save = 0;839#endif /* YYBTYACC */840yym = 0;841/* yyn is set below */842yynerrs = 0;843yyerrflag = 0;844yychar = YYEMPTY;845yystate = 0;846847#if YYPURE848memset(&yystack, 0, sizeof(yystack));849#endif850851if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;852yystack.s_mark = yystack.s_base;853yystack.l_mark = yystack.l_base;854#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)855yystack.p_mark = yystack.p_base;856#endif857yystate = 0;858*yystack.s_mark = 0;859860yyloop:861if ((yyn = yydefred[yystate]) != 0) goto yyreduce;862if (yychar < 0)863{864#if YYBTYACC865do {866if (yylvp < yylve)867{868/* we're currently re-reading tokens */869yylval = *yylvp++;870#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)871yylloc = *yylpp++;872#endif873yychar = *yylexp++;874break;875}876if (yyps->save)877{878/* in trial mode; save scanner results for future parse attempts */879if (yylvp == yylvlim)880{ /* Enlarge lexical value queue */881size_t p = (size_t) (yylvp - yylvals);882size_t s = (size_t) (yylvlim - yylvals);883884s += YYLVQUEUEGROWTH;885if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;886if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;887#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)888if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;889#endif890yylvp = yylve = yylvals + p;891yylvlim = yylvals + s;892#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)893yylpp = yylpe = yylpsns + p;894yylplim = yylpsns + s;895#endif896yylexp = yylexemes + p;897}898*yylexp = (YYINT) YYLEX;899*yylvp++ = yylval;900yylve++;901#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)902*yylpp++ = yylloc;903yylpe++;904#endif905yychar = *yylexp++;906break;907}908/* normal operation, no conflict encountered */909#endif /* YYBTYACC */910yychar = YYLEX;911#if YYBTYACC912} while (0);913#endif /* YYBTYACC */914if (yychar < 0) yychar = YYEOF;915#if YYDEBUG916if (yydebug)917{918if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];919fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",920YYDEBUGSTR, yydepth, yystate, yychar, yys);921#ifdef YYSTYPE_TOSTRING922#if YYBTYACC923if (!yytrial)924#endif /* YYBTYACC */925fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));926#endif927fputc('\n', stderr);928}929#endif930}931#if YYBTYACC932933/* Do we have a conflict? */934if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&935yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)936{937YYINT ctry;938939if (yypath)940{941YYParseState *save;942#if YYDEBUG943if (yydebug)944fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",945YYDEBUGSTR, yydepth, yystate);946#endif947/* Switch to the next conflict context */948save = yypath;949yypath = save->save;950save->save = NULL;951ctry = save->ctry;952if (save->state != yystate) YYABORT;953yyFreeState(save);954955}956else957{958959/* Unresolved conflict - start/continue trial parse */960YYParseState *save;961#if YYDEBUG962if (yydebug)963{964fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);965if (yyps->save)966fputs("ALREADY in conflict, continuing trial parse.\n", stderr);967else968fputs("Starting trial parse.\n", stderr);969}970#endif971save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));972if (save == NULL) goto yyenomem;973save->save = yyps->save;974save->state = yystate;975save->errflag = yyerrflag;976save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);977memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));978save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);979memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));980#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)981save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);982memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));983#endif984ctry = yytable[yyn];985if (yyctable[ctry] == -1)986{987#if YYDEBUG988if (yydebug && yychar >= YYEOF)989fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);990#endif991ctry++;992}993save->ctry = ctry;994if (yyps->save == NULL)995{996/* If this is a first conflict in the stack, start saving lexemes */997if (!yylexemes)998{999yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));1000if (yylexemes == NULL) goto yyenomem;1001yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));1002if (yylvals == NULL) goto yyenomem;1003yylvlim = yylvals + YYLVQUEUEGROWTH;1004#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1005yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));1006if (yylpsns == NULL) goto yyenomem;1007yylplim = yylpsns + YYLVQUEUEGROWTH;1008#endif1009}1010if (yylvp == yylve)1011{1012yylvp = yylve = yylvals;1013#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1014yylpp = yylpe = yylpsns;1015#endif1016yylexp = yylexemes;1017if (yychar >= YYEOF)1018{1019*yylve++ = yylval;1020#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1021*yylpe++ = yylloc;1022#endif1023*yylexp = (YYINT) yychar;1024yychar = YYEMPTY;1025}1026}1027}1028if (yychar >= YYEOF)1029{1030yylvp--;1031#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1032yylpp--;1033#endif1034yylexp--;1035yychar = YYEMPTY;1036}1037save->lexeme = (int) (yylvp - yylvals);1038yyps->save = save;1039}1040if (yytable[yyn] == ctry)1041{1042#if YYDEBUG1043if (yydebug)1044fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",1045YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);1046#endif1047if (yychar < 0)1048{1049yylvp++;1050#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1051yylpp++;1052#endif1053yylexp++;1054}1055if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)1056goto yyoverflow;1057yystate = yyctable[ctry];1058*++yystack.s_mark = (YYINT) yystate;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}1067else1068{1069yyn = yyctable[ctry];1070goto yyreduce;1071}1072} /* End of code dealing with conflicts */1073#endif /* YYBTYACC */1074if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&1075yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)1076{1077#if YYDEBUG1078if (yydebug)1079fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",1080YYDEBUGSTR, yydepth, yystate, yytable[yyn]);1081#endif1082if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1083yystate = yytable[yyn];1084*++yystack.s_mark = yytable[yyn];1085*++yystack.l_mark = yylval;1086#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1087*++yystack.p_mark = yylloc;1088#endif1089yychar = YYEMPTY;1090if (yyerrflag > 0) --yyerrflag;1091goto yyloop;1092}1093if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&1094yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)1095{1096yyn = yytable[yyn];1097goto yyreduce;1098}1099if (yyerrflag != 0) goto yyinrecovery;1100#if YYBTYACC11011102yynewerrflag = 1;1103goto yyerrhandler;1104goto yyerrlab; /* redundant goto avoids 'unused label' warning */11051106yyerrlab:1107/* explicit YYERROR from an action -- pop the rhs of the rule reduced1108* before looking for error recovery */1109yystack.s_mark -= yym;1110yystate = *yystack.s_mark;1111yystack.l_mark -= yym;1112#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1113yystack.p_mark -= yym;1114#endif11151116yynewerrflag = 0;1117yyerrhandler:1118while (yyps->save)1119{1120int ctry;1121YYParseState *save = yyps->save;1122#if YYDEBUG1123if (yydebug)1124fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",1125YYDEBUGSTR, yydepth, yystate, yyps->save->state,1126(int)(yylvp - yylvals - yyps->save->lexeme));1127#endif1128/* Memorize most forward-looking error state in case it's really an error. */1129if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)1130{1131/* Free old saved error context state */1132if (yyerrctx) yyFreeState(yyerrctx);1133/* Create and fill out new saved error context state */1134yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));1135if (yyerrctx == NULL) goto yyenomem;1136yyerrctx->save = yyps->save;1137yyerrctx->state = yystate;1138yyerrctx->errflag = yyerrflag;1139yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);1140memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1141yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);1142memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1143#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1144yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);1145memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1146#endif1147yyerrctx->lexeme = (int) (yylvp - yylvals);1148}1149yylvp = yylvals + save->lexeme;1150#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1151yylpp = yylpsns + save->lexeme;1152#endif1153yylexp = yylexemes + save->lexeme;1154yychar = YYEMPTY;1155yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);1156memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1157yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);1158memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1159#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1160yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);1161memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1162#endif1163ctry = ++save->ctry;1164yystate = save->state;1165/* We tried shift, try reduce now */1166if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;1167yyps->save = save->save;1168save->save = NULL;1169yyFreeState(save);11701171/* Nothing left on the stack -- error */1172if (!yyps->save)1173{1174#if YYDEBUG1175if (yydebug)1176fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",1177YYPREFIX, yydepth);1178#endif1179/* Restore state as it was in the most forward-advanced error */1180yylvp = yylvals + yyerrctx->lexeme;1181#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1182yylpp = yylpsns + yyerrctx->lexeme;1183#endif1184yylexp = yylexemes + yyerrctx->lexeme;1185yychar = yylexp[-1];1186yylval = yylvp[-1];1187#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1188yylloc = yylpp[-1];1189#endif1190yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);1191memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1192yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);1193memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1194#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1195yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);1196memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1197#endif1198yystate = yyerrctx->state;1199yyFreeState(yyerrctx);1200yyerrctx = NULL;1201}1202yynewerrflag = 1;1203}1204if (yynewerrflag == 0) goto yyinrecovery;1205#endif /* YYBTYACC */12061207YYERROR_CALL("syntax error");1208#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1209yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */1210#endif12111212#if !YYBTYACC1213goto yyerrlab; /* redundant goto avoids 'unused label' warning */1214yyerrlab:1215#endif1216++yynerrs;12171218yyinrecovery:1219if (yyerrflag < 3)1220{1221yyerrflag = 3;1222for (;;)1223{1224if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&1225yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)1226{1227#if YYDEBUG1228if (yydebug)1229fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",1230YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);1231#endif1232if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1233yystate = yytable[yyn];1234*++yystack.s_mark = yytable[yyn];1235*++yystack.l_mark = yylval;1236#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1237/* lookahead position is error end position */1238yyerror_loc_range[2] = yylloc;1239YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */1240*++yystack.p_mark = yyloc;1241#endif1242goto yyloop;1243}1244else1245{1246#if YYDEBUG1247if (yydebug)1248fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",1249YYDEBUGSTR, yydepth, *yystack.s_mark);1250#endif1251if (yystack.s_mark <= yystack.s_base) goto yyabort;1252#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1253/* the current TOS position is the error start position */1254yyerror_loc_range[1] = *yystack.p_mark;1255#endif1256#if defined(YYDESTRUCT_CALL)1257#if YYBTYACC1258if (!yytrial)1259#endif /* YYBTYACC */1260#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1261YYDESTRUCT_CALL("error: discarding state",1262yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);1263#else1264YYDESTRUCT_CALL("error: discarding state",1265yystos[*yystack.s_mark], yystack.l_mark);1266#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1267#endif /* defined(YYDESTRUCT_CALL) */1268--yystack.s_mark;1269--yystack.l_mark;1270#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1271--yystack.p_mark;1272#endif1273}1274}1275}1276else1277{1278if (yychar == YYEOF) goto yyabort;1279#if YYDEBUG1280if (yydebug)1281{1282if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1283fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",1284YYDEBUGSTR, yydepth, yystate, yychar, yys);1285}1286#endif1287#if defined(YYDESTRUCT_CALL)1288#if YYBTYACC1289if (!yytrial)1290#endif /* YYBTYACC */1291#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1292YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);1293#else1294YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);1295#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1296#endif /* defined(YYDESTRUCT_CALL) */1297yychar = YYEMPTY;1298goto yyloop;1299}13001301yyreduce:1302yym = yylen[yyn];1303#if YYDEBUG1304if (yydebug)1305{1306fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",1307YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);1308#ifdef YYSTYPE_TOSTRING1309#if YYBTYACC1310if (!yytrial)1311#endif /* YYBTYACC */1312if (yym > 0)1313{1314int i;1315fputc('<', stderr);1316for (i = yym; i > 0; i--)1317{1318if (i != yym) fputs(", ", stderr);1319fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],1320yystack.l_mark[1-i]), stderr);1321}1322fputc('>', stderr);1323}1324#endif1325fputc('\n', stderr);1326}1327#endif1328if (yym > 0)1329yyval = yystack.l_mark[1-yym];1330else1331memset(&yyval, 0, sizeof yyval);1332#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)13331334/* Perform position reduction */1335memset(&yyloc, 0, sizeof(yyloc));1336#if YYBTYACC1337if (!yytrial)1338#endif /* YYBTYACC */1339{1340YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);1341/* just in case YYERROR is invoked within the action, save1342the start of the rhs as the error start position */1343yyerror_loc_range[1] = yystack.p_mark[1-yym];1344}1345#endif13461347switch (yyn)1348{1349case 2:1350#line 51 "btyacc_calc1.y"1351{YYVALID;}1352#line 1354 "btyacc_calc1.tab.c"1353break;1354case 3:1355#line 52 "btyacc_calc1.y"1356{YYVALID;} if (!yytrial)1357#line 53 "btyacc_calc1.y"1358{1359yyerrok;1360}1361#line 1363 "btyacc_calc1.tab.c"1362break;1363case 4:1364if (!yytrial)1365#line 59 "btyacc_calc1.y"1366{1367(void) printf("%15.8f\n", yystack.l_mark[0].dval);1368}1369#line 1371 "btyacc_calc1.tab.c"1370break;1371case 5:1372if (!yytrial)1373#line 63 "btyacc_calc1.y"1374{1375(void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[0].vval.lo, yystack.l_mark[0].vval.hi);1376}1377#line 1379 "btyacc_calc1.tab.c"1378break;1379case 6:1380if (!yytrial)1381#line 67 "btyacc_calc1.y"1382{1383dreg[yystack.l_mark[-2].ival] = yystack.l_mark[0].dval;1384}1385#line 1387 "btyacc_calc1.tab.c"1386break;1387case 7:1388if (!yytrial)1389#line 71 "btyacc_calc1.y"1390{1391vreg[yystack.l_mark[-2].ival] = yystack.l_mark[0].vval;1392}1393#line 1395 "btyacc_calc1.tab.c"1394break;1395case 9:1396if (!yytrial)1397#line 78 "btyacc_calc1.y"1398{1399yyval.dval = dreg[yystack.l_mark[0].ival];1400}1401#line 1403 "btyacc_calc1.tab.c"1402break;1403case 10:1404if (!yytrial)1405#line 82 "btyacc_calc1.y"1406{1407yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;1408}1409#line 1411 "btyacc_calc1.tab.c"1410break;1411case 11:1412if (!yytrial)1413#line 86 "btyacc_calc1.y"1414{1415yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;1416}1417#line 1419 "btyacc_calc1.tab.c"1418break;1419case 12:1420if (!yytrial)1421#line 90 "btyacc_calc1.y"1422{1423yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;1424}1425#line 1427 "btyacc_calc1.tab.c"1426break;1427case 13:1428if (!yytrial)1429#line 94 "btyacc_calc1.y"1430{1431yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;1432}1433#line 1435 "btyacc_calc1.tab.c"1434break;1435case 14:1436if (!yytrial)1437#line 98 "btyacc_calc1.y"1438{1439yyval.dval = -yystack.l_mark[0].dval;1440}1441#line 1443 "btyacc_calc1.tab.c"1442break;1443case 15:1444if (!yytrial)1445#line 102 "btyacc_calc1.y"1446{1447yyval.dval = yystack.l_mark[-1].dval;1448}1449#line 1451 "btyacc_calc1.tab.c"1450break;1451case 16:1452if (!yytrial)1453#line 108 "btyacc_calc1.y"1454{1455yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;1456}1457#line 1459 "btyacc_calc1.tab.c"1458break;1459case 17:1460if (!yytrial)1461#line 112 "btyacc_calc1.y"1462{1463yyval.vval.lo = yystack.l_mark[-3].dval;1464yyval.vval.hi = yystack.l_mark[-1].dval;1465if ( yyval.vval.lo > yyval.vval.hi )1466{1467(void) printf("interval out of order\n");1468YYERROR;1469}1470}1471#line 1473 "btyacc_calc1.tab.c"1472break;1473case 18:1474if (!yytrial)1475#line 122 "btyacc_calc1.y"1476{1477yyval.vval = vreg[yystack.l_mark[0].ival];1478}1479#line 1481 "btyacc_calc1.tab.c"1480break;1481case 19:1482if (!yytrial)1483#line 126 "btyacc_calc1.y"1484{1485yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;1486yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;1487}1488#line 1490 "btyacc_calc1.tab.c"1489break;1490case 20:1491if (!yytrial)1492#line 131 "btyacc_calc1.y"1493{1494yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;1495yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;1496}1497#line 1499 "btyacc_calc1.tab.c"1498break;1499case 21:1500if (!yytrial)1501#line 136 "btyacc_calc1.y"1502{1503yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;1504yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;1505}1506#line 1508 "btyacc_calc1.tab.c"1507break;1508case 22:1509if (!yytrial)1510#line 141 "btyacc_calc1.y"1511{1512yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;1513yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;1514}1515#line 1517 "btyacc_calc1.tab.c"1516break;1517case 23:1518if (!yytrial)1519#line 146 "btyacc_calc1.y"1520{1521yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );1522}1523#line 1525 "btyacc_calc1.tab.c"1524break;1525case 24:1526if (!yytrial)1527#line 150 "btyacc_calc1.y"1528{1529yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );1530}1531#line 1533 "btyacc_calc1.tab.c"1532break;1533case 25:1534if (!yytrial)1535#line 154 "btyacc_calc1.y"1536{1537if (dcheck(yystack.l_mark[0].vval)) YYERROR;1538yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );1539}1540#line 1542 "btyacc_calc1.tab.c"1541break;1542case 26:1543if (!yytrial)1544#line 159 "btyacc_calc1.y"1545{1546if (dcheck ( yystack.l_mark[0].vval )) YYERROR;1547yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );1548}1549#line 1551 "btyacc_calc1.tab.c"1550break;1551case 27:1552if (!yytrial)1553#line 164 "btyacc_calc1.y"1554{1555yyval.vval.hi = -yystack.l_mark[0].vval.lo;1556yyval.vval.lo = -yystack.l_mark[0].vval.hi;1557}1558#line 1560 "btyacc_calc1.tab.c"1559break;1560case 28:1561if (!yytrial)1562#line 169 "btyacc_calc1.y"1563{1564yyval.vval = yystack.l_mark[-1].vval;1565}1566#line 1568 "btyacc_calc1.tab.c"1567break;1568#line 1570 "btyacc_calc1.tab.c"1569default:1570break;1571}1572yystack.s_mark -= yym;1573yystate = *yystack.s_mark;1574yystack.l_mark -= yym;1575#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1576yystack.p_mark -= yym;1577#endif1578yym = yylhs[yyn];1579if (yystate == 0 && yym == 0)1580{1581#if YYDEBUG1582if (yydebug)1583{1584fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1585#ifdef YYSTYPE_TOSTRING1586#if YYBTYACC1587if (!yytrial)1588#endif /* YYBTYACC */1589fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));1590#endif1591fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);1592}1593#endif1594yystate = YYFINAL;1595*++yystack.s_mark = YYFINAL;1596*++yystack.l_mark = yyval;1597#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1598*++yystack.p_mark = yyloc;1599#endif1600if (yychar < 0)1601{1602#if YYBTYACC1603do {1604if (yylvp < yylve)1605{1606/* we're currently re-reading tokens */1607yylval = *yylvp++;1608#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1609yylloc = *yylpp++;1610#endif1611yychar = *yylexp++;1612break;1613}1614if (yyps->save)1615{1616/* in trial mode; save scanner results for future parse attempts */1617if (yylvp == yylvlim)1618{ /* Enlarge lexical value queue */1619size_t p = (size_t) (yylvp - yylvals);1620size_t s = (size_t) (yylvlim - yylvals);16211622s += YYLVQUEUEGROWTH;1623if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)1624goto yyenomem;1625if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)1626goto yyenomem;1627#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1628if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)1629goto yyenomem;1630#endif1631yylvp = yylve = yylvals + p;1632yylvlim = yylvals + s;1633#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1634yylpp = yylpe = yylpsns + p;1635yylplim = yylpsns + s;1636#endif1637yylexp = yylexemes + p;1638}1639*yylexp = (YYINT) YYLEX;1640*yylvp++ = yylval;1641yylve++;1642#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1643*yylpp++ = yylloc;1644yylpe++;1645#endif1646yychar = *yylexp++;1647break;1648}1649/* normal operation, no conflict encountered */1650#endif /* YYBTYACC */1651yychar = YYLEX;1652#if YYBTYACC1653} while (0);1654#endif /* YYBTYACC */1655if (yychar < 0) yychar = YYEOF;1656#if YYDEBUG1657if (yydebug)1658{1659if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1660fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",1661YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);1662}1663#endif1664}1665if (yychar == YYEOF) goto yyaccept;1666goto yyloop;1667}1668if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&1669yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)1670yystate = yytable[yyn];1671else1672yystate = yydgoto[yym];1673#if YYDEBUG1674if (yydebug)1675{1676fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1677#ifdef YYSTYPE_TOSTRING1678#if YYBTYACC1679if (!yytrial)1680#endif /* YYBTYACC */1681fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));1682#endif1683fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);1684}1685#endif1686if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1687*++yystack.s_mark = (YYINT) yystate;1688*++yystack.l_mark = yyval;1689#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1690*++yystack.p_mark = yyloc;1691#endif1692goto yyloop;1693#if YYBTYACC16941695/* Reduction declares that this path is valid. Set yypath and do a full parse */1696yyvalid:1697if (yypath) YYABORT;1698while (yyps->save)1699{1700YYParseState *save = yyps->save;1701yyps->save = save->save;1702save->save = yypath;1703yypath = save;1704}1705#if YYDEBUG1706if (yydebug)1707fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",1708YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));1709#endif1710if (yyerrctx)1711{1712yyFreeState(yyerrctx);1713yyerrctx = NULL;1714}1715yylvp = yylvals + yypath->lexeme;1716#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1717yylpp = yylpsns + yypath->lexeme;1718#endif1719yylexp = yylexemes + yypath->lexeme;1720yychar = YYEMPTY;1721yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);1722memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1723yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);1724memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1725#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1726yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);1727memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1728#endif1729yystate = yypath->state;1730goto yyloop;1731#endif /* YYBTYACC */17321733yyoverflow:1734YYERROR_CALL("yacc stack overflow");1735#if YYBTYACC1736goto yyabort_nomem;1737yyenomem:1738YYERROR_CALL("memory exhausted");1739yyabort_nomem:1740#endif /* YYBTYACC */1741yyresult = 2;1742goto yyreturn;17431744yyabort:1745yyresult = 1;1746goto yyreturn;17471748yyaccept:1749#if YYBTYACC1750if (yyps->save) goto yyvalid;1751#endif /* YYBTYACC */1752yyresult = 0;17531754yyreturn:1755#if defined(YYDESTRUCT_CALL)1756if (yychar != YYEOF && yychar != YYEMPTY)1757#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1758YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);1759#else1760YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);1761#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */17621763{1764YYSTYPE *pv;1765#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1766YYLTYPE *pp;17671768for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)1769YYDESTRUCT_CALL("cleanup: discarding state",1770yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);1771#else1772for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)1773YYDESTRUCT_CALL("cleanup: discarding state",1774yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);1775#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1776}1777#endif /* defined(YYDESTRUCT_CALL) */17781779#if YYBTYACC1780if (yyerrctx)1781{1782yyFreeState(yyerrctx);1783yyerrctx = NULL;1784}1785while (yyps)1786{1787YYParseState *save = yyps;1788yyps = save->save;1789save->save = NULL;1790yyFreeState(save);1791}1792while (yypath)1793{1794YYParseState *save = yypath;1795yypath = save->save;1796save->save = NULL;1797yyFreeState(save);1798}1799#endif /* YYBTYACC */1800yyfreestack(&yystack);1801return (yyresult);1802}180318041805