xref: /freebsd/contrib/byacc/verbose.c (revision 8e022d3cdea10ee1039a632f670c27fd93f65625)
1*8e022d3cSDag-Erling Smørgrav /* $Id: verbose.c,v 1.14 2021/05/20 23:57:23 tom Exp $ */
298e903e7SBaptiste Daroussin 
398e903e7SBaptiste Daroussin #include "defs.h"
498e903e7SBaptiste Daroussin 
598e903e7SBaptiste Daroussin static void log_conflicts(void);
698e903e7SBaptiste Daroussin static void log_unused(void);
798e903e7SBaptiste Daroussin static void print_actions(int stateno);
898e903e7SBaptiste Daroussin static void print_conflicts(int state);
998e903e7SBaptiste Daroussin static void print_core(int state);
1098e903e7SBaptiste Daroussin static void print_gotos(int stateno);
1198e903e7SBaptiste Daroussin static void print_nulls(int state);
1298e903e7SBaptiste Daroussin static void print_shifts(action *p);
1398e903e7SBaptiste Daroussin static void print_state(int state);
1498e903e7SBaptiste Daroussin static void print_reductions(action *p, int defred2);
1598e903e7SBaptiste Daroussin 
160c8de5b0SBaptiste Daroussin static Value_t *null_rules;
1798e903e7SBaptiste Daroussin 
1898e903e7SBaptiste Daroussin void
verbose(void)1998e903e7SBaptiste Daroussin verbose(void)
2098e903e7SBaptiste Daroussin {
2198e903e7SBaptiste Daroussin     int i;
2298e903e7SBaptiste Daroussin 
2398e903e7SBaptiste Daroussin     if (!vflag)
2498e903e7SBaptiste Daroussin 	return;
2598e903e7SBaptiste Daroussin 
260c8de5b0SBaptiste Daroussin     null_rules = TMALLOC(Value_t, nrules);
2798e903e7SBaptiste Daroussin     NO_SPACE(null_rules);
2898e903e7SBaptiste Daroussin 
2998e903e7SBaptiste Daroussin     fprintf(verbose_file, "\f\n");
3098e903e7SBaptiste Daroussin     for (i = 0; i < nstates; i++)
3198e903e7SBaptiste Daroussin 	print_state(i);
3298e903e7SBaptiste Daroussin     FREE(null_rules);
3398e903e7SBaptiste Daroussin 
3498e903e7SBaptiste Daroussin     if (nunused)
3598e903e7SBaptiste Daroussin 	log_unused();
3698e903e7SBaptiste Daroussin     if (SRtotal || RRtotal)
3798e903e7SBaptiste Daroussin 	log_conflicts();
3898e903e7SBaptiste Daroussin 
39*8e022d3cSDag-Erling Smørgrav     fprintf(verbose_file, "\n\n%ld terminals, %ld nonterminals\n",
40*8e022d3cSDag-Erling Smørgrav 	    (long)ntokens, (long)nvars);
41*8e022d3cSDag-Erling Smørgrav     fprintf(verbose_file, "%ld grammar rules, %ld states\n",
42*8e022d3cSDag-Erling Smørgrav 	    (long)(nrules - 2), (long)nstates);
430c8de5b0SBaptiste Daroussin #if defined(YYBTYACC)
440c8de5b0SBaptiste Daroussin     {				/* print out the grammar symbol # and parser internal symbol # for each
450c8de5b0SBaptiste Daroussin 				   symbol as an aide to writing the implementation for YYDESTRUCT_CALL()
460c8de5b0SBaptiste Daroussin 				   and YYSTYPE_TOSTRING() */
470c8de5b0SBaptiste Daroussin 	int maxtok = 0;
480c8de5b0SBaptiste Daroussin 
490c8de5b0SBaptiste Daroussin 	fputs("\ngrammar parser grammar\n", verbose_file);
500c8de5b0SBaptiste Daroussin 	fputs("symbol# value# symbol\n", verbose_file);
510c8de5b0SBaptiste Daroussin 	for (i = 0; i < ntokens; ++i)
520c8de5b0SBaptiste Daroussin 	{
530c8de5b0SBaptiste Daroussin 	    fprintf(verbose_file, " %5d  %5d  %s\n",
540c8de5b0SBaptiste Daroussin 		    i, symbol_value[i], symbol_name[i]);
550c8de5b0SBaptiste Daroussin 	    if (symbol_value[i] > maxtok)
560c8de5b0SBaptiste Daroussin 		maxtok = symbol_value[i];
570c8de5b0SBaptiste Daroussin 	}
580c8de5b0SBaptiste Daroussin 	for (i = ntokens; i < nsyms; ++i)
590c8de5b0SBaptiste Daroussin 	    fprintf(verbose_file, " %5d  %5d  %s\n",
600c8de5b0SBaptiste Daroussin 		    i, (maxtok + 1) + symbol_value[i] + 1, symbol_name[i]);
610c8de5b0SBaptiste Daroussin     }
620c8de5b0SBaptiste Daroussin #endif
6398e903e7SBaptiste Daroussin }
6498e903e7SBaptiste Daroussin 
6598e903e7SBaptiste Daroussin static void
log_unused(void)6698e903e7SBaptiste Daroussin log_unused(void)
6798e903e7SBaptiste Daroussin {
6898e903e7SBaptiste Daroussin     int i;
690c8de5b0SBaptiste Daroussin     Value_t *p;
7098e903e7SBaptiste Daroussin 
7198e903e7SBaptiste Daroussin     fprintf(verbose_file, "\n\nRules never reduced:\n");
7298e903e7SBaptiste Daroussin     for (i = 3; i < nrules; ++i)
7398e903e7SBaptiste Daroussin     {
7498e903e7SBaptiste Daroussin 	if (!rules_used[i])
7598e903e7SBaptiste Daroussin 	{
7698e903e7SBaptiste Daroussin 	    fprintf(verbose_file, "\t%s :", symbol_name[rlhs[i]]);
7798e903e7SBaptiste Daroussin 	    for (p = ritem + rrhs[i]; *p >= 0; ++p)
7898e903e7SBaptiste Daroussin 		fprintf(verbose_file, " %s", symbol_name[*p]);
7998e903e7SBaptiste Daroussin 	    fprintf(verbose_file, "  (%d)\n", i - 2);
8098e903e7SBaptiste Daroussin 	}
8198e903e7SBaptiste Daroussin     }
8298e903e7SBaptiste Daroussin }
8398e903e7SBaptiste Daroussin 
8498e903e7SBaptiste Daroussin static void
log_conflicts(void)8598e903e7SBaptiste Daroussin log_conflicts(void)
8698e903e7SBaptiste Daroussin {
8798e903e7SBaptiste Daroussin     int i;
8898e903e7SBaptiste Daroussin 
8998e903e7SBaptiste Daroussin     fprintf(verbose_file, "\n\n");
9098e903e7SBaptiste Daroussin     for (i = 0; i < nstates; i++)
9198e903e7SBaptiste Daroussin     {
9298e903e7SBaptiste Daroussin 	if (SRconflicts[i] || RRconflicts[i])
9398e903e7SBaptiste Daroussin 	{
9498e903e7SBaptiste Daroussin 	    fprintf(verbose_file, "State %d contains ", i);
9598e903e7SBaptiste Daroussin 	    if (SRconflicts[i] > 0)
96*8e022d3cSDag-Erling Smørgrav 		fprintf(verbose_file, "%ld shift/reduce conflict%s",
97*8e022d3cSDag-Erling Smørgrav 			(long)SRconflicts[i],
9898e903e7SBaptiste Daroussin 			PLURAL(SRconflicts[i]));
9998e903e7SBaptiste Daroussin 	    if (SRconflicts[i] && RRconflicts[i])
10098e903e7SBaptiste Daroussin 		fprintf(verbose_file, ", ");
10198e903e7SBaptiste Daroussin 	    if (RRconflicts[i] > 0)
102*8e022d3cSDag-Erling Smørgrav 		fprintf(verbose_file, "%ld reduce/reduce conflict%s",
103*8e022d3cSDag-Erling Smørgrav 			(long)RRconflicts[i],
10498e903e7SBaptiste Daroussin 			PLURAL(RRconflicts[i]));
10598e903e7SBaptiste Daroussin 	    fprintf(verbose_file, ".\n");
10698e903e7SBaptiste Daroussin 	}
10798e903e7SBaptiste Daroussin     }
10898e903e7SBaptiste Daroussin }
10998e903e7SBaptiste Daroussin 
11098e903e7SBaptiste Daroussin static void
print_state(int state)11198e903e7SBaptiste Daroussin print_state(int state)
11298e903e7SBaptiste Daroussin {
11398e903e7SBaptiste Daroussin     if (state)
11498e903e7SBaptiste Daroussin 	fprintf(verbose_file, "\n\n");
11598e903e7SBaptiste Daroussin     if (SRconflicts[state] || RRconflicts[state])
11698e903e7SBaptiste Daroussin 	print_conflicts(state);
11798e903e7SBaptiste Daroussin     fprintf(verbose_file, "state %d\n", state);
11898e903e7SBaptiste Daroussin     print_core(state);
11998e903e7SBaptiste Daroussin     print_nulls(state);
12098e903e7SBaptiste Daroussin     print_actions(state);
12198e903e7SBaptiste Daroussin }
12298e903e7SBaptiste Daroussin 
12398e903e7SBaptiste Daroussin static void
print_conflicts(int state)12498e903e7SBaptiste Daroussin print_conflicts(int state)
12598e903e7SBaptiste Daroussin {
12698e903e7SBaptiste Daroussin     int symbol, act, number;
12798e903e7SBaptiste Daroussin     action *p;
12898e903e7SBaptiste Daroussin 
12998e903e7SBaptiste Daroussin     act = 0;			/* not shift/reduce... */
13098e903e7SBaptiste Daroussin     number = -1;
13198e903e7SBaptiste Daroussin     symbol = -1;
13298e903e7SBaptiste Daroussin     for (p = parser[state]; p; p = p->next)
13398e903e7SBaptiste Daroussin     {
13498e903e7SBaptiste Daroussin 	if (p->suppressed == 2)
13598e903e7SBaptiste Daroussin 	    continue;
13698e903e7SBaptiste Daroussin 
13798e903e7SBaptiste Daroussin 	if (p->symbol != symbol)
13898e903e7SBaptiste Daroussin 	{
13998e903e7SBaptiste Daroussin 	    symbol = p->symbol;
14098e903e7SBaptiste Daroussin 	    number = p->number;
14198e903e7SBaptiste Daroussin 	    if (p->action_code == SHIFT)
14298e903e7SBaptiste Daroussin 		act = SHIFT;
14398e903e7SBaptiste Daroussin 	    else
14498e903e7SBaptiste Daroussin 		act = REDUCE;
14598e903e7SBaptiste Daroussin 	}
14698e903e7SBaptiste Daroussin 	else if (p->suppressed == 1)
14798e903e7SBaptiste Daroussin 	{
14898e903e7SBaptiste Daroussin 	    if (state == final_state && symbol == 0)
14998e903e7SBaptiste Daroussin 	    {
15098e903e7SBaptiste Daroussin 		fprintf(verbose_file, "%d: shift/reduce conflict \
151*8e022d3cSDag-Erling Smørgrav (accept, reduce %ld) on $end\n", state, (long)(p->number - 2));
15298e903e7SBaptiste Daroussin 	    }
15398e903e7SBaptiste Daroussin 	    else
15498e903e7SBaptiste Daroussin 	    {
15598e903e7SBaptiste Daroussin 		if (act == SHIFT)
15698e903e7SBaptiste Daroussin 		{
15798e903e7SBaptiste Daroussin 		    fprintf(verbose_file, "%d: shift/reduce conflict \
158*8e022d3cSDag-Erling Smørgrav (shift %ld, reduce %ld) on %s\n", state, (long)number, (long)(p->number - 2),
15998e903e7SBaptiste Daroussin 			    symbol_name[symbol]);
16098e903e7SBaptiste Daroussin 		}
16198e903e7SBaptiste Daroussin 		else
16298e903e7SBaptiste Daroussin 		{
16398e903e7SBaptiste Daroussin 		    fprintf(verbose_file, "%d: reduce/reduce conflict \
164*8e022d3cSDag-Erling Smørgrav (reduce %ld, reduce %ld) on %s\n", state, (long)(number - 2), (long)(p->number - 2),
16598e903e7SBaptiste Daroussin 			    symbol_name[symbol]);
16698e903e7SBaptiste Daroussin 		}
16798e903e7SBaptiste Daroussin 	    }
16898e903e7SBaptiste Daroussin 	}
16998e903e7SBaptiste Daroussin     }
17098e903e7SBaptiste Daroussin }
17198e903e7SBaptiste Daroussin 
17298e903e7SBaptiste Daroussin static void
print_core(int state)17398e903e7SBaptiste Daroussin print_core(int state)
17498e903e7SBaptiste Daroussin {
17598e903e7SBaptiste Daroussin     int i;
176*8e022d3cSDag-Erling Smørgrav     core *statep = state_table[state];
177*8e022d3cSDag-Erling Smørgrav     int k = statep->nitems;
17898e903e7SBaptiste Daroussin 
17998e903e7SBaptiste Daroussin     for (i = 0; i < k; i++)
18098e903e7SBaptiste Daroussin     {
181*8e022d3cSDag-Erling Smørgrav 	int rule;
182*8e022d3cSDag-Erling Smørgrav 	Value_t *sp = ritem + statep->items[i];
183*8e022d3cSDag-Erling Smørgrav 	Value_t *sp1 = sp;
18498e903e7SBaptiste Daroussin 
18598e903e7SBaptiste Daroussin 	while (*sp >= 0)
18698e903e7SBaptiste Daroussin 	    ++sp;
18798e903e7SBaptiste Daroussin 	rule = -(*sp);
18898e903e7SBaptiste Daroussin 	fprintf(verbose_file, "\t%s : ", symbol_name[rlhs[rule]]);
18998e903e7SBaptiste Daroussin 
19098e903e7SBaptiste Daroussin 	for (sp = ritem + rrhs[rule]; sp < sp1; sp++)
19198e903e7SBaptiste Daroussin 	    fprintf(verbose_file, "%s ", symbol_name[*sp]);
19298e903e7SBaptiste Daroussin 
19398e903e7SBaptiste Daroussin 	putc('.', verbose_file);
19498e903e7SBaptiste Daroussin 
19598e903e7SBaptiste Daroussin 	while (*sp >= 0)
19698e903e7SBaptiste Daroussin 	{
19798e903e7SBaptiste Daroussin 	    fprintf(verbose_file, " %s", symbol_name[*sp]);
19898e903e7SBaptiste Daroussin 	    sp++;
19998e903e7SBaptiste Daroussin 	}
200*8e022d3cSDag-Erling Smørgrav 	fprintf(verbose_file, "  (%ld)\n", (long)(-2 - *sp));
20198e903e7SBaptiste Daroussin     }
20298e903e7SBaptiste Daroussin }
20398e903e7SBaptiste Daroussin 
20498e903e7SBaptiste Daroussin static void
print_nulls(int state)20598e903e7SBaptiste Daroussin print_nulls(int state)
20698e903e7SBaptiste Daroussin {
20798e903e7SBaptiste Daroussin     action *p;
20898e903e7SBaptiste Daroussin     Value_t i, j, k, nnulls;
20998e903e7SBaptiste Daroussin 
21098e903e7SBaptiste Daroussin     nnulls = 0;
21198e903e7SBaptiste Daroussin     for (p = parser[state]; p; p = p->next)
21298e903e7SBaptiste Daroussin     {
21398e903e7SBaptiste Daroussin 	if (p->action_code == REDUCE &&
21498e903e7SBaptiste Daroussin 	    (p->suppressed == 0 || p->suppressed == 1))
21598e903e7SBaptiste Daroussin 	{
21698e903e7SBaptiste Daroussin 	    i = p->number;
21798e903e7SBaptiste Daroussin 	    if (rrhs[i] + 1 == rrhs[i + 1])
21898e903e7SBaptiste Daroussin 	    {
21998e903e7SBaptiste Daroussin 		for (j = 0; j < nnulls && i > null_rules[j]; ++j)
22098e903e7SBaptiste Daroussin 		    continue;
22198e903e7SBaptiste Daroussin 
22298e903e7SBaptiste Daroussin 		if (j == nnulls)
22398e903e7SBaptiste Daroussin 		{
22498e903e7SBaptiste Daroussin 		    ++nnulls;
22598e903e7SBaptiste Daroussin 		    null_rules[j] = i;
22698e903e7SBaptiste Daroussin 		}
22798e903e7SBaptiste Daroussin 		else if (i != null_rules[j])
22898e903e7SBaptiste Daroussin 		{
22998e903e7SBaptiste Daroussin 		    ++nnulls;
23098e903e7SBaptiste Daroussin 		    for (k = (Value_t)(nnulls - 1); k > j; --k)
23198e903e7SBaptiste Daroussin 			null_rules[k] = null_rules[k - 1];
23298e903e7SBaptiste Daroussin 		    null_rules[j] = i;
23398e903e7SBaptiste Daroussin 		}
23498e903e7SBaptiste Daroussin 	    }
23598e903e7SBaptiste Daroussin 	}
23698e903e7SBaptiste Daroussin     }
23798e903e7SBaptiste Daroussin 
23898e903e7SBaptiste Daroussin     for (i = 0; i < nnulls; ++i)
23998e903e7SBaptiste Daroussin     {
24098e903e7SBaptiste Daroussin 	j = null_rules[i];
241*8e022d3cSDag-Erling Smørgrav 	fprintf(verbose_file, "\t%s : .  (%ld)\n", symbol_name[rlhs[j]],
242*8e022d3cSDag-Erling Smørgrav 		(long)(j - 2));
24398e903e7SBaptiste Daroussin     }
24498e903e7SBaptiste Daroussin     fprintf(verbose_file, "\n");
24598e903e7SBaptiste Daroussin }
24698e903e7SBaptiste Daroussin 
24798e903e7SBaptiste Daroussin static void
print_actions(int stateno)24898e903e7SBaptiste Daroussin print_actions(int stateno)
24998e903e7SBaptiste Daroussin {
25098e903e7SBaptiste Daroussin     action *p;
25198e903e7SBaptiste Daroussin     shifts *sp;
25298e903e7SBaptiste Daroussin 
25398e903e7SBaptiste Daroussin     if (stateno == final_state)
25498e903e7SBaptiste Daroussin 	fprintf(verbose_file, "\t$end  accept\n");
25598e903e7SBaptiste Daroussin 
25698e903e7SBaptiste Daroussin     p = parser[stateno];
25798e903e7SBaptiste Daroussin     if (p)
25898e903e7SBaptiste Daroussin     {
25998e903e7SBaptiste Daroussin 	print_shifts(p);
26098e903e7SBaptiste Daroussin 	print_reductions(p, defred[stateno]);
26198e903e7SBaptiste Daroussin     }
26298e903e7SBaptiste Daroussin 
26398e903e7SBaptiste Daroussin     sp = shift_table[stateno];
26498e903e7SBaptiste Daroussin     if (sp && sp->nshifts > 0)
26598e903e7SBaptiste Daroussin     {
266*8e022d3cSDag-Erling Smørgrav 	int as = accessing_symbol[sp->shift[sp->nshifts - 1]];
267*8e022d3cSDag-Erling Smørgrav 
26898e903e7SBaptiste Daroussin 	if (ISVAR(as))
26998e903e7SBaptiste Daroussin 	    print_gotos(stateno);
27098e903e7SBaptiste Daroussin     }
27198e903e7SBaptiste Daroussin }
27298e903e7SBaptiste Daroussin 
27398e903e7SBaptiste Daroussin static void
print_shifts(action * p)27498e903e7SBaptiste Daroussin print_shifts(action *p)
27598e903e7SBaptiste Daroussin {
27698e903e7SBaptiste Daroussin     int count;
27798e903e7SBaptiste Daroussin     action *q;
27898e903e7SBaptiste Daroussin 
27998e903e7SBaptiste Daroussin     count = 0;
28098e903e7SBaptiste Daroussin     for (q = p; q; q = q->next)
28198e903e7SBaptiste Daroussin     {
28298e903e7SBaptiste Daroussin 	if (q->suppressed < 2 && q->action_code == SHIFT)
28398e903e7SBaptiste Daroussin 	    ++count;
28498e903e7SBaptiste Daroussin     }
28598e903e7SBaptiste Daroussin 
28698e903e7SBaptiste Daroussin     if (count > 0)
28798e903e7SBaptiste Daroussin     {
28898e903e7SBaptiste Daroussin 	for (; p; p = p->next)
28998e903e7SBaptiste Daroussin 	{
29098e903e7SBaptiste Daroussin 	    if (p->action_code == SHIFT && p->suppressed == 0)
291*8e022d3cSDag-Erling Smørgrav 		fprintf(verbose_file, "\t%s  shift %ld\n",
292*8e022d3cSDag-Erling Smørgrav 			symbol_name[p->symbol], (long)p->number);
2930c8de5b0SBaptiste Daroussin #if defined(YYBTYACC)
2940c8de5b0SBaptiste Daroussin 	    if (backtrack && p->action_code == SHIFT && p->suppressed == 1)
2950c8de5b0SBaptiste Daroussin 		fprintf(verbose_file, "\t%s  [trial] shift %d\n",
2960c8de5b0SBaptiste Daroussin 			symbol_name[p->symbol], p->number);
2970c8de5b0SBaptiste Daroussin #endif
29898e903e7SBaptiste Daroussin 	}
29998e903e7SBaptiste Daroussin     }
30098e903e7SBaptiste Daroussin }
30198e903e7SBaptiste Daroussin 
30298e903e7SBaptiste Daroussin static void
print_reductions(action * p,int defred2)30398e903e7SBaptiste Daroussin print_reductions(action *p, int defred2)
30498e903e7SBaptiste Daroussin {
305*8e022d3cSDag-Erling Smørgrav     int anyreds;
30698e903e7SBaptiste Daroussin     action *q;
30798e903e7SBaptiste Daroussin 
30898e903e7SBaptiste Daroussin     anyreds = 0;
30998e903e7SBaptiste Daroussin     for (q = p; q; q = q->next)
31098e903e7SBaptiste Daroussin     {
31198e903e7SBaptiste Daroussin 	if (q->action_code == REDUCE && q->suppressed < 2)
31298e903e7SBaptiste Daroussin 	{
31398e903e7SBaptiste Daroussin 	    anyreds = 1;
31498e903e7SBaptiste Daroussin 	    break;
31598e903e7SBaptiste Daroussin 	}
31698e903e7SBaptiste Daroussin     }
31798e903e7SBaptiste Daroussin 
31898e903e7SBaptiste Daroussin     if (anyreds == 0)
31998e903e7SBaptiste Daroussin 	fprintf(verbose_file, "\t.  error\n");
32098e903e7SBaptiste Daroussin     else
32198e903e7SBaptiste Daroussin     {
32298e903e7SBaptiste Daroussin 	for (; p; p = p->next)
32398e903e7SBaptiste Daroussin 	{
32498e903e7SBaptiste Daroussin 	    if (p->action_code == REDUCE && p->number != defred2)
32598e903e7SBaptiste Daroussin 	    {
326*8e022d3cSDag-Erling Smørgrav 		int k = p->number - 2;
327*8e022d3cSDag-Erling Smørgrav 
32898e903e7SBaptiste Daroussin 		if (p->suppressed == 0)
32998e903e7SBaptiste Daroussin 		    fprintf(verbose_file, "\t%s  reduce %d\n",
33098e903e7SBaptiste Daroussin 			    symbol_name[p->symbol], k);
3310c8de5b0SBaptiste Daroussin #if defined(YYBTYACC)
3320c8de5b0SBaptiste Daroussin 		if (backtrack && p->suppressed == 1)
3330c8de5b0SBaptiste Daroussin 		    fprintf(verbose_file, "\t%s  [trial] reduce %d\n",
3340c8de5b0SBaptiste Daroussin 			    symbol_name[p->symbol], k);
3350c8de5b0SBaptiste Daroussin #endif
33698e903e7SBaptiste Daroussin 	    }
33798e903e7SBaptiste Daroussin 	}
33898e903e7SBaptiste Daroussin 
33998e903e7SBaptiste Daroussin 	if (defred2 > 0)
34098e903e7SBaptiste Daroussin 	    fprintf(verbose_file, "\t.  reduce %d\n", defred2 - 2);
34198e903e7SBaptiste Daroussin     }
34298e903e7SBaptiste Daroussin }
34398e903e7SBaptiste Daroussin 
34498e903e7SBaptiste Daroussin static void
print_gotos(int stateno)34598e903e7SBaptiste Daroussin print_gotos(int stateno)
34698e903e7SBaptiste Daroussin {
347*8e022d3cSDag-Erling Smørgrav     int i;
3480c8de5b0SBaptiste Daroussin     Value_t *to_state2;
34998e903e7SBaptiste Daroussin     shifts *sp;
35098e903e7SBaptiste Daroussin 
35198e903e7SBaptiste Daroussin     putc('\n', verbose_file);
35298e903e7SBaptiste Daroussin     sp = shift_table[stateno];
35398e903e7SBaptiste Daroussin     to_state2 = sp->shift;
35498e903e7SBaptiste Daroussin     for (i = 0; i < sp->nshifts; ++i)
35598e903e7SBaptiste Daroussin     {
356*8e022d3cSDag-Erling Smørgrav 	int k = to_state2[i];
357*8e022d3cSDag-Erling Smørgrav 	int as = accessing_symbol[k];
358*8e022d3cSDag-Erling Smørgrav 
35998e903e7SBaptiste Daroussin 	if (ISVAR(as))
36098e903e7SBaptiste Daroussin 	    fprintf(verbose_file, "\t%s  goto %d\n", symbol_name[as], k);
36198e903e7SBaptiste Daroussin     }
36298e903e7SBaptiste Daroussin }
363