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