13e12c5d1SDavid du Colombier # include "ldefs.h"
2*3ff48bf5SDavid du Colombier
3*3ff48bf5SDavid du Colombier extern int nine;
4*3ff48bf5SDavid du Colombier
53e12c5d1SDavid du Colombier void
phead1(void)63e12c5d1SDavid du Colombier phead1(void)
73e12c5d1SDavid du Colombier {
8219b2ee8SDavid du Colombier Bprint(&fout,"typedef unsigned char Uchar;\n");
9*3ff48bf5SDavid du Colombier if (nine) {
10*3ff48bf5SDavid du Colombier Bprint(&fout,"# include <u.h>\n");
11*3ff48bf5SDavid du Colombier Bprint(&fout,"# include <libc.h>\n");
12*3ff48bf5SDavid du Colombier }
13219b2ee8SDavid du Colombier Bprint(&fout,"# include <stdio.h>\n");
14219b2ee8SDavid du Colombier Bprint(&fout, "# define U(x) x\n");
15219b2ee8SDavid du Colombier Bprint(&fout, "# define NLSTATE yyprevious=YYNEWLINE\n");
16219b2ee8SDavid du Colombier Bprint(&fout,"# define BEGIN yybgin = yysvec + 1 +\n");
17219b2ee8SDavid du Colombier Bprint(&fout,"# define INITIAL 0\n");
18219b2ee8SDavid du Colombier Bprint(&fout,"# define YYLERR yysvec\n");
19219b2ee8SDavid du Colombier Bprint(&fout,"# define YYSTATE (yyestate-yysvec-1)\n");
20219b2ee8SDavid du Colombier Bprint(&fout,"# define YYOPTIM 1\n");
213e12c5d1SDavid du Colombier # ifdef DEBUG
22219b2ee8SDavid du Colombier Bprint(&fout,"# define LEXDEBUG 1\n");
233e12c5d1SDavid du Colombier # endif
24219b2ee8SDavid du Colombier Bprint(&fout,"# define YYLMAX 200\n");
25219b2ee8SDavid du Colombier Bprint(&fout,
263e12c5d1SDavid du Colombier "# define unput(c) {yytchar= (c);if(yytchar=='\\n')yylineno--;*yysptr++=yytchar;}\n");
27219b2ee8SDavid du Colombier Bprint(&fout,"# define yymore() (yymorfg=1)\n");
28219b2ee8SDavid du Colombier Bprint(&fout,"# define ECHO fprintf(yyout, \"%%s\",yytext)\n");
29219b2ee8SDavid du Colombier Bprint(&fout,"# define REJECT { nstr = yyreject(); goto yyfussy;}\n");
30219b2ee8SDavid du Colombier Bprint(&fout,"int yyleng; extern char yytext[];\n");
31219b2ee8SDavid du Colombier Bprint(&fout,"int yymorfg;\n");
32219b2ee8SDavid du Colombier Bprint(&fout,"extern Uchar *yysptr, yysbuf[];\n");
33219b2ee8SDavid du Colombier Bprint(&fout,"int yytchar;\n");
34219b2ee8SDavid du Colombier Bprint(&fout,"FILE *yyin = {stdin}, *yyout = {stdout};\n");
35219b2ee8SDavid du Colombier Bprint(&fout,"extern int yylineno;\n");
36219b2ee8SDavid du Colombier Bprint(&fout,"struct yysvf { \n");
37219b2ee8SDavid du Colombier Bprint(&fout,"\tstruct yywork *yystoff;\n");
38219b2ee8SDavid du Colombier Bprint(&fout,"\tstruct yysvf *yyother;\n");
39219b2ee8SDavid du Colombier Bprint(&fout,"\tint *yystops;};\n");
40219b2ee8SDavid du Colombier Bprint(&fout,"struct yysvf *yyestate;\n");
41219b2ee8SDavid du Colombier Bprint(&fout,"extern struct yysvf yysvec[], *yybgin;\n");
42219b2ee8SDavid du Colombier Bprint(&fout,"int yylook(void), yywrap(void), yyback(int *, int);\n");
43*3ff48bf5SDavid du Colombier if(nine) {
44*3ff48bf5SDavid du Colombier Bprint(&fout,
45*3ff48bf5SDavid du Colombier "int infd, outfd;\n"
46*3ff48bf5SDavid du Colombier "\n"
47*3ff48bf5SDavid du Colombier "void\n"
48*3ff48bf5SDavid du Colombier "output(char c)\n"
49*3ff48bf5SDavid du Colombier "{\n"
50*3ff48bf5SDavid du Colombier " int rv;\n"
51*3ff48bf5SDavid du Colombier " if ((rv = write(outfd, &c, 1)) < 0)\n"
52*3ff48bf5SDavid du Colombier " sysfatal(\"output: %%r\");\n"
53*3ff48bf5SDavid du Colombier " if (rv == 0)\n"
54*3ff48bf5SDavid du Colombier " sysfatal(\"output: EOF?\");\n"
55*3ff48bf5SDavid du Colombier "}\n"
56*3ff48bf5SDavid du Colombier "\n"
57*3ff48bf5SDavid du Colombier "int\n"
58*3ff48bf5SDavid du Colombier "input(void)\n"
59*3ff48bf5SDavid du Colombier "{\n"
60*3ff48bf5SDavid du Colombier " if(yysptr > yysbuf)\n"
61*3ff48bf5SDavid du Colombier " yytchar = U(*--yysptr);\n"
62*3ff48bf5SDavid du Colombier " else {\n"
63*3ff48bf5SDavid du Colombier " int rv;\n"
64*3ff48bf5SDavid du Colombier " if ((rv = read(infd, &yytchar, 1)) < 0)\n"
65*3ff48bf5SDavid du Colombier " sysfatal(\"input: %%r\");\n"
66*3ff48bf5SDavid du Colombier " if (rv == 0)\n"
67*3ff48bf5SDavid du Colombier " return 0;\n"
68*3ff48bf5SDavid du Colombier " }\n"
69*3ff48bf5SDavid du Colombier " if (yytchar == '\\n')\n"
70*3ff48bf5SDavid du Colombier " yylineno++;\n"
71*3ff48bf5SDavid du Colombier " return yytchar;\n"
72*3ff48bf5SDavid du Colombier "}\n");
73*3ff48bf5SDavid du Colombier }
74*3ff48bf5SDavid du Colombier else {
75*3ff48bf5SDavid du Colombier Bprint(&fout,"# define output(c) putc(c,yyout)\n");
76*3ff48bf5SDavid du Colombier Bprint(&fout, "%s%d%s\n",
77*3ff48bf5SDavid du Colombier "# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==",
78*3ff48bf5SDavid du Colombier '\n',
79*3ff48bf5SDavid du Colombier "?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)");
80*3ff48bf5SDavid du Colombier }
813e12c5d1SDavid du Colombier }
823e12c5d1SDavid du Colombier
833e12c5d1SDavid du Colombier void
phead2(void)843e12c5d1SDavid du Colombier phead2(void)
853e12c5d1SDavid du Colombier {
86219b2ee8SDavid du Colombier Bprint(&fout,"while((nstr = yylook()) >= 0)\n");
87219b2ee8SDavid du Colombier Bprint(&fout,"yyfussy: switch(nstr){\n");
88219b2ee8SDavid du Colombier Bprint(&fout,"case 0:\n");
89219b2ee8SDavid du Colombier Bprint(&fout,"if(yywrap()) return(0); break;\n");
903e12c5d1SDavid du Colombier }
913e12c5d1SDavid du Colombier
923e12c5d1SDavid du Colombier void
ptail(void)933e12c5d1SDavid du Colombier ptail(void)
943e12c5d1SDavid du Colombier {
953e12c5d1SDavid du Colombier if(!pflag){
96219b2ee8SDavid du Colombier Bprint(&fout,"case -1:\nbreak;\n"); /* for reject */
97219b2ee8SDavid du Colombier Bprint(&fout,"default:\n");
98219b2ee8SDavid du Colombier Bprint(&fout,"fprintf(yyout,\"bad switch yylook %%d\",nstr);\n");
99219b2ee8SDavid du Colombier Bprint(&fout,"} return(0); }\n");
100219b2ee8SDavid du Colombier Bprint(&fout,"/* end of yylex */\n");
1013e12c5d1SDavid du Colombier }
1023e12c5d1SDavid du Colombier pflag = 1;
1033e12c5d1SDavid du Colombier }
1043e12c5d1SDavid du Colombier
1053e12c5d1SDavid du Colombier void
statistics(void)1063e12c5d1SDavid du Colombier statistics(void)
1073e12c5d1SDavid du Colombier {
108219b2ee8SDavid du Colombier fprint(errorf,"%d/%d nodes(%%e), %d/%d positions(%%p), %d/%d (%%n), %ld transitions\n",
1097dd7cddfSDavid du Colombier tptr, treesize, (int)(nxtpos-positions), maxpos, stnum+1, nstates, rcount);
1107dd7cddfSDavid du Colombier fprint(errorf, ", %d/%d packed char classes(%%k)", (int)(pcptr-pchar), pchlen);
111219b2ee8SDavid du Colombier fprint(errorf,", %d/%d packed transitions(%%a)",nptr, ntrans);
112219b2ee8SDavid du Colombier fprint(errorf, ", %d/%d output slots(%%o)", yytop, outsize);
113219b2ee8SDavid du Colombier fprint(errorf,"\n");
1143e12c5d1SDavid du Colombier }
115