|
|
1.1 root 1: int yylineno =1;
2: # define YYU(x) x
3: # define NLSTATE yyprevious=YYNEWLINE
4: char yytext[YYLMAX];
5: struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
6: char yysbuf[YYLMAX];
7: char *yysptr = yysbuf;
8: int *yyfnd;
9: extern struct yysvf *yyestate;
10: int yyprevious = YYNEWLINE;
11: yylook(){
12: register struct yysvf *yystate, **lsp;
13: register int yyt;
14: register struct yywork *yyk;
15: struct yysvf *yyz;
16: int yych;
17: int yyr;
18: # ifdef LEXDEBUG
19: int debug;
20: # endif
21: char *yylastch;
22: /* start off machines */
23: # ifdef LEXDEBUG
24: debug = 0;
25: # endif
26: if (!yymorfg)
27: yylastch = yytext;
28: else {
29: yymorfg=0;
30: yylastch = yytext+yyleng;
31: }
32: for(;;){
33: lsp = yylstate;
34: yyestate = yystate = yybgin;
35: if (yyprevious==YYNEWLINE) yystate++;
36: for (;;){
37: # ifdef LEXDEBUG
38: if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
39: # endif
40: yyt = yystate->yystoff;
41: if(yyt == 0){ /* may not be any transitions */
42: yyz = yystate->yyother;
43: if(yyz == 0)break;
44: if(yyz->yystoff == 0)break;
45: }
46: *yylastch++ = yych = input();
47: tryagain:
48: # ifdef LEXDEBUG
49: if(debug){
50: fprintf(yyout,"char ");
51: allprint(yych);
52: putchar('\n');
53: }
54: # endif
55: yyr = yyt;
56: if ( yyt > 0){
57: yyt = yyr + yych;
58: yyk = yycrank + yyt;
59: if (yyt <= yytop && yyk->verify+yysvec == yystate){
60: if(yyk->advance+yysvec == YYLERR) /* error transitions */
61: {unput(*--yylastch);break;}
62: *lsp++ = yystate = yyk->advance+yysvec;
63: goto contin;
64: }
65: }
66: # ifdef YYOPTIM
67: else if(yyt < 0) { /* r < yycrank */
68: yyt = yyr = -yyt;
69: # ifdef LEXDEBUG
70: if(debug)fprintf(yyout,"compressed state\n");
71: # endif
72: yyt = yyt + yych;
73: yyk = yycrank + yyt;
74: if(yyt <= yytop && yyk->verify+yysvec == yystate){
75: if(yyk->advance+yysvec == YYLERR) /* error transitions */
76: {unput(*--yylastch);break;}
77: *lsp++ = yystate = yyk->advance+yysvec;
78: goto contin;
79: }
80: yyt = yyr + YYU(yymatch[yych]);
81: yyk = yycrank + yyt;
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 && yyk->verify+yysvec == yystate){
90: if(yyk->advance+yysvec == YYLERR) /* error transition */
91: {unput(*--yylastch);break;}
92: *lsp++ = yystate = yyk->advance+yysvec;
93: goto contin;
94: }
95: }
96: if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != 0){
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-yytext+1;
135: yytext[yyleng] = 0;
136: # ifdef LEXDEBUG
137: if(debug){
138: fprintf(yyout,"\nmatch ");
139: sprint(yytext);
140: fprintf(yyout," action %d\n",*yyfnd);
141: }
142: # endif
143: return(*yyfnd++);
144: }
145: unput(*yylastch);
146: }
147: if (yytext[0] == 0 /* && feof(yyin) */)
148: {
149: yysptr=yysbuf;
150: return(0);
151: }
152: yyprevious = yytext[0] = input();
153: if (yyprevious>0)
154: output(yyprevious);
155: yylastch=yytext;
156: # ifdef LEXDEBUG
157: if(debug)putchar('\n');
158: # endif
159: }
160: }
161: #ifdef __cplusplus
162: yyback(int *p, int m)
163: #else
164: yyback(p, m)
165: int *p;
166: #endif
167: {
168: if (p==0) return(0);
169: while (*p)
170: {
171: if (*p++ == m)
172: return(1);
173: }
174: return(0);
175: }
176: /* the following are only used in the lex library */
177: yyinput(){
178: return(input());
179: }
180: #ifdef __cplusplus
181: yyoutput(int c)
182: #else
183: yyoutput(c)
184: int c;
185: #endif
186: {
187: output(c);
188: }
189: #ifdef __cplusplus
190: yyunput(int c)
191: #else
192: yyunput(c)
193: int c;
194: #endif
195: {
196: unput(c);
197: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.