Tizen 2.0 Release
[external/ragel.git] / test / element2.rl
1 /*
2  * @LANG: c
3  */
4
5 #include <stdio.h>
6
7 struct LangEl
8 {
9         int key;
10         char *name;
11 };
12
13 struct fsm
14 {
15         int cs;
16 };
17
18 %%{
19         machine fsm;
20         alphtype int;
21         getkey fpc->key;
22         variable cs fsm->cs;
23
24         action a1 {}
25         action a2 {}
26         action a3 {}
27
28         main := ( 1 2* 3  ) 
29                         ${printf("%s\n", fpc->name);} 
30                         %/{printf("accept\n");};
31 }%%
32
33 %% write data;
34
35 void fsm_init( struct fsm *fsm )
36 {
37         %% write init;
38 }
39
40 void fsm_execute( struct fsm *fsm,  struct LangEl *_data, int _len )
41 {
42         struct LangEl *p = _data;
43         struct LangEl *pe = _data+_len;
44         struct LangEl *eof = pe;
45
46         %% write exec;
47 }
48
49 int fsm_finish( struct fsm *fsm )
50 {
51         if ( fsm->cs == fsm_error )
52                 return -1;
53         if ( fsm->cs >= fsm_first_final )
54                 return 1;
55         return 0;
56 }
57
58 int main()
59 {
60         static struct fsm fsm;
61         static struct LangEl lel[] = { 
62                 {1, "one"}, 
63                 {2, "two-a"}, 
64                 {2, "two-b"}, 
65                 {2, "two-c"}, 
66                 {3, "three"}
67         };
68
69         fsm_init( &fsm );
70         fsm_execute( &fsm, lel, 5 );
71         fsm_finish( &fsm );
72
73         return 0;
74 }
75
76 #ifdef _____OUTPUT_____
77 one
78 two-a
79 two-b
80 two-c
81 three
82 accept
83 #endif