USG_PG3/usr/source/lexgen2/purge.c

# include "../lexgen1/ldefs.c"
purge()
{
int i,c, k, pass, change, *p;
for(i=0; i<=nstate; i++)
	used[i]= 0;
for(i=1; i<nstart; i++)
	used[i]=1;
pass = 1;
do{
change = 0;
for(i=1; i<=nstate; i++)
	if (used[i] == pass)
	{
	for(c=0; c<NCH; c++)
		if (p=move(i,c,1,0))
			{
			k = *++p;
			if (used[k]==0)
				used[k]=change=pass+1;
			}
	if (other[i] != 0)
		if (used[other[i]] == 0)
			used[other[i]] = change=pass+1;
	}
pass++;
} while (change);
for(i=k=1; i<=nstate; i++)
	if(used[i]) used[i] = k++;
stnum = k;
return(k);
}