diff options
-rw-r--r-- | CHANGES | 10 | ||||
-rw-r--r-- | lib/lex/ncform | 184 | ||||
-rw-r--r-- | src/cmd/lex/lmain.c | 4 | ||||
-rw-r--r-- | src/cmd/lex/mkfile | 3 | ||||
-rw-r--r-- | src/cmd/mkfile | 2 |
5 files changed, 199 insertions, 4 deletions
@@ -1,3 +1,13 @@ +April 21, 2004 + import assembler routines for libmp and libsec + on x86 from william josephson's tree + + add truerand which uses /dev/random to seed PRG + + add aescbc, astro, lex, and tcs + + import man9 from william josephson's version of the port + April 19, 2004 lots of man page updates. diff --git a/lib/lex/ncform b/lib/lex/ncform new file mode 100644 index 00000000..a87030b3 --- /dev/null +++ b/lib/lex/ncform @@ -0,0 +1,184 @@ +#pragma lib "libl.a" +int yylineno =1; +# define YYU(x) x +char yytext[YYLMAX]; +struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; +Uchar yysbuf[YYLMAX]; +Uchar *yysptr = yysbuf; +int *yyfnd; +extern struct yysvf *yyestate; +int yyprevious = YYNEWLINE; +# ifdef LEXDEBUG +extern void allprint(char); +# endif +yylook(void){ + struct yysvf *yystate, **lsp; + struct yywork *yyt; + struct yysvf *yyz; + int yych; + struct yywork *yyr; +# ifdef LEXDEBUG + int debug; +# endif + Uchar *yylastch; + /* start off machines */ +# ifdef LEXDEBUG + debug = 0; +# endif + if (!yymorfg) + yylastch = (Uchar*)yytext; + else { + yymorfg=0; + yylastch = (Uchar*)yytext+yyleng; + } + for(;;){ + lsp = yylstate; + yyestate = yystate = yybgin; + if (yyprevious==YYNEWLINE) yystate++; + for (;;){ +# ifdef LEXDEBUG + if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); +# endif + yyt = yystate->yystoff; + if(yyt == yycrank){ /* may not be any transitions */ + yyz = yystate->yyother; + if(yyz == 0)break; + if(yyz->yystoff == yycrank)break; + } + *yylastch++ = yych = input(); + tryagain: +# ifdef LEXDEBUG + if(debug){ + fprintf(yyout,"char "); + allprint(yych); + putchar('\n'); + } +# endif + yyr = yyt; + if ( (int)yyt > (int)yycrank){ + yyt = yyr + yych; + if (yyt <= yytop && yyt->verify+yysvec == yystate){ + if(yyt->advance+yysvec == YYLERR) /* error transitions */ + {unput(*--yylastch);break;} + *lsp++ = yystate = yyt->advance+yysvec; + goto contin; + } + } +# ifdef YYOPTIM + else if((int)yyt < (int)yycrank) { /* r < yycrank */ + yyt = yyr = yycrank+(yycrank-yyt); +# ifdef LEXDEBUG + if(debug)fprintf(yyout,"compressed state\n"); +# endif + yyt = yyt + yych; + if(yyt <= yytop && yyt->verify+yysvec == yystate){ + if(yyt->advance+yysvec == YYLERR) /* error transitions */ + {unput(*--yylastch);break;} + *lsp++ = yystate = yyt->advance+yysvec; + goto contin; + } + yyt = yyr + YYU(yymatch[yych]); +# ifdef LEXDEBUG + if(debug){ + fprintf(yyout,"try fall back character "); + allprint(YYU(yymatch[yych])); + putchar('\n'); + } +# endif + if(yyt <= yytop && yyt->verify+yysvec == yystate){ + if(yyt->advance+yysvec == YYLERR) /* error transition */ + {unput(*--yylastch);break;} + *lsp++ = yystate = yyt->advance+yysvec; + goto contin; + } + } + if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ +# ifdef LEXDEBUG + if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); +# endif + goto tryagain; + } +# endif + else + {unput(*--yylastch);break;} + contin: +# ifdef LEXDEBUG + if(debug){ + fprintf(yyout,"state %d char ",yystate-yysvec-1); + allprint(yych); + putchar('\n'); + } +# endif + ; + } +# ifdef LEXDEBUG + if(debug){ + fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1); + allprint(yych); + putchar('\n'); + } +# endif + while (lsp-- > yylstate){ + *yylastch-- = 0; + if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ + yyolsp = lsp; + if(yyextra[*yyfnd]){ /* must backup */ + while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ + lsp--; + unput(*yylastch--); + } + } + yyprevious = YYU(*yylastch); + yylsp = lsp; + yyleng = yylastch-(Uchar*)yytext+1; + yytext[yyleng] = 0; +# ifdef LEXDEBUG + if(debug){ + fprintf(yyout,"\nmatch '%s'", yytext); + fprintf(yyout," action %d\n",*yyfnd); + } +# endif + return(*yyfnd++); + } + unput(*yylastch); + } + if (yytext[0] == 0 /* && feof(yyin) */) + { + yysptr=yysbuf; + return(0); + } + yyprevious = input(); + yytext[0] = yyprevious; + if (yyprevious>0) + output(yyprevious); + yylastch = (Uchar*)yytext; +# ifdef LEXDEBUG + if(debug)putchar('\n'); +# endif + } + return(0); /* shut up the compiler; i have no idea what should be returned */ + } +yyback(int *p, int m) +{ +if (p==0) return(0); +while (*p) + { + if (*p++ == m) + return(1); + } +return(0); +} + /* the following are only used in the lex library */ +yyinput(void){ + return(input()); +} +void +yyoutput(int c) +{ + output(c); +} +void +yyunput(int c) +{ + unput(c); +} diff --git a/src/cmd/lex/lmain.c b/src/cmd/lex/lmain.c index ec43869a..a98978c6 100644 --- a/src/cmd/lex/lmain.c +++ b/src/cmd/lex/lmain.c @@ -14,7 +14,7 @@ int peek = '\n'; /* next input character */ uchar *pushptr = pushc; uchar *slptr = slist; -char *cname = SYS9 "/sys/lib/lex/ncform"; +char *cname; int nine; int ccount = 1; @@ -95,6 +95,8 @@ main(int argc, char **argv) { int i; + cname = unsharp("#9/lib/lex/ncform"); + ARGBEGIN { # ifdef DEBUG case 'd': debug++; break; diff --git a/src/cmd/lex/mkfile b/src/cmd/lex/mkfile index a748409f..ffcf875d 100644 --- a/src/cmd/lex/mkfile +++ b/src/cmd/lex/mkfile @@ -1,7 +1,6 @@ <$PLAN9/src/mkhdr -#TARG=lex -TARG=lex.9 +TARG=9lex OFILES=lmain.$O\ y.tab.$O\ sub1.$O\ diff --git a/src/cmd/mkfile b/src/cmd/mkfile index 350769ef..477ca474 100644 --- a/src/cmd/mkfile +++ b/src/cmd/mkfile @@ -6,7 +6,7 @@ SHORTLIB=sec fs mux regexp9 draw thread bio 9 <$PLAN9/src/mkmany -BUGGERED='CVS|faces|factotum|mailfs|mk|upas|vac|venti|lex' +BUGGERED='CVS|faces|factotum|mailfs|mk|upas|vac|venti' DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "^($BUGGERED)$"` <$PLAN9/src/mkdirs |