Import from my private repository. Snapshot after version 5.16, immediately
[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 curstate 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
45         %% write exec;
46 }
47
48 int fsm_finish( struct fsm *fsm )
49 {
50         %% write eof;
51
52         if ( fsm->cs == fsm_error )
53                 return -1;
54         if ( fsm->cs >= fsm_first_final )
55                 return 1;
56         return 0;
57 }
58
59 int main()
60 {
61         static struct fsm fsm;
62         static struct LangEl lel[] = { 
63                 {1, "one"}, 
64                 {2, "two-a"}, 
65                 {2, "two-b"}, 
66                 {2, "two-c"}, 
67                 {3, "three"}
68         };
69
70         fsm_init( &fsm );
71         fsm_execute( &fsm, lel, 5 );
72         fsm_finish( &fsm );
73
74         return 0;
75 }
76
77 #ifdef _____OUTPUT_____
78 one
79 two-a
80 two-b
81 two-c
82 three
83 accept
84 #endif