Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
}