AUSAM/source/lex/lexcl.a
eallprint.c w/ # include <lS>
allprint(c)
char c; {
extern FILE *yyout;
switch(c){
case '\n':
fprintf(yyout,"\\n");
break;
case '\t':
fprintf(yyout,"\\t");
break;
case '\b':
fprintf(yyout,"\\b");
break;
case ' ':
fprintf(yyout,"\\\bb");
break;
default:
if(!printable(c))
fprintf(yyout,"\\%-3o",c);
else
putc(c,yyout);
break;
}
return;
}
sprint(s)
char *s; {
while(*s)
allprint(*s++);
return;
}
printable(c)
int c;
{
return(040 < c && c < 0177);
}
main.c wa main(){
yylex();
exit(0);
}
yyless.c wr 4yyless(x)
{
extern char yytext[];
register char *lastch, *ptr;
extern int yyleng;
extern int yyprevious;
lastch = yytext+yyleng;
if (x>=0 && x <= yyleng)
ptr = x + yytext;
else
ptr = x;
while (lastch > ptr)
yyunput(*--lastch);
*lastch = 0;
if (ptr >yytext)
yyprevious = *--lastch;
yyleng = ptr-yytext;
}
yywrap.c w/ yywrap()
{
return(1);
}
ereject.c wV ;# include <lS>
extern struct {int *yyaa, *yybb; int *yystops;} *yylstate [], **yylsp, **yyolsp;
yyreject ()
{
extern FILE *yyout, *yyin;
extern int yyprevious , *yyfnd;
extern char yyextra[];
extern char yytext[];
extern int yyleng;
for( ; yylsp < yyolsp; yylsp++)
yytext[yyleng++] = yyinput();
if (*yyfnd > 0)
return(yyracc(*yyfnd++));
while (yylsp-- > yylstate)
{
yyunput(yytext[yyleng-1]);
yytext[--yyleng] = 0;
if (*yylsp != 0 && (yyfnd= (*yylsp)->yystops) && *yyfnd > 0)
return(yyracc(*yyfnd++));
}
if (yytext[0] == 0)
return(0);
yyoutput(yyprevious = yyinput());
yyleng=0;
return(-1);
}
yyracc(m)
{
yyolsp = yylsp;
if (yyextra[m])
{
while (yyback((*yylsp)->yystops, -m) != 1 && yylsp>yylstate)
{
yylsp--;
yyunput(yytext[--yyleng]);
}
}
yyprevious = yytext[yyleng-1];
yytext[yyleng] = 0;
return(m);
}
tncform ` int yylineno 1;
char yytext[YYLMAX];
struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
char yysbuf[YYLMAX];
char *yysptr yysbuf;
int *yyfnd;
struct yysvf *yystate;
int yyprevious YYNEWLINE;
yylook(){
register struct yysvf *state, **lsp;
register struct yywork *t;
struct yysvf *z;
int ch;
struct yywork *r;
# ifdef LEXDEBUG
int debug;
# endif
char *yylastch;
/* start off machines */
# ifdef LEXDEBUG
debug = 0;
# endif
if (!yymorfg)
yylastch = yytext;
else {
yymorfg=0;
yylastch = yytext+yyleng-1;
}
for(;;){
lsp = yylstate;
yystate = state = yybgin;
if (yyprevious==YYNEWLINE) state++;
for (;;){
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"state %d\n",state-yysvec-1);
# endif
t = state->yystoff;
if(t == yycrank){ /* may not be any transitions */
z = state->yyother;
if(z == 0)break;
if(z->yystoff == yycrank)break;
}
*yylastch++ = ch = input();
tryagain:
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"char ");
allprint(ch);
putchar('\n');
}
# endif
r = t;
if(t > yycrank){
t = r + ch;
if(t <= yytop && t->verify+yysvec == state){
if(t->advance+yysvec == YYERROR) /* error transitions */
{unput(*--yylastch);break;}
*lsp++ = state = t->advance+yysvec;
goto contin;
}
}
# ifdef YYOPTIM
else if(t < yycrank) { /* r < yycrank */
t = r = yycrank+(yycrank-t);
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"compressed state\n");
# endif
t = t + ch;
if(t <= yytop && t->verify+yysvec == state){
if(t->advance+yysvec == YYERROR) /* error transitions */
{unput(*--yylastch);break;}
*lsp++ = state = t->advance+yysvec;
goto contin;
}
t = r + yymatch[ch];
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"try fall back character ");
allprint(yymatch[ch]);
putchar('\n');
}
# endif
if(t <= yytop && t->verify+yysvec == state){
if(t->advance+yysvec == YYERROR) /* error transition */
{unput(*--yylastch);break;}
*lsp++ = state = t->advance+yysvec;
goto contin;
}
}
if ((state = state->yyother) && (t= state->yystoff) != yycrank){
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"fall back to state %d\n",state-yysvec-1);
# endif
goto tryagain;
}
# endif
else
{unput(*--yylastch);break;}
contin:
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"state %d char ",state-yysvec-1);
allprint(ch);
putchar('\n');
}
# endif
;
}
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
allprint(ch);
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 = *yylastch;
yylsp = lsp;
yyleng = yylastch-yytext+1;
yytext[yyleng] = 0;
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"\nmatch ");
sprint(yytext);
fprintf(yyout," action %d\n",*yyfnd);
}
# endif
return(*yyfnd++);
}
unput(*yylastch);
}
if (yytext[0] == 0 && feof(yyin))
return(0);
output(yyprevious = input());
yylastch=yytext;
# ifdef LEXDEBUG
if(debug)putchar('\n');
# endif
}
}
yyback(p, m)
int *p;
{
if (p==0) return(0);
while (*p)
{
if (*p++ == m)
return(1);
}
return(0);
}
/* the following are only used in the lex library */
yyinput(){
return(input());
}
yyoutput(c)
int c; {
output(c);
}
yyunput(c)
int c; {
unput(c);
}