Lines Matching refs:lemp
211 void Parse(struct lemon *lemp);
840 void FindFirstSets(struct lemon *lemp) in FindFirstSets() argument
846 for(i=0; i<lemp->nsymbol; i++){ in FindFirstSets()
847 lemp->symbols[i]->lambda = LEMON_FALSE; in FindFirstSets()
849 for(i=lemp->nterminal; i<lemp->nsymbol; i++){ in FindFirstSets()
850 lemp->symbols[i]->firstset = SetNew(); in FindFirstSets()
856 for(rp=lemp->rule; rp; rp=rp->next){ in FindFirstSets()
874 for(rp=lemp->rule; rp; rp=rp->next){ in FindFirstSets()
903 void FindStates(struct lemon *lemp) in FindStates() argument
911 if( lemp->start ){ in FindStates()
912 sp = Symbol_find(lemp->start); in FindStates()
914 ErrorMsg(lemp->filename,0, in FindStates()
917 "symbol instead.",lemp->start,lemp->startRule->lhs->name); in FindStates()
918 lemp->errorcnt++; in FindStates()
919 sp = lemp->startRule->lhs; in FindStates()
921 }else if( lemp->startRule ){ in FindStates()
922 sp = lemp->startRule->lhs; in FindStates()
924 ErrorMsg(lemp->filename,0,"Internal error - no start rule\n"); in FindStates()
931 for(rp=lemp->rule; rp; rp=rp->next){ in FindStates()
935 ErrorMsg(lemp->filename,0, in FindStates()
939 lemp->errorcnt++; in FindStates()
957 (void)getstate(lemp); in FindStates()
965 PRIVATE struct state *getstate(struct lemon *lemp) in getstate() argument
991 Configlist_closure(lemp); /* Compute the configuration closure */ in getstate()
998 stp->statenum = lemp->nstate++; /* Every state gets a sequence number */ in getstate()
1001 buildshifts(lemp,stp); /* Recursively compute successor states */ in getstate()
1025 PRIVATE void buildshifts(struct lemon *lemp, struct state *stp) in buildshifts() argument
1060 newstp = getstate(lemp); in buildshifts()
1078 void FindLinks(struct lemon *lemp) in FindLinks() argument
1088 for(i=0; i<lemp->nstate; i++){ in FindLinks()
1089 stp = lemp->sorted[i]; in FindLinks()
1097 for(i=0; i<lemp->nstate; i++){ in FindLinks()
1098 stp = lemp->sorted[i]; in FindLinks()
1113 void FindFollowSets(struct lemon *lemp) in FindFollowSets() argument
1121 for(i=0; i<lemp->nstate; i++){ in FindFollowSets()
1122 assert( lemp->sorted[i]!=0 ); in FindFollowSets()
1123 for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){ in FindFollowSets()
1130 for(i=0; i<lemp->nstate; i++){ in FindFollowSets()
1131 assert( lemp->sorted[i]!=0 ); in FindFollowSets()
1132 for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){ in FindFollowSets()
1151 void FindActions(struct lemon *lemp) in FindActions() argument
1163 for(i=0; i<lemp->nstate; i++){ /* Loop over all states */ in FindActions()
1164 stp = lemp->sorted[i]; in FindActions()
1167 for(j=0; j<lemp->nterminal; j++){ in FindActions()
1171 Action_add(&stp->ap,REDUCE,lemp->symbols[j],(char *)cfp->rp); in FindActions()
1179 if( lemp->start ){ in FindActions()
1180 sp = Symbol_find(lemp->start); in FindActions()
1182 if( lemp->startRule==0 ){ in FindActions()
1187 sp = lemp->startRule->lhs; in FindActions()
1190 sp = lemp->startRule->lhs; in FindActions()
1195 Action_add(&lemp->sorted[0]->ap,ACCEPT,sp,0); in FindActions()
1198 for(i=0; i<lemp->nstate; i++){ in FindActions()
1200 stp = lemp->sorted[i]; in FindActions()
1207 lemp->nconflict += resolve_conflict(ap,nap); in FindActions()
1213 for(rp=lemp->rule; rp; rp=rp->next) rp->canReduce = LEMON_FALSE; in FindActions()
1214 for(i=0; i<lemp->nstate; i++){ in FindActions()
1216 for(ap=lemp->sorted[i]->ap; ap; ap=ap->next){ in FindActions()
1220 for(rp=lemp->rule; rp; rp=rp->next){ in FindActions()
1222 ErrorMsg(lemp->filename,rp->ruleline,"This rule can not be reduced.\n"); in FindActions()
1223 lemp->errorcnt++; in FindActions()
1401 void Configlist_closure(struct lemon *lemp) in Configlist_closure() argument
1415 if( sp->rule==0 && sp!=lemp->errsym ){ in Configlist_closure()
1416 ErrorMsg(lemp->filename,rp->line,"Nonterminal \"%s\" has no rules.", in Configlist_closure()
1418 lemp->errorcnt++; in Configlist_closure()
3179 PRIVATE char *file_makename(struct lemon *lemp, const char *suffix) in file_makename() argument
3183 char *filename = lemp->filename; in file_makename()
3215 struct lemon *lemp, in file_open() argument
3221 if( lemp->outname ) free(lemp->outname); in file_open()
3222 lemp->outname = file_makename(lemp, suffix); in file_open()
3223 fp = fopen(lemp->outname,mode); in file_open()
3225 fprintf(stderr,"Can't open file \"%s\".\n",lemp->outname); in file_open()
3226 lemp->errorcnt++; in file_open()
3255 void Reprint(struct lemon *lemp) in Reprint() argument
3260 printf("// Reprint of input file \"%s\".\n// Symbols:\n",lemp->filename); in Reprint()
3262 for(i=0; i<lemp->nsymbol; i++){ in Reprint()
3263 sp = lemp->symbols[i]; in Reprint()
3269 skip = (lemp->nsymbol + ncolumns - 1)/ncolumns; in Reprint()
3272 for(j=i; j<lemp->nsymbol; j+=skip){ in Reprint()
3273 sp = lemp->symbols[j]; in Reprint()
3279 for(rp=lemp->rule; rp; rp=rp->next){ in Reprint()
3318 PRIVATE void SetPrint(out,set,lemp)
3321 struct lemon *lemp;
3327 for(i=0; i<lemp->nterminal; i++){
3329 fprintf(out,"%s%s",spacer,lemp->symbols[i]->name);
3420 void ReportOutput(struct lemon *lemp) in ReportOutput() argument
3429 fp = file_open(lemp,".out","wb"); in ReportOutput()
3431 for(i=0; i<lemp->nxstate; i++){ in ReportOutput()
3432 stp = lemp->sorted[i]; in ReportOutput()
3434 if( lemp->basisflag ) cfp=stp->bp; in ReportOutput()
3447 SetPrint(fp,cfp->fws,lemp); in ReportOutput()
3451 if( lemp->basisflag ) cfp=cfp->bp; in ReportOutput()
3463 for(i=0; i<lemp->nsymbol; i++){ in ReportOutput()
3467 sp = lemp->symbols[i]; in ReportOutput()
3474 for(j=0; j<lemp->nterminal; j++){ in ReportOutput()
3476 fprintf(fp, " %s", lemp->symbols[j]->name); in ReportOutput()
3486 for(i=n=0; i<lemp->nsymbol; i++){ in ReportOutput()
3488 struct symbol *sp = lemp->symbols[i]; in ReportOutput()
3505 for(rp=lemp->rule; rp; rp=rp->next){ in ReportOutput()
3568 PRIVATE int compute_action(struct lemon *lemp, struct action *ap) in compute_action() argument
3577 if( ap->sp->index>=lemp->nterminal in compute_action()
3578 && (lemp->errsym==0 || ap->sp->index!=lemp->errsym->index) in compute_action()
3580 act = lemp->minReduce + ap->x.rp->iRule; in compute_action()
3582 act = lemp->minShiftReduce + ap->x.rp->iRule; in compute_action()
3586 case REDUCE: act = lemp->minReduce + ap->x.rp->iRule; break; in compute_action()
3587 case ERROR: act = lemp->errAction; break; in compute_action()
3588 case ACCEPT: act = lemp->accAction; break; in compute_action()
3639 PRIVATE FILE *tplt_open(struct lemon *lemp) in tplt_open() argument
3653 lemp->errorcnt++; in tplt_open()
3660 lemp->errorcnt++; in tplt_open()
3666 cp = strrchr(lemp->filename,'.'); in tplt_open()
3668 lemon_sprintf(buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename); in tplt_open()
3670 lemon_sprintf(buf,"%s.lt",lemp->filename); in tplt_open()
3677 toFree = tpltname = pathsearch(lemp->argv0,templatename,0); in tplt_open()
3682 lemp->errorcnt++; in tplt_open()
3688 lemp->errorcnt++; in tplt_open()
3707 PRIVATE void tplt_print(FILE *out, struct lemon *lemp, char *str, int *lineno) in tplt_print() argument
3719 if (!lemp->nolinenosflag) { in tplt_print()
3720 (*lineno)++; tplt_linedir(out,*lineno,lemp->outname); in tplt_print()
3732 struct lemon *lemp, in emit_destructor_code() argument
3738 cp = lemp->tokendest; in emit_destructor_code()
3744 if( !lemp->nolinenosflag ){ in emit_destructor_code()
3746 tplt_linedir(out,sp->destLineno,lemp->filename); in emit_destructor_code()
3748 }else if( lemp->vardest ){ in emit_destructor_code()
3749 cp = lemp->vardest; in emit_destructor_code()
3765 if (!lemp->nolinenosflag) { in emit_destructor_code()
3766 (*lineno)++; tplt_linedir(out,*lineno,lemp->outname); in emit_destructor_code()
3775 int has_destructor(struct symbol *sp, struct lemon *lemp) in has_destructor() argument
3779 ret = lemp->tokendest!=0; in has_destructor()
3781 ret = lemp->vardest!=0 || sp->destructor!=0; in has_destructor()
3846 PRIVATE int translate_code(struct lemon *lemp, struct rule *rp){ in translate_code() argument
3878 if( has_destructor(rp->rhs[0],lemp) ){ in translate_code()
3895 ErrorMsg(lemp->filename,rp->ruleline, in translate_code()
3899 lemp->errorcnt++; in translate_code()
3943 ErrorMsg(lemp->filename,rp->ruleline, in translate_code()
3946 lemp->errorcnt++; in translate_code()
3979 ErrorMsg(lemp->filename,rp->ruleline, in translate_code()
3982 lemp->errorcnt++; in translate_code()
3993 ErrorMsg(lemp->filename,rp->ruleline, in translate_code()
3997 lemp->errorcnt++; in translate_code()
4001 ErrorMsg(lemp->filename,rp->ruleline, in translate_code()
4004 lemp->errorcnt++; in translate_code()
4010 ErrorMsg(lemp->filename,rp->ruleline, in translate_code()
4013 lemp->errorcnt++; in translate_code()
4015 }else if( i>0 && has_destructor(rp->rhs[i],lemp) ){ in translate_code()
4046 struct lemon *lemp, in emit_code() argument
4059 if( !lemp->nolinenosflag ){ in emit_code()
4061 tplt_linedir(out,rp->line,lemp->filename); in emit_code()
4066 if( !lemp->nolinenosflag ){ in emit_code()
4068 tplt_linedir(out,*lineno,lemp->outname); in emit_code()
4094 struct lemon *lemp, /* The main info structure for this parser */ in print_stack_union() argument
4108 arraysize = lemp->nsymbol * 2; in print_stack_union()
4116 if( lemp->vartype ){ in print_stack_union()
4117 maxdtlength = lemonStrlen(lemp->vartype); in print_stack_union()
4119 for(i=0; i<lemp->nsymbol; i++){ in print_stack_union()
4121 struct symbol *sp = lemp->symbols[i]; in print_stack_union()
4138 for(i=0; i<lemp->nsymbol; i++){ in print_stack_union()
4139 struct symbol *sp = lemp->symbols[i]; in print_stack_union()
4141 if( sp==lemp->errsym ){ in print_stack_union()
4145 if( sp->type!=NONTERMINAL || (sp->datatype==0 && lemp->vartype==0) ){ in print_stack_union()
4150 if( cp==0 ) cp = lemp->vartype; in print_stack_union()
4156 if( lemp->tokentype && strcmp(stddt, lemp->tokentype)==0 ){ in print_stack_union()
4185 name = lemp->name ? lemp->name : "Parse"; in print_stack_union()
4189 lemp->tokentype?lemp->tokentype:"void*"); lineno++; in print_stack_union()
4199 if( lemp->errsym && lemp->errsym->useCnt ){ in print_stack_union()
4200 fprintf(out," int yy%d;\n",lemp->errsym->dtnum); lineno++; in print_stack_union()
4289 struct lemon *lemp, in ReportTable() argument
4309 lemp->minShiftReduce = lemp->nstate; in ReportTable()
4310 lemp->errAction = lemp->minShiftReduce + lemp->nrule; in ReportTable()
4311 lemp->accAction = lemp->errAction + 1; in ReportTable()
4312 lemp->noAction = lemp->accAction + 1; in ReportTable()
4313 lemp->minReduce = lemp->noAction + 1; in ReportTable()
4314 lemp->maxAction = lemp->minReduce + lemp->nrule; in ReportTable()
4316 in = tplt_open(lemp); in ReportTable()
4318 out = file_open(lemp,".c","wb"); in ReportTable()
4326 sql = file_open(lemp, ".sql", "wb"); in ReportTable()
4342 for(i=0; i<lemp->nsymbol; i++){ in ReportTable()
4346 i, lemp->symbols[i]->name, in ReportTable()
4347 i<lemp->nterminal ? "TRUE" : "FALSE" in ReportTable()
4349 if( lemp->symbols[i]->fallback ){ in ReportTable()
4350 fprintf(sql, ",%d);\n", lemp->symbols[i]->fallback->index); in ReportTable()
4367 for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ in ReportTable()
4399 "** source file \"%s\". */\n", lemp->filename); lineno += 2; in ReportTable()
4404 if( lemp->include==0 ) lemp->include = ""; in ReportTable()
4405 for(i=0; ISSPACE(lemp->include[i]); i++){ in ReportTable()
4406 if( lemp->include[i]=='\n' ){ in ReportTable()
4407 lemp->include += i+1; in ReportTable()
4411 if( lemp->include[0]=='/' ){ in ReportTable()
4414 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4418 tplt_print(out,lemp,lemp->include,&lineno); in ReportTable()
4420 char *incName = file_makename(lemp, ".h"); in ReportTable()
4424 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4427 if( lemp->tokenprefix ) prefix = lemp->tokenprefix; in ReportTable()
4432 fprintf(out,"#ifndef %s%s\n", prefix, lemp->symbols[1]->name); in ReportTable()
4434 for(i=1; i<lemp->nterminal; i++){ in ReportTable()
4435 fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); in ReportTable()
4439 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4443 minimum_size_type(0, lemp->nsymbol, &szCodeType)); lineno++; in ReportTable()
4444 fprintf(out,"#define YYNOCODE %d\n",lemp->nsymbol); lineno++; in ReportTable()
4446 minimum_size_type(0,lemp->maxAction,&szActionType)); lineno++; in ReportTable()
4447 if( lemp->wildcard ){ in ReportTable()
4449 lemp->wildcard->index); lineno++; in ReportTable()
4451 print_stack_union(out,lemp,&lineno,mhflag); in ReportTable()
4453 if( lemp->stacksize ){ in ReportTable()
4454 fprintf(out,"#define YYSTACKDEPTH %s\n",lemp->stacksize); lineno++; in ReportTable()
4462 name = lemp->name ? lemp->name : "Parse"; in ReportTable()
4463 if( lemp->arg && lemp->arg[0] ){ in ReportTable()
4464 i = lemonStrlen(lemp->arg); in ReportTable()
4465 while( i>=1 && ISSPACE(lemp->arg[i-1]) ) i--; in ReportTable()
4466 while( i>=1 && (ISALNUM(lemp->arg[i-1]) || lemp->arg[i-1]=='_') ) i--; in ReportTable()
4467 fprintf(out,"#define %sARG_SDECL %s;\n",name,lemp->arg); lineno++; in ReportTable()
4468 fprintf(out,"#define %sARG_PDECL ,%s\n",name,lemp->arg); lineno++; in ReportTable()
4469 fprintf(out,"#define %sARG_PARAM ,%s\n",name,&lemp->arg[i]); lineno++; in ReportTable()
4471 name,lemp->arg,&lemp->arg[i]); lineno++; in ReportTable()
4473 name,&lemp->arg[i],&lemp->arg[i]); lineno++; in ReportTable()
4481 if( lemp->ctx && lemp->ctx[0] ){ in ReportTable()
4482 i = lemonStrlen(lemp->ctx); in ReportTable()
4483 while( i>=1 && ISSPACE(lemp->ctx[i-1]) ) i--; in ReportTable()
4484 while( i>=1 && (ISALNUM(lemp->ctx[i-1]) || lemp->ctx[i-1]=='_') ) i--; in ReportTable()
4485 fprintf(out,"#define %sCTX_SDECL %s;\n",name,lemp->ctx); lineno++; in ReportTable()
4486 fprintf(out,"#define %sCTX_PDECL ,%s\n",name,lemp->ctx); lineno++; in ReportTable()
4487 fprintf(out,"#define %sCTX_PARAM ,%s\n",name,&lemp->ctx[i]); lineno++; in ReportTable()
4489 name,lemp->ctx,&lemp->ctx[i]); lineno++; in ReportTable()
4491 name,&lemp->ctx[i],&lemp->ctx[i]); lineno++; in ReportTable()
4502 if( lemp->errsym && lemp->errsym->useCnt ){ in ReportTable()
4503 fprintf(out,"#define YYERRORSYMBOL %d\n",lemp->errsym->index); lineno++; in ReportTable()
4504 fprintf(out,"#define YYERRSYMDT yy%d\n",lemp->errsym->dtnum); lineno++; in ReportTable()
4506 if( lemp->has_fallback ){ in ReportTable()
4514 ax = (struct axset *) calloc(lemp->nxstate*2, sizeof(ax[0])); in ReportTable()
4519 for(i=0; i<lemp->nxstate; i++){ in ReportTable()
4520 stp = lemp->sorted[i]; in ReportTable()
4532 for(i=0; i<lemp->nxstate*2; i++) ax[i].iOrder = i; in ReportTable()
4533 qsort(ax, lemp->nxstate*2, sizeof(ax[0]), axset_compare); in ReportTable()
4534 pActtab = acttab_alloc(lemp->nsymbol, lemp->nterminal); in ReportTable()
4535 for(i=0; i<lemp->nxstate*2 && ax[i].nAction>0; i++){ in ReportTable()
4540 if( ap->sp->index>=lemp->nterminal ) continue; in ReportTable()
4541 action = compute_action(lemp, ap); in ReportTable()
4551 if( ap->sp->index<lemp->nterminal ) continue; in ReportTable()
4552 if( ap->sp->index==lemp->nsymbol ) continue; in ReportTable()
4553 action = compute_action(lemp, ap); in ReportTable()
4577 for(rp=lemp->rule; rp; rp=rp->next) rp->doesReduce = LEMON_FALSE; in ReportTable()
4578 for(i=0; i<lemp->nxstate; i++){ in ReportTable()
4579 for(ap=lemp->sorted[i]->ap; ap; ap=ap->next){ in ReportTable()
4588 fprintf(out,"#define YYNSTATE %d\n",lemp->nxstate); lineno++; in ReportTable()
4589 fprintf(out,"#define YYNRULE %d\n",lemp->nrule); lineno++; in ReportTable()
4590 fprintf(out,"#define YYNRULE_WITH_ACTION %d\n",lemp->nruleWithAction); in ReportTable()
4592 fprintf(out,"#define YYNTOKEN %d\n",lemp->nterminal); lineno++; in ReportTable()
4593 fprintf(out,"#define YY_MAX_SHIFT %d\n",lemp->nxstate-1); lineno++; in ReportTable()
4594 i = lemp->minShiftReduce; in ReportTable()
4596 i += lemp->nrule; in ReportTable()
4598 fprintf(out,"#define YY_ERROR_ACTION %d\n", lemp->errAction); lineno++; in ReportTable()
4599 fprintf(out,"#define YY_ACCEPT_ACTION %d\n", lemp->accAction); lineno++; in ReportTable()
4600 fprintf(out,"#define YY_NO_ACTION %d\n", lemp->noAction); lineno++; in ReportTable()
4601 fprintf(out,"#define YY_MIN_REDUCE %d\n", lemp->minReduce); lineno++; in ReportTable()
4602 i = lemp->minReduce + lemp->nrule; in ReportTable()
4604 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4619 lemp->nactiontab = n = acttab_action_size(pActtab); in ReportTable()
4620 lemp->tablesize += n*szActionType; in ReportTable()
4625 if( action<0 ) action = lemp->noAction; in ReportTable()
4638 lemp->nlookaheadtab = n = acttab_lookahead_size(pActtab); in ReportTable()
4639 lemp->tablesize += n*szCodeType; in ReportTable()
4643 if( la<0 ) la = lemp->nsymbol; in ReportTable()
4656 nLookAhead = lemp->nterminal + lemp->nactiontab; in ReportTable()
4659 fprintf(out, " %4d,", lemp->nterminal); in ReportTable()
4672 n = lemp->nxstate; in ReportTable()
4673 while( n>0 && lemp->sorted[n-1]->iTknOfst==NO_OFFSET ) n--; in ReportTable()
4678 minimum_size_type(mnTknOfst, lemp->nterminal+lemp->nactiontab, &sz)); in ReportTable()
4680 lemp->tablesize += n*sz; in ReportTable()
4683 stp = lemp->sorted[i]; in ReportTable()
4685 if( ofst==NO_OFFSET ) ofst = lemp->nactiontab; in ReportTable()
4698 n = lemp->nxstate; in ReportTable()
4699 while( n>0 && lemp->sorted[n-1]->iNtOfst==NO_OFFSET ) n--; in ReportTable()
4705 lemp->tablesize += n*sz; in ReportTable()
4708 stp = lemp->sorted[i]; in ReportTable()
4724 n = lemp->nxstate; in ReportTable()
4725 lemp->tablesize += n*szActionType; in ReportTable()
4727 stp = lemp->sorted[i]; in ReportTable()
4730 fprintf(out, " %4d,", lemp->errAction); in ReportTable()
4732 fprintf(out, " %4d,", stp->iDfltReduce + lemp->minReduce); in ReportTable()
4742 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4746 if( lemp->has_fallback ){ in ReportTable()
4747 int mx = lemp->nterminal - 1; in ReportTable()
4751 lemp->tablesize += (mx+1)*szCodeType; in ReportTable()
4753 struct symbol *p = lemp->symbols[i]; in ReportTable()
4763 tplt_xfer(lemp->name, in, out, &lineno); in ReportTable()
4767 for(i=0; i<lemp->nsymbol; i++){ in ReportTable()
4768 fprintf(out," /* %4d */ \"%s\",\n",i, lemp->symbols[i]->name); lineno++; in ReportTable()
4770 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4776 for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ in ReportTable()
4782 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4788 if( lemp->tokendest ){ in ReportTable()
4790 for(i=0; i<lemp->nsymbol; i++){ in ReportTable()
4791 struct symbol *sp = lemp->symbols[i]; in ReportTable()
4799 for(i=0; i<lemp->nsymbol && lemp->symbols[i]->type!=TERMINAL; i++); in ReportTable()
4800 if( i<lemp->nsymbol ){ in ReportTable()
4801 emit_destructor_code(out,lemp->symbols[i],lemp,&lineno); in ReportTable()
4805 if( lemp->vardest ){ in ReportTable()
4808 for(i=0; i<lemp->nsymbol; i++){ in ReportTable()
4809 struct symbol *sp = lemp->symbols[i]; in ReportTable()
4820 emit_destructor_code(out,dflt_sp,lemp,&lineno); in ReportTable()
4824 for(i=0; i<lemp->nsymbol; i++){ in ReportTable()
4825 struct symbol *sp = lemp->symbols[i]; in ReportTable()
4831 for(j=i+1; j<lemp->nsymbol; j++){ in ReportTable()
4832 struct symbol *sp2 = lemp->symbols[j]; in ReportTable()
4842 emit_destructor_code(out,lemp->symbols[i],lemp,&lineno); in ReportTable()
4845 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4848 tplt_print(out,lemp,lemp->overflow,&lineno); in ReportTable()
4849 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4857 for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ in ReportTable()
4862 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4863 for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ in ReportTable()
4868 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4872 for(rp=lemp->rule; rp; rp=rp->next){ in ReportTable()
4873 i += translate_code(lemp, rp); in ReportTable()
4879 for(rp=lemp->rule; rp; rp=rp->next){ in ReportTable()
4898 emit_code(out,rp,lemp,&lineno); in ReportTable()
4905 for(rp=lemp->rule; rp; rp=rp->next){ in ReportTable()
4921 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4924 tplt_print(out,lemp,lemp->failure,&lineno); in ReportTable()
4925 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4928 tplt_print(out,lemp,lemp->error,&lineno); in ReportTable()
4929 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4932 tplt_print(out,lemp,lemp->accept,&lineno); in ReportTable()
4933 tplt_xfer(lemp->name,in,out,&lineno); in ReportTable()
4936 tplt_print(out,lemp,lemp->extracode,&lineno); in ReportTable()
4946 void ReportHeader(struct lemon *lemp) in ReportHeader() argument
4954 if( lemp->tokenprefix ) prefix = lemp->tokenprefix; in ReportHeader()
4956 in = file_open(lemp,".h","rb"); in ReportHeader()
4959 for(i=1; i<lemp->nterminal && fgets(line,LINESIZE,in); i++){ in ReportHeader()
4961 prefix,lemp->symbols[i]->name,i); in ReportHeader()
4966 if( i==lemp->nterminal && nextChar==EOF ){ in ReportHeader()
4971 out = file_open(lemp,".h","wb"); in ReportHeader()
4973 for(i=1; i<lemp->nterminal; i++){ in ReportHeader()
4974 fprintf(out,"#define %s%-30s %3d\n",prefix,lemp->symbols[i]->name,i); in ReportHeader()
4988 void CompressTables(struct lemon *lemp) in CompressTables() argument
4997 for(i=0; i<lemp->nstate; i++){ in CompressTables()
4998 stp = lemp->sorted[i]; in CompressTables()
5004 if( ap->type==SHIFT && ap->sp==lemp->wildcard ){ in CompressTables()
5056 for(i=0; i<lemp->nstate; i++){ in CompressTables()
5057 stp = lemp->sorted[i]; in CompressTables()
5075 for(i=0; i<lemp->nstate; i++){ in CompressTables()
5076 stp = lemp->sorted[i]; in CompressTables()
5087 if( ap->sp->index<lemp->nterminal ) continue; in CompressTables()
5128 void ResortStates(struct lemon *lemp) in ResortStates() argument
5134 for(i=0; i<lemp->nstate; i++){ in ResortStates()
5135 stp = lemp->sorted[i]; in ResortStates()
5141 int iAction = compute_action(lemp,ap); in ResortStates()
5143 if( ap->sp->index<lemp->nterminal ){ in ResortStates()
5145 }else if( ap->sp->index<lemp->nsymbol ){ in ResortStates()
5154 qsort(&lemp->sorted[1], lemp->nstate-1, sizeof(lemp->sorted[0]), in ResortStates()
5156 for(i=0; i<lemp->nstate; i++){ in ResortStates()
5157 lemp->sorted[i]->statenum = i; in ResortStates()
5159 lemp->nxstate = lemp->nstate; in ResortStates()
5160 while( lemp->nxstate>1 && lemp->sorted[lemp->nxstate-1]->autoReduce ){ in ResortStates()
5161 lemp->nxstate--; in ResortStates()