diff options
Diffstat (limited to 'test/trans.d/case/atoi2_ruby.rl')
-rw-r--r-- | test/trans.d/case/atoi2_ruby.rl | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/test/trans.d/case/atoi2_ruby.rl b/test/trans.d/case/atoi2_ruby.rl new file mode 100644 index 00000000..0d86d793 --- /dev/null +++ b/test/trans.d/case/atoi2_ruby.rl @@ -0,0 +1,93 @@ +# +# @LANG: ruby +# @GENERATED: true +# + + +%%{ + machine state_chart; + + action begin {neg = 0; +value = 0; +} + + action see_neg {neg = 1; +} + + action add_digit {value = value * 10 + ( fc - 48 ) +; +} + + action finish {if ( neg != 0 ) + value = -1 * value; + +end +} + + atoi = ( + start: ( + '-' @see_neg ->om_num | + '+' ->om_num | + [0-9] @add_digit ->more_nums + ), + + # One or more nums. + om_num: ( + [0-9] @add_digit ->more_nums + ), + + # Zero ore more nums. + more_nums: ( + [0-9] @add_digit ->more_nums | + '' -> final + ) + ) >begin %finish; + + action oneof {print( value ); +print( "\n" ); +} + main := ( atoi '\n' @oneof )*; +}%% + + + +%% write data; + +def run_machine( data ) + p = 0 + pe = data.length + eof = data.length + cs = 0; + _m = + _a = + buffer = Array.new + blen = 0 +neg = 1 +value = 1 +value = 0; +neg = 0; + %% write init; + %% write exec; + if cs >= state_chart_first_final + puts "ACCEPT" + else + puts "FAIL" + end +end + +inp = [ +"1\n", +"12\n", +"222222\n", +"+2123\n", +"213 3213\n", +"-12321\n", +"--123\n", +"-99\n", +" -3000\n", +] + +inplen = 9 + +inp.each { |str| run_machine(str) } + |