The "curstate" argument to the variable statement has been changed to "cs".
[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("accpet 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         %% write eof;
48
49         if ( fsm->cs == forder_error )
50                 return -1;
51         if ( fsm->cs >= forder_first_final )
52                 return 1;
53         return 0;
54 }
55
56 struct forder fsm;
57
58 void test( char *buf )
59 {
60         int len = strlen( buf );
61         forder_init( &fsm );
62         forder_execute( &fsm, buf, len );
63         if ( forder_finish( &fsm ) > 0 )
64                 printf("ACCEPT\n");
65         else
66                 printf("FAIL\n");
67 }
68
69 int main()
70 {
71         test( "aaaaaabbbaa\n" );
72         test( "\n" );
73         test( "bbbbbbaaaaaaa\n" );
74         test( "bbbbbbaaaaaa\n" );
75         test( "aaaaa\n" );
76
77         return 0;
78 }
79
80 #ifdef _____OUTPUT_____
81 enter m1 aa
82 enter m2
83 leave m1 aa
84 through m1 b
85 accept m1
86 ACCEPT
87 enter m2
88 accpet m2
89 ACCEPT
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 leave m1 aa
98 through m1 b
99 enter m2
100 accept m1
101 accpet m2
102 ACCEPT
103 enter m1 aa
104 enter m2
105 FAIL
106 #endif