A fix to the documentation makefile from John D. Mitchell.
[ragel.git] / test / cond3.rl
blob80904b5da6971213656f3793195cfbd80676865e
1 /* 
2  * @LANG: c++
3  */
5 #include <iostream>
6 #include <string.h>
7 using std::cout;
8 using std::endl;
10 %%{
11         machine foo;
13         action hit_5 {c == 5}
14         action done { cout << "  done" << endl; }
15         action inc {c++;}
17         # The any* includes '\n' when hit_5 is true, so use guarded concatenation.
18         main := (any @inc)* :> '\n' when hit_5 @done;
19 }%%
21 %% write data noerror;
23 void test( const char *str )
25         int cs = foo_start;
26         int c = 0;
27         const char *p = str;
28         const char *pe = str + strlen( str );
30         cout << "run:" << endl;
31         %% write exec;
32         if ( cs >= foo_first_final )
33                 cout << "  success" << endl;
34         else
35                 cout << "  failure" << endl;
36         cout << endl;
39 int main()
41         test( "12345\n" );  // success
42         test( "\n2345\n" ); // success, first newline ignored
43         test( "1234\n" );   // failure, didn't get 5 chars before newline.
44         return 0;
47 #ifdef _____OUTPUT_____
48 run:
49   done
50   success
52 run:
53   done
54   success
56 run:
57   failure
59 #endif