# include "stdio.h"
#ifdef __cplusplus
   extern "C" {
     extern int yyreject();
     extern int yywrap();
     extern int yylook();
     extern void main();
     extern int yyback(int *, int);
     extern int yyinput();
     extern void yyoutput(int);
     extern void yyunput(int);
     extern int yylex();
   }
#endif	/* __cplusplus */
# define U(x) x
# define NLSTATE yyprevious=YYNEWLINE
# define BEGIN yybgin = yysvec + 1 +
# define INITIAL 0
# define YYLERR yysvec
# define YYSTATE (yyestate-yysvec-1)
# define YYOPTIM 1
# define YYLMAX 200
# define output(c) putc(c,yyout)
# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
# define yymore() (yymorfg=1)
# define ECHO fprintf(yyout, "%s",yytext)
# define REJECT { nstr = yyreject(); goto yyfussy;}
int yyleng; extern unsigned char yytext[];
int yymorfg;
extern unsigned char *yysptr, yysbuf[];
int yytchar;
FILE *yyin = {stdin}, *yyout = {stdout};
extern int yylineno;
struct yysvf { 
	int yystoff;
	struct yysvf *yyother;
	int *yystops;};
struct yysvf *yyestate;
extern struct yysvf yysvec[], *yybgin;
#include <stdio.h>
#include <ctype.h>
#include "ick.h"
#include "y.tab.h"
#include "lose.h"

#ifdef MAIN
YYSTYPE	yylval;
#endif /* MAIN */

char *textlines[MAXLINES];
int politesse = 0;

static char linebuf[YYLMAX];
static char *lineptr = linebuf;

bool re_send_token = FALSE;

int lexer()
{
    static int tok = BADCHAR;

    if(re_send_token) {
	re_send_token = FALSE;
	return tok;
    }
    else {
	return (tok = yylex());
    }
}

int myatoi(text)
char *text;
{
#define MAXTEXT 100
    static char buf[MAXTEXT];
    register int i;

    for(buf[i = 0] = '\0';*text && i < MAXTEXT;text++) {
	if(isdigit(*text)) {
	    buf[i++] = *text;
	}
    }
    buf[i] = '\0';
    return atoi(buf);
}
	
/*
 * The spectacular ugliness of INTERCAL syntax requires that the lexical
 * analyzer have two levels. One, embedded in the getc() function, handles
 * logical-line continuation and the ! abbrev, and stashes each logical
 * line away in a buffer accessible to the code generator (this is necessary
 * for the * construct to be interpreted correctly). The upper level is
 * generated by lex(1) and does normal tokenizing.
 */

#undef getc
int getc(fp)
FILE	*fp;
{
    static bool bangflag = FALSE;
    static bool backflag = FALSE;

    if (bangflag)
    {
	bangflag = FALSE;
	/*	*lineptr++ = '!'; */
	return('.');
    }
    else if (backflag)	/* converting ctrl-H (backspace) to two chars "^H" */
    {
	backflag = FALSE;
	/*	*lineptr++ = '\010'; */
	return('H');
    }
    else
    {
	int c = fgetc(fp);

	if (feof(yyin))
	{
	    *lineptr = '\0';
	    return(EOF);
	}
#ifdef BACKSLASH_CONTINUATION
	else if (c == '\\')
	{
	    do {
		c = fgetc(fp);
	    } while
		(c != '\\' && isspace(c));
	}
#endif
	if (c == '!')
	{
	    *lineptr++ = '!';
	    bangflag = TRUE;
	    return(c = '\'');
	}
	else if (c == '\010')	/* convert ctrl-H (backspace) to
				   two chars "^" and "H" so lex can take it */
	{
	    *lineptr++ = '\010';
	    backflag = TRUE;
	    return(c = '^');
	}
	else if (c == '\n')
	{
	    extern char *strcpy(),*malloc();

	    *lineptr = '\0';
	    lineptr = linebuf;
	    textlines[yylineno] = strcpy(malloc(1+strlen(linebuf)),linebuf);
	    return('\n');
	}
	else
	{
	    if (islower(c))
		c = toupper(c);
	    return(*lineptr++ = c);
	}
    }
}

