17dd7cddfSDavid du Colombier#pragma lib "libl.a" 23e12c5d1SDavid du Colombierint yylineno =1; 33e12c5d1SDavid du Colombier# define YYU(x) x 43e12c5d1SDavid du Colombierchar yytext[YYLMAX]; 53e12c5d1SDavid du Colombierstruct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; 63e12c5d1SDavid du ColombierUchar yysbuf[YYLMAX]; 73e12c5d1SDavid du ColombierUchar *yysptr = yysbuf; 83e12c5d1SDavid du Colombierint *yyfnd; 93e12c5d1SDavid du Colombierextern struct yysvf *yyestate; 103e12c5d1SDavid du Colombierint yyprevious = YYNEWLINE; 113e12c5d1SDavid du Colombier# ifdef LEXDEBUG 120b9a5132SDavid du Colombierextern void allprint(int); 133e12c5d1SDavid du Colombier# endif 143e12c5d1SDavid du Colombieryylook(void){ 153e12c5d1SDavid du Colombier struct yysvf *yystate, **lsp; 163e12c5d1SDavid du Colombier struct yywork *yyt; 173e12c5d1SDavid du Colombier struct yysvf *yyz; 183e12c5d1SDavid du Colombier int yych; 193e12c5d1SDavid du Colombier struct yywork *yyr; 203e12c5d1SDavid du Colombier# ifdef LEXDEBUG 213e12c5d1SDavid du Colombier int debug; 223e12c5d1SDavid du Colombier# endif 233e12c5d1SDavid du Colombier Uchar *yylastch; 243e12c5d1SDavid du Colombier /* start off machines */ 253e12c5d1SDavid du Colombier# ifdef LEXDEBUG 263e12c5d1SDavid du Colombier debug = 0; 273e12c5d1SDavid du Colombier# endif 283e12c5d1SDavid du Colombier if (!yymorfg) 293e12c5d1SDavid du Colombier yylastch = (Uchar*)yytext; 303e12c5d1SDavid du Colombier else { 313e12c5d1SDavid du Colombier yymorfg=0; 323e12c5d1SDavid du Colombier yylastch = (Uchar*)yytext+yyleng; 333e12c5d1SDavid du Colombier } 343e12c5d1SDavid du Colombier for(;;){ 353e12c5d1SDavid du Colombier lsp = yylstate; 363e12c5d1SDavid du Colombier yyestate = yystate = yybgin; 373e12c5d1SDavid du Colombier if (yyprevious==YYNEWLINE) yystate++; 383e12c5d1SDavid du Colombier for (;;){ 393e12c5d1SDavid du Colombier# ifdef LEXDEBUG 403e12c5d1SDavid du Colombier if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); 413e12c5d1SDavid du Colombier# endif 423e12c5d1SDavid du Colombier yyt = yystate->yystoff; 433e12c5d1SDavid du Colombier if(yyt == yycrank){ /* may not be any transitions */ 443e12c5d1SDavid du Colombier yyz = yystate->yyother; 453e12c5d1SDavid du Colombier if(yyz == 0)break; 463e12c5d1SDavid du Colombier if(yyz->yystoff == yycrank)break; 473e12c5d1SDavid du Colombier } 483e12c5d1SDavid du Colombier *yylastch++ = yych = input(); 493e12c5d1SDavid du Colombier tryagain: 503e12c5d1SDavid du Colombier# ifdef LEXDEBUG 513e12c5d1SDavid du Colombier if(debug){ 523e12c5d1SDavid du Colombier fprintf(yyout,"char "); 533e12c5d1SDavid du Colombier allprint(yych); 543e12c5d1SDavid du Colombier putchar('\n'); 553e12c5d1SDavid du Colombier } 563e12c5d1SDavid du Colombier# endif 573e12c5d1SDavid du Colombier yyr = yyt; 58*68860d28SDavid du Colombier if (yyt > yycrank){ 593e12c5d1SDavid du Colombier yyt = yyr + yych; 603e12c5d1SDavid du Colombier if (yyt <= yytop && yyt->verify+yysvec == yystate){ 613e12c5d1SDavid du Colombier if(yyt->advance+yysvec == YYLERR) /* error transitions */ 623e12c5d1SDavid du Colombier {unput(*--yylastch);break;} 633e12c5d1SDavid du Colombier *lsp++ = yystate = yyt->advance+yysvec; 643e12c5d1SDavid du Colombier goto contin; 653e12c5d1SDavid du Colombier } 663e12c5d1SDavid du Colombier } 673e12c5d1SDavid du Colombier# ifdef YYOPTIM 68*68860d28SDavid du Colombier else if(yyt < yycrank) { /* r < yycrank */ 693e12c5d1SDavid du Colombier yyt = yyr = yycrank+(yycrank-yyt); 703e12c5d1SDavid du Colombier# ifdef LEXDEBUG 713e12c5d1SDavid du Colombier if(debug)fprintf(yyout,"compressed state\n"); 723e12c5d1SDavid du Colombier# endif 733e12c5d1SDavid du Colombier yyt = yyt + yych; 743e12c5d1SDavid du Colombier if(yyt <= yytop && yyt->verify+yysvec == yystate){ 753e12c5d1SDavid du Colombier if(yyt->advance+yysvec == YYLERR) /* error transitions */ 763e12c5d1SDavid du Colombier {unput(*--yylastch);break;} 773e12c5d1SDavid du Colombier *lsp++ = yystate = yyt->advance+yysvec; 783e12c5d1SDavid du Colombier goto contin; 793e12c5d1SDavid du Colombier } 803e12c5d1SDavid du Colombier yyt = yyr + YYU(yymatch[yych]); 813e12c5d1SDavid du Colombier# ifdef LEXDEBUG 823e12c5d1SDavid du Colombier if(debug){ 833e12c5d1SDavid du Colombier fprintf(yyout,"try fall back character "); 843e12c5d1SDavid du Colombier allprint(YYU(yymatch[yych])); 853e12c5d1SDavid du Colombier putchar('\n'); 863e12c5d1SDavid du Colombier } 873e12c5d1SDavid du Colombier# endif 883e12c5d1SDavid du Colombier if(yyt <= yytop && yyt->verify+yysvec == yystate){ 893e12c5d1SDavid du Colombier if(yyt->advance+yysvec == YYLERR) /* error transition */ 903e12c5d1SDavid du Colombier {unput(*--yylastch);break;} 913e12c5d1SDavid du Colombier *lsp++ = yystate = yyt->advance+yysvec; 923e12c5d1SDavid du Colombier goto contin; 933e12c5d1SDavid du Colombier } 943e12c5d1SDavid du Colombier } 953e12c5d1SDavid du Colombier if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ 963e12c5d1SDavid du Colombier# ifdef LEXDEBUG 973e12c5d1SDavid du Colombier if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); 983e12c5d1SDavid du Colombier# endif 993e12c5d1SDavid du Colombier goto tryagain; 1003e12c5d1SDavid du Colombier } 1013e12c5d1SDavid du Colombier# endif 1023e12c5d1SDavid du Colombier else 1033e12c5d1SDavid du Colombier {unput(*--yylastch);break;} 1043e12c5d1SDavid du Colombier contin: 1053e12c5d1SDavid du Colombier# ifdef LEXDEBUG 1063e12c5d1SDavid du Colombier if(debug){ 1073e12c5d1SDavid du Colombier fprintf(yyout,"state %d char ",yystate-yysvec-1); 1083e12c5d1SDavid du Colombier allprint(yych); 1093e12c5d1SDavid du Colombier putchar('\n'); 1103e12c5d1SDavid du Colombier } 1113e12c5d1SDavid du Colombier# endif 1123e12c5d1SDavid du Colombier ; 1133e12c5d1SDavid du Colombier } 1143e12c5d1SDavid du Colombier# ifdef LEXDEBUG 1153e12c5d1SDavid du Colombier if(debug){ 1160b9a5132SDavid du Colombier fprintf(yyout,"stopped at %d with ",lsp>yylstate?*(lsp-1)-yysvec-1:0); 1173e12c5d1SDavid du Colombier allprint(yych); 1183e12c5d1SDavid du Colombier putchar('\n'); 1193e12c5d1SDavid du Colombier } 1203e12c5d1SDavid du Colombier# endif 1213e12c5d1SDavid du Colombier while (lsp-- > yylstate){ 1223e12c5d1SDavid du Colombier *yylastch-- = 0; 1233e12c5d1SDavid du Colombier if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ 1243e12c5d1SDavid du Colombier yyolsp = lsp; 1253e12c5d1SDavid du Colombier if(yyextra[*yyfnd]){ /* must backup */ 1263e12c5d1SDavid du Colombier while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ 1273e12c5d1SDavid du Colombier lsp--; 1283e12c5d1SDavid du Colombier unput(*yylastch--); 1293e12c5d1SDavid du Colombier } 1303e12c5d1SDavid du Colombier } 1313e12c5d1SDavid du Colombier yyprevious = YYU(*yylastch); 1323e12c5d1SDavid du Colombier yylsp = lsp; 1333e12c5d1SDavid du Colombier yyleng = yylastch-(Uchar*)yytext+1; 1343e12c5d1SDavid du Colombier yytext[yyleng] = 0; 1353e12c5d1SDavid du Colombier# ifdef LEXDEBUG 1363e12c5d1SDavid du Colombier if(debug){ 1373e12c5d1SDavid du Colombier fprintf(yyout,"\nmatch '%s'", yytext); 1383e12c5d1SDavid du Colombier fprintf(yyout," action %d\n",*yyfnd); 1393e12c5d1SDavid du Colombier } 1403e12c5d1SDavid du Colombier# endif 1413e12c5d1SDavid du Colombier return(*yyfnd++); 1423e12c5d1SDavid du Colombier } 1433e12c5d1SDavid du Colombier unput(*yylastch); 1443e12c5d1SDavid du Colombier } 1453e12c5d1SDavid du Colombier if (yytext[0] == 0 /* && feof(yyin) */) 1463e12c5d1SDavid du Colombier { 1473e12c5d1SDavid du Colombier yysptr=yysbuf; 1483e12c5d1SDavid du Colombier return(0); 1493e12c5d1SDavid du Colombier } 1503e12c5d1SDavid du Colombier yyprevious = input(); 1513e12c5d1SDavid du Colombier yytext[0] = yyprevious; 1523e12c5d1SDavid du Colombier if (yyprevious>0) 1533e12c5d1SDavid du Colombier output(yyprevious); 1543e12c5d1SDavid du Colombier yylastch = (Uchar*)yytext; 1553e12c5d1SDavid du Colombier# ifdef LEXDEBUG 1563e12c5d1SDavid du Colombier if(debug)putchar('\n'); 1573e12c5d1SDavid du Colombier# endif 1583e12c5d1SDavid du Colombier } 1593e12c5d1SDavid du Colombier } 1603e12c5d1SDavid du Colombieryyback(int *p, int m) 1613e12c5d1SDavid du Colombier{ 1623e12c5d1SDavid du Colombierif (p==0) return(0); 1633e12c5d1SDavid du Colombierwhile (*p) 1643e12c5d1SDavid du Colombier { 1653e12c5d1SDavid du Colombier if (*p++ == m) 1663e12c5d1SDavid du Colombier return(1); 1673e12c5d1SDavid du Colombier } 1683e12c5d1SDavid du Colombierreturn(0); 1693e12c5d1SDavid du Colombier} 1703e12c5d1SDavid du Colombier /* the following are only used in the lex library */ 1713e12c5d1SDavid du Colombieryyinput(void){ 1723e12c5d1SDavid du Colombier return(input()); 1733e12c5d1SDavid du Colombier} 174219b2ee8SDavid du Colombiervoid 1753e12c5d1SDavid du Colombieryyoutput(int c) 1763e12c5d1SDavid du Colombier{ 1773e12c5d1SDavid du Colombier output(c); 1783e12c5d1SDavid du Colombier} 179219b2ee8SDavid du Colombiervoid 1803e12c5d1SDavid du Colombieryyunput(int c) 1813e12c5d1SDavid du Colombier{ 1823e12c5d1SDavid du Colombier unput(c); 1833e12c5d1SDavid du Colombier} 184