Initialize Tizen 2.3
[external/ragel.git] / test / repetition.rl
1 /*
2  * @LANG: c++
3  */
4
5 /* Test repeptition operators. */
6
7 #include <iostream>
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <string.h>
11
12 using namespace std;
13
14 struct Rep
15 {
16         int cs;
17
18         int init( );
19         int execute( const char *data, int len );
20         int finish( );
21 };
22
23 %%{
24         machine Rep;
25
26         action begin { cout << "begin" << endl; }
27         action in { cout << "in" << endl; }
28         action end { cout << "end" << endl; }
29
30         a = 'a' >begin @in %end;
31         b = 'b' >begin @in %end;
32         c = 'c' >begin @in %end;
33         d = 'd' >begin @in %end;
34
35         main := 
36                 ( a {5} '\n' )* '-\n'
37                 ( b {,5} '\n' )* '-\n'
38                 ( c {5,} '\n' )* '-\n'
39                 ( d {2,5} '\n' )*;
40 }%%
41
42 %% write data;
43
44 int Rep::init( )
45 {
46         %% write init;
47         return 1;
48 }
49
50 int Rep::execute( const char *_data, int _len )
51 {
52         const char *p = _data;
53         const char *pe = _data+_len;
54
55         %% write exec;
56
57         if ( cs == Rep_error )
58                 return -1;
59         if ( cs >= Rep_first_final )
60                 return 1;
61         return 0;
62 }
63
64 int Rep::finish( )
65 {
66         if ( cs == Rep_error )
67                 return -1;
68         if ( cs >= Rep_first_final )
69                 return 1;
70         return 0;
71 }
72
73 void test( const char *buf )
74 {
75         Rep rep;
76         int len = strlen( buf );
77         rep.init();
78         rep.execute( buf, len );
79         if ( rep.finish() > 0 )
80                 printf("ACCEPT\n");
81         else
82                 printf("FAIL\n");
83 }
84
85 int main()
86 {
87         test(
88                 "aaaaa\n"
89                 "-\n"
90                 "\n"
91                 "b\n"
92                 "bb\n"
93                 "bbb\n"
94                 "bbbb\n"
95                 "bbbbb\n"
96                 "-\n"
97                 "ccccc\n"
98                 "ccccccc\n"
99                 "cccccccccc\n"
100                 "-\n"
101                 "dd\n"
102                 "ddd\n"
103                 "dddd\n"
104                 "ddddd\n"
105         );
106
107         test(
108                 "a\n"
109                 "-\n"
110                 "b\n"
111                 "-\n"
112                 "c\n"
113                 "-\n"
114                 "d\n"
115         );
116
117         return 0;
118 }
119
120 #ifdef _____OUTPUT_____
121 begin
122 in
123 end
124 begin
125 in
126 end
127 begin
128 in
129 end
130 begin
131 in
132 end
133 begin
134 in
135 end
136 begin
137 in
138 end
139 begin
140 in
141 end
142 begin
143 in
144 end
145 begin
146 in
147 end
148 begin
149 in
150 end
151 begin
152 in
153 end
154 begin
155 in
156 end
157 begin
158 in
159 end
160 begin
161 in
162 end
163 begin
164 in
165 end
166 begin
167 in
168 end
169 begin
170 in
171 end
172 begin
173 in
174 end
175 begin
176 in
177 end
178 begin
179 in
180 end
181 begin
182 in
183 end
184 begin
185 in
186 end
187 begin
188 in
189 end
190 begin
191 in
192 end
193 begin
194 in
195 end
196 begin
197 in
198 end
199 begin
200 in
201 end
202 begin
203 in
204 end
205 begin
206 in
207 end
208 begin
209 in
210 end
211 begin
212 in
213 end
214 begin
215 in
216 end
217 begin
218 in
219 end
220 begin
221 in
222 end
223 begin
224 in
225 end
226 begin
227 in
228 end
229 begin
230 in
231 end
232 begin
233 in
234 end
235 begin
236 in
237 end
238 begin
239 in
240 end
241 begin
242 in
243 end
244 begin
245 in
246 end
247 begin
248 in
249 end
250 begin
251 in
252 end
253 begin
254 in
255 end
256 begin
257 in
258 end
259 begin
260 in
261 end
262 begin
263 in
264 end
265 begin
266 in
267 end
268 begin
269 in
270 end
271 begin
272 in
273 end
274 begin
275 in
276 end
277 begin
278 in
279 end
280 begin
281 in
282 end
283 begin
284 in
285 end
286 begin
287 in
288 end
289 ACCEPT
290 begin
291 in
292 FAIL
293 #endif