# define YYNEWLINE 10
yylex(){
int nstr; extern int yyprevious;
while((nstr = yylook()) >= 0)
yyfussy: switch(nstr){
case 0:
if(yywrap()) return(0); break;
case 1:
	{yylval.numval = myatoi(yytext); return(NUMBER);}
break;
case 2:
	{return(ONESPOT);}
break;
case 3:
	{return(TWOSPOT);}
break;
case 4:
	{return(TAIL);}
break;
case 5:
	{return(HYBRID);}
break;
case 6:
	{return(MESH);}
break;
case 7:
case 8:
	{return(MINGLE);}
break;
case 9:
	{return(SELECT);}
break;
case 10:
	{yylval.numval = AND; return(UNARY);}
break;
case 11:
	{yylval.numval = OR; return(UNARY);}
break;
case 12:
	case 13:
	{yylval.numval = XOR; return(UNARY);}
break;
case 14:
	{yylval.numval = FIN; return(UNARY);}
break;
case 15:
	{yylval.numval = WHIRL; return(UNARY);}
break;
case 16:
{yylval.numval = WHIRL + myatoi(yytext) - 1; return(UNARY);}
break;
case 17:
	{return(SPARK);}
break;
case 18:
	{return(EARS);}
break;
case 19:
{yylval.numval = myatoi(yytext); return(LABEL);}
break;
case 20:
	{return(DO);}
break;
case 21:
	{politesse++; return(DO);}
break;
case 22:
{politesse++; return(DO);}
break;
case 23:
{politesse++; return(DO);}
break;
case 24:
	{return(NOT);}
break;
case 25:
	{return(NOT);}
break;
case 26:
{yylval.numval = myatoi(yytext);
                 if (yylval.numval && yylval.numval < 100)
		   return(OHOHSEVEN);
		 else
		   lose(E017, yylineno, (char *)NULL);}
break;
case 27:
	{return(SUB);}
break;
case 28:
	{return(BY);}
break;
case 29:
	{return(GETS);}
break;
case 30:
{yylval.numval = GETS; return(GERUND);}
break;
case 31:
	{return(NEXT);}
break;
case 32:
	{yylval.numval = NEXT; return(GERUND);}
break;
case 33:
	{return(FORGET);}
break;
case 34:
{yylval.numval = FORGET; return(GERUND);}
break;
case 35:
	{return(RESUME);}
break;
case 36:
{yylval.numval = RESUME; return(GERUND);}
break;
case 37:
	{return(STASH);}
break;
case 38:
{yylval.numval = STASH; return(GERUND);}
break;
case 39:
{return(RETRIEVE);}
break;
case 40:
{yylval.numval = RETRIEVE; return(GERUND);}
break;
case 41:
	{return(IGNORE);}
break;
case 42:
{yylval.numval = IGNORE; return(GERUND);}
break;
case 43:
{return(REMEMBER);}
break;
case 44:
{yylval.numval = REMEMBER; return(GERUND);}
break;
case 45:
{return(ABSTAIN);}
break;
case 46:
{yylval.numval = ABSTAIN; return(GERUND);}
break;
case 47:
{return(REINSTATE);}
break;
case 48:
{yylval.numval = REINSTATE; return(GERUND);}
break;
case 49:
	{return(INTERSECTION);}
break;
case 50:
{return(GIVE_UP);}
break;
case 51:
{return(READ_OUT);}
break;
case 52:
{return(WRITE_IN);}
break;
case 53:
{return(COME_FROM);}
break;
case 54:
{yylval.numval = COME_FROM; return(GERUND);}
break;
case 55:
    	;
break;
case 56:
	{yylval.numval = yytext[0]; return(BADCHAR);}
break;
case -1:
break;
default:
fprintf(yyout,"bad switch yylook %d",nstr);
} return(0); }
/* end of yylex */

#ifdef MAIN
int yyerror()
{
    (void) printf("lextest: lexer error.\n");
}

main()
{
	int	t;

	while ((t = yylex()) > 0)
	{
		(void) printf("%03d %09d\n", t, yylval.numval);
		yylval.numval = 0;
	}
}
#endif /* MAIN */

static int yywrap()
{
    return(EOF);
}

