USG_PG3/usr/source/lexcl/cform

struct %ssvf *yylstate [YYLMAX], **yylsp, **yyolsp;
int *yyfnd, yymorfg, yyleng;
char yytext[YYLMAX];
struct %ssvf *yybgin yysvec+1;
int yyprevious YYNEWLINE;
%slook ()
{
register struct %ssvf *state, **lsp;
register struct %swork *r;
int ch, n;
char *yylastch;
/* start off machines */
if (!yymorfg)
	yylastch = yytext;
else
	{
	yymorfg=0;
	yylastch = yytext+yyleng-1;
	}
loop:
lsp = yylstate;
state = yybgin;
if (yyprevious==YYNEWLINE) state++;
for (;;)
	{
	if ((r = state->%sstoff) == 0)
		if((state= state->%sother) ==0)
			break;
		else r = state->%sstoff;
	*yylastch++ = ch = input();
	tryagain:
	r =+ ch;
	if (r->verify == state)
		*lsp++ = state = r->advance;
	else
	if ((state = state->%sother) && (r= state->%sstoff))
		goto tryagain;
	else
		{
		unput(*--yylastch);
		break;
		}
	}
while (lsp-- > yylstate)
	{
	*yylastch-- = 0;
	if (*lsp != 0 && (yyfnd= (*lsp)->%sstops) && *yyfnd > 0)
		{
		yyolsp = lsp;
		if (yyextra[*yyfnd])
			{
			while (yyback((*lsp)->%sstops, -*yyfnd) != 1 && lsp>yylstate)
				{
				lsp--;
				unput(*yylastch--);
				}
			}
		yyprevious = *yylastch;
		yylsp = lsp;
		yyleng = yylastch-yytext+1;
		yytext[yyleng] = 0;
		return(*yyfnd++);
		}
	unput(*yylastch);
	}
if (yytext[0] == 0)
	return(0);
output(yyprevious = input());
yylastch=yytext;
goto loop;
}
yyback(p, m)
	int *p;
{
if (p==0) return(0);
while (*p)
	{
	if (*p++ == m)
		return(1);
	}
return(0);
}