Commit | Line | Data |
---|---|---|
f4527b32 SL |
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 | } |