285 |
0, 1, nrules + 1); |
0, 1, nrules + 1); |
286 |
muscle_insert ("r2", obstack_finish (&output_obstack)); |
muscle_insert ("r2", obstack_finish (&output_obstack)); |
287 |
XFREE (short_tab); |
XFREE (short_tab); |
|
|
|
|
XFREE (rule_table + 1); |
|
288 |
} |
} |
289 |
|
|
290 |
/*------------------------------------------------------------------. |
/*------------------------------------------------------------------. |
510 |
} |
} |
511 |
|
|
512 |
|
|
513 |
|
/*-----------------------------. |
514 |
|
| Output the actions to OOUT. | |
515 |
|
`-----------------------------*/ |
516 |
|
|
517 |
|
static void |
518 |
|
actions_output (struct obstack *oout) |
519 |
|
{ |
520 |
|
int rule; |
521 |
|
for (rule = 1; rule < nrules + 1; ++rule) |
522 |
|
if (rule_table[rule].action) |
523 |
|
{ |
524 |
|
obstack_fgrow1 (oout, " case %d:\n", rule); |
525 |
|
|
526 |
|
if (!no_lines_flag) |
527 |
|
obstack_fgrow2 (oout, muscle_find ("linef"), |
528 |
|
rule_table[rule].action_line, |
529 |
|
quotearg_style (c_quoting_style, |
530 |
|
muscle_find ("filename"))); |
531 |
|
obstack_1grow (oout, '{'); |
532 |
|
obstack_sgrow (oout, rule_table[rule].action); |
533 |
|
/* As a Bison extension, add the ending semicolon. Since some |
534 |
|
Yacc don't do that, help people using bison as a Yacc |
535 |
|
finding their missing semicolons. */ |
536 |
|
obstack_fgrow1 (oout, "%s}\n break;\n\n", yacc_flag ? ";" : ""); |
537 |
|
} |
538 |
|
} |
539 |
|
|
540 |
|
|
541 |
static void |
static void |
542 |
save_column (int symbol, int default_state) |
save_column (int symbol, int default_state) |
543 |
{ |
{ |
957 |
/* Output the right value, or see if it's something special. */ |
/* Output the right value, or see if it's something special. */ |
958 |
muscle_key = obstack_finish (&muscle_obstack); |
muscle_key = obstack_finish (&muscle_obstack); |
959 |
muscle_value = muscle_find (muscle_key); |
muscle_value = muscle_find (muscle_key); |
960 |
if (muscle_value) |
if (!strcmp (muscle_key, "actions")) |
961 |
obstack_sgrow (oout, muscle_value); |
actions_output (oout); |
962 |
else if (!strcmp (muscle_key, "line")) |
else if (!strcmp (muscle_key, "line")) |
963 |
obstack_fgrow1 (oout, "%d", line + 1); |
obstack_fgrow1 (oout, "%d", line + 1); |
964 |
|
else if (muscle_value) |
965 |
|
obstack_sgrow (oout, muscle_value); |
966 |
else |
else |
967 |
{ |
{ |
968 |
obstack_sgrow (oout, "%%"); |
obstack_sgrow (oout, "%%"); |
1039 |
MUSCLE_INSERT_INT ("ntokens", ntokens); |
MUSCLE_INSERT_INT ("ntokens", ntokens); |
1040 |
|
|
1041 |
MUSCLE_INSERT_INT ("locations-flag", locations_flag); |
MUSCLE_INSERT_INT ("locations-flag", locations_flag); |
|
|
|
|
/* We need to save the actions in the muscle %%action. */ |
|
|
obstack_1grow (&action_obstack, 0); |
|
|
muscle_insert ("action", obstack_finish (&action_obstack)); |
|
|
|
|
1042 |
} |
} |
1043 |
|
|
1044 |
/*----------------------------------------------------------. |
/*----------------------------------------------------------. |
1067 |
|
|
1068 |
output_master_parser (); |
output_master_parser (); |
1069 |
|
|
1070 |
|
free (rule_table + 1); |
1071 |
obstack_free (&muscle_obstack, 0); |
obstack_free (&muscle_obstack, 0); |
1072 |
obstack_free (&output_obstack, 0); |
obstack_free (&output_obstack, 0); |
1073 |
obstack_free (&action_obstack, 0); |
obstack_free (&action_obstack, 0); |