Some cleanup and fixes to the runtests script. The -P option will be changing.
[external/ragel.git] / test / element1.rl
1 /*
2  * @LANG: c++
3  */
4
5 #include <iostream>
6 using namespace std;
7
8 struct LangEl
9 {
10         int key;
11         char *name;
12 };
13
14 struct Fsm
15 {
16         int cs;
17
18         // Initialize the machine. Invokes any init statement blocks. Returns 0
19         // if the machine begins in a non-accepting state and 1 if the machine
20         // begins in an accepting state.
21         int init( );
22
23         // Execute the machine on a block of data. Returns -1 if after processing
24         // the data, the machine is in the error state and can never accept, 0 if
25         // the machine is in a non-accepting state and 1 if the machine is in an
26         // accepting state.
27         int execute(  LangEl *data, int len );
28
29         // Indicate that there is no more data. Returns -1 if the machine finishes
30         // in the error state and does not accept, 0 if the machine finishes
31         // in any other non-accepting state and 1 if the machine finishes in an
32         // accepting state.
33         int finish( );
34
35 };
36
37 %%{
38         machine Fsm;
39
40         alphtype int;
41         getkey fpc->key;
42
43         action a1 {}
44         action a2 {}
45         action a3 {}
46
47         main := ( 1 2* 3  ) 
48                         ${cout << fpc->name << endl;} 
49                         %/{cout << "accept" << endl;};
50 }%%
51
52 %% write data;
53
54 int Fsm::init( )
55 {
56         %% write init;
57         return 0;
58 }
59
60 int Fsm::execute( LangEl *_data, int _len )
61 {
62         LangEl *p = _data;
63         LangEl *pe = _data+_len;
64         %% write exec;
65
66         if ( cs == Fsm_error )
67                 return -1;
68         if ( cs >= Fsm_first_final )
69                 return 1;
70         return 0;
71 }
72
73 int Fsm::finish( )
74 {
75         %% write eof;
76
77         if ( cs == Fsm_error )
78                 return -1;
79         if ( cs >= Fsm_first_final )
80                 return 1;
81         return 0;
82 }
83
84 int main( )
85 {
86         static Fsm fsm;
87         static LangEl lel[] = { 
88                 {1, "one"}, 
89                 {2, "two-a"}, 
90                 {2, "two-b"}, 
91                 {2, "two-c"}, 
92                 {3, "three"}
93         };
94
95         fsm.init();
96         fsm.execute( lel, 5 );
97         fsm.finish();
98         return 0;
99 }
100
101 #ifdef _____OUTPUT_____
102 one
103 two-a
104 two-b
105 two-c
106 three
107 accept
108 #endif