summaryrefslogtreecommitdiff
path: root/test/racc/assets/opt.y
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2019-05-13 21:25:22 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-06-19 18:17:25 +0900
commit1a2546c2be839baa7d0a50dc056d4d6987d26852 (patch)
tree19fef5d8b8d96452a51ab68e8093ea895192ca27 /test/racc/assets/opt.y
parentcbe06cd3501fdadd0e6e63094da2973484d70b0b (diff)
Backport racc-1.4.15 from upstream.
Diffstat (limited to 'test/racc/assets/opt.y')
-rw-r--r--test/racc/assets/opt.y123
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
+)