From f3351be8f8e0dc728f486d1189dede8ad1fa2ca4 Mon Sep 17 00:00:00 2001 From: thurston Date: Tue, 15 Apr 2008 18:23:23 +0000 Subject: [PATCH] Test fnext in combination with fbreak. git-svn-id: http://svn.complang.org/ragel/trunk@433 052ea7fc-9027-0410-9066-f65837a77df0 --- test/fnext1.rl | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 test/fnext1.rl diff --git a/test/fnext1.rl b/test/fnext1.rl new file mode 100644 index 0000000..a2925eb --- /dev/null +++ b/test/fnext1.rl @@ -0,0 +1,81 @@ +/* + * @LANG: c + * + * Tests fnext in combination with fbreak. + */ + +#include +#include + +char comm; +int top; +int stack [32]; + +%%{ + machine fnext; + action break {fbreak;} + + main := 'h' @{ /*h*/ fnext e; fbreak; }; + e := 'e' @{ /*e*/ fnext l; } @{ fbreak; }; + l := 'll' @{ /*ll*/ fnext o; } ${ fbreak; }; + o := |* 'o' { /*o*/ fnext nl; fbreak; }; *|; + nl := '\n' @{ /*nl*/ fbreak; printf("ACCEPT\n"); }; +}%% + +int cs; +char *ts, *te; +int act; + +%% write data; + +void init() +{ + %% write init; +} + +void exec( char *data, int len ) +{ + char *p = data; + char *pe = data + len; + + while ( cs != fnext_error && p < pe ) { + printf( "%c\n", *p ); + %% write exec; + } +} + +void finish( ) +{ + if ( cs >= fnext_first_final ) + printf( "ACCEPT\n" ); + else + printf( "FAIL\n" ); +} + +char *inp[] = { + "hello\n" +}; + +int inplen = 1; + +int main( ) +{ + int i; + for ( i = 0; i < inplen; i++ ) { + init(); + exec( inp[i], strlen(inp[i]) ); + finish(); + } + return 0; +} + +#ifdef _____OUTPUT_____ +h +e +l +l +o + + +ACCEPT +#endif -- 2.7.4