diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2019-05-13 21:25:22 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2019-06-19 18:17:25 +0900 |
commit | 1a2546c2be839baa7d0a50dc056d4d6987d26852 (patch) | |
tree | 19fef5d8b8d96452a51ab68e8093ea895192ca27 /test/racc/assets/opt.y | |
parent | cbe06cd3501fdadd0e6e63094da2973484d70b0b (diff) |
Backport racc-1.4.15 from upstream.
Diffstat (limited to 'test/racc/assets/opt.y')
-rw-r--r-- | test/racc/assets/opt.y | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/test/racc/assets/opt.y b/test/racc/assets/opt.y new file mode 100644 index 0000000000..a011953a51 --- /dev/null +++ b/test/racc/assets/opt.y @@ -0,0 +1,123 @@ +# +# check options working +# + +class Calcp + + prechigh + left '*' '/' + left '+' '-' + preclow + + convert + NUMBER 'Number' + end + + options no_omit_action_call no_result_var + +rule + + target : exp | /* none */ { 0 } ; + + exp : exp '+' exp { chk(val[0] + val[2]) } + | exp '-' exp { chk(val[0] - val[2]) } + | exp '*' exp { chk(val[0] * val[2]) } + | exp '/' exp { chk(val[0] / val[2]) } + | '(' { $emb = true } exp ')' + { + raise 'must not happen' unless $emb + val[2] + } + | '-' NUMBER { -val[1] } + | NUMBER + ; + +end + +----header + +class Number; end + +----inner + + def parse( src ) + @src = src + do_parse + end + + def next_token + @src.shift + end + + def initialize + @yydebug = true + end + + def chk( i ) + # p i + i + end + +----footer + +$parser = Calcp.new +$test_number = 1 + +def chk( src, ans ) + result = $parser.parse(src) + raise "test #{$test_number} failed" unless result == ans + $test_number += 1 +end + +chk( + [ [Number, 9], + [false, false], + [false, false] ], 9 +) + +chk( + [ [Number, 5], + ['*', nil], + [Number, 1], + ['-', nil], + [Number, 1], + ['*', nil], + [Number, 8], + [false, false], + [false, false] ], -3 +) + +chk( + [ [Number, 5], + ['+', nil], + [Number, 2], + ['-', nil], + [Number, 5], + ['+', nil], + [Number, 2], + ['-', nil], + [Number, 5], + [false, false], + [false, false] ], -1 +) + +chk( + [ ['-', nil], + [Number, 4], + [false, false], + [false, false] ], -4 +) + +chk( + [ [Number, 7], + ['*', nil], + ['(', nil], + [Number, 4], + ['+', nil], + [Number, 3], + [')', nil], + ['-', nil], + [Number, 9], + [false, false], + [false, false] ], 40 +) |