Initialize Tizen 2.3
[external/ragel.git] / test / fnext1.rl
1 /*
2  * @LANG: c
3  *
4  * Tests fnext in combination with fbreak.
5  */
6
7 #include <string.h>
8 #include <stdio.h>
9
10 char comm;
11 int top;
12 int stack [32];
13
14 %%{
15     machine fnext;
16         action break {fbreak;}
17
18         main := 'h'   @{ /*h*/  fnext e; fbreak; };
19         e    := 'e'   @{ /*e*/  fnext l; }   @{ fbreak; };
20         l    := 'll'  @{ /*ll*/ fnext o; }   ${ fbreak; };
21         o    := |* 'o' { /*o*/  fnext nl; fbreak; }; *|;
22         nl   := '\n'  @{ /*nl*/ fbreak; printf("ACCEPT\n"); };
23 }%%
24
25 int cs;
26 char *ts, *te;
27 int act;
28
29 %% write data;
30
31 void init()
32 {
33         %% write init;
34 }
35
36 void exec( char *data, int len )
37 {
38         char *p = data;
39         char *pe = data + len;
40
41         while ( cs != fnext_error && p < pe ) {
42                 printf( "%c\n", *p );
43                 %% write exec;
44         }
45 }
46
47 void finish( )
48 {
49         if ( cs >= fnext_first_final )
50                 printf( "ACCEPT\n" );
51         else
52                 printf( "FAIL\n" );
53 }
54
55 char *inp[] = {
56         "hello\n"
57 };
58
59 int inplen = 1;
60
61 int main( )
62 {
63         int i;
64         for ( i = 0; i < inplen; i++ ) {
65                 init();
66                 exec( inp[i], strlen(inp[i]) );
67                 finish();
68         }
69         return 0;
70 }
71
72 #ifdef _____OUTPUT_____
73 h
74 e
75 l
76 l
77 o
78
79
80 ACCEPT
81 #endif