diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2014-10-13 19:14:30 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2014-10-13 19:14:30 +0000 |
commit | eafd7a3974e8605fd02794269db6114a3446e016 (patch) | |
tree | 064737b35dbe10f2995753ead92f95bac30ba048 /test/forder3.rl | |
download | ragel-tarball-eafd7a3974e8605fd02794269db6114a3446e016.tar.gz |
ragel-6.9ragel-6.9
Diffstat (limited to 'test/forder3.rl')
-rw-r--r-- | test/forder3.rl | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/test/forder3.rl b/test/forder3.rl new file mode 100644 index 0000000..5cb3725 --- /dev/null +++ b/test/forder3.rl @@ -0,0 +1,107 @@ +/* + * @LANG: c + */ + +#include <stdio.h> +#include <string.h> + +struct forder +{ + int cs; +}; + +%%{ + machine forder; + variable cs fsm->cs; + + m1 = ( "" %{printf("enter m1 aa\n");} | + 'aa'* >{printf("enter m1 aa\n");} %{printf("leave m1 aa\n");} ) + 'b' @{printf("through m1 b\n");} . 'b'* . 'a'*; + + m2 = 'bbb'* 'aa'*; + + main := ( + m1 %{printf("accept m1\n");} | + "" %{printf("enter m2\n");} | + m2 >{printf("enter m2\n");} %{printf("accept m2\n");} + ) . '\n'; +}%% + +%% write data; + +void forder_init( struct forder *fsm ) +{ + %% write init; +} + +void forder_execute( struct forder *fsm, const char *_data, int _len ) +{ + const char *p = _data; + const char *pe = _data+_len; + + %% write exec; +} + +int forder_finish( struct forder *fsm ) +{ + if ( fsm->cs == forder_error ) + return -1; + if ( fsm->cs >= forder_first_final ) + return 1; + return 0; +} + +struct forder fsm; + +void test( char *buf ) +{ + int len = strlen( buf ); + forder_init( &fsm ); + forder_execute( &fsm, buf, len ); + if ( forder_finish( &fsm ) > 0 ) + printf("ACCEPT\n"); + else + printf("FAIL\n"); +} + +int main() +{ + test( "aaaaaabbbaa\n" ); + test( "\n" ); + test( "bbbbbbaaaaaaa\n" ); + test( "bbbbbbaaaaaa\n" ); + test( "aaaaa\n" ); + + return 0; +} + +#ifdef _____OUTPUT_____ +enter m1 aa +enter m2 +leave m1 aa +through m1 b +accept m1 +ACCEPT +enter m2 +enter m2 +accept m2 +ACCEPT +enter m1 aa +enter m1 aa +leave m1 aa +through m1 b +enter m2 +accept m1 +ACCEPT +enter m1 aa +enter m1 aa +leave m1 aa +through m1 b +enter m2 +accept m1 +accept m2 +ACCEPT +enter m1 aa +enter m2 +FAIL +#endif |