This commit is contained in:
Oliver Lehmann 1989-05-26 07:28:42 +00:00
parent 137aa28824
commit 85ca14b4c4
1 changed files with 98 additions and 0 deletions

View File

@ -0,0 +1,98 @@
# include <stdio.h>
# include "TABLES"
/*
** REYACC -- recompile yacc tables
**
**
** insert YACC tables
**
** short yygo[] = { ... };
** short yypgo[] = { ... };
** short yyr1[] = { ... };
** short yyr2[] = { ... };
** short yyact[] = { ... };
** short yypact[] = { ... };
** char *yysterm[] = { ... };
**
** as file TABLES !!!
*/
int entact = sizeof yyact / sizeof yyact[0];
# define ACTION(state) ((state) & 07777)
# define OPERATION(state) ((state) >> 12)
# define END_OF_GRAMMAR -1
# define ERROR 0
# define SKIP 1
# define SHIFT 2
# define REDUCE 3
# define ACCEPT 4
main()
{
register int i;
register int sy;
register int *go;
register int new_rule;
register int sv_i;
char buf[BUFSIZ];
setbuf(stdout, buf);
new_rule = 1;
printf("*** STAR OF GRAMMAR\tSHIFT TO L 1 PUSH S 0\n");
for (i = 0; i < entact; i++)
{
if (new_rule)
printf("\nL%3d\t", i);
new_rule = 1;
sy = ACTION(yyact[i]);
switch (OPERATION(yyact[i]))
{
case END_OF_GRAMMAR:
printf("* * * E N D O F G R A M M A R * * *\n\n");
return;
case ERROR:
printf("%12s\t(%d)", "ERROR", sy);
break;
case SKIP:
if (sy)
printf("%12s\t", yysterm[sy - 256]);
else
printf("%12s\t", "EOF");
new_rule = 0;
continue;
case SHIFT:
printf("SHIFT TO L%3d PUSH S%3d", yypact[sy + 1], sy);
break;
case REDUCE:
printf("R%3d POP %2d\t", sy, yyr2[sy]);
go = &yygo[yypgo[yyr1[sy]]];
state:
sy = go[1];
printf("REDUCE TO L%3d PUSH S%3d", yypact[sy + 1], sy);
if (*go >= 0)
{
printf(" IF S %3d", *go);
go += 2;
printf("\n\t\t\t");
goto state;
}
break;
case ACCEPT:
printf("-->\t--> -->\t E N D O F A N A L Y Z E");
break;
default:
printf("* * * U N K N O W N A C T I O N * * *");
}
}
fflush(stdout);
}