yaccpar.skel revision 272461
10SN/A/* $Id: yaccpar.skel,v 1.5 2014/04/07 21:51:00 tom Exp $ */ 215993Slancea 30SN/A#include "defs.h" 40SN/A 50SN/A/* If the skeleton is changed, the banner should be changed so that */ 60SN/A/* the altered version can be easily distinguished from the original. */ 72362SN/A/* */ 80SN/A/* The #defines included with the banner are there because they are */ 92362SN/A/* useful in subsequent code. The macros #defined in the header or */ 100SN/A/* the body either are not useful outside of semantic actions or */ 110SN/A/* are conditional. */ 120SN/A 130SN/A%% banner 140SN/A/* original parser id follows */ 150SN/A/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 160SN/A/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 170SN/A 180SN/A#define YYBYACC 1 190SN/A%% insert VERSION here 200SN/A 212362SN/A#define YYEMPTY (-1) 222362SN/A#define yyclearin (yychar = YYEMPTY) 232362SN/A#define yyerrok (yyerrflag = 0) 240SN/A#define YYRECOVERING() (yyerrflag != 0) 250SN/A#define YYENOMEM (-2) 260SN/A#define YYEOF 0 270SN/A%% xdecls 280SN/A 290SN/Aextern int YYPARSE_DECL(); 300SN/A%% tables 310SN/Aextern YYINT yylhs[]; 320SN/Aextern YYINT yylen[]; 330SN/Aextern YYINT yydefred[]; 340SN/Aextern YYINT yydgoto[]; 350SN/Aextern YYINT yysindex[]; 360SN/Aextern YYINT yyrindex[]; 370SN/Aextern YYINT yygindex[]; 380SN/Aextern YYINT yytable[]; 390SN/Aextern YYINT yycheck[]; 400SN/A 410SN/A#if YYDEBUG 420SN/Aextern char *yyname[]; 430SN/Aextern char *yyrule[]; 440SN/A#endif 450SN/A%% global_vars 460SN/A 470SN/Aint yydebug; 480SN/Aint yynerrs; 490SN/A%% impure_vars 500SN/A 510SN/Aint yyerrflag; 520SN/Aint yychar; 530SN/AYYSTYPE yyval; 540SN/AYYSTYPE yylval; 550SN/A%% hdr_defs 560SN/A 570SN/A/* define the initial stack-sizes */ 580SN/A#ifdef YYSTACKSIZE 598475SN/A#undef YYMAXDEPTH 600SN/A#define YYMAXDEPTH YYSTACKSIZE 610SN/A#else 620SN/A#ifdef YYMAXDEPTH 6316890Smli#define YYSTACKSIZE YYMAXDEPTH 640SN/A#else 650SN/A#define YYSTACKSIZE 10000 660SN/A#define YYMAXDEPTH 10000 670SN/A#endif 680SN/A#endif 690SN/A 700SN/A#define YYINITSTACKSIZE 200 710SN/A 720SN/Atypedef struct { 730SN/A unsigned stacksize; 740SN/A YYINT *s_base; 750SN/A YYINT *s_mark; 760SN/A YYINT *s_last; 770SN/A YYSTYPE *l_base; 780SN/A YYSTYPE *l_mark; 790SN/A} YYSTACKDATA; 800SN/A%% hdr_vars 810SN/A/* variables for the parser stack */ 820SN/Astatic YYSTACKDATA yystack; 830SN/A%% body_vars 840SN/A int yyerrflag; 850SN/A int yychar; 860SN/A YYSTYPE yyval; 870SN/A YYSTYPE yylval; 880SN/A 890SN/A /* variables for the parser stack */ 900SN/A YYSTACKDATA yystack; 910SN/A%% body_1 920SN/A 930SN/A#if YYDEBUG 940SN/A#include <stdio.h> /* needed for printf */ 950SN/A#endif 960SN/A 970SN/A#include <stdlib.h> /* needed for malloc, etc */ 980SN/A#include <string.h> /* needed for memset */ 990SN/A 1000SN/A/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 1010SN/Astatic int yygrowstack(YYSTACKDATA *data) 1020SN/A{ 1030SN/A int i; 1040SN/A unsigned newsize; 1050SN/A YYINT *newss; 1060SN/A YYSTYPE *newvs; 1070SN/A 1080SN/A if ((newsize = data->stacksize) == 0) 1090SN/A newsize = YYINITSTACKSIZE; 1100SN/A else if (newsize >= YYMAXDEPTH) 1110SN/A return YYENOMEM; 1120SN/A else if ((newsize *= 2) > YYMAXDEPTH) 1130SN/A newsize = YYMAXDEPTH; 1140SN/A 1150SN/A i = (int) (data->s_mark - data->s_base); 1160SN/A newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 1170SN/A if (newss == 0) 1180SN/A return YYENOMEM; 1190SN/A 1200SN/A data->s_base = newss; 1210SN/A data->s_mark = newss + i; 1220SN/A 1230SN/A newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 1240SN/A if (newvs == 0) 1250SN/A return YYENOMEM; 1260SN/A 1270SN/A data->l_base = newvs; 1280SN/A data->l_mark = newvs + i; 1290SN/A 1300SN/A data->stacksize = newsize; 1310SN/A data->s_last = data->s_base + newsize - 1; 1320SN/A return 0; 1330SN/A} 1340SN/A 1350SN/A#if YYPURE || defined(YY_NO_LEAKS) 1360SN/Astatic void yyfreestack(YYSTACKDATA *data) 1370SN/A{ 1380SN/A free(data->s_base); 1390SN/A free(data->l_base); 1400SN/A memset(data, 0, sizeof(*data)); 1410SN/A} 1420SN/A#else 1430SN/A#define yyfreestack(data) /* nothing */ 1440SN/A#endif 1450SN/A 1460SN/A#define YYABORT goto yyabort 1470SN/A#define YYREJECT goto yyabort 1480SN/A#define YYACCEPT goto yyaccept 1490SN/A#define YYERROR goto yyerrlab 1500SN/A 1510SN/Aint 1520SN/AYYPARSE_DECL() 1530SN/A{ 1540SN/A%% body_2 1550SN/A int yym, yyn, yystate; 1560SN/A#if YYDEBUG 1570SN/A const char *yys; 1580SN/A 1590SN/A if ((yys = getenv("YYDEBUG")) != 0) 1600SN/A { 1610SN/A yyn = *yys; 1620SN/A if (yyn >= '0' && yyn <= '9') 1630SN/A yydebug = yyn - '0'; 1640SN/A } 1650SN/A#endif 1660SN/A 1670SN/A yynerrs = 0; 1680SN/A yyerrflag = 0; 1690SN/A yychar = YYEMPTY; 1700SN/A yystate = 0; 1710SN/A 1720SN/A#if YYPURE 1730SN/A memset(&yystack, 0, sizeof(yystack)); 1740SN/A#endif 1750SN/A 1760SN/A if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1770SN/A yystack.s_mark = yystack.s_base; 1780SN/A yystack.l_mark = yystack.l_base; 1790SN/A yystate = 0; 1800SN/A *yystack.s_mark = 0; 1810SN/A 1820SN/Ayyloop: 1830SN/A if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 1840SN/A if (yychar < 0) 1850SN/A { 1860SN/A if ((yychar = YYLEX) < 0) yychar = YYEOF; 1870SN/A#if YYDEBUG 1880SN/A if (yydebug) 1890SN/A { 1900SN/A yys = yyname[YYTRANSLATE(yychar)]; 1910SN/A printf("%sdebug: state %d, reading %d (%s)\n", 1920SN/A YYPREFIX, yystate, yychar, yys); 1930SN/A } 1940SN/A#endif 1950SN/A } 1960SN/A if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 1970SN/A yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 1980SN/A { 1990SN/A#if YYDEBUG 2000SN/A if (yydebug) 2010SN/A printf("%sdebug: state %d, shifting to state %d\n", 2020SN/A YYPREFIX, yystate, yytable[yyn]); 2030SN/A#endif 2040SN/A if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 2050SN/A { 2060SN/A goto yyoverflow; 2070SN/A } 2080SN/A yystate = yytable[yyn]; 2090SN/A *++yystack.s_mark = yytable[yyn]; 2100SN/A *++yystack.l_mark = yylval; 2110SN/A yychar = YYEMPTY; 2120SN/A if (yyerrflag > 0) --yyerrflag; 2130SN/A goto yyloop; 2140SN/A } 2150SN/A if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 2160SN/A yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 2170SN/A { 2180SN/A yyn = yytable[yyn]; 2190SN/A goto yyreduce; 2200SN/A } 2210SN/A if (yyerrflag) goto yyinrecovery; 2220SN/A 2230SN/A YYERROR_CALL("syntax error"); 2240SN/A 2250SN/A goto yyerrlab; 2260SN/A 2270SN/Ayyerrlab: 2280SN/A ++yynerrs; 2290SN/A 2300SN/Ayyinrecovery: 2310SN/A if (yyerrflag < 3) 2320SN/A { 2330SN/A yyerrflag = 3; 2340SN/A for (;;) 2350SN/A { 2360SN/A if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 2370SN/A yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 2380SN/A { 2390SN/A#if YYDEBUG 2400SN/A if (yydebug) 2410SN/A printf("%sdebug: state %d, error recovery shifting\ 2420SN/A to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 2430SN/A#endif 2440SN/A if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 2450SN/A { 2460SN/A goto yyoverflow; 2470SN/A } 2480SN/A yystate = yytable[yyn]; 2490SN/A *++yystack.s_mark = yytable[yyn]; 2500SN/A *++yystack.l_mark = yylval; 2510SN/A goto yyloop; 2520SN/A } 2530SN/A else 2540SN/A { 2550SN/A#if YYDEBUG 2560SN/A if (yydebug) 2570SN/A printf("%sdebug: error recovery discarding state %d\n", 2580SN/A YYPREFIX, *yystack.s_mark); 2590SN/A#endif 2600SN/A if (yystack.s_mark <= yystack.s_base) goto yyabort; 2610SN/A --yystack.s_mark; 2620SN/A --yystack.l_mark; 2630SN/A } 2640SN/A } 2650SN/A } 2660SN/A else 2670SN/A { 2680SN/A if (yychar == YYEOF) goto yyabort; 2690SN/A#if YYDEBUG 2700SN/A if (yydebug) 2710SN/A { 2720SN/A yys = yyname[YYTRANSLATE(yychar)]; 2730SN/A printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 2740SN/A YYPREFIX, yystate, yychar, yys); 2750SN/A } 2760SN/A#endif 2770SN/A yychar = YYEMPTY; 2780SN/A goto yyloop; 2790SN/A } 2800SN/A 2810SN/Ayyreduce: 2820SN/A#if YYDEBUG 2830SN/A if (yydebug) 2840SN/A printf("%sdebug: state %d, reducing by rule %d (%s)\n", 2850SN/A YYPREFIX, yystate, yyn, yyrule[yyn]); 2860SN/A#endif 2870SN/A yym = yylen[yyn]; 2880SN/A if (yym) 2890SN/A yyval = yystack.l_mark[1-yym]; 2900SN/A else 2910SN/A memset(&yyval, 0, sizeof yyval); 2920SN/A switch (yyn) 2930SN/A { 2940SN/A%% trailer 2950SN/A } 2960SN/A yystack.s_mark -= yym; 2970SN/A yystate = *yystack.s_mark; 2980SN/A yystack.l_mark -= yym; 29915993Slancea yym = yylhs[yyn]; 3000SN/A if (yystate == 0 && yym == 0) 3010SN/A { 3020SN/A#if YYDEBUG 3030SN/A if (yydebug) 3040SN/A printf("%sdebug: after reduction, shifting from state 0 to\ 3050SN/A state %d\n", YYPREFIX, YYFINAL); 3060SN/A#endif 3070SN/A yystate = YYFINAL; 3080SN/A *++yystack.s_mark = YYFINAL; 3090SN/A *++yystack.l_mark = yyval; 3100SN/A if (yychar < 0) 3110SN/A { 3120SN/A if ((yychar = YYLEX) < 0) yychar = YYEOF; 3130SN/A#if YYDEBUG 3140SN/A if (yydebug) 3150SN/A { 3160SN/A yys = yyname[YYTRANSLATE(yychar)]; 3170SN/A printf("%sdebug: state %d, reading %d (%s)\n", 3180SN/A YYPREFIX, YYFINAL, yychar, yys); 3190SN/A } 3200SN/A#endif 3210SN/A } 3220SN/A if (yychar == YYEOF) goto yyaccept; 3230SN/A goto yyloop; 3240SN/A } 3250SN/A if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 3260SN/A yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 3270SN/A yystate = yytable[yyn]; 3280SN/A else 3290SN/A yystate = yydgoto[yym]; 3300SN/A#if YYDEBUG 3310SN/A if (yydebug) 3320SN/A printf("%sdebug: after reduction, shifting from state %d \ 3330SN/Ato state %d\n", YYPREFIX, *yystack.s_mark, yystate); 3340SN/A#endif 3350SN/A if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 3360SN/A { 3370SN/A goto yyoverflow; 3380SN/A } 3390SN/A *++yystack.s_mark = (YYINT) yystate; 3400SN/A *++yystack.l_mark = yyval; 3410SN/A goto yyloop; 3420SN/A 3430SN/Ayyoverflow: 3440SN/A YYERROR_CALL("yacc stack overflow"); 3450SN/A 3460SN/Ayyabort: 3470SN/A yyfreestack(&yystack); 3480SN/A return (1); 3490SN/A 3500SN/Ayyaccept: 3510SN/A yyfreestack(&yystack); 3520SN/A return (0); 3530SN/A} 3540SN/A