int yyvstop[] = {
0,

55,
0,

55,
0,

56,
0,

55,
56,
0,

55,
0,

18,
56,
0,

6,
56,
0,

8,
56,
0,

56,
0,

10,
56,
0,

17,
56,
0,

56,
0,

49,
56,
0,

4,
56,
0,

2,
56,
0,

1,
56,
0,

1,
56,
0,

3,
56,
0,

5,
56,
0,

56,
0,

13,
56,
0,

15,
56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

56,
0,

11,
56,
0,

56,
0,

14,
56,
0,

9,
56,
0,

26,
0,

1,
0,

1,
0,

16,
0,

29,
0,

28,
0,

20,
0,

19,
0,

25,
0,

24,
0,

27,
0,

7,
0,

31,
0,

12,
0,

37,
0,

33,
0,

50,
0,

41,
0,

21,
0,

35,
0,

32,
0,

51,
0,

52,
0,

53,
0,

22,
0,

42,
0,

23,
0,

43,
0,

36,
0,

39,
0,

38,
0,

47,
0,

46,
0,

54,
0,

34,
0,

40,
0,

45,
0,

30,
0,

48,
0,

44,
0,
0};
# define YYTYPE unsigned char
struct yywork { YYTYPE verify, advance; } yycrank[] = {
0,0,	0,0,	1,3,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	1,4,	1,5,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	4,5,	
4,5,	0,0,	0,0,	17,43,	
17,43,	0,0,	0,0,	39,39,	
39,39,	0,0,	41,41,	41,41,	
0,0,	0,0,	0,0,	1,6,	
1,7,	1,8,	1,9,	1,10,	
1,11,	1,12,	4,5,	0,0,	
1,13,	1,14,	17,43,	1,15,	
20,45,	1,16,	39,39,	1,17,	
68,91,	41,41,	85,104,	0,0,	
30,55,	0,0,	0,0,	1,18,	
1,19,	1,20,	41,64,	0,0,	
1,21,	1,22,	1,23,	1,24,	
1,25,	1,26,	23,46,	1,27,	
1,28,	29,54,	1,29,	28,53,	
32,59,	25,48,	17,44,	1,30,	
26,51,	1,31,	27,52,	1,32,	
1,33,	31,58,	30,56,	1,34,	
1,35,	35,63,	24,47,	25,49,	
33,60,	33,61,	46,65,	1,36,	
30,57,	34,62,	48,66,	2,6,	
2,7,	2,8,	2,9,	2,10,	
2,11,	2,12,	25,50,	49,67,	
2,13,	2,14,	50,68,	2,15,	
52,71,	53,72,	51,69,	51,69,	
43,43,	43,43,	54,73,	55,74,	
56,75,	9,38,	9,38,	2,18,	
2,19,	2,20,	57,76,	1,37,	
2,21,	2,22,	2,23,	2,24,	
2,25,	2,26,	58,77,	2,27,	
2,28,	51,69,	2,29,	43,43,	
60,83,	61,84,	62,85,	2,30,	
9,38,	2,31,	63,86,	2,32,	
2,33,	65,87,	66,88,	2,34,	
2,35,	12,40,	12,40,	70,92,	
71,93,	72,94,	73,95,	2,36,	
9,39,	9,39,	9,39,	9,39,	
9,39,	9,39,	9,39,	9,39,	
9,39,	9,39,	59,78,	43,44,	
75,96,	67,89,	77,97,	78,98,	
12,40,	67,90,	59,79,	16,42,	
16,42,	79,99,	59,80,	80,100,	
81,101,	51,70,	82,102,	83,103,	
59,81,	59,82,	86,105,	2,37,	
12,41,	12,41,	12,41,	12,41,	
12,41,	12,41,	12,41,	12,41,	
12,41,	12,41,	16,42,	87,106,	
88,107,	89,89,	89,89,	90,109,	
92,110,	93,111,	94,94,	94,94,	
95,113,	96,114,	97,115,	98,98,	
98,98,	99,117,	16,42,	16,42,	
16,42,	16,42,	16,42,	16,42,	
16,42,	16,42,	16,42,	16,42,	
89,89,	100,118,	101,119,	102,120,	
103,121,	94,94,	105,122,	106,123,	
107,124,	108,125,	98,98,	109,126,	
110,127,	111,128,	112,129,	113,130,	
114,132,	115,133,	116,134,	113,131,	
117,135,	118,136,	119,137,	120,139,	
121,140,	123,142,	119,138,	122,122,	
122,122,	124,143,	125,144,	126,126,	
126,126,	127,146,	128,147,	131,148,	
132,149,	134,152,	89,108,	133,150,	
133,150,	135,153,	136,154,	138,155,	
139,156,	140,157,	141,158,	142,159,	
142,159,	143,162,	122,122,	144,163,	
145,164,	146,165,	126,126,	147,166,	
148,167,	98,116,	94,112,	151,168,	
153,169,	154,170,	133,150,	155,171,	
156,172,	157,174,	159,159,	159,159,	
156,173,	160,175,	142,159,	161,176,	
162,177,	164,178,	166,179,	169,180,	
170,182,	173,183,	175,184,	169,181,	
176,185,	177,186,	178,187,	179,188,	
181,189,	182,190,	183,191,	184,192,	
186,193,	159,159,	189,194,	122,141,	
126,145,	190,195,	0,0,	0,0,	
0,0,	0,0,	133,151,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
142,160,	0,0,	0,0,	142,161,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	159,160,	
0,0};
struct yysvf yysvec[] = {
0,	0,	0,
-1,	0,		yyvstop+1,
-65,	yysvec+1,	yyvstop+3,
0,	0,		yyvstop+5,
10,	0,		yyvstop+7,
0,	yysvec+4,	yyvstop+10,
0,	0,		yyvstop+12,
0,	0,		yyvstop+15,
0,	0,		yyvstop+18,
112,	0,		yyvstop+21,
0,	0,		yyvstop+23,
0,	0,		yyvstop+26,
144,	0,		yyvstop+29,
0,	0,		yyvstop+31,
0,	0,		yyvstop+34,
0,	0,		yyvstop+37,
170,	0,		yyvstop+40,
14,	yysvec+16,	yyvstop+43,
0,	0,		yyvstop+46,
0,	0,		yyvstop+49,
3,	0,		yyvstop+52,
0,	0,		yyvstop+54,
0,	0,		yyvstop+57,
4,	0,		yyvstop+60,
1,	0,		yyvstop+62,
12,	0,		yyvstop+64,
1,	0,		yyvstop+66,
3,	0,		yyvstop+68,
2,	0,		yyvstop+70,
2,	0,		yyvstop+72,
17,	0,		yyvstop+74,
9,	0,		yyvstop+76,
7,	0,		yyvstop+78,
8,	0,		yyvstop+80,
3,	0,		yyvstop+82,
7,	0,		yyvstop+85,
0,	0,		yyvstop+87,
0,	0,		yyvstop+90,
0,	yysvec+9,	0,	
18,	yysvec+9,	yyvstop+93,
0,	yysvec+12,	0,	
21,	yysvec+12,	0,	
0,	yysvec+16,	yyvstop+95,
107,	yysvec+16,	yyvstop+97,
0,	0,		yyvstop+99,
0,	0,		yyvstop+101,
11,	0,		0,	
0,	0,		yyvstop+103,
22,	0,		0,	
30,	0,		0,	
38,	0,		0,	
105,	0,		yyvstop+105,
30,	0,		0,	
27,	0,		0,	
40,	0,		0,	
35,	0,		0,	
32,	0,		0,	
42,	0,		0,	
65,	0,		0,	
105,	0,		0,	
75,	0,		0,	
75,	0,		0,	
70,	0,		0,	
73,	0,		0,	
0,	0,		yyvstop+107,
65,	0,		0,	
83,	0,		0,	
104,	0,		0,	
5,	0,		0,	
0,	yysvec+51,	0,	
79,	0,		0,	
85,	0,		0,	
88,	0,		0,	
79,	0,		0,	
0,	0,		yyvstop+109,
88,	0,		0,	
0,	0,		yyvstop+111,
109,	0,		0,	
107,	0,		0,	
103,	0,		0,	
114,	0,		0,	
99,	0,		0,	
104,	0,		0,	
104,	0,		0,	
0,	0,		yyvstop+113,
9,	0,		0,	
106,	0,		0,	
138,	0,		0,	
119,	0,		0,	
196,	0,		0,	
129,	0,		0,	
0,	0,		yyvstop+115,
139,	0,		0,	
140,	0,		0,	
201,	0,		0,	
130,	0,		0,	
140,	0,		yyvstop+117,
131,	0,		0,	
206,	0,		0,	
134,	0,		0,	
152,	0,		0,	
153,	0,		0,	
158,	0,		0,	
160,	0,		0,	
0,	0,		yyvstop+119,
165,	0,		0,	
162,	0,		0,	
160,	0,		0,	
155,	0,		0,	
168,	0,		0,	
175,	0,		0,	
157,	0,		0,	
162,	0,		0,	
174,	0,		0,	
166,	0,		0,	
176,	0,		0,	
161,	0,		0,	
164,	0,		0,	
183,	0,		0,	
181,	0,		0,	
182,	0,		0,	
179,	0,		yyvstop+121,
246,	0,		0,	
175,	0,		0,	
192,	0,		0,	
179,	0,		0,	
250,	0,		0,	
178,	0,		0,	
178,	0,		yyvstop+123,
0,	0,		yyvstop+125,
0,	0,		yyvstop+127,
185,	0,		0,	
193,	0,		0,	
258,	0,		yyvstop+129,
181,	0,		0,	
204,	0,		0,	
201,	0,		0,	
0,	0,		yyvstop+131,
193,	0,		0,	
186,	0,		0,	
195,	0,		0,	
196,	0,		0,	
266,	0,		0,	
193,	0,		0,	
202,	0,		0,	
198,	0,		0,	
212,	0,		0,	
210,	0,		0,	
213,	0,		0,	
0,	0,		yyvstop+133,
0,	yysvec+133,	0,	
208,	0,		0,	
0,	0,		yyvstop+135,
204,	0,		0,	
207,	0,		0,	
220,	0,		0,	
223,	0,		0,	
222,	0,		0,	
0,	0,		yyvstop+137,
285,	0,		0,	
215,	0,		0,	
221,	0,		0,	
227,	0,		0,	
0,	0,		yyvstop+139,
222,	0,		0,	
0,	0,		yyvstop+141,
224,	0,		0,	
0,	0,		yyvstop+143,
0,	0,		yyvstop+145,
234,	0,		0,	
231,	0,		yyvstop+147,
0,	0,		yyvstop+149,
0,	0,		yyvstop+151,
227,	0,		0,	
0,	0,		yyvstop+153,
227,	0,		0,	
237,	0,		0,	
231,	0,		0,	
233,	0,		0,	
240,	0,		0,	
0,	0,		yyvstop+155,
234,	0,		0,	
235,	0,		0,	
243,	0,		0,	
238,	0,		0,	
0,	0,		yyvstop+157,
245,	0,		0,	
0,	0,		yyvstop+159,
0,	0,		yyvstop+161,
247,	0,		0,	
250,	0,		0,	
0,	0,		yyvstop+163,
0,	0,		yyvstop+165,
0,	0,		yyvstop+167,
0,	0,		yyvstop+169,
0,	0,		yyvstop+171,
0,	0,	0};
struct yywork *yytop = yycrank+355;
struct yysvf *yybgin = yysvec+1;
unsigned char yymatch[] = {
00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,011 ,012 ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
011 ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
'0' ,'0' ,'2' ,'2' ,'2' ,'2' ,'0' ,'0' ,
'0' ,'0' ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
0};
unsigned char yyextra[] = {
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0};
/* @(#) $Revision: 66.2 $      */
int yylineno =1;
# define YYU(x) x
# define NLSTATE yyprevious=YYNEWLINE
/* char yytext[YYLMAX];
 * ***** nls8 ***** */
