/* Generated by re2c */
#line 1 "config/config9.re"
// re2c $INPUT -o $OUTPUT -b
#include <cstring>
#include <iostream>

struct Scanner
{
	Scanner(char *txt)
		: cur(txt), lim(txt + strlen(txt))
	{
	}
	
	char    *cur;
	char    *lim;
	char	*ptr;
	char	*ctx;
	char    *tok;
};

enum What
{
	UNEXPECTED,
	KEYWORD,
	NUMBER,
	EOI
};

char * tokens[] = { "UNEXPECTED", "KEYWORD", "NUMBER", "EOI" };

void fill(int)
{
}

int scan(Scanner &s)
{
	char *cursor = s.cur;

	if(cursor == s.lim)
		return EOI;
	
std:
	s.tok = cursor;


#line 47 "config/config9.c"
{
	unsigned char curr;
	static const unsigned char yybm[256] = {
		  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,
		128, 128, 128, 128, 128, 128, 128, 128,
		128, 128,   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,   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,   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,   0,   0,   0
	};
	if ((s.lim - s.cur) < 3) fill(3);
	curr = (unsigned char)*s.cur;
	if (yybm[0+curr] & 128) goto xx4;
	if (curr <= 0x1F) {
		if (curr <= 0x08) goto xx1;
		if (curr <= '\n') goto xx3;
	} else {
		if (curr <= ' ') goto xx3;
		if (curr <= '`') goto xx1;
		if (curr <= 'b') goto xx5;
	}
xx1:
	++s.cur;
xx2:
#line 69 "config/config9.re"
	{
		return UNEXPECTED;
	}
#line 102 "config/config9.c"
xx3:
	++s.cur;
#line 62 "config/config9.re"
	{
		if(s.cur == s.lim)
			return EOI;
		cursor = s.cur;
		goto std;
	}
#line 112 "config/config9.c"
xx4:
	++s.cur;
	if (s.lim <= s.cur) fill(1);
	curr = (unsigned char)*s.cur;
	if (yybm[0+curr] & 128) goto xx4;
#line 59 "config/config9.re"
	{ return NUMBER;  }
#line 120 "config/config9.c"
xx5:
	curr = (unsigned char)*++s.cur;
	if (curr <= '/') goto xx2;
	if (curr == '1') {
		s.ctx = s.cur;
		goto xx8;
	}
	if (curr >= ':') goto xx2;
	s.ctx = s.cur;
xx6:
	++s.cur;
	if (s.lim <= s.cur) fill(1);
	curr = (unsigned char)*s.cur;
	if (curr <= '/') goto xx7;
	if (curr <= '9') goto xx6;
xx7:
	s.cur = s.ctx;
#line 58 "config/config9.re"
	{ return KEYWORD; }
#line 140 "config/config9.c"
xx8:
	curr = (unsigned char)*++s.cur;
	if (curr <= '/') goto xx9;
	if (curr <= '9') goto xx6;
xx9:
	s.cur -= 1;
#line 57 "config/config9.re"
	{ return KEYWORD; }
#line 149 "config/config9.c"
}
#line 72 "config/config9.re"

}

int main(int,char**)
{
	Scanner s("a77 a1 b8 b1");
	
	int t, n = 0;
	while ((t = scan(s)) != EOI)
	{
		std::cout << (++n) << ": " << tokens[t] << " = \""; std::cout.write(s.tok, s.cur-s.tok); std::cout << "\"" << std::endl;
	}
}
