Category : C Source Code
Archive   : TBISON0.ZIP
Filename : PRINT.C

 
Output of file : PRINT.C contained in archive : TBISON0.ZIP
/* Print information on generated parser, for bison,
copyright (C) 1984 Bob Corbett and Richard Stallman */


#include
#include "machine.h"
#include "new.h"
#include "files.h"
#include "gram.h"
#include "state.h"


extern char **tags;
extern int nstates;
extern short *accessing_symbol;
extern core **state_table;
extern shifts **shift_table;
extern errs **err_table;
extern reductions **reduction_table;
extern char *consistent;
extern char any_conflicts;
extern char *conflicts;



terse()
{
if (any_conflicts)
{
conflict_log();
}
}



verbose()
{
register int i;

if (any_conflicts)
verbose_conflict_log();

for (i = 0; i < nstates; i++)
{
print_state(i);
}
}



print_state(state)
int state;
{
fprintf(foutput, "\n\nstate %d\n\n", state);
print_core(state);
print_actions(state);
}



print_core(state)
int state;
{
register int i;
register int k;
register int rule;
register core *statep;
register short *sp;
register short *sp1;

statep = state_table[state];
k = statep->nitems;

if (k == 0) return;

for (i = 0; i < k; i++)
{
sp1 = sp = ritem + statep->items[i];

while (*sp > 0)
sp++;

rule = -(*sp);
fprintf(foutput, " %s -> ", tags[rlhs[rule]]);

for (sp = ritem + rrhs[rule]; sp < sp1; sp++)
{
fprintf(foutput, "%s ", tags[*sp]);
}

putc('.', foutput);

while (*sp > 0)
{
fprintf(foutput, " %s", tags[*sp]);
sp++;
}

putc('\n', foutput);
}

putc('\n', foutput);
}



print_actions(state)
int state;
{
register int i;
register int k;
register int state1;
register int symbol;
register shifts *shiftp;
register errs *errp;
register reductions *redp;
register int rule;

shiftp = shift_table[state];
redp = reduction_table[state];
errp = err_table[state];

if (!shiftp && !redp)
{
fprintf(foutput, " NO ACTIONS\n");
return;
}

if (shiftp)
{
k = shiftp->nshifts;

for (i = 0; i < k; i++)
{
if (! shiftp->shift[i]) continue;
state1 = shiftp->shift[i];
symbol = accessing_symbol[state1];
if (ISVAR(symbol)) break;
fprintf(foutput, " %-4s\tshift %d\n",
tags[symbol], state1);
}

if (i > 0)
putc('\n', foutput);
}
else
{
i = 0;
k = 0;
}

if (errp)
{
k = errp->nerrs;

for (i = 0; i < k; i++)
{
if (! errp->errors[i]) continue;
symbol = errp->errors[i];
fprintf(foutput, " %-4s\terror (nonassociative)\n",
tags[symbol]);
}

if (i > 0)
putc('\n', foutput);
}
else
{
i = 0;
k = 0;
}

if (consistent[state] && redp)
{
rule = redp->rules[0];
symbol = rlhs[rule];
fprintf(foutput, " $default\treduce %d (%s)\n\n",
rule, tags[symbol]);
}
else if (redp)
{
print_reductions(state);
}

if (i < k)
{
for (; i < k; i++)
{
if (! shiftp->shift[i]) continue;
state1 = shiftp->shift[i];
symbol = accessing_symbol[state1];
fprintf(foutput, " %-4s\tgoto %d\n",
tags[symbol], state1);
}

putc('\n', foutput);
}
}


  3 Responses to “Category : C Source Code
Archive   : TBISON0.ZIP
Filename : PRINT.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/