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