Initialize Tizen 2.3
[external/ragel.git] / test / forder3.rl
1 /*
2  * @LANG: c
3  */
4
5 #include <stdio.h>
6 #include <string.h>
7
8 struct forder
9 {
10         int cs;
11 };
12
13 %%{
14         machine forder;
15         variable cs fsm->cs;
16
17         m1 = ( "" %{printf("enter m1 aa\n");} |
18                         'aa'* >{printf("enter m1 aa\n");} %{printf("leave m1 aa\n");} )
19                 'b' @{printf("through m1 b\n");} . 'b'* . 'a'*;
20
21         m2 = 'bbb'* 'aa'*;
22
23         main := ( 
24                         m1 %{printf("accept m1\n");} |
25                         "" %{printf("enter m2\n");} |
26                         m2 >{printf("enter m2\n");} %{printf("accept m2\n");}
27                 ) . '\n';
28 }%%
29
30 %% write data;
31
32 void forder_init( struct forder *fsm )
33 {
34         %% write init;
35 }
36
37 void forder_execute( struct forder *fsm, const char *_data, int _len )
38 {
39         const char *p = _data;
40         const char *pe = _data+_len;
41
42         %% write exec;
43 }
44
45 int forder_finish( struct forder *fsm )
46 {
47         if ( fsm->cs == forder_error )
48                 return -1;
49         if ( fsm->cs >= forder_first_final )
50                 return 1;
51         return 0;
52 }
53
54 struct forder fsm;
55
56 void test( char *buf )
57 {
58         int len = strlen( buf );
59         forder_init( &fsm );
60         forder_execute( &fsm, buf, len );
61         if ( forder_finish( &fsm ) > 0 )
62                 printf("ACCEPT\n");
63         else
64                 printf("FAIL\n");
65 }
66
67 int main()
68 {
69         test( "aaaaaabbbaa\n" );
70         test( "\n" );
71         test( "bbbbbbaaaaaaa\n" );
72         test( "bbbbbbaaaaaa\n" );
73         test( "aaaaa\n" );
74
75         return 0;
76 }
77
78 #ifdef _____OUTPUT_____
79 enter m1 aa
80 enter m2
81 leave m1 aa
82 through m1 b
83 accept m1
84 ACCEPT
85 enter m2
86 enter m2
87 accept m2
88 ACCEPT
89 enter m1 aa
90 enter m1 aa
91 leave m1 aa
92 through m1 b
93 enter m2
94 accept m1
95 ACCEPT
96 enter m1 aa
97 enter m1 aa
98 leave m1 aa
99 through m1 b
100 enter m2
101 accept m1
102 accept m2
103 ACCEPT
104 enter m1 aa
105 enter m2
106 FAIL
107 #endif