1 #ifndef lint 2 static char sccsid[] = "@(#)header.c 4.1 (Berkeley) 08/11/83"; 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 } 113