A fix to the documentation makefile from John D. Mitchell.
[ragel.git] / test / minimize1.rl
blobc550ebb73a6ba8e87694d263e371a23c3ec8f5c1
1 /*
2  * @LANG: c
3  */
5 #include <stdio.h>
6 #include <string.h>
8 struct min
10         int cs;
13 %%{
14         machine min;
15         variable cs fsm->cs;
17         action a_or_b { printf("a or b\n"); }
19         main := (
20                 ( 'a' . [ab]* @a_or_b ) |
21                 ( 'b' . [ab]* @a_or_b ) 
22         ) . '\n';
23 }%%
25 %% write data;
27 void min_init( struct min *fsm )
29         %% write init;
32 void min_execute( struct min *fsm, const char *_data, int _len )
34         const char *p = _data;
35         const char *pe = _data+_len;
37         %% write exec;
40 int min_finish( struct min *fsm )
42         if ( fsm->cs == min_error )
43                 return -1;
44         if ( fsm->cs >= min_first_final )
45                 return 1;
46         return 0;
49 struct min fsm;
51 void test( char *buf )
53         int len = strlen( buf );
54         min_init( &fsm );
55         min_execute( &fsm, buf, len );
56         if ( min_finish( &fsm ) > 0 )
57                 printf("ACCEPT\n");
58         else
59                 printf("FAIL\n");
63 int main()
65         test( "aaaaaa\n" );
66         test( "a\n" );
67         test( "abc\n" );
68         return 0;
71 #ifdef _____OUTPUT_____
72 a or b
73 a or b
74 a or b
75 a or b
76 a or b
77 ACCEPT
78 ACCEPT
79 a or b
80 FAIL
81 #endif