|
|
1.1 root 1: /* ncform 4.1 83/08/11 */
2:
3: int yylineno =1;
4: # define YYU(x) x
5: # define NLSTATE yyprevious=YYNEWLINE
6: char yytext[YYLMAX];
7: struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
8: char yysbuf[YYLMAX];
9: char *yysptr = yysbuf;
10: int *yyfnd;
11: extern struct yysvf *yyestate;
12: int yyprevious = YYNEWLINE;
13: yylook(){
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: }
159: yyback(p, m)
160: int *p;
161: {
162: if (p==0) return(0);
163: while (*p)
164: {
165: if (*p++ == m)
166: return(1);
167: }
168: return(0);
169: }
170: /* the following are only used in the lex library */
171: yyinput(){
172: return(input());
173: }
174: yyoutput(c)
175: int c; {
176: output(c);
177: }
178: yyunput(c)
179: int c; {
180: unput(c);
181: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.