#include #ifndef lint #if 0 static char vargram_sccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #else __IDSTRING(vargram_rcsid, "$NetBSD: skeleton.c,v 1.14 1997/10/20 03:41:16 lukem Exp $"); #endif #endif #define vargram_BYACC 1 #define vargram_MAJOR 1 #define vargram_MINOR 9 #define vargram_LEX vargram_lex() #define vargram_EMPTY -1 #define vargram_clearin (vargram_char=(vargram_EMPTY)) #define vargram_errok (vargram_errflag=0) #define vargram_RECOVERING (vargram_errflag!=0) #define vargram_PREFIX "vargram_" #line 24 "make2cook/vargram.y" #include #include #include #include #include #include #ifdef DEBUG #define vargram_DEBUG 1 #ifdef vargram_BISON #define fprintf vargram_trace2 #else #define printf trace_where(__FILE__, __LINE__), vargram_trace #endif extern int vargram_debug; #endif static string_ty * patvar(string_ty *name, string_ty *from, string_ty *to) { string_ty *tmp; string_ty *result; string_ty *s_from; string_ty *s_to; if (!strchr(from->str_text, '%')) { tmp = from; if (tmp->str_length == 0) from = str_from_c("%0%"); else if (tmp->str_text[0] == '.') from = str_format("%%0%%%s", tmp->str_text); else from = str_format("%%0%%.%s", tmp->str_text); str_free(tmp); } else { tmp = from; s_from = str_from_c("%"); s_to = str_from_c("%0%"); from = str_substitute(s_from, s_to, tmp); str_free(tmp); } if (!strchr(to->str_text, '%')) { tmp = to; if (tmp->str_length == 0) to = str_from_c("%0%"); else if (tmp->str_text[0] == '.') to = str_format("%%0%%%s", tmp->str_text); else to = str_format("%%0%%.%s", tmp->str_text); str_free(tmp); } else { tmp = to; s_from = str_from_c("%"); s_to = str_from_c("%0%"); to = str_substitute(s_from, s_to, tmp); str_free(tmp); } tmp = variable_mangle_lookup(name); str_free(name); result = str_format ( "[patsubst %s %s %s]", from->str_text, to->str_text, tmp->str_text ); str_free(tmp); str_free(from); str_free(to); return result; } static string_ty * function(string_ty *name, string_list_ty *args) { string_ty *s; string_ty *result; static string_ty *foreach; if (!foreach) foreach = str_from_c("foreach"); if (str_equal(name, foreach) && args->nstrings == 3) { string_ty *s_from; string_ty *s_to; /* * The foreach function is treated specially. This is * not an exact semantic mapping, but it is better than * nothing. */ variable_mangle_forget(args->string[0]); s_from = str_format("[%s]", args->string[0]->str_text); s_to = str_from_c("%"); s = str_substitute(s_from, s_to, args->string[2]); result = str_format ( "[fromto %% %s %s]", s->str_text, args->string[1]->str_text ); str_free(s); str_free(s_from); str_free(s_to); } else { /* * Construct the function invokation. There are * make-equivalents for all the function names built * into cook, so there is no need to translate the * function name. */ s = wl2str(args, 0, args->nstrings - 1, (char *)0); string_list_destructor(args); result = str_format("[%s %s]", name->str_text, s->str_text); str_free(s); } str_free(name); string_list_destructor(args); trace(("result = \"%s\";\n", result->str_text)); return result; } #line 175 "make2cook/vargram.y" typedef union { string_ty *lv_string; string_list_ty lv_list; } vargram_STYPE; #line 165 "y.tab.c" #define COLON 257 #define COMMA 258 #define DOLLAR 259 #define EQU 260 #define LB 261 #define LP 262 #define PLAIN 263 #define RB 264 #define RP 265 #define SPACE 266 #define vargram_ERRCODE 256 short vargram_lhs[] = { -1, 0, 0, 0, 12, 13, 13, 13, 14, 14, 4, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 7, 7, 6, 6, 3, 3, 8, 8, 8, 10, 10, 1, 1, 2, 2, 2, 2, 2, 2, 9, 15, 15, }; short vargram_len[] = { 2, 1, 2, 1, 0, 1, 2, 2, 1, 4, 1, 2, 2, 2, 4, 4, 8, 8, 6, 6, 1, 1, 2, 0, 2, 1, 1, 1, 3, 0, 1, 2, 1, 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, 2, }; short vargram_defred[] = { 0, 3, 0, 0, 0, 20, 0, 10, 0, 5, 12, 0, 0, 13, 0, 11, 7, 6, 26, 0, 21, 25, 0, 41, 38, 37, 0, 20, 0, 34, 40, 0, 39, 23, 15, 0, 22, 23, 14, 0, 0, 27, 0, 35, 9, 0, 0, 0, 0, 0, 43, 42, 0, 0, 0, 23, 24, 19, 23, 18, 44, 28, 0, 0, 17, 16, }; short vargram_dgoto[] = { 2, 28, 29, 40, 6, 19, 56, 46, 41, 30, 42, 32, 3, 8, 9, 52, }; short vargram_sindex[] = { -239, 0, 0, -210, -154, 0, -149, 0, -222, 0, 0, -157, -157, 0, -195, 0, 0, 0, 0, -224, 0, 0, -211, 0, 0, 0, -195, 0, -195, 0, 0, -148, 0, 0, 0, -195, 0, 0, 0, -195, -227, 0, -230, 0, 0, -195, -166, -173, -160, -179, 0, 0, -234, -195, -195, 0, 0, 0, 0, 0, 0, 0, -175, -189, 0, 0, }; short vargram_rindex[] = { 2, 0, 0, 51, 0, 0, 1, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, 0, -251, 0, 0, 0, 0, 0, 0, -168, 0, 0, 0, -178, 0, 0, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, -183, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short vargram_gindex[] = { 0, -33, -24, 76, 0, 83, -1, -31, 52, 0, 98, -3, 0, 0, 108, 0, }; #define vargram_TABLESIZE 267 short vargram_table[] = { 7, 8, 4, 15, 43, 7, 48, 32, 21, 21, 20, 20, 54, 32, 32, 32, 21, 1, 36, 21, 54, 36, 23, 24, 62, 4, 25, 63, 26, 27, 43, 50, 60, 33, 18, 4, 53, 4, 51, 5, 34, 5, 35, 21, 16, 21, 37, 18, 4, 4, 33, 1, 5, 5, 38, 39, 33, 33, 33, 21, 21, 23, 24, 2, 4, 25, 30, 26, 27, 18, 4, 29, 30, 30, 5, 31, 65, 29, 29, 50, 29, 31, 31, 18, 4, 50, 59, 29, 5, 64, 29, 57, 18, 4, 55, 22, 29, 5, 18, 4, 58, 18, 4, 5, 61, 10, 5, 11, 12, 13, 4, 47, 31, 14, 5, 49, 17, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 8, }; short vargram_check[] = { 3, 0, 0, 6, 28, 8, 37, 258, 11, 12, 11, 12, 45, 264, 265, 266, 19, 256, 19, 22, 53, 22, 256, 257, 55, 259, 260, 58, 262, 263, 54, 258, 266, 257, 258, 259, 266, 259, 265, 263, 264, 263, 266, 46, 266, 48, 257, 258, 259, 259, 258, 0, 263, 263, 265, 266, 264, 265, 266, 62, 63, 256, 257, 0, 259, 260, 258, 262, 263, 258, 259, 258, 264, 265, 263, 258, 265, 264, 265, 258, 258, 264, 265, 258, 259, 258, 265, 265, 263, 264, 258, 264, 258, 259, 260, 12, 264, 263, 258, 259, 260, 258, 259, 263, 52, 259, 263, 261, 262, 263, 259, 35, 14, 262, 263, 39, 8, 265, 266, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, -1, -1, 263, -1, 266, }; #define vargram_FINAL 2 #ifndef vargram_DEBUG #define vargram_DEBUG 0 #endif #define vargram_MAXTOKEN 266 #if vargram_DEBUG char *vargram_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"COLON","COMMA","DOLLAR","EQU", "LB","LP","PLAIN","RB","RP","SPACE", }; char *vargram_rule[] = { "$accept : main", "main : dbg", "main : dbg strings", "main : error", "dbg :", "strings : string", "strings : strings string", "strings : strings SPACE", "string : gizzards", "string : gizzards LP ssl RP", "gizzards : var", "gizzards : gizzards var", "var : DOLLAR DOLLAR", "var : DOLLAR PLAIN", "var : DOLLAR LP name RP", "var : DOLLAR LB name RB", "var : DOLLAR LP name COLON oname EQU oname RP", "var : DOLLAR LB name COLON oname EQU oname RB", "var : DOLLAR LP name SPACE csl RP", "var : DOLLAR LB name SPACE csl RB", "var : PLAIN", "name : namec", "name : name namec", "oname :", "oname : oname namec", "namec : var", "namec : COMMA", "csl : ossl", "csl : csl comma ossl", "ossl :", "ossl : ssl", "ossl : ssl SPACE", "ssl : arg", "ssl : ssl SPACE arg", "arg : argc", "arg : arg argc", "argc : PLAIN", "argc : EQU", "argc : COLON", "argc : var", "argc : parens", "argc : error", "parens : LP csl RP", "comma : COMMA", "comma : comma SPACE", }; #endif #ifdef vargram_STACKSIZE #undef vargram_MAXDEPTH #define vargram_MAXDEPTH vargram_STACKSIZE #else #ifdef vargram_MAXDEPTH #define vargram_STACKSIZE vargram_MAXDEPTH #else #define vargram_STACKSIZE 10000 #define vargram_MAXDEPTH 10000 #endif #endif #define vargram_INITSTACKSIZE 200 int vargram_debug; int vargram_nerrs; int vargram_errflag; int vargram_char; short *vargram_ssp; vargram_STYPE *vargram_vsp; vargram_STYPE vargram_val; vargram_STYPE vargram_lval; short *vargram_ss; short *vargram_sslim; vargram_STYPE *vargram_vs; int vargram_stacksize; /* allocate initial stack or double stack size, up to vargram_MAXDEPTH */ int vargram_parse __P((void)); static int vargram_growstack __P((void)); static int vargram_growstack() { int newsize, i; short *newss; vargram_STYPE *newvs; if ((newsize = vargram_stacksize) == 0) newsize = vargram_INITSTACKSIZE; else if (newsize >= vargram_MAXDEPTH) return -1; else if ((newsize *= 2) > vargram_MAXDEPTH) newsize = vargram_MAXDEPTH; i = vargram_ssp - vargram_ss; if ((newss = (short *)realloc(vargram_ss, newsize * sizeof *newss)) == NULL) return -1; vargram_ss = newss; vargram_ssp = newss + i; if ((newvs = (vargram_STYPE *)realloc(vargram_vs, newsize * sizeof *newvs)) == NULL) return -1; vargram_vs = newvs; vargram_vsp = newvs + i; vargram_stacksize = newsize; vargram_sslim = vargram_ss + newsize - 1; return 0; } #define vargram_ABORT goto vargram_abort #define vargram_REJECT goto vargram_abort #define vargram_ACCEPT goto vargram_accept #define vargram_ERROR goto vargram_errlab int vargram_parse() { int vargram_m, vargram_n, vargram_state; #if vargram_DEBUG char *vargram_s; if ((vargram_s = getenv("vargram_DEBUG")) != NULL) { vargram_n = *vargram_s; if (vargram_n >= '0' && vargram_n <= '9') vargram_debug = vargram_n - '0'; } #endif vargram_nerrs = 0; vargram_errflag = 0; vargram_char = (-1); if (vargram_ss == NULL && vargram_growstack()) goto vargram_overflow; vargram_ssp = vargram_ss; vargram_vsp = vargram_vs; *vargram_ssp = vargram_state = 0; vargram_loop: if ((vargram_n = vargram_defred[vargram_state]) != 0) goto vargram_reduce; if (vargram_char < 0) { if ((vargram_char = vargram_lex()) < 0) vargram_char = 0; #if vargram_DEBUG if (vargram_debug) { vargram_s = 0; if (vargram_char <= vargram_MAXTOKEN) vargram_s = vargram_name[vargram_char]; if (!vargram_s) vargram_s = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", vargram_PREFIX, vargram_state, vargram_char, vargram_s); } #endif } if ((vargram_n = vargram_sindex[vargram_state]) && (vargram_n += vargram_char) >= 0 && vargram_n <= vargram_TABLESIZE && vargram_check[vargram_n] == vargram_char) { #if vargram_DEBUG if (vargram_debug) printf("%sdebug: state %d, shifting to state %d\n", vargram_PREFIX, vargram_state, vargram_table[vargram_n]); #endif if (vargram_ssp >= vargram_sslim && vargram_growstack()) { goto vargram_overflow; } *++vargram_ssp = vargram_state = vargram_table[vargram_n]; *++vargram_vsp = vargram_lval; vargram_char = (-1); if (vargram_errflag > 0) --vargram_errflag; goto vargram_loop; } if ((vargram_n = vargram_rindex[vargram_state]) && (vargram_n += vargram_char) >= 0 && vargram_n <= vargram_TABLESIZE && vargram_check[vargram_n] == vargram_char) { vargram_n = vargram_table[vargram_n]; goto vargram_reduce; } if (vargram_errflag) goto vargram_inrecovery; goto vargram_newerror; vargram_newerror: vargram_error("syntax error"); goto vargram_errlab; vargram_errlab: ++vargram_nerrs; vargram_inrecovery: if (vargram_errflag < 3) { vargram_errflag = 3; for (;;) { if ((vargram_n = vargram_sindex[*vargram_ssp]) && (vargram_n += vargram_ERRCODE) >= 0 && vargram_n <= vargram_TABLESIZE && vargram_check[vargram_n] == vargram_ERRCODE) { #if vargram_DEBUG if (vargram_debug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", vargram_PREFIX, *vargram_ssp, vargram_table[vargram_n]); #endif if (vargram_ssp >= vargram_sslim && vargram_growstack()) { goto vargram_overflow; } *++vargram_ssp = vargram_state = vargram_table[vargram_n]; *++vargram_vsp = vargram_lval; goto vargram_loop; } else { #if vargram_DEBUG if (vargram_debug) printf("%sdebug: error recovery discarding state %d\n", vargram_PREFIX, *vargram_ssp); #endif if (vargram_ssp <= vargram_ss) goto vargram_abort; --vargram_ssp; --vargram_vsp; } } } else { if (vargram_char == 0) goto vargram_abort; #if vargram_DEBUG if (vargram_debug) { vargram_s = 0; if (vargram_char <= vargram_MAXTOKEN) vargram_s = vargram_name[vargram_char]; if (!vargram_s) vargram_s = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", vargram_PREFIX, vargram_state, vargram_char, vargram_s); } #endif vargram_char = (-1); goto vargram_loop; } vargram_reduce: #if vargram_DEBUG if (vargram_debug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", vargram_PREFIX, vargram_state, vargram_n, vargram_rule[vargram_n]); #endif vargram_m = vargram_len[vargram_n]; vargram_val = vargram_vsp[1-vargram_m]; switch (vargram_n) { case 1: #line 198 "make2cook/vargram.y" { variable_mangle_result(str_from_c("")); } break; case 3: #line 201 "make2cook/vargram.y" { variable_mangle_result(str_from_c("")); } break; case 4: #line 206 "make2cook/vargram.y" { #if vargram_DEBUG vargram_debug = trace_pretest_; #endif } break; case 8: #line 221 "make2cook/vargram.y" { variable_mangle_result(vargram_vsp[0].lv_string); } break; case 9: #line 223 "make2cook/vargram.y" { size_t j; for (j = 0; j < vargram_vsp[-1].lv_list.nstrings; ++j) { variable_mangle_result ( str_format("%s(%s)", vargram_vsp[-3].lv_string->str_text, vargram_vsp[-1].lv_list.string[j]->str_text) ); } str_free(vargram_vsp[-3].lv_string); string_list_destructor(&vargram_vsp[-1].lv_list); } break; case 10: #line 240 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 11: #line 242 "make2cook/vargram.y" { vargram_val.lv_string = str_catenate(vargram_vsp[-1].lv_string, vargram_vsp[0].lv_string); str_free(vargram_vsp[-1].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 12: #line 251 "make2cook/vargram.y" { vargram_val.lv_string = str_from_c("$"); } break; case 13: #line 253 "make2cook/vargram.y" { vargram_val.lv_string = variable_mangle_lookup(vargram_vsp[0].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 14: #line 258 "make2cook/vargram.y" { vargram_val.lv_string = variable_mangle_lookup(vargram_vsp[-1].lv_string); str_free(vargram_vsp[-1].lv_string); } break; case 15: #line 263 "make2cook/vargram.y" { vargram_val.lv_string = variable_mangle_lookup(vargram_vsp[-1].lv_string); str_free(vargram_vsp[-1].lv_string); } break; case 16: #line 268 "make2cook/vargram.y" { vargram_val.lv_string = patvar(vargram_vsp[-5].lv_string, vargram_vsp[-3].lv_string, vargram_vsp[-1].lv_string); } break; case 17: #line 270 "make2cook/vargram.y" { vargram_val.lv_string = patvar(vargram_vsp[-5].lv_string, vargram_vsp[-3].lv_string, vargram_vsp[-1].lv_string); } break; case 18: #line 272 "make2cook/vargram.y" { vargram_val.lv_string = function(vargram_vsp[-3].lv_string, &vargram_vsp[-1].lv_list); } break; case 19: #line 274 "make2cook/vargram.y" { vargram_val.lv_string = function(vargram_vsp[-3].lv_string, &vargram_vsp[-1].lv_list); } break; case 20: #line 276 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 21: #line 281 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 22: #line 283 "make2cook/vargram.y" { vargram_val.lv_string = str_catenate(vargram_vsp[-1].lv_string, vargram_vsp[0].lv_string); str_free(vargram_vsp[-1].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 23: #line 292 "make2cook/vargram.y" { vargram_val.lv_string = str_from_c(""); } break; case 24: #line 294 "make2cook/vargram.y" { vargram_val.lv_string = str_catenate(vargram_vsp[-1].lv_string, vargram_vsp[0].lv_string); str_free(vargram_vsp[-1].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 25: #line 303 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 26: #line 305 "make2cook/vargram.y" { vargram_val.lv_string = str_from_c(","); } break; case 27: #line 310 "make2cook/vargram.y" { string_list_constructor(&vargram_val.lv_list); string_list_append(&vargram_val.lv_list, vargram_vsp[0].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 28: #line 316 "make2cook/vargram.y" { vargram_val.lv_list = vargram_vsp[-2].lv_list; string_list_append(&vargram_val.lv_list, vargram_vsp[0].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 29: #line 325 "make2cook/vargram.y" { /* * Guess that empty space separated lists were * really a single space for substitution. * E.g. $(subst $(\n), ,$(list)) */ vargram_val.lv_string = str_from_c("\" \""); } break; case 30: #line 334 "make2cook/vargram.y" { vargram_val.lv_string = wl2str(&vargram_vsp[0].lv_list, 0, vargram_vsp[0].lv_list.nstrings - 1, (char *)0); string_list_destructor(&vargram_vsp[0].lv_list); } break; case 31: #line 339 "make2cook/vargram.y" { vargram_val.lv_string = wl2str(&vargram_vsp[-1].lv_list, 0, vargram_vsp[-1].lv_list.nstrings - 1, (char *)0); string_list_destructor(&vargram_vsp[-1].lv_list); } break; case 32: #line 347 "make2cook/vargram.y" { string_list_constructor(&vargram_val.lv_list); string_list_append(&vargram_val.lv_list, vargram_vsp[0].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 33: #line 353 "make2cook/vargram.y" { vargram_val.lv_list = vargram_vsp[-2].lv_list; string_list_append(&vargram_val.lv_list, vargram_vsp[0].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 34: #line 362 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 35: #line 364 "make2cook/vargram.y" { vargram_val.lv_string = str_catenate(vargram_vsp[-1].lv_string, vargram_vsp[0].lv_string); str_free(vargram_vsp[-1].lv_string); str_free(vargram_vsp[0].lv_string); } break; case 36: #line 373 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 37: #line 375 "make2cook/vargram.y" { vargram_val.lv_string = str_from_c("\\="); } break; case 38: #line 377 "make2cook/vargram.y" { vargram_val.lv_string = str_from_c("\\:"); } break; case 39: #line 379 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 40: #line 381 "make2cook/vargram.y" { vargram_val.lv_string = vargram_vsp[0].lv_string; } break; case 41: #line 383 "make2cook/vargram.y" { vargram_val.lv_string = str_from_c(""); } break; case 42: #line 388 "make2cook/vargram.y" { string_ty *s; s = wl2str(&vargram_vsp[-1].lv_list, 0, vargram_vsp[-1].lv_list.nstrings, ","); string_list_destructor(&vargram_vsp[-1].lv_list); vargram_val.lv_string = str_format("(%s)", s->str_text); str_free(s); } break; #line 767 "y.tab.c" } vargram_ssp -= vargram_m; vargram_state = *vargram_ssp; vargram_vsp -= vargram_m; vargram_m = vargram_lhs[vargram_n]; if (vargram_state == 0 && vargram_m == 0) { #if vargram_DEBUG if (vargram_debug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", vargram_PREFIX, vargram_FINAL); #endif vargram_state = vargram_FINAL; *++vargram_ssp = vargram_FINAL; *++vargram_vsp = vargram_val; if (vargram_char < 0) { if ((vargram_char = vargram_lex()) < 0) vargram_char = 0; #if vargram_DEBUG if (vargram_debug) { vargram_s = 0; if (vargram_char <= vargram_MAXTOKEN) vargram_s = vargram_name[vargram_char]; if (!vargram_s) vargram_s = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", vargram_PREFIX, vargram_FINAL, vargram_char, vargram_s); } #endif } if (vargram_char == 0) goto vargram_accept; goto vargram_loop; } if ((vargram_n = vargram_gindex[vargram_m]) && (vargram_n += vargram_state) >= 0 && vargram_n <= vargram_TABLESIZE && vargram_check[vargram_n] == vargram_state) vargram_state = vargram_table[vargram_n]; else vargram_state = vargram_dgoto[vargram_m]; #if vargram_DEBUG if (vargram_debug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", vargram_PREFIX, *vargram_ssp, vargram_state); #endif if (vargram_ssp >= vargram_sslim && vargram_growstack()) { goto vargram_overflow; } *++vargram_ssp = vargram_state; *++vargram_vsp = vargram_val; goto vargram_loop; vargram_overflow: vargram_error("yacc stack overflow"); vargram_abort: return (1); vargram_accept: return (0); }