xref: /illumos-gate/usr/src/cmd/sgs/lex/common/ncform (revision 8b80e8cb6855118d46f605e91b5ed4ce83417395)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22
23/*	Copyright (c) 1989 AT&T	*/
24/*	  All Rights Reserved  	*/
25
26#pragma ident	"%Z%%M%	%I%	%E% SMI"
27
28int yylineno =1;
29# define YYU(x) x
30# define NLSTATE yyprevious=YYNEWLINE
31struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
32char yysbuf[YYLMAX];
33char *yysptr = yysbuf;
34int *yyfnd;
35extern struct yysvf *yyestate;
36int yyprevious = YYNEWLINE;
37#if defined(__cplusplus) || defined(__STDC__)
38int yylook(void)
39#else
40yylook()
41#endif
42{
43	register struct yysvf *yystate, **lsp;
44	register struct yywork *yyt;
45	struct yysvf *yyz;
46	int yych, yyfirst;
47	struct yywork *yyr;
48# ifdef LEXDEBUG
49	int debug;
50# endif
51	char *yylastch;
52	/* start off machines */
53# ifdef LEXDEBUG
54	debug = 0;
55# endif
56	yyfirst=1;
57	if (!yymorfg)
58		yylastch = yytext;
59	else {
60		yymorfg=0;
61		yylastch = yytext+yyleng;
62		}
63	for(;;){
64		lsp = yylstate;
65		yyestate = yystate = yybgin;
66		if (yyprevious==YYNEWLINE) yystate++;
67		for (;;){
68# ifdef LEXDEBUG
69			if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
70# endif
71			yyt = yystate->yystoff;
72			if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
73				yyz = yystate->yyother;
74				if(yyz == 0)break;
75				if(yyz->yystoff == yycrank)break;
76				}
77#ifndef __cplusplus
78			*yylastch++ = yych = input();
79#else
80			*yylastch++ = yych = lex_input();
81#endif
82#ifdef YYISARRAY
83			if(yylastch > &yytext[YYLMAX]) {
84				fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
85				exit(1);
86			}
87#else
88			if (yylastch >= &yytext[ yytextsz ]) {
89				int	x = yylastch - yytext;
90
91				yytextsz += YYTEXTSZINC;
92				if (yytext == yy_tbuf) {
93				    yytext = (char *) malloc(yytextsz);
94				    memcpy(yytext, yy_tbuf, sizeof (yy_tbuf));
95				}
96				else
97				    yytext = (char *) realloc(yytext, yytextsz);
98				if (!yytext) {
99				    fprintf(yyout,
100					"Cannot realloc yytext\n");
101				    exit(1);
102				}
103				yylastch = yytext + x;
104			}
105#endif
106			yyfirst=0;
107		tryagain:
108# ifdef LEXDEBUG
109			if(debug){
110				fprintf(yyout,"char ");
111				allprint(yych);
112				putchar('\n');
113				}
114# endif
115			yyr = yyt;
116			if ( (uintptr_t)yyt > (uintptr_t)yycrank){
117				yyt = yyr + yych;
118				if (yyt <= yytop && yyt->verify+yysvec == yystate){
119					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
120						{unput(*--yylastch);break;}
121					*lsp++ = yystate = yyt->advance+yysvec;
122					if(lsp > &yylstate[YYLMAX]) {
123						fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
124						exit(1);
125					}
126					goto contin;
127					}
128				}
129# ifdef YYOPTIM
130			else if((uintptr_t)yyt < (uintptr_t)yycrank) {	/* r < yycrank */
131				yyt = yyr = yycrank+(yycrank-yyt);
132# ifdef LEXDEBUG
133				if(debug)fprintf(yyout,"compressed state\n");
134# endif
135				yyt = yyt + yych;
136				if(yyt <= yytop && yyt->verify+yysvec == yystate){
137					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
138						{unput(*--yylastch);break;}
139					*lsp++ = yystate = yyt->advance+yysvec;
140					if(lsp > &yylstate[YYLMAX]) {
141						fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
142						exit(1);
143					}
144					goto contin;
145					}
146				yyt = yyr + YYU(yymatch[yych]);
147# ifdef LEXDEBUG
148				if(debug){
149					fprintf(yyout,"try fall back character ");
150					allprint(YYU(yymatch[yych]));
151					putchar('\n');
152					}
153# endif
154				if(yyt <= yytop && yyt->verify+yysvec == yystate){
155					if(yyt->advance+yysvec == YYLERR)	/* error transition */
156						{unput(*--yylastch);break;}
157					*lsp++ = yystate = yyt->advance+yysvec;
158					if(lsp > &yylstate[YYLMAX]) {
159						fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
160						exit(1);
161					}
162					goto contin;
163					}
164				}
165			if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
166# ifdef LEXDEBUG
167				if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
168# endif
169				goto tryagain;
170				}
171# endif
172			else
173				{unput(*--yylastch);break;}
174		contin:
175# ifdef LEXDEBUG
176			if(debug){
177				fprintf(yyout,"state %d char ",yystate-yysvec-1);
178				allprint(yych);
179				putchar('\n');
180				}
181# endif
182			;
183			}
184# ifdef LEXDEBUG
185		if(debug){
186			fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
187			allprint(yych);
188			putchar('\n');
189			}
190# endif
191		while (lsp-- > yylstate){
192			*yylastch-- = 0;
193			if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
194				yyolsp = lsp;
195				if(yyextra[*yyfnd]){		/* must backup */
196					while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
197						lsp--;
198						unput(*yylastch--);
199						}
200					}
201				yyprevious = YYU(*yylastch);
202				yylsp = lsp;
203				yyleng = yylastch-yytext+1;
204				yytext[yyleng] = 0;
205# ifdef LEXDEBUG
206				if(debug){
207					fprintf(yyout,"\nmatch ");
208					sprint(yytext);
209					fprintf(yyout," action %d\n",*yyfnd);
210					}
211# endif
212				return(*yyfnd++);
213				}
214			unput(*yylastch);
215			}
216		if (yytext[0] == 0  /* && feof(yyin) */)
217			{
218			yysptr=yysbuf;
219			return(0);
220			}
221#ifndef __cplusplus
222		yyprevious = yytext[0] = input();
223		if (yyprevious>0)
224			output(yyprevious);
225#else
226		yyprevious = yytext[0] = lex_input();
227		if (yyprevious>0)
228			lex_output(yyprevious);
229#endif
230		yylastch=yytext;
231# ifdef LEXDEBUG
232		if(debug)putchar('\n');
233# endif
234		}
235	}
236#if defined(__cplusplus) || defined(__STDC__)
237int yyback(int *p, int m)
238#else
239yyback(p, m)
240	int *p;
241#endif
242{
243	if (p==0) return(0);
244	while (*p) {
245		if (*p++ == m)
246			return(1);
247	}
248	return(0);
249}
250	/* the following are only used in the lex library */
251#if defined(__cplusplus) || defined(__STDC__)
252int yyinput(void)
253#else
254yyinput()
255#endif
256{
257#ifndef __cplusplus
258	return(input());
259#else
260	return(lex_input());
261#endif
262	}
263#if defined(__cplusplus) || defined(__STDC__)
264void yyoutput(int c)
265#else
266yyoutput(c)
267  int c;
268#endif
269{
270#ifndef __cplusplus
271	output(c);
272#else
273	lex_output(c);
274#endif
275	}
276#if defined(__cplusplus) || defined(__STDC__)
277void yyunput(int c)
278#else
279yyunput(c)
280   int c;
281#endif
282{
283	unput(c);
284	}
285