2 |
- |
1 |
# include "ldefs.h"
|
|
|
2 |
|
|
|
3 |
extern int nine;
|
|
|
4 |
|
|
|
5 |
void
|
|
|
6 |
phead1(void)
|
|
|
7 |
{
|
|
|
8 |
Bprint(&fout,"typedef unsigned char Uchar;\n");
|
|
|
9 |
if (nine) {
|
|
|
10 |
Bprint(&fout,"# include <u.h>\n");
|
|
|
11 |
Bprint(&fout,"# include <libc.h>\n");
|
|
|
12 |
}
|
|
|
13 |
Bprint(&fout,"# include <stdio.h>\n");
|
|
|
14 |
Bprint(&fout, "# define U(x) x\n");
|
|
|
15 |
Bprint(&fout, "# define NLSTATE yyprevious=YYNEWLINE\n");
|
|
|
16 |
Bprint(&fout,"# define BEGIN yybgin = yysvec + 1 +\n");
|
|
|
17 |
Bprint(&fout,"# define INITIAL 0\n");
|
|
|
18 |
Bprint(&fout,"# define YYLERR yysvec\n");
|
|
|
19 |
Bprint(&fout,"# define YYSTATE (yyestate-yysvec-1)\n");
|
|
|
20 |
Bprint(&fout,"# define YYOPTIM 1\n");
|
|
|
21 |
# ifdef DEBUG
|
|
|
22 |
Bprint(&fout,"# define LEXDEBUG 1\n");
|
|
|
23 |
# endif
|
|
|
24 |
Bprint(&fout,"# define YYLMAX 200\n");
|
|
|
25 |
Bprint(&fout,
|
|
|
26 |
"# define unput(c) {yytchar= (c);if(yytchar=='\\n')yylineno--;*yysptr++=yytchar;}\n");
|
|
|
27 |
Bprint(&fout,"# define yymore() (yymorfg=1)\n");
|
|
|
28 |
Bprint(&fout,"# define ECHO fprintf(yyout, \"%%s\",yytext)\n");
|
|
|
29 |
Bprint(&fout,"# define REJECT { nstr = yyreject(); goto yyfussy;}\n");
|
|
|
30 |
Bprint(&fout,"int yyleng; extern char yytext[];\n");
|
|
|
31 |
Bprint(&fout,"int yymorfg;\n");
|
|
|
32 |
Bprint(&fout,"extern Uchar *yysptr, yysbuf[];\n");
|
|
|
33 |
Bprint(&fout,"int yytchar;\n");
|
|
|
34 |
Bprint(&fout,"FILE *yyin = {stdin}, *yyout = {stdout};\n");
|
|
|
35 |
Bprint(&fout,"extern int yylineno;\n");
|
|
|
36 |
Bprint(&fout,"struct yysvf { \n");
|
|
|
37 |
Bprint(&fout,"\tstruct yywork *yystoff;\n");
|
|
|
38 |
Bprint(&fout,"\tstruct yysvf *yyother;\n");
|
|
|
39 |
Bprint(&fout,"\tint *yystops;};\n");
|
|
|
40 |
Bprint(&fout,"struct yysvf *yyestate;\n");
|
|
|
41 |
Bprint(&fout,"extern struct yysvf yysvec[], *yybgin;\n");
|
|
|
42 |
Bprint(&fout,"int yylook(void), yywrap(void), yyback(int *, int);\n");
|
|
|
43 |
if(nine) {
|
|
|
44 |
Bprint(&fout,
|
|
|
45 |
"int infd, outfd;\n"
|
|
|
46 |
"\n"
|
|
|
47 |
"void\n"
|
|
|
48 |
"output(char c)\n"
|
|
|
49 |
"{\n"
|
|
|
50 |
" int rv;\n"
|
|
|
51 |
" if ((rv = write(outfd, &c, 1)) < 0)\n"
|
|
|
52 |
" sysfatal(\"output: %%r\");\n"
|
|
|
53 |
" if (rv == 0)\n"
|
|
|
54 |
" sysfatal(\"output: EOF?\");\n"
|
|
|
55 |
"}\n"
|
|
|
56 |
"\n"
|
|
|
57 |
"int\n"
|
|
|
58 |
"input(void)\n"
|
|
|
59 |
"{\n"
|
|
|
60 |
" if(yysptr > yysbuf)\n"
|
|
|
61 |
" yytchar = U(*--yysptr);\n"
|
|
|
62 |
" else {\n"
|
|
|
63 |
" int rv;\n"
|
|
|
64 |
" if ((rv = read(infd, &yytchar, 1)) < 0)\n"
|
|
|
65 |
" sysfatal(\"input: %%r\");\n"
|
|
|
66 |
" if (rv == 0)\n"
|
|
|
67 |
" return 0;\n"
|
|
|
68 |
" }\n"
|
|
|
69 |
" if (yytchar == '\\n')\n"
|
|
|
70 |
" yylineno++;\n"
|
|
|
71 |
" return yytchar;\n"
|
|
|
72 |
"}\n");
|
|
|
73 |
}
|
|
|
74 |
else {
|
|
|
75 |
Bprint(&fout,"# define output(c) putc(c,yyout)\n");
|
|
|
76 |
Bprint(&fout, "%s%d%s\n",
|
|
|
77 |
"# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==",
|
|
|
78 |
'\n',
|
|
|
79 |
"?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)");
|
|
|
80 |
}
|
|
|
81 |
}
|
|
|
82 |
|
|
|
83 |
void
|
|
|
84 |
phead2(void)
|
|
|
85 |
{
|
|
|
86 |
Bprint(&fout,"while((nstr = yylook()) >= 0)\n");
|
|
|
87 |
Bprint(&fout,"yyfussy: switch(nstr){\n");
|
|
|
88 |
Bprint(&fout,"case 0:\n");
|
|
|
89 |
Bprint(&fout,"if(yywrap()) return(0); break;\n");
|
|
|
90 |
}
|
|
|
91 |
|
|
|
92 |
void
|
|
|
93 |
ptail(void)
|
|
|
94 |
{
|
|
|
95 |
if(!pflag){
|
|
|
96 |
Bprint(&fout,"case -1:\nbreak;\n"); /* for reject */
|
|
|
97 |
Bprint(&fout,"default:\n");
|
|
|
98 |
Bprint(&fout,"fprintf(yyout,\"bad switch yylook %%d\",nstr);\n");
|
|
|
99 |
Bprint(&fout,"} return(0); }\n");
|
|
|
100 |
Bprint(&fout,"/* end of yylex */\n");
|
|
|
101 |
}
|
|
|
102 |
pflag = 1;
|
|
|
103 |
}
|
|
|
104 |
|
|
|
105 |
void
|
|
|
106 |
statistics(void)
|
|
|
107 |
{
|
|
|
108 |
fprint(errorf,"%d/%d nodes(%%e), %d/%d positions(%%p), %d/%d (%%n), %ld transitions\n",
|
|
|
109 |
tptr, treesize, (int)(nxtpos-positions), maxpos, stnum+1, nstates, rcount);
|
|
|
110 |
fprint(errorf, ", %d/%d packed char classes(%%k)", (int)(pcptr-pchar), pchlen);
|
|
|
111 |
fprint(errorf,", %d/%d packed transitions(%%a)",nptr, ntrans);
|
|
|
112 |
fprint(errorf, ", %d/%d output slots(%%o)", yytop, outsize);
|
|
|
113 |
fprint(errorf,"\n");
|
|
|
114 |
}
|