|  | #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 | 
|  | int | 
|  | 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 | 
|  | } | 
|  | /* not reached */ | 
|  | } | 
|  | int | 
|  | 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 */ | 
|  | int | 
|  | yyinput(void){ | 
|  | if(yyin == ((void*)0)) | 
|  | yyin = stdin; | 
|  | return(input()); | 
|  | } | 
|  | void | 
|  | yyoutput(int c) | 
|  | { | 
|  | if(yyout == ((void*)0)) | 
|  | yyout = stdin; | 
|  | output(c); | 
|  | } | 
|  | void | 
|  | yyunput(int c) | 
|  | { | 
|  | unput(c); | 
|  | } |