13e12c5d1SDavid du Colombier # include "ldefs.h" 23e12c5d1SDavid du Colombier void 33e12c5d1SDavid du Colombier phead1(void) 43e12c5d1SDavid du Colombier { 5*219b2ee8SDavid du Colombier Bprint(&fout,"typedef unsigned char Uchar;\n"); 6*219b2ee8SDavid du Colombier Bprint(&fout,"# include <stdio.h>\n"); 7*219b2ee8SDavid du Colombier Bprint(&fout, "# define U(x) x\n"); 8*219b2ee8SDavid du Colombier Bprint(&fout, "# define NLSTATE yyprevious=YYNEWLINE\n"); 9*219b2ee8SDavid du Colombier Bprint(&fout,"# define BEGIN yybgin = yysvec + 1 +\n"); 10*219b2ee8SDavid du Colombier Bprint(&fout,"# define INITIAL 0\n"); 11*219b2ee8SDavid du Colombier Bprint(&fout,"# define YYLERR yysvec\n"); 12*219b2ee8SDavid du Colombier Bprint(&fout,"# define YYSTATE (yyestate-yysvec-1)\n"); 13*219b2ee8SDavid du Colombier Bprint(&fout,"# define YYOPTIM 1\n"); 143e12c5d1SDavid du Colombier # ifdef DEBUG 15*219b2ee8SDavid du Colombier Bprint(&fout,"# define LEXDEBUG 1\n"); 163e12c5d1SDavid du Colombier # endif 17*219b2ee8SDavid du Colombier Bprint(&fout,"# define YYLMAX 200\n"); 18*219b2ee8SDavid du Colombier Bprint(&fout,"# define output(c) putc(c,yyout)\n"); 19*219b2ee8SDavid du Colombier Bprint(&fout, "%s%d%s\n", 203e12c5d1SDavid du Colombier "# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==", 213e12c5d1SDavid du Colombier '\n', 223e12c5d1SDavid du Colombier "?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)"); 23*219b2ee8SDavid du Colombier Bprint(&fout, 243e12c5d1SDavid du Colombier "# define unput(c) {yytchar= (c);if(yytchar=='\\n')yylineno--;*yysptr++=yytchar;}\n"); 25*219b2ee8SDavid du Colombier Bprint(&fout,"# define yymore() (yymorfg=1)\n"); 26*219b2ee8SDavid du Colombier Bprint(&fout,"# define ECHO fprintf(yyout, \"%%s\",yytext)\n"); 27*219b2ee8SDavid du Colombier Bprint(&fout,"# define REJECT { nstr = yyreject(); goto yyfussy;}\n"); 28*219b2ee8SDavid du Colombier Bprint(&fout,"int yyleng; extern char yytext[];\n"); 29*219b2ee8SDavid du Colombier Bprint(&fout,"int yymorfg;\n"); 30*219b2ee8SDavid du Colombier Bprint(&fout,"extern Uchar *yysptr, yysbuf[];\n"); 31*219b2ee8SDavid du Colombier Bprint(&fout,"int yytchar;\n"); 32*219b2ee8SDavid du Colombier Bprint(&fout,"FILE *yyin = {stdin}, *yyout = {stdout};\n"); 33*219b2ee8SDavid du Colombier Bprint(&fout,"extern int yylineno;\n"); 34*219b2ee8SDavid du Colombier Bprint(&fout,"struct yysvf { \n"); 35*219b2ee8SDavid du Colombier Bprint(&fout,"\tstruct yywork *yystoff;\n"); 36*219b2ee8SDavid du Colombier Bprint(&fout,"\tstruct yysvf *yyother;\n"); 37*219b2ee8SDavid du Colombier Bprint(&fout,"\tint *yystops;};\n"); 38*219b2ee8SDavid du Colombier Bprint(&fout,"struct yysvf *yyestate;\n"); 39*219b2ee8SDavid du Colombier Bprint(&fout,"extern struct yysvf yysvec[], *yybgin;\n"); 40*219b2ee8SDavid du Colombier Bprint(&fout,"int yylook(void), yywrap(void), yyback(int *, int);\n"); 413e12c5d1SDavid du Colombier } 423e12c5d1SDavid du Colombier 433e12c5d1SDavid du Colombier void 443e12c5d1SDavid du Colombier phead2(void) 453e12c5d1SDavid du Colombier { 46*219b2ee8SDavid du Colombier Bprint(&fout,"while((nstr = yylook()) >= 0)\n"); 47*219b2ee8SDavid du Colombier Bprint(&fout,"yyfussy: switch(nstr){\n"); 48*219b2ee8SDavid du Colombier Bprint(&fout,"case 0:\n"); 49*219b2ee8SDavid du Colombier Bprint(&fout,"if(yywrap()) return(0); break;\n"); 503e12c5d1SDavid du Colombier } 513e12c5d1SDavid du Colombier 523e12c5d1SDavid du Colombier void 533e12c5d1SDavid du Colombier ptail(void) 543e12c5d1SDavid du Colombier { 553e12c5d1SDavid du Colombier if(!pflag){ 56*219b2ee8SDavid du Colombier Bprint(&fout,"case -1:\nbreak;\n"); /* for reject */ 57*219b2ee8SDavid du Colombier Bprint(&fout,"default:\n"); 58*219b2ee8SDavid du Colombier Bprint(&fout,"fprintf(yyout,\"bad switch yylook %%d\",nstr);\n"); 59*219b2ee8SDavid du Colombier Bprint(&fout,"} return(0); }\n"); 60*219b2ee8SDavid du Colombier Bprint(&fout,"/* end of yylex */\n"); 613e12c5d1SDavid du Colombier } 623e12c5d1SDavid du Colombier pflag = 1; 633e12c5d1SDavid du Colombier } 643e12c5d1SDavid du Colombier 653e12c5d1SDavid du Colombier void 663e12c5d1SDavid du Colombier statistics(void) 673e12c5d1SDavid du Colombier { 68*219b2ee8SDavid du Colombier fprint(errorf,"%d/%d nodes(%%e), %d/%d positions(%%p), %d/%d (%%n), %ld transitions\n", 693e12c5d1SDavid du Colombier tptr, treesize, nxtpos-positions, maxpos, stnum+1, nstates, rcount); 70*219b2ee8SDavid du Colombier fprint(errorf, ", %d/%d packed char classes(%%k)", pcptr-pchar, pchlen); 71*219b2ee8SDavid du Colombier fprint(errorf,", %d/%d packed transitions(%%a)",nptr, ntrans); 72*219b2ee8SDavid du Colombier fprint(errorf, ", %d/%d output slots(%%o)", yytop, outsize); 73*219b2ee8SDavid du Colombier fprint(errorf,"\n"); 743e12c5d1SDavid du Colombier } 75