#include #ifndef lint #if 0 static char gram_sccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #else __IDSTRING(gram_rcsid, "$NetBSD: skeleton.c,v 1.14 1997/10/20 03:41:16 lukem Exp $"); #endif #endif #define gram_BYACC 1 #define gram_MAJOR 1 #define gram_MINOR 9 #define gram_LEX gram_lex() #define gram_EMPTY -1 #define gram_clearin (gram_char=(gram_EMPTY)) #define gram_errok (gram_errflag=0) #define gram_RECOVERING (gram_errflag!=0) #define gram_PREFIX "gram_" #line 24 "make2cook/gram.y" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef DEBUG #define gram_DEBUG 1 #ifdef gram_BISON #define fprintf gram_trace2 #else #define printf trace_where(__FILE__, __LINE__), gram_trace #endif extern int gram_debug; #endif static stmt_ty *rule_context; int no_internal_rules; void gram(char *filename) { int gram_parse(void); trace(("gram(filename = %08lX)\n{\n", (long)filename)); lex_open(filename); #if gram_DEBUG gram_debug = trace_pretest_; #endif gram_parse(); lex_close(); trace(("}\n")); } #line 102 "make2cook/gram.y" typedef union { blob_ty *lv_line; blob_list_ty *lv_list; stmt_ty *lv_stmt; int lv_int; } gram_STYPE; #line 79 "y.tab.c" #define COLON 257 #define COLON_COLON 258 #define COLON_EQUALS 259 #define COMMAND 260 #define COMMAND_COMMENT 261 #define COMMENT 262 #define DEFINE 263 #define ELSE 264 #define EMPTY 265 #define ENDDEF 266 #define ENDIF 267 #define EOLN 268 #define EQUALS 269 #define EXPORT 270 #define IF 271 #define INCLUDE 272 #define INCLUDE2 273 #define INCLUDE3 274 #define OVERRIDE 275 #define PLUS_EQUALS 276 #define UNEXPORT 277 #define VPATH 278 #define VPATH2 279 #define WORD 280 #define gram_ERRCODE 256 short gram_lhs[] = { -1, 0, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 19, 19, 19, 21, 21, 22, 22, 8, 9, 9, 10, 11, 11, 16, 16, 15, 15, 15, 18, 18, 17, 17, 20, 20, 4, 4, 23, 28, 27, 26, 6, 12, 12, 12, 13, 13, 14, 1, 29, 25, 25, 24, 24, 2, 2, }; short gram_len[] = { 2, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 5, 2, 2, 1, 1, 1, 1, 2, 0, 1, 1, 1, 2, 1, 4, 6, 1, 2, 1, 1, 1, 3, 5, 0, 1, 1, 1, 3, 5, 3, 2, 2, 2, 1, 3, 3, 3, 4, 4, 3, 3, 2, 0, 1, 1, 2, 1, 1, }; short gram_defred[] = { 2, 0, 0, 0, 48, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 5, 4, 6, 25, 0, 28, 8, 9, 10, 0, 2, 12, 0, 0, 21, 0, 0, 0, 0, 0, 0, 17, 0, 20, 18, 19, 0, 0, 62, 61, 59, 0, 0, 33, 35, 31, 0, 34, 0, 40, 41, 22, 0, 0, 55, 0, 44, 49, 50, 51, 0, 0, 0, 0, 60, 0, 54, 32, 0, 0, 0, 0, 0, 0, 42, 2, 0, 0, 52, 53, 13, 0, 56, 36, 0, 0, 29, 46, 47, 0, 15, 14, 45, 0, 0, 43, 37, 30, }; short gram_dgoto[] = { 1, 17, 50, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 55, 78, 79, 57, 46, 62, 35, 91, 58, 51, 52, 84, 85, 92, 76, }; short gram_sindex[] = { 0, 0, -168, -258, 0, -235, 0, -216, -207, -207, -207, -207, -189, -187, -182, -222, -222, -256, 0, 0, 0, 0, 0, 0, -147, 0, 0, 0, 0, -244, 0, 0, -210, -222, 0, -181, -202, -229, -212, -197, -222, 0, -207, 0, 0, 0, -207, -207, 0, 0, 0, -256, -151, 0, 0, 0, -147, 0, -147, 0, 0, 0, -207, -245, 0, -207, 0, 0, 0, 0, -207, -172, -152, -150, 0, -207, 0, 0, -147, -261, -244, -149, -207, -207, 0, 0, -148, -146, 0, 0, 0, -145, 0, 0, -147, -207, 0, 0, 0, -193, 0, 0, 0, -142, -141, 0, 0, 0, }; short gram_rindex[] = { 0, 0, 117, 0, 0, 0, 0, 0, -140, 0, 0, 0, 0, 0, 0, 0, -242, -137, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -140, -140, 0, 0, 0, -135, 0, 0, 0, 0, 41, 0, -218, 0, 0, 0, -140, 0, 0, -140, 0, 0, 0, 0, -140, 0, 0, 0, 0, -140, 0, 0, -214, 0, -138, 0, -140, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -134, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short gram_gindex[] = { 0, 0, 70, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 102, 38, 0, 15, 54, -2, -3, 2, 0, 0, -27, 56, 7, 0, }; #define gram_TABLESIZE 321 short gram_table[] = { 29, 16, 63, 82, 30, 36, 83, 37, 38, 39, 31, 3, 48, 59, 60, 21, 21, 4, 5, 82, 77, 26, 83, 6, 49, 7, 8, 9, 10, 11, 12, 47, 13, 14, 15, 16, 61, 43, 21, 67, 71, 27, 77, 72, 73, 32, 38, 44, 65, 38, 39, 61, 93, 39, 45, 70, 68, 99, 64, 81, 80, 29, 86, 3, 33, 30, 66, 87, 61, 4, 5, 69, 105, 34, 83, 6, 106, 7, 8, 9, 10, 11, 12, 61, 13, 14, 15, 16, 3, 97, 98, 40, 104, 41, 4, 5, 88, 29, 42, 61, 6, 30, 7, 8, 9, 10, 11, 12, 61, 13, 14, 15, 16, 53, 54, 75, 89, 1, 90, 96, 100, 74, 101, 102, 8, 83, 56, 107, 23, 57, 24, 58, 103, 38, 95, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 16, 16, 16, 0, 0, 16, 16, 0, 16, 16, 16, 16, 16, 16, 26, 16, 16, 16, 16, 0, 26, 26, 26, 0, 0, 26, 26, 0, 26, 0, 26, 26, 26, 26, 27, 26, 26, 26, 26, 0, 27, 27, 27, 0, 0, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, }; short gram_check[] = { 2, 0, 30, 264, 2, 8, 267, 9, 10, 11, 268, 256, 268, 257, 258, 257, 258, 262, 263, 264, 56, 0, 267, 268, 280, 270, 271, 272, 273, 274, 275, 16, 277, 278, 279, 280, 280, 259, 280, 268, 42, 0, 78, 46, 47, 280, 264, 269, 33, 267, 264, 280, 79, 267, 276, 40, 268, 85, 268, 62, 62, 63, 65, 256, 280, 63, 268, 70, 280, 262, 263, 268, 99, 280, 267, 268, 103, 270, 271, 272, 273, 274, 275, 280, 277, 278, 279, 280, 256, 82, 83, 280, 95, 280, 262, 263, 268, 99, 280, 280, 268, 99, 270, 271, 272, 273, 274, 275, 280, 277, 278, 279, 280, 260, 261, 266, 268, 0, 268, 268, 268, 51, 268, 268, 271, 267, 24, 268, 268, 266, 268, 266, 94, 267, 80, 79, -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, 256, -1, -1, -1, -1, -1, 262, 263, 264, -1, -1, 267, 268, -1, 270, 271, 272, 273, 274, 275, 256, 277, 278, 279, 280, -1, 262, 263, 264, -1, -1, 267, 268, -1, 270, -1, 272, 273, 274, 275, 256, 277, 278, 279, 280, -1, 262, 263, 264, -1, -1, 267, 268, -1, 270, -1, 272, 273, 274, 275, -1, 277, 278, 279, 280, }; #define gram_FINAL 1 #ifndef gram_DEBUG #define gram_DEBUG 0 #endif #define gram_MAXTOKEN 280 #if gram_DEBUG char *gram_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","COLON_COLON", "COLON_EQUALS","COMMAND","COMMAND_COMMENT","COMMENT","DEFINE","ELSE","EMPTY", "ENDDEF","ENDIF","EOLN","EQUALS","EXPORT","IF","INCLUDE","INCLUDE2","INCLUDE3", "OVERRIDE","PLUS_EQUALS","UNEXPORT","VPATH","VPATH2","WORD", }; char *gram_rule[] = { "$accept : makefile", "makefile : stmts", "stmts :", "stmts : stmts stmt", "stmt : assignment", "stmt : comment", "stmt : rule", "stmt : conditional", "stmt : include", "stmt : vpath", "stmt : define", "stmt : EOLN", "stmt : error EOLN", "assignment : WORD assign_op word_list_optional EOLN", "assignment : OVERRIDE WORD assign_op word_list_optional EOLN", "assignment : EXPORT WORD assign_op word_list_optional EOLN", "assignment : EXPORT WORD", "assignment : UNEXPORT WORD", "assign_op : EQUALS", "assign_op : PLUS_EQUALS", "assign_op : COLON_EQUALS", "word_list : WORD", "word_list : word_list WORD", "word_list_optional :", "word_list_optional : word_list", "rule : rule_inner", "rule_inner : rule_lhs", "rule_inner : rule_lhs commands", "rule_lhs : rule_lhs_inner", "rule_lhs_inner : word_list rule_op word_list_optional EOLN", "rule_lhs_inner : word_list rule_op word_list rule_op word_list_optional EOLN", "commands : command", "commands : commands command", "command : COMMAND", "command : conditional_commands", "command : COMMAND_COMMENT", "conditional_commands : if optional_commands endif", "conditional_commands : if optional_commands else optional_commands endif", "optional_commands :", "optional_commands : commands", "rule_op : COLON", "rule_op : COLON_COLON", "conditional : if stmts endif", "conditional : if stmts else stmts endif", "if : IF word_list_optional EOLN", "eoln : word_list_optional EOLN", "else : ELSE eoln", "endif : ENDIF eoln", "comment : COMMENT", "include : INCLUDE word_list EOLN", "include : INCLUDE2 word_list EOLN", "include : INCLUDE3 word_list EOLN", "vpath : VPATH WORD word_list EOLN", "vpath : VPATH2 assign_op word_list_optional EOLN", "define : define_head define_list_optional define_end", "define_head : DEFINE WORD EOLN", "define_end : ENDDEF eoln", "define_list_optional :", "define_list_optional : define_list", "define_list : define_word", "define_list : define_list define_word", "define_word : WORD", "define_word : EOLN", }; #endif #ifdef gram_STACKSIZE #undef gram_MAXDEPTH #define gram_MAXDEPTH gram_STACKSIZE #else #ifdef gram_MAXDEPTH #define gram_STACKSIZE gram_MAXDEPTH #else #define gram_STACKSIZE 10000 #define gram_MAXDEPTH 10000 #endif #endif #define gram_INITSTACKSIZE 200 int gram_debug; int gram_nerrs; int gram_errflag; int gram_char; short *gram_ssp; gram_STYPE *gram_vsp; gram_STYPE gram_val; gram_STYPE gram_lval; short *gram_ss; short *gram_sslim; gram_STYPE *gram_vs; int gram_stacksize; /* allocate initial stack or double stack size, up to gram_MAXDEPTH */ int gram_parse __P((void)); static int gram_growstack __P((void)); static int gram_growstack() { int newsize, i; short *newss; gram_STYPE *newvs; if ((newsize = gram_stacksize) == 0) newsize = gram_INITSTACKSIZE; else if (newsize >= gram_MAXDEPTH) return -1; else if ((newsize *= 2) > gram_MAXDEPTH) newsize = gram_MAXDEPTH; i = gram_ssp - gram_ss; if ((newss = (short *)realloc(gram_ss, newsize * sizeof *newss)) == NULL) return -1; gram_ss = newss; gram_ssp = newss + i; if ((newvs = (gram_STYPE *)realloc(gram_vs, newsize * sizeof *newvs)) == NULL) return -1; gram_vs = newvs; gram_vsp = newvs + i; gram_stacksize = newsize; gram_sslim = gram_ss + newsize - 1; return 0; } #define gram_ABORT goto gram_abort #define gram_REJECT goto gram_abort #define gram_ACCEPT goto gram_accept #define gram_ERROR goto gram_errlab int gram_parse() { int gram_m, gram_n, gram_state; #if gram_DEBUG char *gram_s; if ((gram_s = getenv("gram_DEBUG")) != NULL) { gram_n = *gram_s; if (gram_n >= '0' && gram_n <= '9') gram_debug = gram_n - '0'; } #endif gram_nerrs = 0; gram_errflag = 0; gram_char = (-1); if (gram_ss == NULL && gram_growstack()) goto gram_overflow; gram_ssp = gram_ss; gram_vsp = gram_vs; *gram_ssp = gram_state = 0; gram_loop: if ((gram_n = gram_defred[gram_state]) != 0) goto gram_reduce; if (gram_char < 0) { if ((gram_char = gram_lex()) < 0) gram_char = 0; #if gram_DEBUG if (gram_debug) { gram_s = 0; if (gram_char <= gram_MAXTOKEN) gram_s = gram_name[gram_char]; if (!gram_s) gram_s = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", gram_PREFIX, gram_state, gram_char, gram_s); } #endif } if ((gram_n = gram_sindex[gram_state]) && (gram_n += gram_char) >= 0 && gram_n <= gram_TABLESIZE && gram_check[gram_n] == gram_char) { #if gram_DEBUG if (gram_debug) printf("%sdebug: state %d, shifting to state %d\n", gram_PREFIX, gram_state, gram_table[gram_n]); #endif if (gram_ssp >= gram_sslim && gram_growstack()) { goto gram_overflow; } *++gram_ssp = gram_state = gram_table[gram_n]; *++gram_vsp = gram_lval; gram_char = (-1); if (gram_errflag > 0) --gram_errflag; goto gram_loop; } if ((gram_n = gram_rindex[gram_state]) && (gram_n += gram_char) >= 0 && gram_n <= gram_TABLESIZE && gram_check[gram_n] == gram_char) { gram_n = gram_table[gram_n]; goto gram_reduce; } if (gram_errflag) goto gram_inrecovery; goto gram_newerror; gram_newerror: gram_error("syntax error"); goto gram_errlab; gram_errlab: ++gram_nerrs; gram_inrecovery: if (gram_errflag < 3) { gram_errflag = 3; for (;;) { if ((gram_n = gram_sindex[*gram_ssp]) && (gram_n += gram_ERRCODE) >= 0 && gram_n <= gram_TABLESIZE && gram_check[gram_n] == gram_ERRCODE) { #if gram_DEBUG if (gram_debug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", gram_PREFIX, *gram_ssp, gram_table[gram_n]); #endif if (gram_ssp >= gram_sslim && gram_growstack()) { goto gram_overflow; } *++gram_ssp = gram_state = gram_table[gram_n]; *++gram_vsp = gram_lval; goto gram_loop; } else { #if gram_DEBUG if (gram_debug) printf("%sdebug: error recovery discarding state %d\n", gram_PREFIX, *gram_ssp); #endif if (gram_ssp <= gram_ss) goto gram_abort; --gram_ssp; --gram_vsp; } } } else { if (gram_char == 0) goto gram_abort; #if gram_DEBUG if (gram_debug) { gram_s = 0; if (gram_char <= gram_MAXTOKEN) gram_s = gram_name[gram_char]; if (!gram_s) gram_s = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", gram_PREFIX, gram_state, gram_char, gram_s); } #endif gram_char = (-1); goto gram_loop; } gram_reduce: #if gram_DEBUG if (gram_debug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", gram_PREFIX, gram_state, gram_n, gram_rule[gram_n]); #endif gram_m = gram_len[gram_n]; gram_val = gram_vsp[1-gram_m]; switch (gram_n) { case 1: #line 126 "make2cook/gram.y" { int j; stmt_ty *s; stmt_regroup(gram_vsp[0].lv_stmt); s = stmt_vpath_default(); if (s) stmt_compound_append(gram_vsp[0].lv_stmt, s); if (!no_internal_rules) { for (j = 0; ; ++j) { s = stmt_rule_default(j); if (!s) break; stmt_compound_append(gram_vsp[0].lv_stmt, s); } } for (j = 0; ; ++j) { s = stmt_assign_default(gram_vsp[0].lv_stmt); if (!s) break; stmt_compound_prepend(gram_vsp[0].lv_stmt, s); } stmt_sort(gram_vsp[0].lv_stmt); stmt_emit(gram_vsp[0].lv_stmt); stmt_free(gram_vsp[0].lv_stmt); } break; case 2: #line 163 "make2cook/gram.y" { gram_val.lv_stmt = stmt_compound_alloc(); } break; case 3: #line 167 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[-1].lv_stmt; stmt_compound_append(gram_val.lv_stmt, gram_vsp[0].lv_stmt); } break; case 4: #line 175 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 5: #line 177 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 6: #line 179 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 7: #line 181 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 8: #line 183 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 9: #line 185 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 10: #line 187 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 11: #line 189 "make2cook/gram.y" { gram_val.lv_stmt = stmt_blank_alloc(); } break; case 12: #line 191 "make2cook/gram.y" { gram_val.lv_stmt = stmt_blank_alloc(); } break; case 13: #line 196 "make2cook/gram.y" { gram_val.lv_stmt = stmt_assign_alloc(0, gram_vsp[-3].lv_line, gram_vsp[-2].lv_int, gram_vsp[-1].lv_list); } break; case 14: #line 200 "make2cook/gram.y" { gram_val.lv_stmt = stmt_assign_alloc(1, gram_vsp[-3].lv_line, gram_vsp[-2].lv_int, gram_vsp[-1].lv_list); } break; case 15: #line 204 "make2cook/gram.y" { gram_val.lv_stmt = stmt_compound_alloc(); stmt_compound_append ( gram_val.lv_stmt, stmt_assign_alloc(1, blob_copy(gram_vsp[-3].lv_line), gram_vsp[-2].lv_int, gram_vsp[-1].lv_list) ); stmt_compound_append(gram_val.lv_stmt, stmt_export_alloc(gram_vsp[-3].lv_line)); } break; case 16: #line 214 "make2cook/gram.y" { gram_val.lv_stmt = stmt_export_alloc(gram_vsp[0].lv_line); } break; case 17: #line 218 "make2cook/gram.y" { gram_val.lv_stmt = stmt_unexport_alloc(gram_vsp[0].lv_line); } break; case 18: #line 225 "make2cook/gram.y" { gram_val.lv_int = stmt_assign_op_normal; } break; case 19: #line 227 "make2cook/gram.y" { gram_val.lv_int = stmt_assign_op_plus; } break; case 20: #line 229 "make2cook/gram.y" { gram_val.lv_int = stmt_assign_op_colon; } break; case 21: #line 234 "make2cook/gram.y" { gram_val.lv_list = blob_list_alloc(); blob_list_append(gram_val.lv_list, gram_vsp[0].lv_line); } break; case 22: #line 239 "make2cook/gram.y" { gram_val.lv_list = gram_vsp[-1].lv_list; blob_list_append(gram_val.lv_list, gram_vsp[0].lv_line); } break; case 23: #line 247 "make2cook/gram.y" { gram_val.lv_list = blob_list_alloc(); } break; case 24: #line 249 "make2cook/gram.y" { gram_val.lv_list = gram_vsp[0].lv_list; } break; case 25: #line 254 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; rule_context = 0; } break; case 26: #line 262 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 27: #line 264 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[-1].lv_stmt; stmt_rule_body(gram_val.lv_stmt, gram_vsp[0].lv_stmt); } break; case 28: #line 272 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; rule_context = gram_val.lv_stmt; } break; case 29: #line 280 "make2cook/gram.y" { gram_val.lv_stmt = stmt_rule_alloc(gram_vsp[-3].lv_list, gram_vsp[-2].lv_int, gram_vsp[-1].lv_list, (blob_list_ty *)0, (blob_list_ty *)0, (blob_list_ty *)0); } break; case 30: #line 285 "make2cook/gram.y" { gram_val.lv_stmt = stmt_rule_alloc(gram_vsp[-3].lv_list, gram_vsp[-2].lv_int, gram_vsp[-1].lv_list, (blob_list_ty *)0, gram_vsp[-5].lv_list, (blob_list_ty *)0); } break; case 31: #line 293 "make2cook/gram.y" { gram_val.lv_stmt = stmt_compound_alloc(); stmt_compound_append(gram_val.lv_stmt, gram_vsp[0].lv_stmt); } break; case 32: #line 298 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[-1].lv_stmt; stmt_compound_append(gram_val.lv_stmt, gram_vsp[0].lv_stmt); } break; case 33: #line 306 "make2cook/gram.y" { if (rule_context) stmt_rule_context(rule_context); gram_val.lv_stmt = stmt_command_alloc(gram_vsp[0].lv_line); } break; case 34: #line 312 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 35: #line 314 "make2cook/gram.y" { gram_val.lv_stmt = stmt_comment_alloc(gram_vsp[0].lv_line); } break; case 36: #line 319 "make2cook/gram.y" { gram_val.lv_stmt = stmt_if_alloc(gram_vsp[-2].lv_list, gram_vsp[-1].lv_stmt, (stmt_ty *)0); } break; case 37: #line 321 "make2cook/gram.y" { gram_val.lv_stmt = stmt_if_alloc(gram_vsp[-4].lv_list, gram_vsp[-3].lv_stmt, gram_vsp[-1].lv_stmt); } break; case 38: #line 326 "make2cook/gram.y" { gram_val.lv_stmt = stmt_compound_alloc(); } break; case 39: #line 328 "make2cook/gram.y" { gram_val.lv_stmt = gram_vsp[0].lv_stmt; } break; case 40: #line 333 "make2cook/gram.y" { gram_val.lv_int = 1; } break; case 41: #line 335 "make2cook/gram.y" { gram_val.lv_int = 2; } break; case 42: #line 340 "make2cook/gram.y" { gram_val.lv_stmt = stmt_if_alloc(gram_vsp[-2].lv_list, gram_vsp[-1].lv_stmt, (stmt_ty *)0); } break; case 43: #line 344 "make2cook/gram.y" { gram_val.lv_stmt = stmt_if_alloc(gram_vsp[-4].lv_list, gram_vsp[-3].lv_stmt, gram_vsp[-1].lv_stmt); } break; case 44: #line 351 "make2cook/gram.y" { gram_val.lv_list = gram_vsp[-1].lv_list; if (rule_context) stmt_rule_context(rule_context); blob_list_prepend(gram_val.lv_list, gram_vsp[-2].lv_line); } break; case 45: #line 361 "make2cook/gram.y" { if (gram_vsp[-1].lv_list->length) { blob_error(gram_vsp[-1].lv_list->list[0], 0, i18n("garbage on end of line")); } blob_list_free(gram_vsp[-1].lv_list); } break; case 48: #line 380 "make2cook/gram.y" { gram_val.lv_stmt = stmt_comment_alloc(gram_vsp[0].lv_line); } break; case 49: #line 385 "make2cook/gram.y" { gram_val.lv_stmt = stmt_include_alloc(gram_vsp[-1].lv_list, 1); } break; case 50: #line 387 "make2cook/gram.y" { gram_val.lv_stmt = stmt_include_alloc(gram_vsp[-1].lv_list, 2); } break; case 51: #line 389 "make2cook/gram.y" { gram_val.lv_stmt = stmt_include_alloc(gram_vsp[-1].lv_list, 3); } break; case 52: #line 394 "make2cook/gram.y" { blob_free(gram_vsp[-2].lv_line); stmt_vpath_remember1(gram_vsp[-1].lv_list); gram_val.lv_stmt = stmt_blank_alloc(); } break; case 53: #line 400 "make2cook/gram.y" { stmt_vpath_remember2(gram_vsp[-1].lv_list); gram_val.lv_stmt = stmt_blank_alloc(); } break; case 54: #line 408 "make2cook/gram.y" { size_t j; /* * append newline to all but the last */ for (j = 1; j < gram_vsp[-1].lv_list->length; ++j) { string_ty *s; s = gram_vsp[-1].lv_list->list[j - 1]->text; gram_vsp[-1].lv_list->list[j - 1]->text = str_format("%s\n", s->str_text); str_free(s); } /* * Special case the last string if it is empty. * The last string will be empty if the user * wanted a trailing newline. Cook can say this * more elegantly. */ if (gram_vsp[-1].lv_list->length && gram_vsp[-1].lv_list->list[gram_vsp[-1].lv_list->length - 1]->text->str_length == 0) { gram_vsp[-1].lv_list->length--; blob_free(gram_vsp[-1].lv_list->list[gram_vsp[-1].lv_list->length]); } /* * now treat it as a normal assignment */ gram_val.lv_stmt = stmt_assign_alloc(0, gram_vsp[-2].lv_line, stmt_assign_op_normal, gram_vsp[-1].lv_list); } break; case 55: #line 445 "make2cook/gram.y" { gram_val.lv_line = gram_vsp[-1].lv_line; } break; case 57: #line 454 "make2cook/gram.y" { gram_val.lv_list = blob_list_alloc(); } break; case 58: #line 456 "make2cook/gram.y" { gram_val.lv_list = gram_vsp[0].lv_list; } break; case 59: #line 461 "make2cook/gram.y" { gram_val.lv_list = blob_list_alloc(); blob_list_append(gram_val.lv_list, gram_vsp[0].lv_line); } break; case 60: #line 466 "make2cook/gram.y" { gram_val.lv_list = gram_vsp[-1].lv_list; blob_list_append(gram_val.lv_list, gram_vsp[0].lv_line); } break; case 61: #line 474 "make2cook/gram.y" { gram_val.lv_line = gram_vsp[0].lv_line; } break; case 62: #line 476 "make2cook/gram.y" { gram_val.lv_line = lex_blob(str_from_c("")); } break; #line 896 "y.tab.c" } gram_ssp -= gram_m; gram_state = *gram_ssp; gram_vsp -= gram_m; gram_m = gram_lhs[gram_n]; if (gram_state == 0 && gram_m == 0) { #if gram_DEBUG if (gram_debug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", gram_PREFIX, gram_FINAL); #endif gram_state = gram_FINAL; *++gram_ssp = gram_FINAL; *++gram_vsp = gram_val; if (gram_char < 0) { if ((gram_char = gram_lex()) < 0) gram_char = 0; #if gram_DEBUG if (gram_debug) { gram_s = 0; if (gram_char <= gram_MAXTOKEN) gram_s = gram_name[gram_char]; if (!gram_s) gram_s = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", gram_PREFIX, gram_FINAL, gram_char, gram_s); } #endif } if (gram_char == 0) goto gram_accept; goto gram_loop; } if ((gram_n = gram_gindex[gram_m]) && (gram_n += gram_state) >= 0 && gram_n <= gram_TABLESIZE && gram_check[gram_n] == gram_state) gram_state = gram_table[gram_n]; else gram_state = gram_dgoto[gram_m]; #if gram_DEBUG if (gram_debug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", gram_PREFIX, *gram_ssp, gram_state); #endif if (gram_ssp >= gram_sslim && gram_growstack()) { goto gram_overflow; } *++gram_ssp = gram_state; *++gram_vsp = gram_val; goto gram_loop; gram_overflow: gram_error("yacc stack overflow"); gram_abort: return (1); gram_accept: return (0); }