- obstack_sgrow (node_obstack, "\n ");
- obstack_fgrow1 (node_obstack, " %s -> ",
- tags[rule_table[rule].lhs]);
-
- for (sp = ritem + rule_table[rule].rhs; sp < sp1; sp++)
- obstack_fgrow1 (node_obstack, "%s ", tags[*sp]);
-
- obstack_1grow (node_obstack, '.');
-
- for (/* Nothing */; *sp > 0; ++sp)
- obstack_fgrow1 (node_obstack, " %s", tags[*sp]);
+ obstack_1grow (oout, '\n');
+ obstack_fgrow1 (oout, " %s -> ",
+ symbol_tag_get (rules[rule].lhs));
+
+ for (sp = rules[rule].rhs; sp < sp1; sp++)
+ obstack_fgrow1 (oout, "%s ", symbol_tag_get (symbols[*sp]));
+
+ obstack_1grow (oout, '.');
+
+ for (/* Nothing */; *sp >= 0; ++sp)
+ obstack_fgrow1 (oout, " %s", symbol_tag_get (symbols[*sp]));
+
+ /* Experimental feature: display the lookaheads. */
+ if (trace_flag && state->nlookaheads)
+ {
+ int j, k;
+ int nlookaheads = 0;
+ /* Look for lookaheads corresponding to this rule. */
+ for (j = 0; j < state->nlookaheads; ++j)
+ for (k = 0; k < ntokens; ++k)
+ if (bitset_test (state->lookaheads[j], k)
+ && state->lookaheads_rule[j]->number == rule)
+ nlookaheads++;
+ if (nlookaheads)
+ {
+ obstack_sgrow (oout, " [");
+ for (j = 0; j < state->nlookaheads; ++j)
+ for (k = 0; k < ntokens; ++k)
+ if (bitset_test (state->lookaheads[j], k)
+ && state->lookaheads_rule[j]->number == rule)
+ obstack_fgrow2 (oout, "%s%s",
+ symbol_tag_get (symbols[k]),
+ --nlookaheads ? ", " : "");
+ obstack_sgrow (oout, "]");
+ }
+ }