Document recent changes.

Make lex really compile in rsc's world.
This commit is contained in:
wkj 2004-04-21 05:56:24 +00:00
parent 7ac9b0e140
commit 2c7cc0faaf
5 changed files with 199 additions and 4 deletions

10
CHANGES
View file

@ -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 April 19, 2004
lots of man page updates. lots of man page updates.

184
lib/lex/ncform Normal file
View file

@ -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);
}

View file

@ -14,7 +14,7 @@ int peek = '\n'; /* next input character */
uchar *pushptr = pushc; uchar *pushptr = pushc;
uchar *slptr = slist; uchar *slptr = slist;
char *cname = SYS9 "/sys/lib/lex/ncform"; char *cname;
int nine; int nine;
int ccount = 1; int ccount = 1;
@ -95,6 +95,8 @@ main(int argc, char **argv)
{ {
int i; int i;
cname = unsharp("#9/lib/lex/ncform");
ARGBEGIN { ARGBEGIN {
# ifdef DEBUG # ifdef DEBUG
case 'd': debug++; break; case 'd': debug++; break;

View file

@ -1,7 +1,6 @@
<$PLAN9/src/mkhdr <$PLAN9/src/mkhdr
#TARG=lex TARG=9lex
TARG=lex.9
OFILES=lmain.$O\ OFILES=lmain.$O\
y.tab.$O\ y.tab.$O\
sub1.$O\ sub1.$O\

View file

@ -6,7 +6,7 @@ SHORTLIB=sec fs mux regexp9 draw thread bio 9
<$PLAN9/src/mkmany <$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)$"` DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "^($BUGGERED)$"`
<$PLAN9/src/mkdirs <$PLAN9/src/mkdirs