diff options
Diffstat (limited to 'test/cond2.rl')
-rw-r--r-- | test/cond2.rl | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/test/cond2.rl b/test/cond2.rl new file mode 100644 index 0000000..7593a3f --- /dev/null +++ b/test/cond2.rl @@ -0,0 +1,91 @@ +/* + * @LANG: c++ + */ + +#include <iostream> +#include <string.h> +using std::cout; +using std::endl; + +%%{ + machine foo; + + action c1 {i} + action c2 {j} + + action one { cout << " one" << endl;} + action two { cout << " two" << endl;} + + main := ( + [a-z] | + ('\n' when c1 @one) + )* + ('\n' when c2 @two); +}%% + +%% write data noerror; + +void test( int i, int j, char *str ) +{ + int cs = foo_start; + char *p = str; + char *pe = str + strlen( str ); + + cout << "run:" << endl; + %% write exec; + if ( cs >= foo_first_final ) + cout << " success" << endl; + else + cout << " failure" << endl; + cout << endl; +} + +int main() +{ + test( 0, 0, "hi\n\n" ); + test( 1, 0, "hi\n\n" ); + test( 0, 1, "hi\n" ); + test( 0, 1, "hi\n\n" ); + test( 1, 1, "hi\n" ); + test( 1, 1, "hi\n\n" ); + test( 1, 1, "hi\n\nx" ); + return 0; +} + +#ifdef _____OUTPUT_____ +run: + failure + +run: + one + one + failure + +run: + two + success + +run: + two + failure + +run: + one + two + success + +run: + one + two + one + two + success + +run: + one + two + one + two + failure + +#endif |