Removed arg passing from frontend to backend functions.
[ragel.git] / test / forder3.rl
blob5cb372548170329d19fc3375ebc8ad393de9b1e2
1 /*
2  * @LANG: c
3  */
5 #include <stdio.h>
6 #include <string.h>
8 struct forder
10         int cs;
13 %%{
14         machine forder;
15         variable cs fsm->cs;
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'*;
21         m2 = 'bbb'* 'aa'*;
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 }%%
30 %% write data;
32 void forder_init( struct forder *fsm )
34         %% write init;
37 void forder_execute( struct forder *fsm, const char *_data, int _len )
39         const char *p = _data;
40         const char *pe = _data+_len;
42         %% write exec;
45 int forder_finish( struct forder *fsm )
47         if ( fsm->cs == forder_error )
48                 return -1;
49         if ( fsm->cs >= forder_first_final )
50                 return 1;
51         return 0;
54 struct forder fsm;
56 void test( char *buf )
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");
67 int main()
69         test( "aaaaaabbbaa\n" );
70         test( "\n" );
71         test( "bbbbbbaaaaaaa\n" );
72         test( "bbbbbbaaaaaa\n" );
73         test( "aaaaa\n" );
75         return 0;
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