Test fnext in combination with fbreak.
authorthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Tue, 15 Apr 2008 18:23:23 +0000 (18:23 +0000)
committerthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Tue, 15 Apr 2008 18:23:23 +0000 (18:23 +0000)
git-svn-id: http://svn.complang.org/ragel/trunk@433 052ea7fc-9027-0410-9066-f65837a77df0

test/fnext1.rl [new file with mode: 0644]

diff --git a/test/fnext1.rl b/test/fnext1.rl
new file mode 100644 (file)
index 0000000..a2925eb
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * @LANG: c
+ *
+ * Tests fnext in combination with fbreak.
+ */
+
+#include <string.h>
+#include <stdio.h>
+
+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