1*14496Ssam/* ncform 4.1 83/08/11 */ 2*14496Ssam 3*14496Ssamint yylineno =1; 4*14496Ssam# define YYU(x) x 5*14496Ssam# define NLSTATE yyprevious=YYNEWLINE 6*14496Ssamchar yytext[YYLMAX]; 7*14496Ssamstruct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; 8*14496Ssamchar yysbuf[YYLMAX]; 9*14496Ssamchar *yysptr = yysbuf; 10*14496Ssamint *yyfnd; 11*14496Ssamextern struct yysvf *yyestate; 12*14496Ssamint yyprevious = YYNEWLINE; 13*14496Ssamyylook(){ 14*14496Ssam register struct yysvf *yystate, **lsp; 15*14496Ssam register struct yywork *yyt; 16*14496Ssam struct yysvf *yyz; 17*14496Ssam int yych; 18*14496Ssam struct yywork *yyr; 19*14496Ssam# ifdef LEXDEBUG 20*14496Ssam int debug; 21*14496Ssam# endif 22*14496Ssam char *yylastch; 23*14496Ssam /* start off machines */ 24*14496Ssam# ifdef LEXDEBUG 25*14496Ssam debug = 0; 26*14496Ssam# endif 27*14496Ssam if (!yymorfg) 28*14496Ssam yylastch = yytext; 29*14496Ssam else { 30*14496Ssam yymorfg=0; 31*14496Ssam yylastch = yytext+yyleng; 32*14496Ssam } 33*14496Ssam for(;;){ 34*14496Ssam lsp = yylstate; 35*14496Ssam yyestate = yystate = yybgin; 36*14496Ssam if (yyprevious==YYNEWLINE) yystate++; 37*14496Ssam for (;;){ 38*14496Ssam# ifdef LEXDEBUG 39*14496Ssam if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); 40*14496Ssam# endif 41*14496Ssam yyt = yystate->yystoff; 42*14496Ssam if(yyt == yycrank){ /* may not be any transitions */ 43*14496Ssam yyz = yystate->yyother; 44*14496Ssam if(yyz == 0)break; 45*14496Ssam if(yyz->yystoff == yycrank)break; 46*14496Ssam } 47*14496Ssam *yylastch++ = yych = input(); 48*14496Ssam tryagain: 49*14496Ssam# ifdef LEXDEBUG 50*14496Ssam if(debug){ 51*14496Ssam fprintf(yyout,"char "); 52*14496Ssam allprint(yych); 53*14496Ssam putchar('\n'); 54*14496Ssam } 55*14496Ssam# endif 56*14496Ssam yyr = yyt; 57*14496Ssam if ( (int)yyt > (int)yycrank){ 58*14496Ssam yyt = yyr + yych; 59*14496Ssam if (yyt <= yytop && yyt->verify+yysvec == yystate){ 60*14496Ssam if(yyt->advance+yysvec == YYLERR) /* error transitions */ 61*14496Ssam {unput(*--yylastch);break;} 62*14496Ssam *lsp++ = yystate = yyt->advance+yysvec; 63*14496Ssam goto contin; 64*14496Ssam } 65*14496Ssam } 66*14496Ssam# ifdef YYOPTIM 67*14496Ssam else if((int)yyt < (int)yycrank) { /* r < yycrank */ 68*14496Ssam yyt = yyr = yycrank+(yycrank-yyt); 69*14496Ssam# ifdef LEXDEBUG 70*14496Ssam if(debug)fprintf(yyout,"compressed state\n"); 71*14496Ssam# endif 72*14496Ssam yyt = yyt + yych; 73*14496Ssam if(yyt <= yytop && yyt->verify+yysvec == yystate){ 74*14496Ssam if(yyt->advance+yysvec == YYLERR) /* error transitions */ 75*14496Ssam {unput(*--yylastch);break;} 76*14496Ssam *lsp++ = yystate = yyt->advance+yysvec; 77*14496Ssam goto contin; 78*14496Ssam } 79*14496Ssam yyt = yyr + YYU(yymatch[yych]); 80*14496Ssam# ifdef LEXDEBUG 81*14496Ssam if(debug){ 82*14496Ssam fprintf(yyout,"try fall back character "); 83*14496Ssam allprint(YYU(yymatch[yych])); 84*14496Ssam putchar('\n'); 85*14496Ssam } 86*14496Ssam# endif 87*14496Ssam if(yyt <= yytop && yyt->verify+yysvec == yystate){ 88*14496Ssam if(yyt->advance+yysvec == YYLERR) /* error transition */ 89*14496Ssam {unput(*--yylastch);break;} 90*14496Ssam *lsp++ = yystate = yyt->advance+yysvec; 91*14496Ssam goto contin; 92*14496Ssam } 93*14496Ssam } 94*14496Ssam if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ 95*14496Ssam# ifdef LEXDEBUG 96*14496Ssam if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); 97*14496Ssam# endif 98*14496Ssam goto tryagain; 99*14496Ssam } 100*14496Ssam# endif 101*14496Ssam else 102*14496Ssam {unput(*--yylastch);break;} 103*14496Ssam contin: 104*14496Ssam# ifdef LEXDEBUG 105*14496Ssam if(debug){ 106*14496Ssam fprintf(yyout,"state %d char ",yystate-yysvec-1); 107*14496Ssam allprint(yych); 108*14496Ssam putchar('\n'); 109*14496Ssam } 110*14496Ssam# endif 111*14496Ssam ; 112*14496Ssam } 113*14496Ssam# ifdef LEXDEBUG 114*14496Ssam if(debug){ 115*14496Ssam fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1); 116*14496Ssam allprint(yych); 117*14496Ssam putchar('\n'); 118*14496Ssam } 119*14496Ssam# endif 120*14496Ssam while (lsp-- > yylstate){ 121*14496Ssam *yylastch-- = 0; 122*14496Ssam if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ 123*14496Ssam yyolsp = lsp; 124*14496Ssam if(yyextra[*yyfnd]){ /* must backup */ 125*14496Ssam while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ 126*14496Ssam lsp--; 127*14496Ssam unput(*yylastch--); 128*14496Ssam } 129*14496Ssam } 130*14496Ssam yyprevious = YYU(*yylastch); 131*14496Ssam yylsp = lsp; 132*14496Ssam yyleng = yylastch-yytext+1; 133*14496Ssam yytext[yyleng] = 0; 134*14496Ssam# ifdef LEXDEBUG 135*14496Ssam if(debug){ 136*14496Ssam fprintf(yyout,"\nmatch "); 137*14496Ssam sprint(yytext); 138*14496Ssam fprintf(yyout," action %d\n",*yyfnd); 139*14496Ssam } 140*14496Ssam# endif 141*14496Ssam return(*yyfnd++); 142*14496Ssam } 143*14496Ssam unput(*yylastch); 144*14496Ssam } 145*14496Ssam if (yytext[0] == 0 /* && feof(yyin) */) 146*14496Ssam { 147*14496Ssam yysptr=yysbuf; 148*14496Ssam return(0); 149*14496Ssam } 150*14496Ssam yyprevious = yytext[0] = input(); 151*14496Ssam if (yyprevious>0) 152*14496Ssam output(yyprevious); 153*14496Ssam yylastch=yytext; 154*14496Ssam# ifdef LEXDEBUG 155*14496Ssam if(debug)putchar('\n'); 156*14496Ssam# endif 157*14496Ssam } 158*14496Ssam } 159*14496Ssamyyback(p, m) 160*14496Ssam int *p; 161*14496Ssam{ 162*14496Ssamif (p==0) return(0); 163*14496Ssamwhile (*p) 164*14496Ssam { 165*14496Ssam if (*p++ == m) 166*14496Ssam return(1); 167*14496Ssam } 168*14496Ssamreturn(0); 169*14496Ssam} 170*14496Ssam /* the following are only used in the lex library */ 171*14496Ssamyyinput(){ 172*14496Ssam return(input()); 173*14496Ssam } 174*14496Ssamyyoutput(c) 175*14496Ssam int c; { 176*14496Ssam output(c); 177*14496Ssam } 178*14496Ssamyyunput(c) 179*14496Ssam int c; { 180*14496Ssam unput(c); 181*14496Ssam } 182