Commit | Line | Data |
---|---|---|
579f1fca SL |
1 | #ifndef lint |
2 | static char sccsid[] = "@(#)header.c 4.1 (Berkeley) %G%"; | |
3 | #endif | |
4 | # include "ldefs.c" | |
5 | phead1(){ | |
6 | ratfor ? rhd1() : chd1(); | |
7 | } | |
8 | ||
9 | chd1(){ | |
10 | fprintf(fout,"# include \"stdio.h\"\n"); | |
11 | if (ZCH>NCH) | |
12 | fprintf(fout, "# define U(x) ((x)&0377)\n"); | |
13 | else | |
14 | fprintf(fout, "# define U(x) x\n"); | |
15 | fprintf(fout, "# define NLSTATE yyprevious=YYNEWLINE\n"); | |
16 | fprintf(fout,"# define BEGIN yybgin = yysvec + 1 +\n"); | |
17 | fprintf(fout,"# define INITIAL 0\n"); | |
18 | fprintf(fout,"# define YYLERR yysvec\n"); | |
19 | fprintf(fout,"# define YYSTATE (yyestate-yysvec-1)\n"); | |
20 | if(optim) | |
21 | fprintf(fout,"# define YYOPTIM 1\n"); | |
22 | # ifdef DEBUG | |
23 | fprintf(fout,"# define LEXDEBUG 1\n"); | |
24 | # endif | |
25 | fprintf(fout,"# define YYLMAX 200\n"); | |
26 | fprintf(fout,"# define output(c) putc(c,yyout)\n"); | |
27 | fprintf(fout, "%s%d%s\n", | |
28 | "# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==", | |
29 | ctable['\n'], | |
30 | "?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)"); | |
31 | fprintf(fout, | |
32 | "# define unput(c) {yytchar= (c);if(yytchar=='\\n')yylineno--;*yysptr++=yytchar;}\n"); | |
33 | fprintf(fout,"# define yymore() (yymorfg=1)\n"); | |
34 | fprintf(fout,"# define ECHO fprintf(yyout, \"%%s\",yytext)\n"); | |
35 | fprintf(fout,"# define REJECT { nstr = yyreject(); goto yyfussy;}\n"); | |
36 | fprintf(fout,"int yyleng; extern char yytext[];\n"); | |
37 | fprintf(fout,"int yymorfg;\n"); | |
38 | fprintf(fout,"extern char *yysptr, yysbuf[];\n"); | |
39 | fprintf(fout,"int yytchar;\n"); | |
40 | fprintf(fout,"FILE *yyin ={stdin}, *yyout ={stdout};\n"); | |
41 | fprintf(fout,"extern int yylineno;\n"); | |
42 | fprintf(fout,"struct yysvf { \n"); | |
43 | fprintf(fout,"\tstruct yywork *yystoff;\n"); | |
44 | fprintf(fout,"\tstruct yysvf *yyother;\n"); | |
45 | fprintf(fout,"\tint *yystops;};\n"); | |
46 | fprintf(fout,"struct yysvf *yyestate;\n"); | |
47 | fprintf(fout,"extern struct yysvf yysvec[], *yybgin;\n"); | |
48 | } | |
49 | ||
50 | rhd1(){ | |
51 | fprintf(fout,"integer function yylex(dummy)\n"); | |
52 | fprintf(fout,"define YYLMAX 200\n"); | |
53 | fprintf(fout,"define ECHO call yyecho(yytext,yyleng)\n"); | |
54 | fprintf(fout,"define REJECT nstr = yyrjct(yytext,yyleng);goto 30998\n"); | |
55 | fprintf(fout,"integer nstr,yylook,yywrap\n"); | |
56 | fprintf(fout,"integer yyleng, yytext(YYLMAX)\n"); | |
57 | fprintf(fout,"common /yyxel/ yyleng, yytext\n"); | |
58 | fprintf(fout,"common /yyldat/ yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta\n"); | |
59 | fprintf(fout,"integer yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta(YYLMAX)\n"); | |
60 | fprintf(fout,"for(;;){\n"); | |
61 | fprintf(fout,"\t30999 nstr = yylook(dummy)\n"); | |
62 | fprintf(fout,"\tgoto 30998\n"); | |
63 | fprintf(fout,"\t30000 k = yywrap(dummy)\n"); | |
64 | fprintf(fout,"\tif(k .ne. 0){\n"); | |
65 | fprintf(fout,"\tyylex=0; return; }\n"); | |
66 | fprintf(fout,"\t\telse goto 30998\n"); | |
67 | } | |
68 | ||
69 | phead2(){ | |
70 | if(!ratfor)chd2(); | |
71 | } | |
72 | ||
73 | chd2(){ | |
74 | fprintf(fout,"while((nstr = yylook()) >= 0)\n"); | |
75 | fprintf(fout,"yyfussy: switch(nstr){\n"); | |
76 | fprintf(fout,"case 0:\n"); | |
77 | fprintf(fout,"if(yywrap()) return(0); break;\n"); | |
78 | } | |
79 | ||
80 | ptail(){ | |
81 | if(!pflag) | |
82 | ratfor ? rtail() : ctail(); | |
83 | pflag = 1; | |
84 | } | |
85 | ||
86 | ctail(){ | |
87 | fprintf(fout,"case -1:\nbreak;\n"); /* for reject */ | |
88 | fprintf(fout,"default:\n"); | |
89 | fprintf(fout,"fprintf(yyout,\"bad switch yylook %%d\",nstr);\n"); | |
90 | fprintf(fout,"} return(0); }\n"); | |
91 | fprintf(fout,"/* end of yylex */\n"); | |
92 | } | |
93 | ||
94 | rtail(){ | |
95 | register int i; | |
96 | fprintf(fout,"\n30998 if(nstr .lt. 0 .or. nstr .gt. %d)goto 30999\n",casecount); | |
97 | fprintf(fout,"nstr = nstr + 1\n"); | |
98 | fprintf(fout,"goto(\n"); | |
99 | for(i=0; i<casecount; i++) | |
100 | fprintf(fout,"%d,\n",30000+i); | |
101 | fprintf(fout,"30999),nstr\n"); | |
102 | fprintf(fout,"30997 continue\n"); | |
103 | fprintf(fout,"}\nend\n"); | |
104 | } | |
105 | statistics(){ | |
106 | fprintf(errorf,"%d/%d nodes(%%e), %d/%d positions(%%p), %d/%d (%%n), %ld transitions\n", | |
107 | tptr, treesize, nxtpos-positions, maxpos, stnum+1, nstates, rcount); | |
108 | fprintf(errorf, ", %d/%d packed char classes(%%k)", pcptr-pchar, pchlen); | |
109 | if(optim)fprintf(errorf,", %d/%d packed transitions(%%a)",nptr, ntrans); | |
110 | fprintf(errorf, ", %d/%d output slots(%%o)", yytop, outsize); | |
111 | putc('\n',errorf); | |
112 | } |