unsigned char yytext[YYLMAX];
struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
/* char yysbuf[YYLMAX];
 * char *yysptr = yysbuf;
 * ***** nls8 ***** */
unsigned char yysbuf[YYLMAX];
unsigned char *yysptr = yysbuf;
int *yyfnd;
extern struct yysvf *yyestate;
int yyprevious = YYNEWLINE;
yylook(){
	register struct yysvf *yystate, **lsp;
	register struct yywork *yyt;
	struct yysvf *yyz;
	int yych, yyfirst;
	struct yywork *yyr;
# ifdef LEXDEBUG
	int debug;
# endif
/*	char *yylastch;
 * ***** nls8 ***** */
	unsigned char *yylastch;
	/* start off machines */
# ifdef LEXDEBUG
	debug = 0;
# endif
	yyfirst=1;
	if (!yymorfg)
		yylastch = yytext;
	else {
		yymorfg=0;
		yylastch = yytext+yyleng;
		}
	for(;;){
		lsp = yylstate;
		yyestate = yystate = yybgin;
		if (yyprevious==YYNEWLINE) yystate++;
		for (;;){
# ifdef LEXDEBUG
			if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
# endif
			yyt = &yycrank[yystate->yystoff];
			if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
				yyz = yystate->yyother;
				if(yyz == 0)break;
				if(yyz->yystoff == 0)break;
				}
			*yylastch++ = yych = input();
			yyfirst=0;
		tryagain:
# ifdef LEXDEBUG
			if(debug){
				fprintf(yyout,"char ");
				allprint(yych);
				putchar('\n');
				}
# endif
			yyr = yyt;
			if ( (int)yyt > (int)yycrank){
				yyt = yyr + yych;
				if (yyt <= yytop && yyt->verify+yysvec == yystate){
					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
						{unput(*--yylastch);break;}
					*lsp++ = yystate = yyt->advance+yysvec;
					goto contin;
					}
				}
# ifdef YYOPTIM
			else if((int)yyt < (int)yycrank) {		/* r < yycrank */
				yyt = yyr = yycrank+(yycrank-yyt);
# ifdef LEXDEBUG
				if(debug)fprintf(yyout,"compressed state\n");
# endif
				yyt = yyt + yych;
				if(yyt <= yytop && yyt->verify+yysvec == yystate){
					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
						{unput(*--yylastch);break;}
					*lsp++ = yystate = yyt->advance+yysvec;
					goto contin;
					}
				yyt = yyr + YYU(yymatch[yych]);
# ifdef LEXDEBUG
				if(debug){
					fprintf(yyout,"try fall back character ");
					allprint(YYU(yymatch[yych]));
					putchar('\n');
					}
# endif
				if(yyt <= yytop && yyt->verify+yysvec == yystate){
					if(yyt->advance+yysvec == YYLERR)	/* error transition */
						{unput(*--yylastch);break;}
					*lsp++ = yystate = yyt->advance+yysvec;
					goto contin;
					}
				}
			if ((yystate = yystate->yyother) && (yyt = &yycrank[yystate->yystoff]) != yycrank){
# ifdef LEXDEBUG
				if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
# endif
				goto tryagain;
				}
# endif
			else
				{unput(*--yylastch);break;}
		contin:
# ifdef LEXDEBUG
			if(debug){
				fprintf(yyout,"state %d char ",yystate-yysvec-1);
				allprint(yych);
				putchar('\n');
				}
# endif
			;
			}
# ifdef LEXDEBUG
		if(debug){
			fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
			allprint(yych);
			putchar('\n');
			}
# endif
		while (lsp-- > yylstate){
			*yylastch-- = 0;
			if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
				yyolsp = lsp;
				if(yyextra[*yyfnd]){		/* must backup */
					while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
						lsp--;
						unput(*yylastch--);
						}
					}
				yyprevious = YYU(*yylastch);
				yylsp = lsp;
				yyleng = yylastch-yytext+1;
				yytext[yyleng] = 0;
# ifdef LEXDEBUG
				if(debug){
					fprintf(yyout,"\nmatch ");
					sprint(yytext);
					fprintf(yyout," action %d\n",*yyfnd);
					}
# endif
				return(*yyfnd++);
				}
			unput(*yylastch);
			}
		if (yytext[0] == 0  /* && feof(yyin) */)
			{
			yysptr=yysbuf;
			return(0);
			}
		yyprevious = yytext[0] = input();
		if (yyprevious>0)
			output(yyprevious);
		yylastch=yytext;
# ifdef LEXDEBUG
		if(debug)putchar('\n');
# endif
		}
	}

# ifdef __cplusplus
yyback(int *p, int m)
# else
yyback(p, m)
	int *p;
# endif
{
if (p==0) return(0);
while (*p)
	{
	if (*p++ == m)
		return(1);
	}
return(0);
}
	/* the following are only used in the lex library */
yyinput(){
	return(input());
	
	}

#ifdef __cplusplus
void yyoutput(int c)
#else
yyoutput(c)
  int c;
# endif
{
	output(c);
}

#ifdef __cplusplus
void yyunput(int c)
#else
yyunput(c)
   int c;
#endif
{
	unput(c);
}
