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