1 /* Generated by re2c */
2 #line 1 "ctx_b.re"
3 // re2c $INPUT -o $OUTPUT -b
4 #include <cstring>
5 #include <iostream>
6 
7 struct Scanner
8 {
ScannerScanner9 	Scanner(char *txt)
10 		: cur(txt), lim(txt + strlen(txt))
11 	{
12 	}
13 
14 	char    *cur;
15 	char    *lim;
16 	char	*ptr;
17 	char	*ctx;
18 	char    *tok;
19 };
20 
21 #define	YYCTYPE		char
22 #define	YYCURSOR	s.cur
23 #define	YYLIMIT		s.lim
24 #define	YYMARKER	s.ptr
25 #define	YYCTXMARKER	s.ctx
26 #define	YYFILL(n)
27 
28 enum What
29 {
30 	UNEXPECTED,
31 	KEYWORD,
32 	NUMBER,
33 	EOI
34 };
35 
36 char * tokens[] = { "UNEXPECTED", "KEYWORD", "NUMBER", "EOI" };
37 
38 
scan(Scanner & s)39 int scan(Scanner &s)
40 {
41 	YYCTYPE *cursor = s.cur;
42 
43 	if(cursor == s.lim)
44 		return EOI;
45 
46 std:
47 	s.tok = cursor;
48 
49 
50 #line 51 "ctx_b.c"
51 {
52 	YYCTYPE yych;
53 	static const unsigned char yybm[] = {
54 		  0,   0,   0,   0,   0,   0,   0,   0,
55 		  0,   0,   0,   0,   0,   0,   0,   0,
56 		  0,   0,   0,   0,   0,   0,   0,   0,
57 		  0,   0,   0,   0,   0,   0,   0,   0,
58 		  0,   0,   0,   0,   0,   0,   0,   0,
59 		  0,   0,   0,   0,   0,   0,   0,   0,
60 		128, 128, 128, 128, 128, 128, 128, 128,
61 		128, 128,   0,   0,   0,   0,   0,   0,
62 		  0,   0,   0,   0,   0,   0,   0,   0,
63 		  0,   0,   0,   0,   0,   0,   0,   0,
64 		  0,   0,   0,   0,   0,   0,   0,   0,
65 		  0,   0,   0,   0,   0,   0,   0,   0,
66 		  0,   0,   0,   0,   0,   0,   0,   0,
67 		  0,   0,   0,   0,   0,   0,   0,   0,
68 		  0,   0,   0,   0,   0,   0,   0,   0,
69 		  0,   0,   0,   0,   0,   0,   0,   0,
70 		  0,   0,   0,   0,   0,   0,   0,   0,
71 		  0,   0,   0,   0,   0,   0,   0,   0,
72 		  0,   0,   0,   0,   0,   0,   0,   0,
73 		  0,   0,   0,   0,   0,   0,   0,   0,
74 		  0,   0,   0,   0,   0,   0,   0,   0,
75 		  0,   0,   0,   0,   0,   0,   0,   0,
76 		  0,   0,   0,   0,   0,   0,   0,   0,
77 		  0,   0,   0,   0,   0,   0,   0,   0,
78 		  0,   0,   0,   0,   0,   0,   0,   0,
79 		  0,   0,   0,   0,   0,   0,   0,   0,
80 		  0,   0,   0,   0,   0,   0,   0,   0,
81 		  0,   0,   0,   0,   0,   0,   0,   0,
82 		  0,   0,   0,   0,   0,   0,   0,   0,
83 		  0,   0,   0,   0,   0,   0,   0,   0,
84 		  0,   0,   0,   0,   0,   0,   0,   0,
85 		  0,   0,   0,   0,   0,   0,   0,   0,
86 	};
87 	if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
88 	yych = *YYCURSOR;
89 	if (yybm[0+yych] & 128) {
90 		goto yy6;
91 	}
92 	if (yych <= 0x1F) {
93 		if (yych <= 0x08) goto yy2;
94 		if (yych <= '\n') goto yy4;
95 	} else {
96 		if (yych <= ' ') goto yy4;
97 		if (yych <= '`') goto yy2;
98 		if (yych <= 'b') goto yy9;
99 	}
100 yy2:
101 	++YYCURSOR;
102 yy3:
103 #line 61 "ctx_b.re"
104 	{
105 		return UNEXPECTED;
106 	}
107 #line 108 "ctx_b.c"
108 yy4:
109 	++YYCURSOR;
110 #line 54 "ctx_b.re"
111 	{
112 		if(s.cur == s.lim)
113 			return EOI;
114 		cursor = s.cur;
115 		goto std;
116 	}
117 #line 118 "ctx_b.c"
118 yy6:
119 	++YYCURSOR;
120 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
121 	yych = *YYCURSOR;
122 	if (yybm[0+yych] & 128) {
123 		goto yy6;
124 	}
125 #line 51 "ctx_b.re"
126 	{ return NUMBER;  }
127 #line 128 "ctx_b.c"
128 yy9:
129 	yych = *++YYCURSOR;
130 	if (yych <= '/') goto yy3;
131 	if (yych == '1') {
132 		YYCTXMARKER = YYCURSOR;
133 		goto yy13;
134 	}
135 	if (yych >= ':') goto yy3;
136 	YYCTXMARKER = YYCURSOR;
137 yy10:
138 	++YYCURSOR;
139 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
140 	yych = *YYCURSOR;
141 	if (yych <= '/') goto yy12;
142 	if (yych <= '9') goto yy10;
143 yy12:
144 	YYCURSOR = YYCTXMARKER;
145 #line 50 "ctx_b.re"
146 	{ return KEYWORD; }
147 #line 148 "ctx_b.c"
148 yy13:
149 	yych = *++YYCURSOR;
150 	if (yych <= '/') goto yy14;
151 	if (yych <= '9') goto yy10;
152 yy14:
153 	YYCURSOR -= 1;
154 #line 49 "ctx_b.re"
155 	{ return KEYWORD; }
156 #line 157 "ctx_b.c"
157 }
158 #line 64 "ctx_b.re"
159 
160 }
161 
162 #line 163 "ctx_b.c"
163 #define YYMAXFILL 3
164 #line 67 "ctx_b.re"
165 
166 
main(int,char **)167 int main(int,char**)
168 {
169 	Scanner s("a77 a1 b8 b1");
170 
171 	int t, n = 0;
172 	while ((t = scan(s)) != EOI)
173 	{
174 		std::cout << (++n) << ": " << tokens[t] << " = \""; std::cout.write(s.tok, s.cur-s.tok); std::cout << "\"" << std::endl;
175 	}
176 }
177