In the "parse.out" output file from Lemon, show addition the complete text
of rules on reduce actions. FossilOrigin-Name: b6ffb7e471e51ff69668154ad2c8790e466c9d37
This commit is contained in:
parent
c75e0166f0
commit
7e698e9d71
2
main.mk
2
main.mk
@ -582,7 +582,7 @@ parse.h: parse.c
|
||||
parse.c: $(TOP)/src/parse.y lemon $(TOP)/addopcodes.awk
|
||||
cp $(TOP)/src/parse.y .
|
||||
rm -f parse.h
|
||||
./lemon $(OPTS) parse.y
|
||||
./lemon -s $(OPTS) parse.y
|
||||
mv parse.h parse.h.temp
|
||||
$(NAWK) -f $(TOP)/addopcodes.awk parse.h.temp >parse.h
|
||||
|
||||
|
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
||||
C Improved\s"Parser\sStatistics"\soutput\s(the\s-s\soption)\sfor\sthe\sLemon\sparser\ngenerator.
|
||||
D 2015-09-07T02:23:02.396
|
||||
C In\sthe\s"parse.out"\soutput\sfile\sfrom\sLemon,\sshow\saddition\sthe\scomplete\stext\nof\srules\son\sreduce\sactions.
|
||||
D 2015-09-07T14:22:24.531
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in f85066ce844a28b671aaeeff320921cd0ce36239
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -260,7 +260,7 @@ F ext/userauth/userauth.c 5fa3bdb492f481bbc1709fc83c91ebd13460c69e
|
||||
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
||||
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
||||
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
|
||||
F main.mk 61821e43596648bfacce2d6283377bee35986131
|
||||
F main.mk 58eb74de702467c3b71cdf06f213cefe7f5ce544
|
||||
F mkopcodec.awk c2ff431854d702cdd2d779c9c0d1f58fa16fa4ea
|
||||
F mkopcodeh.awk 0e7f04a8eb90f92259e47d80110e4e98d7ce337a
|
||||
F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
|
||||
@ -1338,7 +1338,7 @@ F tool/fuzzershell.c f2fc86dd22df654b28851b85019d3bd007361751
|
||||
F tool/genfkey.README cf68fddd4643bbe3ff8e31b8b6d8b0a1b85e20f4
|
||||
F tool/genfkey.test 4196a8928b78f51d54ef58e99e99401ab2f0a7e5
|
||||
F tool/getlock.c f4c39b651370156cae979501a7b156bdba50e7ce
|
||||
F tool/lemon.c cc515b02a6610ed76c93d49bd01fdb219356d7ac
|
||||
F tool/lemon.c a110c3850af6b91a553e153141186c32dee58f0d
|
||||
F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
|
||||
F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862
|
||||
F tool/logest.c eef612f8adf4d0993dafed0416064cf50d5d33c6
|
||||
@ -1383,7 +1383,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P 47dc24bd1e8f76eb17ba53a883b8984b3e1b2934
|
||||
R d6df305b5709e894bdfc542577063f51
|
||||
P 809503e4efcdb498d176e8c0794a5ba0882adef2
|
||||
R fba651a02e6066be297178ded140cace
|
||||
U drh
|
||||
Z 643bd9ba035c2e0820f3e9522cf3c1e3
|
||||
Z 5f03c60d31dd0f570ea326a36f822715
|
||||
|
@ -1 +1 @@
|
||||
809503e4efcdb498d176e8c0794a5ba0882adef2
|
||||
b6ffb7e471e51ff69668154ad2c8790e466c9d37
|
68
tool/lemon.c
68
tool/lemon.c
@ -340,7 +340,7 @@ struct state {
|
||||
struct action *ap; /* Array of actions for this state */
|
||||
int nTknAct, nNtAct; /* Number of actions on terminals and nonterminals */
|
||||
int iTknOfst, iNtOfst; /* yy_action[] offset for terminals and nonterms */
|
||||
int iDflt; /* Default action */
|
||||
int iDflt; /* Default action is reduce by this rule */
|
||||
};
|
||||
#define NO_OFFSET (-2147483647)
|
||||
|
||||
@ -2960,15 +2960,14 @@ void Reprint(struct lemon *lemp)
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigPrint(FILE *fp, struct config *cfp)
|
||||
{
|
||||
struct rule *rp;
|
||||
/* Print a single rule.
|
||||
*/
|
||||
void RulePrint(FILE *fp, struct rule *rp, int iCursor){
|
||||
struct symbol *sp;
|
||||
int i, j;
|
||||
rp = cfp->rp;
|
||||
fprintf(fp,"%s ::=",rp->lhs->name);
|
||||
for(i=0; i<=rp->nrhs; i++){
|
||||
if( i==cfp->dot ) fprintf(fp," *");
|
||||
if( i==iCursor ) fprintf(fp," *");
|
||||
if( i==rp->nrhs ) break;
|
||||
sp = rp->rhs[i];
|
||||
if( sp->type==MULTITERMINAL ){
|
||||
@ -2982,6 +2981,12 @@ void ConfigPrint(FILE *fp, struct config *cfp)
|
||||
}
|
||||
}
|
||||
|
||||
/* Print the rule for a configuration.
|
||||
*/
|
||||
void ConfigPrint(FILE *fp, struct config *cfp){
|
||||
RulePrint(fp, cfp->rp, cfp->dot);
|
||||
}
|
||||
|
||||
/* #define TEST */
|
||||
#if 0
|
||||
/* Print a set */
|
||||
@ -3021,15 +3026,29 @@ char *tag;
|
||||
/* Print an action to the given file descriptor. Return FALSE if
|
||||
** nothing was actually printed.
|
||||
*/
|
||||
int PrintAction(struct action *ap, FILE *fp, int indent){
|
||||
int PrintAction(
|
||||
struct action *ap, /* The action to print */
|
||||
FILE *fp, /* Print the action here */
|
||||
int indent, /* Indent by this amount */
|
||||
struct rule **apRule /* All rules by index */
|
||||
){
|
||||
int result = 1;
|
||||
switch( ap->type ){
|
||||
case SHIFT:
|
||||
fprintf(fp,"%*s shift %d",indent,ap->sp->name,ap->x.stp->statenum);
|
||||
case SHIFT: {
|
||||
struct state *stp = ap->x.stp;
|
||||
fprintf(fp,"%*s shift %-7d",indent,ap->sp->name,stp->statenum);
|
||||
if( stp->nTknAct==0 && stp->nNtAct==0 && apRule ){
|
||||
fprintf(fp,"then reduce %d: ", stp->iDflt);
|
||||
RulePrint(fp, apRule[stp->iDflt], -1);
|
||||
}
|
||||
break;
|
||||
case REDUCE:
|
||||
fprintf(fp,"%*s reduce %d",indent,ap->sp->name,ap->x.rp->index);
|
||||
}
|
||||
case REDUCE: {
|
||||
struct rule *rp = ap->x.rp;
|
||||
fprintf(fp,"%*s reduce %-7d",indent,ap->sp->name,rp->index);
|
||||
if( apRule ) RulePrint(fp, apRule[rp->index], -1);
|
||||
break;
|
||||
}
|
||||
case ACCEPT:
|
||||
fprintf(fp,"%*s accept",indent,ap->sp->name);
|
||||
break;
|
||||
@ -3038,16 +3057,16 @@ int PrintAction(struct action *ap, FILE *fp, int indent){
|
||||
break;
|
||||
case SRCONFLICT:
|
||||
case RRCONFLICT:
|
||||
fprintf(fp,"%*s reduce %-3d ** Parsing conflict **",
|
||||
fprintf(fp,"%*s reduce %-7d ** Parsing conflict **",
|
||||
indent,ap->sp->name,ap->x.rp->index);
|
||||
break;
|
||||
case SSCONFLICT:
|
||||
fprintf(fp,"%*s shift %-3d ** Parsing conflict **",
|
||||
fprintf(fp,"%*s shift %-7d ** Parsing conflict **",
|
||||
indent,ap->sp->name,ap->x.stp->statenum);
|
||||
break;
|
||||
case SH_RESOLVED:
|
||||
if( showPrecedenceConflict ){
|
||||
fprintf(fp,"%*s shift %-3d -- dropped by precedence",
|
||||
fprintf(fp,"%*s shift %-7d -- dropped by precedence",
|
||||
indent,ap->sp->name,ap->x.stp->statenum);
|
||||
}else{
|
||||
result = 0;
|
||||
@ -3055,7 +3074,7 @@ int PrintAction(struct action *ap, FILE *fp, int indent){
|
||||
break;
|
||||
case RD_RESOLVED:
|
||||
if( showPrecedenceConflict ){
|
||||
fprintf(fp,"%*s reduce %-3d -- dropped by precedence",
|
||||
fprintf(fp,"%*s reduce %-7d -- dropped by precedence",
|
||||
indent,ap->sp->name,ap->x.rp->index);
|
||||
}else{
|
||||
result = 0;
|
||||
@ -3076,7 +3095,17 @@ void ReportOutput(struct lemon *lemp)
|
||||
struct config *cfp;
|
||||
struct action *ap;
|
||||
FILE *fp;
|
||||
struct rule **apRule;
|
||||
|
||||
apRule = malloc( sizeof(apRule[0])*(lemp->nrule+1) );
|
||||
if( apRule ){
|
||||
struct rule *x;
|
||||
memset(apRule, 0, sizeof(apRule[0])*(lemp->nrule+1) );
|
||||
for(x=lemp->rule; x; x=x->next){
|
||||
assert( x->index>=0 && x->index<(lemp->nrule+1) );
|
||||
apRule[x->index] = x;
|
||||
}
|
||||
}
|
||||
fp = file_open(lemp,".out","wb");
|
||||
if( fp==0 ) return;
|
||||
for(i=0; i<lemp->nstate; i++){
|
||||
@ -3104,7 +3133,7 @@ void ReportOutput(struct lemon *lemp)
|
||||
}
|
||||
fprintf(fp,"\n");
|
||||
for(ap=stp->ap; ap; ap=ap->next){
|
||||
if( PrintAction(ap,fp,30) ) fprintf(fp,"\n");
|
||||
if( PrintAction(ap,fp,30,apRule) ) fprintf(fp,"\n");
|
||||
}
|
||||
fprintf(fp,"\n");
|
||||
}
|
||||
@ -3130,6 +3159,7 @@ void ReportOutput(struct lemon *lemp)
|
||||
fprintf(fp, "\n");
|
||||
}
|
||||
fclose(fp);
|
||||
free(apRule);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -4021,7 +4051,7 @@ void ReportTable(
|
||||
for(i=j=0; i<n; i++){
|
||||
stp = lemp->sorted[i];
|
||||
if( j==0 ) fprintf(out," /* %5d */ ", i);
|
||||
fprintf(out, " %4d,", stp->iDflt);
|
||||
fprintf(out, " %4d,", stp->iDflt+n);
|
||||
if( j==9 || i==n-1 ){
|
||||
fprintf(out, "\n"); lineno++;
|
||||
j = 0;
|
||||
@ -4342,7 +4372,7 @@ void ResortStates(struct lemon *lemp)
|
||||
for(i=0; i<lemp->nstate; i++){
|
||||
stp = lemp->sorted[i];
|
||||
stp->nTknAct = stp->nNtAct = 0;
|
||||
stp->iDflt = lemp->nstate + lemp->nrule;
|
||||
stp->iDflt = lemp->nrule;
|
||||
stp->iTknOfst = NO_OFFSET;
|
||||
stp->iNtOfst = NO_OFFSET;
|
||||
for(ap=stp->ap; ap; ap=ap->next){
|
||||
@ -4352,7 +4382,7 @@ void ResortStates(struct lemon *lemp)
|
||||
}else if( ap->sp->index<lemp->nsymbol ){
|
||||
stp->nNtAct++;
|
||||
}else{
|
||||
stp->iDflt = compute_action(lemp, ap);
|
||||
stp->iDflt = compute_action(lemp, ap) - lemp->nstate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user