xref: /plan9-contrib/sys/src/cmd/lex/header.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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