/* * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ # include "ldefs.h" extern int nine; voidphead1(void){ Bprint(&fout,"typedef unsigned char Uchar;\n"); if (nine) { Bprint(&fout,"# include <u.h>\n"); Bprint(&fout,"# include <libc.h>\n"); } Bprint(&fout,"# include <stdio.h>\n"); Bprint(&fout, "# define U(x) x\n"); Bprint(&fout, "# define NLSTATE yyprevious=YYNEWLINE\n"); Bprint(&fout,"# define BEGIN yybgin = yysvec + 1 +\n"); Bprint(&fout,"# define INITIAL 0\n"); Bprint(&fout,"# define YYLERR yysvec\n"); Bprint(&fout,"# define YYSTATE (yyestate-yysvec-1)\n"); Bprint(&fout,"# define YYOPTIM 1\n");# ifdef DEBUG Bprint(&fout,"# define LEXDEBUG 1\n");# endif Bprint(&fout,"# define YYLMAX 200\n"); Bprint(&fout,"# define unput(c) {yytchar= (c);if(yytchar=='\\n')yylineno--;*yysptr++=yytchar;}\n"); Bprint(&fout,"# define yymore() (yymorfg=1)\n"); Bprint(&fout,"# define ECHO fprintf(yyout, \"%%s\",yytext)\n"); Bprint(&fout,"# define REJECT { nstr = yyreject(); goto yyfussy;}\n"); Bprint(&fout,"int yyleng; extern char yytext[];\n"); Bprint(&fout,"int yymorfg;\n"); Bprint(&fout,"extern Uchar *yysptr, yysbuf[];\n"); Bprint(&fout,"int yytchar;\n"); Bprint(&fout,"FILE *yyin = {stdin}, *yyout = {stdout};\n"); Bprint(&fout,"extern int yylineno;\n"); Bprint(&fout,"struct yysvf { \n"); Bprint(&fout,"\tstruct yywork *yystoff;\n"); Bprint(&fout,"\tstruct yysvf *yyother;\n"); Bprint(&fout,"\tint *yystops;};\n"); Bprint(&fout,"struct yysvf *yyestate;\n"); Bprint(&fout,"extern struct yysvf yysvec[], *yybgin;\n"); Bprint(&fout,"int yylook(void), yywrap(void), yyback(int *, int);\n"); if(nine) { Bprint(&fout, "int infd, outfd;\n" "\n" "void\n" "output(char c)\n" "{\n" " int rv;\n" " if ((rv = write(outfd, &c, 1)) < 0)\n" " sysfatal(\"output: %%r\");\n" " if (rv == 0)\n" " sysfatal(\"output: EOF?\");\n" "}\n" "\n" "int\n" "input(void)\n" "{\n" " if(yysptr > yysbuf)\n" " yytchar = U(*--yysptr);\n" " else {\n" " int rv;\n" " if ((rv = read(infd, &yytchar, 1)) < 0)\n" " sysfatal(\"input: %%r\");\n" " if (rv == 0)\n" " return 0;\n" " }\n" " if (yytchar == '\\n')\n" " yylineno++;\n" " return yytchar;\n" "}\n"); } else { Bprint(&fout,"# define output(c) putc(c,yyout)\n"); Bprint(&fout, "%s%d%s\n", "# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==", '\n', "?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)"); }} voidphead2(void){ Bprint(&fout,"while((nstr = yylook()) >= 0)\n"); Bprint(&fout,"yyfussy: switch(nstr){\n"); Bprint(&fout,"case 0:\n"); Bprint(&fout,"if(yywrap()) return(0); break;\n");} voidptail(void){ if(!pflag){ Bprint(&fout,"case -1:\nbreak;\n"); /* for reject */ Bprint(&fout,"default:\n"); Bprint(&fout,"fprintf(yyout,\"bad switch yylook %%d\",nstr);\n"); Bprint(&fout,"} return(0); }\n"); Bprint(&fout,"/* end of yylex */\n"); } pflag = 1;} voidstatistics(void){ fprint(errorf,"%d/%d nodes(%%e), %d/%d positions(%%p), %d/%d (%%n), %ld transitions\n", tptr, treesize, (int)(nxtpos-positions), maxpos, stnum+1, nstates, rcount); fprint(errorf, ", %d/%d packed char classes(%%k)", (int)(pcptr-pchar), pchlen); fprint(errorf,", %d/%d packed transitions(%%a)",nptr, ntrans); fprint(errorf, ", %d/%d output slots(%%o)", yytop, outsize); fprint(errorf,"\n");}
/*
* This file is part of the UCB release of Plan 9. It is subject to the license
* terms in the LICENSE file found in the top-level directory of this
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
* part of the UCB release of Plan 9, including this file, may be copied,
* modified, propagated, or distributed except according to the terms contained
* in the LICENSE file.
*/
# include "ldefs.h"
extern int nine;
void
phead1(void)
{
Bprint(&fout,"typedef unsigned char Uchar;\n");
if (nine) {
Bprint(&fout,"# include <u.h>\n");
Bprint(&fout,"# include <libc.h>\n");
}
Bprint(&fout,"# include <stdio.h>\n");
Bprint(&fout, "# define U(x) x\n");
Bprint(&fout, "# define NLSTATE yyprevious=YYNEWLINE\n");
Bprint(&fout,"# define BEGIN yybgin = yysvec + 1 +\n");
Bprint(&fout,"# define INITIAL 0\n");
Bprint(&fout,"# define YYLERR yysvec\n");
Bprint(&fout,"# define YYSTATE (yyestate-yysvec-1)\n");
Bprint(&fout,"# define YYOPTIM 1\n");
# ifdef DEBUG
Bprint(&fout,"# define LEXDEBUG 1\n");
# endif
Bprint(&fout,"# define YYLMAX 200\n");
Bprint(&fout,
"# define unput(c) {yytchar= (c);if(yytchar=='\\n')yylineno--;*yysptr++=yytchar;}\n");
Bprint(&fout,"# define yymore() (yymorfg=1)\n");
Bprint(&fout,"# define ECHO fprintf(yyout, \"%%s\",yytext)\n");
Bprint(&fout,"# define REJECT { nstr = yyreject(); goto yyfussy;}\n");
Bprint(&fout,"int yyleng; extern char yytext[];\n");
Bprint(&fout,"int yymorfg;\n");
Bprint(&fout,"extern Uchar *yysptr, yysbuf[];\n");
Bprint(&fout,"int yytchar;\n");
Bprint(&fout,"FILE *yyin = {stdin}, *yyout = {stdout};\n");
Bprint(&fout,"extern int yylineno;\n");
Bprint(&fout,"struct yysvf { \n");
Bprint(&fout,"\tstruct yywork *yystoff;\n");
Bprint(&fout,"\tstruct yysvf *yyother;\n");
Bprint(&fout,"\tint *yystops;};\n");
Bprint(&fout,"struct yysvf *yyestate;\n");
Bprint(&fout,"extern struct yysvf yysvec[], *yybgin;\n");
Bprint(&fout,"int yylook(void), yywrap(void), yyback(int *, int);\n");
if(nine) {
Bprint(&fout,
"int infd, outfd;\n"
"\n"
"void\n"
"output(char c)\n"
"{\n"
" int rv;\n"
" if ((rv = write(outfd, &c, 1)) < 0)\n"
" sysfatal(\"output: %%r\");\n"
" if (rv == 0)\n"
" sysfatal(\"output: EOF?\");\n"
"}\n"
"\n"
"int\n"
"input(void)\n"
"{\n"
" if(yysptr > yysbuf)\n"
" yytchar = U(*--yysptr);\n"
" else {\n"
" int rv;\n"
" if ((rv = read(infd, &yytchar, 1)) < 0)\n"
" sysfatal(\"input: %%r\");\n"
" if (rv == 0)\n"
" return 0;\n"
" }\n"
" if (yytchar == '\\n')\n"
" yylineno++;\n"
" return yytchar;\n"
"}\n");
}
else {
Bprint(&fout,"# define output(c) putc(c,yyout)\n");
Bprint(&fout, "%s%d%s\n",
"# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==",
'\n',
"?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)");
}
}
void
phead2(void)
{
Bprint(&fout,"while((nstr = yylook()) >= 0)\n");
Bprint(&fout,"yyfussy: switch(nstr){\n");
Bprint(&fout,"case 0:\n");
Bprint(&fout,"if(yywrap()) return(0); break;\n");
}
void
ptail(void)
{
if(!pflag){
Bprint(&fout,"case -1:\nbreak;\n"); /* for reject */
Bprint(&fout,"default:\n");
Bprint(&fout,"fprintf(yyout,\"bad switch yylook %%d\",nstr);\n");
Bprint(&fout,"} return(0); }\n");
Bprint(&fout,"/* end of yylex */\n");
}
pflag = 1;
}
void
statistics(void)
{
fprint(errorf,"%d/%d nodes(%%e), %d/%d positions(%%p), %d/%d (%%n), %ld transitions\n",
tptr, treesize, (int)(nxtpos-positions), maxpos, stnum+1, nstates, rcount);
fprint(errorf, ", %d/%d packed char classes(%%k)", (int)(pcptr-pchar), pchlen);
fprint(errorf,", %d/%d packed transitions(%%a)",nptr, ntrans);
fprint(errorf, ", %d/%d output slots(%%o)", yytop, outsize);
fprint(errorf,"\n");
}