aboutsummaryrefslogtreecommitdiff
path: root/contrib/byacc/test/yacc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/byacc/test/yacc')
-rw-r--r--contrib/byacc/test/yacc/big_b.error0
-rw-r--r--contrib/byacc/test/yacc/big_b.output20
-rw-r--r--contrib/byacc/test/yacc/big_l.error0
-rw-r--r--contrib/byacc/test/yacc/big_l.output20
-rw-r--r--contrib/byacc/test/yacc/calc.error0
-rw-r--r--contrib/byacc/test/yacc/calc.output461
-rw-r--r--contrib/byacc/test/yacc/calc.tab.c674
-rw-r--r--contrib/byacc/test/yacc/calc.tab.h3
-rw-r--r--contrib/byacc/test/yacc/calc1.error2
-rw-r--r--contrib/byacc/test/yacc/calc1.output877
-rw-r--r--contrib/byacc/test/yacc/calc1.tab.c914
-rw-r--r--contrib/byacc/test/yacc/calc1.tab.h18
-rw-r--r--contrib/byacc/test/yacc/calc2.error0
-rw-r--r--contrib/byacc/test/yacc/calc2.output461
-rw-r--r--contrib/byacc/test/yacc/calc2.tab.c687
-rw-r--r--contrib/byacc/test/yacc/calc2.tab.h3
-rw-r--r--contrib/byacc/test/yacc/calc3.error0
-rw-r--r--contrib/byacc/test/yacc/calc3.output461
-rw-r--r--contrib/byacc/test/yacc/calc3.tab.c692
-rw-r--r--contrib/byacc/test/yacc/calc3.tab.h3
-rw-r--r--contrib/byacc/test/yacc/code_calc.code.c579
-rw-r--r--contrib/byacc/test/yacc/code_calc.error0
-rw-r--r--contrib/byacc/test/yacc/code_calc.output461
-rw-r--r--contrib/byacc/test/yacc/code_calc.tab.c119
-rw-r--r--contrib/byacc/test/yacc/code_calc.tab.h3
-rw-r--r--contrib/byacc/test/yacc/code_error.code.c490
-rw-r--r--contrib/byacc/test/yacc/code_error.error0
-rw-r--r--contrib/byacc/test/yacc/code_error.output27
-rw-r--r--contrib/byacc/test/yacc/code_error.tab.c44
-rw-r--r--contrib/byacc/test/yacc/code_error.tab.h0
-rw-r--r--contrib/byacc/test/yacc/empty.error0
-rw-r--r--contrib/byacc/test/yacc/empty.output21
-rw-r--r--contrib/byacc/test/yacc/empty.tab.c503
-rw-r--r--contrib/byacc/test/yacc/empty.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax1.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax1.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax1.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax1.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax10.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax10.output27
-rw-r--r--contrib/byacc/test/yacc/err_syntax10.tab.c502
-rw-r--r--contrib/byacc/test/yacc/err_syntax10.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax11.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax11.output27
-rw-r--r--contrib/byacc/test/yacc/err_syntax11.tab.c508
-rw-r--r--contrib/byacc/test/yacc/err_syntax11.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax12.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax12.output27
-rw-r--r--contrib/byacc/test/yacc/err_syntax12.tab.c514
-rw-r--r--contrib/byacc/test/yacc/err_syntax12.tab.h1
-rw-r--r--contrib/byacc/test/yacc/err_syntax13.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax13.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax13.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax13.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax14.error2
-rw-r--r--contrib/byacc/test/yacc/err_syntax14.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax14.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax14.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax15.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax15.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax15.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax15.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax16.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax16.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax16.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax16.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax17.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax17.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax17.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax17.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax18.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax18.output43
-rw-r--r--contrib/byacc/test/yacc/err_syntax18.tab.c515
-rw-r--r--contrib/byacc/test/yacc/err_syntax18.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax19.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax19.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax19.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax19.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax2.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax2.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax2.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax2.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax20.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax20.output41
-rw-r--r--contrib/byacc/test/yacc/err_syntax20.tab.c511
-rw-r--r--contrib/byacc/test/yacc/err_syntax20.tab.h1
-rw-r--r--contrib/byacc/test/yacc/err_syntax21.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax21.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax21.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax21.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax22.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax22.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax22.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax22.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax23.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax23.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax23.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax23.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax24.error2
-rw-r--r--contrib/byacc/test/yacc/err_syntax24.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax24.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax24.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax25.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax25.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax25.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax25.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax26.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax26.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax26.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax26.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax27.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax27.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax27.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax27.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax3.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax3.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax3.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax3.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax4.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax4.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax4.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax4.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax5.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax5.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax5.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax5.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax6.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax6.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax6.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax6.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax7.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax7.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax7.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax7.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax7a.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax7a.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax7a.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax7a.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax7b.error3
-rw-r--r--contrib/byacc/test/yacc/err_syntax7b.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax7b.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax7b.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax8.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax8.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax8.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax8.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax8a.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax8a.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax8a.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax8a.tab.h0
-rw-r--r--contrib/byacc/test/yacc/err_syntax9.error1
-rw-r--r--contrib/byacc/test/yacc/err_syntax9.output0
-rw-r--r--contrib/byacc/test/yacc/err_syntax9.tab.c15
-rw-r--r--contrib/byacc/test/yacc/err_syntax9.tab.h0
-rw-r--r--contrib/byacc/test/yacc/error.error0
-rw-r--r--contrib/byacc/test/yacc/error.output27
-rw-r--r--contrib/byacc/test/yacc/error.tab.c508
-rw-r--r--contrib/byacc/test/yacc/error.tab.h0
-rw-r--r--contrib/byacc/test/yacc/grammar.dot906
-rw-r--r--contrib/byacc/test/yacc/grammar.error1
-rw-r--r--contrib/byacc/test/yacc/grammar.output2214
-rw-r--r--contrib/byacc/test/yacc/grammar.tab.c2026
-rw-r--r--contrib/byacc/test/yacc/grammar.tab.h35
-rw-r--r--contrib/byacc/test/yacc/help.error0
-rw-r--r--contrib/byacc/test/yacc/help.output19
-rw-r--r--contrib/byacc/test/yacc/no_b_opt.error0
-rw-r--r--contrib/byacc/test/yacc/no_b_opt.output19
-rw-r--r--contrib/byacc/test/yacc/no_b_opt1.error0
-rw-r--r--contrib/byacc/test/yacc/no_b_opt1.output1
-rw-r--r--contrib/byacc/test/yacc/no_code_c.error0
-rw-r--r--contrib/byacc/test/yacc/no_code_c.output1
-rw-r--r--contrib/byacc/test/yacc/no_defines.error0
-rw-r--r--contrib/byacc/test/yacc/no_defines.output1
-rw-r--r--contrib/byacc/test/yacc/no_graph.error0
-rw-r--r--contrib/byacc/test/yacc/no_graph.output1
-rw-r--r--contrib/byacc/test/yacc/no_include.error0
-rw-r--r--contrib/byacc/test/yacc/no_include.output1
-rw-r--r--contrib/byacc/test/yacc/no_opts.error0
-rw-r--r--contrib/byacc/test/yacc/no_opts.output1
-rw-r--r--contrib/byacc/test/yacc/no_output.error0
-rw-r--r--contrib/byacc/test/yacc/no_output.output1
-rw-r--r--contrib/byacc/test/yacc/no_output1.error0
-rw-r--r--contrib/byacc/test/yacc/no_output1.output1
-rw-r--r--contrib/byacc/test/yacc/no_output2.error0
-rw-r--r--contrib/byacc/test/yacc/no_output2.output19
-rw-r--r--contrib/byacc/test/yacc/no_p_opt.error0
-rw-r--r--contrib/byacc/test/yacc/no_p_opt.output19
-rw-r--r--contrib/byacc/test/yacc/no_p_opt1.error0
-rw-r--r--contrib/byacc/test/yacc/no_p_opt1.output1
-rw-r--r--contrib/byacc/test/yacc/no_verbose.error0
-rw-r--r--contrib/byacc/test/yacc/no_verbose.output1
-rw-r--r--contrib/byacc/test/yacc/nostdin.error0
-rw-r--r--contrib/byacc/test/yacc/nostdin.output19
-rw-r--r--contrib/byacc/test/yacc/ok_syntax1.error0
-rw-r--r--contrib/byacc/test/yacc/ok_syntax1.output461
-rw-r--r--contrib/byacc/test/yacc/ok_syntax1.tab.c716
-rw-r--r--contrib/byacc/test/yacc/ok_syntax1.tab.h30
-rw-r--r--contrib/byacc/test/yacc/pure_calc.error0
-rw-r--r--contrib/byacc/test/yacc/pure_calc.output461
-rw-r--r--contrib/byacc/test/yacc/pure_calc.tab.c688
-rw-r--r--contrib/byacc/test/yacc/pure_calc.tab.h3
-rw-r--r--contrib/byacc/test/yacc/pure_error.error0
-rw-r--r--contrib/byacc/test/yacc/pure_error.output27
-rw-r--r--contrib/byacc/test/yacc/pure_error.tab.c524
-rw-r--r--contrib/byacc/test/yacc/pure_error.tab.h0
-rw-r--r--contrib/byacc/test/yacc/quote_calc-s.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc-s.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc-s.tab.c689
-rw-r--r--contrib/byacc/test/yacc/quote_calc-s.tab.h9
-rw-r--r--contrib/byacc/test/yacc/quote_calc.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc.tab.c695
-rw-r--r--contrib/byacc/test/yacc/quote_calc.tab.h15
-rw-r--r--contrib/byacc/test/yacc/quote_calc2-s.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc2-s.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc2-s.tab.c689
-rw-r--r--contrib/byacc/test/yacc/quote_calc2-s.tab.h9
-rw-r--r--contrib/byacc/test/yacc/quote_calc2.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc2.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc2.tab.c695
-rw-r--r--contrib/byacc/test/yacc/quote_calc2.tab.h15
-rw-r--r--contrib/byacc/test/yacc/quote_calc3-s.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc3-s.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc3-s.tab.c690
-rw-r--r--contrib/byacc/test/yacc/quote_calc3-s.tab.h9
-rw-r--r--contrib/byacc/test/yacc/quote_calc3.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc3.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc3.tab.c690
-rw-r--r--contrib/byacc/test/yacc/quote_calc3.tab.h9
-rw-r--r--contrib/byacc/test/yacc/quote_calc4-s.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc4-s.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc4-s.tab.c690
-rw-r--r--contrib/byacc/test/yacc/quote_calc4-s.tab.h9
-rw-r--r--contrib/byacc/test/yacc/quote_calc4.error1
-rw-r--r--contrib/byacc/test/yacc/quote_calc4.output557
-rw-r--r--contrib/byacc/test/yacc/quote_calc4.tab.c690
-rw-r--r--contrib/byacc/test/yacc/quote_calc4.tab.h9
-rw-r--r--contrib/byacc/test/yacc/rename_debug.c388
-rw-r--r--contrib/byacc/test/yacc/rename_debug.error0
-rw-r--r--contrib/byacc/test/yacc/rename_debug.h1
-rw-r--r--contrib/byacc/test/yacc/rename_debug.i56
-rw-r--r--contrib/byacc/test/yacc/rename_debug.output27
-rw-r--r--contrib/byacc/test/yacc/varsyntax_calc1.error2
-rw-r--r--contrib/byacc/test/yacc/varsyntax_calc1.output877
-rw-r--r--contrib/byacc/test/yacc/varsyntax_calc1.tab.c915
-rw-r--r--contrib/byacc/test/yacc/varsyntax_calc1.tab.h18
246 files changed, 31785 insertions, 0 deletions
diff --git a/contrib/byacc/test/yacc/big_b.error b/contrib/byacc/test/yacc/big_b.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/big_b.error
diff --git a/contrib/byacc/test/yacc/big_b.output b/contrib/byacc/test/yacc/big_b.output
new file mode 100644
index 000000000000..889f0130b120
--- /dev/null
+++ b/contrib/byacc/test/yacc/big_b.output
@@ -0,0 +1,20 @@
+YACC: w - -B flag unsupported, reconfigure with --enable-btyacc
+Usage: YACC [options] filename
+
+Options:
+ -b file_prefix set filename prefix (default "y.")
+ -B create a backtracking parser
+ -d write definitions (.tab.h)
+ -D enable value stack memory reclamation
+ -i write interface (y.tab.i)
+ -g write a graphical description
+ -l suppress #line directives
+ -L enable position processing, e.g., "%locations"
+ -o output_file (default ".tab.c")
+ -p symbol_prefix set symbol prefix (default "yy")
+ -P create a reentrant parser, e.g., "%pure-parser"
+ -r produce separate code and table files (y.code.c)
+ -s suppress #define's for quoted names in %token lines
+ -t add debugging support
+ -v write description (y.output)
+ -V show version information and exit
diff --git a/contrib/byacc/test/yacc/big_l.error b/contrib/byacc/test/yacc/big_l.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/big_l.error
diff --git a/contrib/byacc/test/yacc/big_l.output b/contrib/byacc/test/yacc/big_l.output
new file mode 100644
index 000000000000..889f0130b120
--- /dev/null
+++ b/contrib/byacc/test/yacc/big_l.output
@@ -0,0 +1,20 @@
+YACC: w - -B flag unsupported, reconfigure with --enable-btyacc
+Usage: YACC [options] filename
+
+Options:
+ -b file_prefix set filename prefix (default "y.")
+ -B create a backtracking parser
+ -d write definitions (.tab.h)
+ -D enable value stack memory reclamation
+ -i write interface (y.tab.i)
+ -g write a graphical description
+ -l suppress #line directives
+ -L enable position processing, e.g., "%locations"
+ -o output_file (default ".tab.c")
+ -p symbol_prefix set symbol prefix (default "yy")
+ -P create a reentrant parser, e.g., "%pure-parser"
+ -r produce separate code and table files (y.code.c)
+ -s suppress #define's for quoted names in %token lines
+ -t add debugging support
+ -v write description (y.output)
+ -V show version information and exit
diff --git a/contrib/byacc/test/yacc/calc.error b/contrib/byacc/test/yacc/calc.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc.error
diff --git a/contrib/byacc/test/yacc/calc.output b/contrib/byacc/test/yacc/calc.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/calc.tab.c b/contrib/byacc/test/yacc/calc.tab.c
new file mode 100644
index 000000000000..762dfa182e2d
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc.tab.c
@@ -0,0 +1,674 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc_rule
+#endif /* yyrule */
+#define YYPREFIX "calc_"
+
+#define YYPURE 0
+
+#line 2 "calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "calc.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT calc_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const YYINT calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT calc_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const YYINT calc_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const YYINT calc_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const YYINT calc_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
+};
+static const YYINT calc_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#define YYUNDFTOKEN 265
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const calc_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
+};
+static const char *const calc_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 66 "calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 354 "calc.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 28 "calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 32 "calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 34 "calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 38 "calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 40 "calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 42 "calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 44 "calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 46 "calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 48 "calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 50 "calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 52 "calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 54 "calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 56 "calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 61 "calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 63 "calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 616 "calc.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/calc.tab.h b/contrib/byacc/test/yacc/calc.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/yacc/calc1.error b/contrib/byacc/test/yacc/calc1.error
new file mode 100644
index 000000000000..9c1f7152c30e
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc1.error
@@ -0,0 +1,2 @@
+YACC: 2 rules never reduced
+YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/calc1.output b/contrib/byacc/test/yacc/calc1.output
new file mode 100644
index 000000000000..2b628d47ddba
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc1.output
@@ -0,0 +1,877 @@
+ 0 $accept : line $end
+
+ 1 lines :
+ 2 | lines line
+
+ 3 line : dexp '\n'
+ 4 | vexp '\n'
+ 5 | DREG '=' dexp '\n'
+ 6 | VREG '=' vexp '\n'
+ 7 | error '\n'
+
+ 8 dexp : CONST
+ 9 | DREG
+ 10 | dexp '+' dexp
+ 11 | dexp '-' dexp
+ 12 | dexp '*' dexp
+ 13 | dexp '/' dexp
+ 14 | '-' dexp
+ 15 | '(' dexp ')'
+
+ 16 vexp : dexp
+ 17 | '(' dexp ',' dexp ')'
+ 18 | VREG
+ 19 | vexp '+' vexp
+ 20 | dexp '+' vexp
+ 21 | vexp '-' vexp
+ 22 | dexp '-' vexp
+ 23 | vexp '*' vexp
+ 24 | dexp '*' vexp
+ 25 | vexp '/' vexp
+ 26 | dexp '/' vexp
+ 27 | '-' vexp
+ 28 | '(' vexp ')'
+
+state 0
+ $accept : . line $end (0)
+
+ error shift 1
+ DREG shift 2
+ VREG shift 3
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ line goto 7
+ dexp goto 8
+ vexp goto 9
+
+
+state 1
+ line : error . '\n' (7)
+
+ '\n' shift 10
+ . error
+
+
+state 2
+ line : DREG . '=' dexp '\n' (5)
+ dexp : DREG . (9)
+
+ '=' shift 11
+ '+' reduce 9
+ '-' reduce 9
+ '*' reduce 9
+ '/' reduce 9
+ '\n' reduce 9
+
+
+state 3
+ line : VREG . '=' vexp '\n' (6)
+ vexp : VREG . (18)
+
+ '=' shift 12
+ '+' reduce 18
+ '-' reduce 18
+ '*' reduce 18
+ '/' reduce 18
+ '\n' reduce 18
+
+
+state 4
+ dexp : CONST . (8)
+
+ . reduce 8
+
+
+state 5
+ dexp : '-' . dexp (14)
+ vexp : '-' . vexp (27)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 15
+ vexp goto 16
+
+
+state 6
+ dexp : '(' . dexp ')' (15)
+ vexp : '(' . dexp ',' dexp ')' (17)
+ vexp : '(' . vexp ')' (28)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 17
+ vexp goto 18
+
+
+state 7
+ $accept : line . $end (0)
+
+ $end accept
+
+
+8: shift/reduce conflict (shift 19, reduce 16) on '+'
+8: shift/reduce conflict (shift 20, reduce 16) on '-'
+8: shift/reduce conflict (shift 21, reduce 16) on '*'
+8: shift/reduce conflict (shift 22, reduce 16) on '/'
+8: shift/reduce conflict (shift 23, reduce 16) on '\n'
+state 8
+ line : dexp . '\n' (3)
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ '\n' shift 23
+
+
+state 9
+ line : vexp . '\n' (4)
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ '\n' shift 28
+ . error
+
+
+state 10
+ line : error '\n' . (7)
+
+ . reduce 7
+
+
+state 11
+ line : DREG '=' . dexp '\n' (5)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 31
+
+
+state 12
+ line : VREG '=' . vexp '\n' (6)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 33
+
+
+state 13
+ dexp : DREG . (9)
+
+ . reduce 9
+
+
+state 14
+ vexp : VREG . (18)
+
+ . reduce 18
+
+
+15: reduce/reduce conflict (reduce 14, reduce 16) on '+'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '-'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '*'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '/'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '\n'
+15: reduce/reduce conflict (reduce 14, reduce 16) on ')'
+state 15
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '-' dexp . (14)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 14
+
+
+state 16
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : '-' vexp . (27)
+
+ . reduce 27
+
+
+17: shift/reduce conflict (shift 19, reduce 16) on '+'
+17: shift/reduce conflict (shift 20, reduce 16) on '-'
+17: shift/reduce conflict (shift 21, reduce 16) on '*'
+17: shift/reduce conflict (shift 22, reduce 16) on '/'
+17: shift/reduce conflict (shift 34, reduce 16) on ')'
+state 17
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '(' dexp . ')' (15)
+ vexp : dexp . (16)
+ vexp : '(' dexp . ',' dexp ')' (17)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ ')' shift 34
+ ',' shift 35
+
+
+state 18
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : '(' vexp . ')' (28)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ ')' shift 36
+ . error
+
+
+state 19
+ dexp : dexp '+' . dexp (10)
+ vexp : dexp '+' . vexp (20)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 37
+ vexp goto 38
+
+
+state 20
+ dexp : dexp '-' . dexp (11)
+ vexp : dexp '-' . vexp (22)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 39
+ vexp goto 40
+
+
+state 21
+ dexp : dexp '*' . dexp (12)
+ vexp : dexp '*' . vexp (24)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 41
+ vexp goto 42
+
+
+state 22
+ dexp : dexp '/' . dexp (13)
+ vexp : dexp '/' . vexp (26)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 43
+ vexp goto 44
+
+
+state 23
+ line : dexp '\n' . (3)
+
+ . reduce 3
+
+
+state 24
+ vexp : vexp '+' . vexp (19)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 45
+
+
+state 25
+ vexp : vexp '-' . vexp (21)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 46
+
+
+state 26
+ vexp : vexp '*' . vexp (23)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 47
+
+
+state 27
+ vexp : vexp '/' . vexp (25)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 48
+
+
+state 28
+ line : vexp '\n' . (4)
+
+ . reduce 4
+
+
+state 29
+ dexp : '-' . dexp (14)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 49
+
+
+state 30
+ dexp : '(' . dexp ')' (15)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 50
+
+
+state 31
+ line : DREG '=' dexp . '\n' (5)
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ '\n' shift 55
+ . error
+
+
+32: shift/reduce conflict (shift 19, reduce 16) on '+'
+32: shift/reduce conflict (shift 20, reduce 16) on '-'
+32: shift/reduce conflict (shift 21, reduce 16) on '*'
+32: shift/reduce conflict (shift 22, reduce 16) on '/'
+state 32
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 33
+ line : VREG '=' vexp . '\n' (6)
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ '\n' shift 56
+ . error
+
+
+state 34
+ dexp : '(' dexp ')' . (15)
+
+ . reduce 15
+
+
+state 35
+ vexp : '(' dexp ',' . dexp ')' (17)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 57
+
+
+state 36
+ vexp : '(' vexp ')' . (28)
+
+ . reduce 28
+
+
+37: reduce/reduce conflict (reduce 10, reduce 16) on '+'
+37: reduce/reduce conflict (reduce 10, reduce 16) on '-'
+37: shift/reduce conflict (shift 21, reduce 16) on '*'
+37: shift/reduce conflict (shift 22, reduce 16) on '/'
+37: reduce/reduce conflict (reduce 10, reduce 16) on '\n'
+37: reduce/reduce conflict (reduce 10, reduce 16) on ')'
+state 37
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp '+' dexp . (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '*' shift 21
+ '/' shift 22
+ '+' reduce 10
+ '-' reduce 10
+ '\n' reduce 10
+ ')' reduce 10
+ ',' reduce 10
+
+
+state 38
+ vexp : vexp . '+' vexp (19)
+ vexp : dexp '+' vexp . (20)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 20
+ '-' reduce 20
+ '\n' reduce 20
+ ')' reduce 20
+
+
+39: reduce/reduce conflict (reduce 11, reduce 16) on '+'
+39: reduce/reduce conflict (reduce 11, reduce 16) on '-'
+39: shift/reduce conflict (shift 21, reduce 16) on '*'
+39: shift/reduce conflict (shift 22, reduce 16) on '/'
+39: reduce/reduce conflict (reduce 11, reduce 16) on '\n'
+39: reduce/reduce conflict (reduce 11, reduce 16) on ')'
+state 39
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp '-' dexp . (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '*' shift 21
+ '/' shift 22
+ '+' reduce 11
+ '-' reduce 11
+ '\n' reduce 11
+ ')' reduce 11
+ ',' reduce 11
+
+
+state 40
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : dexp '-' vexp . (22)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 22
+ '-' reduce 22
+ '\n' reduce 22
+ ')' reduce 22
+
+
+41: reduce/reduce conflict (reduce 12, reduce 16) on '+'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '-'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '*'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '/'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '\n'
+41: reduce/reduce conflict (reduce 12, reduce 16) on ')'
+state 41
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp '*' dexp . (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 12
+
+
+state 42
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : dexp '*' vexp . (24)
+ vexp : vexp . '/' vexp (25)
+
+ . reduce 24
+
+
+43: reduce/reduce conflict (reduce 13, reduce 16) on '+'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '-'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '*'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '/'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '\n'
+43: reduce/reduce conflict (reduce 13, reduce 16) on ')'
+state 43
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : dexp '/' dexp . (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 13
+
+
+state 44
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : dexp '/' vexp . (26)
+
+ . reduce 26
+
+
+state 45
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp '+' vexp . (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 19
+ '-' reduce 19
+ '\n' reduce 19
+ ')' reduce 19
+
+
+state 46
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp '-' vexp . (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 21
+ '-' reduce 21
+ '\n' reduce 21
+ ')' reduce 21
+
+
+state 47
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp '*' vexp . (23)
+ vexp : vexp . '/' vexp (25)
+
+ . reduce 23
+
+
+state 48
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : vexp '/' vexp . (25)
+
+ . reduce 25
+
+
+state 49
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '-' dexp . (14)
+
+ . reduce 14
+
+
+state 50
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '(' dexp . ')' (15)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ ')' shift 34
+ . error
+
+
+state 51
+ dexp : dexp '+' . dexp (10)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 58
+
+
+state 52
+ dexp : dexp '-' . dexp (11)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 59
+
+
+state 53
+ dexp : dexp '*' . dexp (12)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 60
+
+
+state 54
+ dexp : dexp '/' . dexp (13)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 61
+
+
+state 55
+ line : DREG '=' dexp '\n' . (5)
+
+ . reduce 5
+
+
+state 56
+ line : VREG '=' vexp '\n' . (6)
+
+ . reduce 6
+
+
+state 57
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : '(' dexp ',' dexp . ')' (17)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ ')' shift 62
+ . error
+
+
+state 58
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp '+' dexp . (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '*' shift 53
+ '/' shift 54
+ '+' reduce 10
+ '-' reduce 10
+ '\n' reduce 10
+ ')' reduce 10
+
+
+state 59
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp '-' dexp . (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '*' shift 53
+ '/' shift 54
+ '+' reduce 11
+ '-' reduce 11
+ '\n' reduce 11
+ ')' reduce 11
+
+
+state 60
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp '*' dexp . (12)
+ dexp : dexp . '/' dexp (13)
+
+ . reduce 12
+
+
+state 61
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : dexp '/' dexp . (13)
+
+ . reduce 13
+
+
+state 62
+ vexp : '(' dexp ',' dexp ')' . (17)
+
+ . reduce 17
+
+
+Rules never reduced:
+ lines : (1)
+ lines : lines line (2)
+
+
+State 8 contains 5 shift/reduce conflicts.
+State 15 contains 6 reduce/reduce conflicts.
+State 17 contains 5 shift/reduce conflicts.
+State 32 contains 4 shift/reduce conflicts.
+State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts.
+State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts.
+State 41 contains 6 reduce/reduce conflicts.
+State 43 contains 6 reduce/reduce conflicts.
+
+
+15 terminals, 5 nonterminals
+29 grammar rules, 63 states
diff --git a/contrib/byacc/test/yacc/calc1.tab.c b/contrib/byacc/test/yacc/calc1.tab.c
new file mode 100644
index 000000000000..7a5f925f9149
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc1.tab.c
@@ -0,0 +1,914 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse calc1_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc1_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc1_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc1_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc1_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc1_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc1_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc1_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc1_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc1_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc1_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc1_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc1_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc1_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc1_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc1_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc1_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc1_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc1_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc1_rule
+#endif /* yyrule */
+#define YYPREFIX "calc1_"
+
+#define YYPURE 0
+
+#line 2 "calc1.y"
+
+/* http://dinosaur.compilertools.net/yacc/index.html */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef struct interval
+{
+ double lo, hi;
+}
+INTERVAL;
+
+INTERVAL vmul(double, double, INTERVAL);
+INTERVAL vdiv(double, double, INTERVAL);
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+int dcheck(INTERVAL);
+
+double dreg[26];
+INTERVAL vreg[26];
+
+#line 31 "calc1.y"
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ int ival;
+ double dval;
+ INTERVAL vval;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+#line 141 "calc1.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DREG 257
+#define VREG 258
+#define CONST 259
+#define UMINUS 260
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT calc1_lhs[] = { -1,
+ 3, 3, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+};
+static const YYINT calc1_len[] = { 2,
+ 0, 2, 2, 2, 4, 4, 2, 1, 1, 3,
+ 3, 3, 3, 2, 3, 1, 5, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 2, 3,
+};
+static const YYINT calc1_defred[] = { 0,
+ 0, 0, 0, 8, 0, 0, 0, 0, 0, 7,
+ 0, 0, 9, 18, 14, 27, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 15, 0, 28, 0, 0, 0, 0,
+ 12, 24, 13, 26, 0, 0, 23, 25, 14, 0,
+ 0, 0, 0, 0, 5, 6, 0, 0, 0, 12,
+ 13, 17,
+};
+static const YYINT calc1_dgoto[] = { 7,
+ 32, 9, 0,
+};
+static const YYINT calc1_sindex[] = { -40,
+ -8, -48, -47, 0, -37, -37, 0, 2, 17, 0,
+ -34, -37, 0, 0, 0, 0, -25, 90, -37, -37,
+ -37, -37, 0, -37, -37, -37, -37, 0, -34, -34,
+ 25, 125, 31, 0, -34, 0, -11, 37, -11, 37,
+ 0, 0, 0, 0, 37, 37, 0, 0, 0, 111,
+ -34, -34, -34, -34, 0, 0, 118, 69, 69, 0,
+ 0, 0,
+};
+static const YYINT calc1_rindex[] = { 0,
+ 0, 38, 44, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -9, 0, 0, 0, 0, 51, -3, 56, 61,
+ 0, 0, 0, 0, 67, 72, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 78, 83, 0,
+ 0, 0,
+};
+static const YYINT calc1_gindex[] = { 0,
+ 4, 124, 0,
+};
+#define YYTABLESIZE 225
+static const YYINT calc1_table[] = { 6,
+ 16, 10, 6, 8, 5, 30, 20, 5, 15, 17,
+ 29, 23, 11, 12, 31, 34, 21, 19, 35, 20,
+ 0, 22, 37, 39, 41, 43, 28, 0, 0, 0,
+ 21, 16, 49, 50, 55, 22, 0, 20, 57, 20,
+ 56, 20, 0, 21, 19, 0, 20, 9, 22, 0,
+ 0, 0, 0, 18, 58, 59, 60, 61, 26, 24,
+ 10, 25, 0, 27, 0, 11, 53, 51, 0, 52,
+ 22, 54, 26, 24, 0, 25, 19, 27, 26, 9,
+ 9, 21, 9, 27, 9, 18, 18, 10, 18, 0,
+ 18, 10, 11, 10, 10, 10, 11, 0, 11, 11,
+ 11, 22, 0, 22, 0, 22, 0, 19, 0, 19,
+ 53, 19, 21, 0, 21, 54, 21, 0, 10, 0,
+ 10, 0, 10, 11, 0, 11, 0, 11, 16, 18,
+ 36, 26, 24, 0, 25, 33, 27, 0, 0, 0,
+ 0, 0, 38, 40, 42, 44, 0, 45, 46, 47,
+ 48, 34, 53, 51, 0, 52, 0, 54, 62, 53,
+ 51, 0, 52, 0, 54, 0, 21, 19, 0, 20,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 13,
+ 14, 4, 13, 0, 4,
+};
+static const YYINT calc1_check[] = { 40,
+ 10, 10, 40, 0, 45, 40, 10, 45, 5, 6,
+ 45, 10, 61, 61, 11, 41, 42, 43, 44, 45,
+ -1, 47, 19, 20, 21, 22, 10, -1, -1, -1,
+ 42, 41, 29, 30, 10, 47, -1, 41, 35, 43,
+ 10, 45, -1, 42, 43, -1, 45, 10, 47, -1,
+ -1, -1, -1, 10, 51, 52, 53, 54, 42, 43,
+ 10, 45, -1, 47, -1, 10, 42, 43, -1, 45,
+ 10, 47, 42, 43, -1, 45, 10, 47, 42, 42,
+ 43, 10, 45, 47, 47, 42, 43, 10, 45, -1,
+ 47, 41, 10, 43, 44, 45, 41, -1, 43, 44,
+ 45, 41, -1, 43, -1, 45, -1, 41, -1, 43,
+ 42, 45, 41, -1, 43, 47, 45, -1, 41, -1,
+ 43, -1, 45, 41, -1, 43, -1, 45, 5, 6,
+ 41, 42, 43, -1, 45, 12, 47, -1, -1, -1,
+ -1, -1, 19, 20, 21, 22, -1, 24, 25, 26,
+ 27, 41, 42, 43, -1, 45, -1, 47, 41, 42,
+ 43, -1, 45, -1, 47, -1, 42, 43, -1, 45,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 259, 257,
+ 258, 259, 257, -1, 259,
+};
+#define YYFINAL 7
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 260
+#define YYUNDFTOKEN 266
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const calc1_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,
+0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol",
+};
+static const char *const calc1_rule[] = {
+"$accept : line",
+"lines :",
+"lines : lines line",
+"line : dexp '\\n'",
+"line : vexp '\\n'",
+"line : DREG '=' dexp '\\n'",
+"line : VREG '=' vexp '\\n'",
+"line : error '\\n'",
+"dexp : CONST",
+"dexp : DREG",
+"dexp : dexp '+' dexp",
+"dexp : dexp '-' dexp",
+"dexp : dexp '*' dexp",
+"dexp : dexp '/' dexp",
+"dexp : '-' dexp",
+"dexp : '(' dexp ')'",
+"vexp : dexp",
+"vexp : '(' dexp ',' dexp ')'",
+"vexp : VREG",
+"vexp : vexp '+' vexp",
+"vexp : dexp '+' vexp",
+"vexp : vexp '-' vexp",
+"vexp : dexp '-' vexp",
+"vexp : vexp '*' vexp",
+"vexp : dexp '*' vexp",
+"vexp : vexp '/' vexp",
+"vexp : dexp '/' vexp",
+"vexp : '-' vexp",
+"vexp : '(' vexp ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 176 "calc1.y"
+ /* beginning of subroutines section */
+
+#define BSZ 50 /* buffer size for floating point numbers */
+
+ /* lexical analysis */
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ int c;
+
+ while ((c = getchar()) == ' ')
+ { /* skip over blanks */
+ }
+
+ if (isupper(c))
+ {
+ yylval.ival = c - 'A';
+ return (VREG);
+ }
+ if (islower(c))
+ {
+ yylval.ival = c - 'a';
+ return (DREG);
+ }
+
+ if (isdigit(c) || c == '.')
+ {
+ /* gobble up digits, points, exponents */
+ char buf[BSZ + 1], *cp = buf;
+ int dot = 0, expr = 0;
+
+ for (; (cp - buf) < BSZ; ++cp, c = getchar())
+ {
+
+ *cp = (char) c;
+ if (isdigit(c))
+ continue;
+ if (c == '.')
+ {
+ if (dot++ || expr)
+ return ('.'); /* will cause syntax error */
+ continue;
+ }
+
+ if (c == 'e')
+ {
+ if (expr++)
+ return ('e'); /* will cause syntax error */
+ continue;
+ }
+
+ /* end of number */
+ break;
+ }
+ *cp = '\0';
+
+ if ((cp - buf) >= BSZ)
+ printf("constant too long: truncated\n");
+ else
+ ungetc(c, stdin); /* push back last char read */
+ yylval.dval = atof(buf);
+ return (CONST);
+ }
+ return (c);
+}
+
+static INTERVAL
+hilo(double a, double b, double c, double d)
+{
+ /* returns the smallest interval containing a, b, c, and d */
+ /* used by *, / routines */
+ INTERVAL v;
+
+ if (a > b)
+ {
+ v.hi = a;
+ v.lo = b;
+ }
+ else
+ {
+ v.hi = b;
+ v.lo = a;
+ }
+
+ if (c > d)
+ {
+ if (c > v.hi)
+ v.hi = c;
+ if (d < v.lo)
+ v.lo = d;
+ }
+ else
+ {
+ if (d > v.hi)
+ v.hi = d;
+ if (c < v.lo)
+ v.lo = c;
+ }
+ return (v);
+}
+
+INTERVAL
+vmul(double a, double b, INTERVAL v)
+{
+ return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
+}
+
+int
+dcheck(INTERVAL v)
+{
+ if (v.hi >= 0. && v.lo <= 0.)
+ {
+ printf("divisor interval contains 0.\n");
+ return (1);
+ }
+ return (0);
+}
+
+INTERVAL
+vdiv(double a, double b, INTERVAL v)
+{
+ return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
+}
+#line 491 "calc1.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 57 "calc1.y"
+ {
+ (void) printf("%15.8f\n", yystack.l_mark[-1].dval);
+ }
+break;
+case 4:
+#line 61 "calc1.y"
+ {
+ (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
+ }
+break;
+case 5:
+#line 65 "calc1.y"
+ {
+ dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
+ }
+break;
+case 6:
+#line 69 "calc1.y"
+ {
+ vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
+ }
+break;
+case 7:
+#line 73 "calc1.y"
+ {
+ yyerrok;
+ }
+break;
+case 9:
+#line 80 "calc1.y"
+ {
+ yyval.dval = dreg[yystack.l_mark[0].ival];
+ }
+break;
+case 10:
+#line 84 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
+ }
+break;
+case 11:
+#line 88 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
+ }
+break;
+case 12:
+#line 92 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
+ }
+break;
+case 13:
+#line 96 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
+ }
+break;
+case 14:
+#line 100 "calc1.y"
+ {
+ yyval.dval = -yystack.l_mark[0].dval;
+ }
+break;
+case 15:
+#line 104 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-1].dval;
+ }
+break;
+case 16:
+#line 110 "calc1.y"
+ {
+ yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
+ }
+break;
+case 17:
+#line 114 "calc1.y"
+ {
+ yyval.vval.lo = yystack.l_mark[-3].dval;
+ yyval.vval.hi = yystack.l_mark[-1].dval;
+ if ( yyval.vval.lo > yyval.vval.hi )
+ {
+ (void) printf("interval out of order\n");
+ YYERROR;
+ }
+ }
+break;
+case 18:
+#line 124 "calc1.y"
+ {
+ yyval.vval = vreg[yystack.l_mark[0].ival];
+ }
+break;
+case 19:
+#line 128 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 20:
+#line 133 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 21:
+#line 138 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 22:
+#line 143 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 23:
+#line 148 "calc1.y"
+ {
+ yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 24:
+#line 152 "calc1.y"
+ {
+ yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 25:
+#line 156 "calc1.y"
+ {
+ if (dcheck(yystack.l_mark[0].vval)) YYERROR;
+ yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 26:
+#line 161 "calc1.y"
+ {
+ if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
+ yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 27:
+#line 166 "calc1.y"
+ {
+ yyval.vval.hi = -yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = -yystack.l_mark[0].vval.hi;
+ }
+break;
+case 28:
+#line 171 "calc1.y"
+ {
+ yyval.vval = yystack.l_mark[-1].vval;
+ }
+break;
+#line 856 "calc1.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/calc1.tab.h b/contrib/byacc/test/yacc/calc1.tab.h
new file mode 100644
index 000000000000..c0633e37dfa8
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc1.tab.h
@@ -0,0 +1,18 @@
+#define DREG 257
+#define VREG 258
+#define CONST 259
+#define UMINUS 260
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ int ival;
+ double dval;
+ INTERVAL vval;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+extern YYSTYPE calc1_lval;
diff --git a/contrib/byacc/test/yacc/calc2.error b/contrib/byacc/test/yacc/calc2.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc2.error
diff --git a/contrib/byacc/test/yacc/calc2.output b/contrib/byacc/test/yacc/calc2.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc2.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/calc2.tab.c b/contrib/byacc/test/yacc/calc2.tab.c
new file mode 100644
index 000000000000..d85ea8837b59
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc2.tab.c
@@ -0,0 +1,687 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse calc2_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc2_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc2_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc2_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc2_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc2_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc2_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc2_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc2_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc2_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc2_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc2_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc2_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc2_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc2_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc2_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc2_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc2_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc2_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc2_rule
+#endif /* yyrule */
+#define YYPREFIX "calc2_"
+
+#define YYPURE 0
+
+#line 7 "calc2.y"
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 113 "calc2.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(int regs[26], int * base)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(int * base)
+# define YYLEX yylex(base)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(regs, base, msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT calc2_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT calc2_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT calc2_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const YYINT calc2_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT calc2_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const YYINT calc2_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const YYINT calc2_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const YYINT calc2_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
+};
+static const YYINT calc2_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#define YYUNDFTOKEN 265
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const calc2_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
+};
+static const char *const calc2_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "calc2.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+#define UNUSED(x) ((void)(x))
+
+static void
+YYERROR_DECL()
+{
+ UNUSED(regs); /* %parse-param regs is not actually used here */
+ UNUSED(base); /* %parse-param base is not actually used here */
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 367 "calc2.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "calc2.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "calc2.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "calc2.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "calc2.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "calc2.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "calc2.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "calc2.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "calc2.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "calc2.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "calc2.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "calc2.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "calc2.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "calc2.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "calc2.y"
+ { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "calc2.y"
+ { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 629 "calc2.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/calc2.tab.h b/contrib/byacc/test/yacc/calc2.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc2.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/yacc/calc3.error b/contrib/byacc/test/yacc/calc3.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc3.error
diff --git a/contrib/byacc/test/yacc/calc3.output b/contrib/byacc/test/yacc/calc3.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc3.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/calc3.tab.c b/contrib/byacc/test/yacc/calc3.tab.c
new file mode 100644
index 000000000000..b5ca0414f706
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc3.tab.c
@@ -0,0 +1,692 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse calc3_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc3_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc3_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc3_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc3_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc3_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc3_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc3_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc3_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc3_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc3_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc3_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc3_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc3_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc3_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc3_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc3_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc3_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc3_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc3_rule
+#endif /* yyrule */
+#define YYPREFIX "calc3_"
+
+#define YYPURE 1
+
+#line 9 "calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 114 "calc3.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(int regs[26], int * base)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base)
+# define YYLEX yylex(&yylval, base)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(regs, base, msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT calc3_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT calc3_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT calc3_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const YYINT calc3_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT calc3_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const YYINT calc3_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const YYINT calc3_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const YYINT calc3_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
+};
+static const YYINT calc3_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#define YYUNDFTOKEN 265
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const calc3_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
+};
+static const char *const calc3_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 76 "calc3.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+#define UNUSED(x) ((void)(x))
+
+static void
+YYERROR_DECL()
+{
+ UNUSED(regs); /* %parse-param regs is not actually used here */
+ UNUSED(base); /* %parse-param base is not actually used here */
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = (c - 'a');
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 365 "calc3.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 38 "calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 42 "calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 44 "calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 48 "calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 50 "calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 52 "calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 54 "calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 56 "calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 58 "calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 60 "calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 62 "calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 64 "calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 66 "calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 71 "calc3.y"
+ { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 73 "calc3.y"
+ { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 634 "calc3.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/calc3.tab.h b/contrib/byacc/test/yacc/calc3.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/yacc/calc3.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/yacc/code_calc.code.c b/contrib/byacc/test/yacc/code_calc.code.c
new file mode 100644
index 000000000000..43291db28c4d
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_calc.code.c
@@ -0,0 +1,579 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc_rule
+#endif /* yyrule */
+#define YYPREFIX "calc_"
+
+#define YYPURE 0
+
+#line 2 "code_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *s);
+#endif
+
+#line 113 "code_calc.code.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+#define YYTABLESIZE 220
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#define YYUNDFTOKEN 265
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+
+extern int YYPARSE_DECL();
+typedef short YYINT;
+extern YYINT yylhs[];
+extern YYINT yylen[];
+extern YYINT yydefred[];
+extern YYINT yydgoto[];
+extern YYINT yysindex[];
+extern YYINT yyrindex[];
+extern YYINT yygindex[];
+extern YYINT yytable[];
+extern YYINT yycheck[];
+
+#if YYDEBUG
+extern char *yyname[];
+extern char *yyrule[];
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 68 "code_calc.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 259 "code_calc.code.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 30 "code_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 34 "code_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 36 "code_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 40 "code_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 42 "code_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 44 "code_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 46 "code_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 48 "code_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 50 "code_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 52 "code_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 54 "code_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 56 "code_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 58 "code_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 63 "code_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 65 "code_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 521 "code_calc.code.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/code_calc.error b/contrib/byacc/test/yacc/code_calc.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_calc.error
diff --git a/contrib/byacc/test/yacc/code_calc.output b/contrib/byacc/test/yacc/code_calc.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_calc.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/code_calc.tab.c b/contrib/byacc/test/yacc/code_calc.tab.c
new file mode 100644
index 000000000000..e72fa8421c4e
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_calc.tab.c
@@ -0,0 +1,119 @@
+typedef short YYINT;
+const YYINT calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+const YYINT calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+const YYINT calc_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+const YYINT calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+const YYINT calc_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+const YYINT calc_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+const YYINT calc_gindex[] = { 0,
+ 0, 65, 0,
+};
+const YYINT calc_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
+};
+const YYINT calc_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#if YYDEBUG
+const char *const calc_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
+};
+const char *const calc_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
diff --git a/contrib/byacc/test/yacc/code_calc.tab.h b/contrib/byacc/test/yacc/code_calc.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_calc.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/yacc/code_error.code.c b/contrib/byacc/test/yacc/code_error.code.c
new file mode 100644
index 000000000000..38d3e5866b38
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_error.code.c
@@ -0,0 +1,490 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse error_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex error_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror error_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar error_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval error_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval error_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug error_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs error_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag error_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs error_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen error_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred error_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto error_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex error_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex error_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex error_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable error_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck error_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname error_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule error_rule
+#endif /* yyrule */
+#define YYPREFIX "error_"
+
+#define YYPURE 0
+
+#line 2 "code_error.y"
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+#line 108 "code_error.code.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+#define YYERRCODE 256
+#define YYTABLESIZE 0
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+
+extern int YYPARSE_DECL();
+typedef short YYINT;
+extern YYINT yylhs[];
+extern YYINT yylen[];
+extern YYINT yydefred[];
+extern YYINT yydgoto[];
+extern YYINT yysindex[];
+extern YYINT yyrindex[];
+extern YYINT yygindex[];
+extern YYINT yytable[];
+extern YYINT yycheck[];
+
+#if YYDEBUG
+extern char *yyname[];
+extern char *yyrule[];
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 12 "code_error.y"
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 231 "code_error.code.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/code_error.error b/contrib/byacc/test/yacc/code_error.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_error.error
diff --git a/contrib/byacc/test/yacc/code_error.output b/contrib/byacc/test/yacc/code_error.output
new file mode 100644
index 000000000000..0c4db6225e24
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_error.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+2 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/yacc/code_error.tab.c b/contrib/byacc/test/yacc/code_error.tab.c
new file mode 100644
index 000000000000..9296aa5b1e24
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_error.tab.c
@@ -0,0 +1,44 @@
+typedef short YYINT;
+const YYINT error_lhs[] = { -1,
+ 0,
+};
+const YYINT error_len[] = { 2,
+ 1,
+};
+const YYINT error_defred[] = { 0,
+ 1, 0,
+};
+const YYINT error_dgoto[] = { 2,
+};
+const YYINT error_sindex[] = { -256,
+ 0, 0,
+};
+const YYINT error_rindex[] = { 0,
+ 0, 0,
+};
+const YYINT error_gindex[] = { 0,
+};
+const YYINT error_table[] = { 1,
+};
+const YYINT error_check[] = { 256,
+};
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#if YYDEBUG
+const char *const error_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+const char *const error_rule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
diff --git a/contrib/byacc/test/yacc/code_error.tab.h b/contrib/byacc/test/yacc/code_error.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/code_error.tab.h
diff --git a/contrib/byacc/test/yacc/empty.error b/contrib/byacc/test/yacc/empty.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/empty.error
diff --git a/contrib/byacc/test/yacc/empty.output b/contrib/byacc/test/yacc/empty.output
new file mode 100644
index 000000000000..b7cf396ef983
--- /dev/null
+++ b/contrib/byacc/test/yacc/empty.output
@@ -0,0 +1,21 @@
+ 0 $accept : start $end
+
+ 1 start :
+
+state 0
+ $accept : . start $end (0)
+ start : . (1)
+
+ . reduce 1
+
+ start goto 1
+
+
+state 1
+ $accept : start . $end (0)
+
+ $end accept
+
+
+2 terminals, 2 nonterminals
+2 grammar rules, 2 states
diff --git a/contrib/byacc/test/yacc/empty.tab.c b/contrib/byacc/test/yacc/empty.tab.c
new file mode 100644
index 000000000000..da0c4be7a221
--- /dev/null
+++ b/contrib/byacc/test/yacc/empty.tab.c
@@ -0,0 +1,503 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse empty_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex empty_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror empty_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar empty_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval empty_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval empty_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug empty_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs empty_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag empty_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs empty_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen empty_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred empty_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto empty_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex empty_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex empty_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex empty_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable empty_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck empty_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname empty_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule empty_rule
+#endif /* yyrule */
+#define YYPREFIX "empty_"
+
+#define YYPURE 0
+
+#line 2 "empty.y"
+#ifdef YYBISON
+#define YYLEX_DECL() yylex(void)
+#define YYERROR_DECL() yyerror(const char *s)
+static int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+#line 108 "empty.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT empty_lhs[] = { -1,
+ 0,
+};
+static const YYINT empty_len[] = { 2,
+ 0,
+};
+static const YYINT empty_defred[] = { 1,
+ 0,
+};
+static const YYINT empty_dgoto[] = { 1,
+};
+static const YYINT empty_sindex[] = { 0,
+ 0,
+};
+static const YYINT empty_rindex[] = { 0,
+ 0,
+};
+static const YYINT empty_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const YYINT empty_table[] = { 0,
+};
+static const YYINT empty_check[] = { -1,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const empty_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const empty_rule[] = {
+"$accept : start",
+"start :",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 13 "empty.y"
+
+#include <stdio.h>
+
+static int
+YYLEX_DECL() {
+ return -1;
+}
+
+static void
+YYERROR_DECL() {
+ printf("%s\n",s);
+}
+#line 244 "empty.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/empty.tab.h b/contrib/byacc/test/yacc/empty.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/empty.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax1.error b/contrib/byacc/test/yacc/err_syntax1.error
new file mode 100644
index 000000000000..e3a341d4ee3d
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax1.error
@@ -0,0 +1,3 @@
+YACC: e - line 1 of "./test/err_syntax1.y", syntax error
+ ?% {
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax1.output b/contrib/byacc/test/yacc/err_syntax1.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax1.output
diff --git a/contrib/byacc/test/yacc/err_syntax1.tab.c b/contrib/byacc/test/yacc/err_syntax1.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax1.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax1.tab.h b/contrib/byacc/test/yacc/err_syntax1.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax1.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax10.error b/contrib/byacc/test/yacc/err_syntax10.error
new file mode 100644
index 000000000000..ceb876ec6037
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax10.error
@@ -0,0 +1,3 @@
+YACC: w - line 7 of "./test/err_syntax10.y", the type of '(' has been redeclared
+YACC: w - line 7 of "./test/err_syntax10.y", the type of '*' has been redeclared
+YACC: w - line 7 of "./test/err_syntax10.y", the type of '&' has been redeclared
diff --git a/contrib/byacc/test/yacc/err_syntax10.output b/contrib/byacc/test/yacc/err_syntax10.output
new file mode 100644
index 000000000000..1b4542bde5c7
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax10.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+5 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/yacc/err_syntax10.tab.c b/contrib/byacc/test/yacc/err_syntax10.tab.c
new file mode 100644
index 000000000000..a3b450960efc
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax10.tab.c
@@ -0,0 +1,502 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse err_syntax10_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex err_syntax10_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror err_syntax10_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar err_syntax10_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval err_syntax10_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval err_syntax10_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug err_syntax10_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs err_syntax10_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag err_syntax10_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs err_syntax10_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen err_syntax10_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred err_syntax10_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto err_syntax10_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex err_syntax10_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex err_syntax10_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex err_syntax10_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable err_syntax10_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck err_syntax10_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname err_syntax10_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule err_syntax10_rule
+#endif /* yyrule */
+#define YYPREFIX "err_syntax10_"
+
+#define YYPURE 0
+
+#line 2 "err_syntax10.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 104 "err_syntax10.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT err_syntax10_lhs[] = { -1,
+ 0,
+};
+static const YYINT err_syntax10_len[] = { 2,
+ 1,
+};
+static const YYINT err_syntax10_defred[] = { 0,
+ 1, 0,
+};
+static const YYINT err_syntax10_dgoto[] = { 2,
+};
+static const YYINT err_syntax10_sindex[] = { -256,
+ 0, 0,
+};
+static const YYINT err_syntax10_rindex[] = { 0,
+ 0, 0,
+};
+static const YYINT err_syntax10_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const YYINT err_syntax10_table[] = { 1,
+};
+static const YYINT err_syntax10_check[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const err_syntax10_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,"'&'",0,"'('",0,"'*'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const err_syntax10_rule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 12 "err_syntax10.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 243 "err_syntax10.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/err_syntax10.tab.h b/contrib/byacc/test/yacc/err_syntax10.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax10.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax11.error b/contrib/byacc/test/yacc/err_syntax11.error
new file mode 100644
index 000000000000..df0aee4fb588
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax11.error
@@ -0,0 +1 @@
+YACC: w - line 7 of "./test/err_syntax11.y", the precedence of '|' has been redeclared
diff --git a/contrib/byacc/test/yacc/err_syntax11.output b/contrib/byacc/test/yacc/err_syntax11.output
new file mode 100644
index 000000000000..a71ff2a40019
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax11.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+3 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/yacc/err_syntax11.tab.c b/contrib/byacc/test/yacc/err_syntax11.tab.c
new file mode 100644
index 000000000000..ebb065f4589a
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax11.tab.c
@@ -0,0 +1,508 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse err_syntax11_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex err_syntax11_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror err_syntax11_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar err_syntax11_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval err_syntax11_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval err_syntax11_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug err_syntax11_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs err_syntax11_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag err_syntax11_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs err_syntax11_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen err_syntax11_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred err_syntax11_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto err_syntax11_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex err_syntax11_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex err_syntax11_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex err_syntax11_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable err_syntax11_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck err_syntax11_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname err_syntax11_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule err_syntax11_rule
+#endif /* yyrule */
+#define YYPREFIX "err_syntax11_"
+
+#define YYPURE 0
+
+#line 2 "err_syntax11.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 104 "err_syntax11.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT err_syntax11_lhs[] = { -1,
+ 0,
+};
+static const YYINT err_syntax11_len[] = { 2,
+ 1,
+};
+static const YYINT err_syntax11_defred[] = { 0,
+ 1, 0,
+};
+static const YYINT err_syntax11_dgoto[] = { 2,
+};
+static const YYINT err_syntax11_sindex[] = { -256,
+ 0, 0,
+};
+static const YYINT err_syntax11_rindex[] = { 0,
+ 0, 0,
+};
+static const YYINT err_syntax11_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const YYINT err_syntax11_table[] = { 1,
+};
+static const YYINT err_syntax11_check[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const err_syntax11_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const err_syntax11_rule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 12 "err_syntax11.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 249 "err_syntax11.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/err_syntax11.tab.h b/contrib/byacc/test/yacc/err_syntax11.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax11.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax12.error b/contrib/byacc/test/yacc/err_syntax12.error
new file mode 100644
index 000000000000..9399e82e1d76
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax12.error
@@ -0,0 +1 @@
+YACC: w - line 7 of "./test/err_syntax12.y", the value of text has been redeclared
diff --git a/contrib/byacc/test/yacc/err_syntax12.output b/contrib/byacc/test/yacc/err_syntax12.output
new file mode 100644
index 000000000000..a71ff2a40019
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax12.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+3 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/yacc/err_syntax12.tab.c b/contrib/byacc/test/yacc/err_syntax12.tab.c
new file mode 100644
index 000000000000..784a45ffe908
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax12.tab.c
@@ -0,0 +1,514 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse err_syntax12_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex err_syntax12_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror err_syntax12_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar err_syntax12_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval err_syntax12_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval err_syntax12_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug err_syntax12_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs err_syntax12_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag err_syntax12_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs err_syntax12_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen err_syntax12_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred err_syntax12_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto err_syntax12_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex err_syntax12_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex err_syntax12_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex err_syntax12_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable err_syntax12_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck err_syntax12_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname err_syntax12_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule err_syntax12_rule
+#endif /* yyrule */
+#define YYPREFIX "err_syntax12_"
+
+#define YYPURE 0
+
+#line 2 "err_syntax12.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 104 "err_syntax12.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define text 456
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT err_syntax12_lhs[] = { -1,
+ 0,
+};
+static const YYINT err_syntax12_len[] = { 2,
+ 1,
+};
+static const YYINT err_syntax12_defred[] = { 0,
+ 1, 0,
+};
+static const YYINT err_syntax12_dgoto[] = { 2,
+};
+static const YYINT err_syntax12_sindex[] = { -256,
+ 0, 0,
+};
+static const YYINT err_syntax12_rindex[] = { 0,
+ 0, 0,
+};
+static const YYINT err_syntax12_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const YYINT err_syntax12_table[] = { 1,
+};
+static const YYINT err_syntax12_check[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 456
+#define YYUNDFTOKEN 459
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const err_syntax12_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"text",0,0,"illegal-symbol",
+};
+static const char *const err_syntax12_rule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 12 "err_syntax12.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 255 "err_syntax12.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/err_syntax12.tab.h b/contrib/byacc/test/yacc/err_syntax12.tab.h
new file mode 100644
index 000000000000..c273c08742ab
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax12.tab.h
@@ -0,0 +1 @@
+#define text 456
diff --git a/contrib/byacc/test/yacc/err_syntax13.error b/contrib/byacc/test/yacc/err_syntax13.error
new file mode 100644
index 000000000000..dd062569c1dc
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax13.error
@@ -0,0 +1 @@
+YACC: e - line 7 of "./test/err_syntax13.y", the start symbol text is a token
diff --git a/contrib/byacc/test/yacc/err_syntax13.output b/contrib/byacc/test/yacc/err_syntax13.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax13.output
diff --git a/contrib/byacc/test/yacc/err_syntax13.tab.c b/contrib/byacc/test/yacc/err_syntax13.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax13.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax13.tab.h b/contrib/byacc/test/yacc/err_syntax13.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax13.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax14.error b/contrib/byacc/test/yacc/err_syntax14.error
new file mode 100644
index 000000000000..787a21760b3d
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax14.error
@@ -0,0 +1,2 @@
+YACC: w - line 7 of "./test/err_syntax14.y", the start symbol has been redeclared
+YACC: e - the start symbol text2 is undefined
diff --git a/contrib/byacc/test/yacc/err_syntax14.output b/contrib/byacc/test/yacc/err_syntax14.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax14.output
diff --git a/contrib/byacc/test/yacc/err_syntax14.tab.c b/contrib/byacc/test/yacc/err_syntax14.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax14.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax14.tab.h b/contrib/byacc/test/yacc/err_syntax14.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax14.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax15.error b/contrib/byacc/test/yacc/err_syntax15.error
new file mode 100644
index 000000000000..63600f1bd126
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax15.error
@@ -0,0 +1 @@
+YACC: e - line 9 of "./test/err_syntax15.y", no grammar has been specified
diff --git a/contrib/byacc/test/yacc/err_syntax15.output b/contrib/byacc/test/yacc/err_syntax15.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax15.output
diff --git a/contrib/byacc/test/yacc/err_syntax15.tab.c b/contrib/byacc/test/yacc/err_syntax15.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax15.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax15.tab.h b/contrib/byacc/test/yacc/err_syntax15.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax15.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax16.error b/contrib/byacc/test/yacc/err_syntax16.error
new file mode 100644
index 000000000000..b8dd094b9409
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax16.error
@@ -0,0 +1 @@
+YACC: e - line 14 of "./test/err_syntax16.y", a token appears on the lhs of a production
diff --git a/contrib/byacc/test/yacc/err_syntax16.output b/contrib/byacc/test/yacc/err_syntax16.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax16.output
diff --git a/contrib/byacc/test/yacc/err_syntax16.tab.c b/contrib/byacc/test/yacc/err_syntax16.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax16.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax16.tab.h b/contrib/byacc/test/yacc/err_syntax16.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax16.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax17.error b/contrib/byacc/test/yacc/err_syntax17.error
new file mode 100644
index 000000000000..24032f613202
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax17.error
@@ -0,0 +1,3 @@
+YACC: e - line 8 of "./test/err_syntax17.y", unterminated action
+S: { error
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax17.output b/contrib/byacc/test/yacc/err_syntax17.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax17.output
diff --git a/contrib/byacc/test/yacc/err_syntax17.tab.c b/contrib/byacc/test/yacc/err_syntax17.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax17.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax17.tab.h b/contrib/byacc/test/yacc/err_syntax17.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax17.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax18.error b/contrib/byacc/test/yacc/err_syntax18.error
new file mode 100644
index 000000000000..305b4cf45e3c
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax18.error
@@ -0,0 +1 @@
+YACC: w - line 9 of "./test/err_syntax18.y", $4 references beyond the end of the current rule
diff --git a/contrib/byacc/test/yacc/err_syntax18.output b/contrib/byacc/test/yacc/err_syntax18.output
new file mode 100644
index 000000000000..09ed7d4c70a0
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax18.output
@@ -0,0 +1,43 @@
+ 0 $accept : expr $end
+
+ 1 expr : '(' expr ')'
+
+state 0
+ $accept : . expr $end (0)
+
+ '(' shift 1
+ . error
+
+ expr goto 2
+
+
+state 1
+ expr : '(' . expr ')' (1)
+
+ '(' shift 1
+ . error
+
+ expr goto 3
+
+
+state 2
+ $accept : expr . $end (0)
+
+ $end accept
+
+
+state 3
+ expr : '(' expr . ')' (1)
+
+ ')' shift 4
+ . error
+
+
+state 4
+ expr : '(' expr ')' . (1)
+
+ . reduce 1
+
+
+4 terminals, 2 nonterminals
+2 grammar rules, 5 states
diff --git a/contrib/byacc/test/yacc/err_syntax18.tab.c b/contrib/byacc/test/yacc/err_syntax18.tab.c
new file mode 100644
index 000000000000..fb7b06c40cf3
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax18.tab.c
@@ -0,0 +1,515 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse err_syntax18_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex err_syntax18_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror err_syntax18_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar err_syntax18_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval err_syntax18_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval err_syntax18_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug err_syntax18_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs err_syntax18_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag err_syntax18_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs err_syntax18_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen err_syntax18_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred err_syntax18_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto err_syntax18_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex err_syntax18_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex err_syntax18_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex err_syntax18_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable err_syntax18_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck err_syntax18_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname err_syntax18_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule err_syntax18_rule
+#endif /* yyrule */
+#define YYPREFIX "err_syntax18_"
+
+#define YYPURE 0
+
+#line 2 "err_syntax18.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 104 "err_syntax18.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT err_syntax18_lhs[] = { -1,
+ 0,
+};
+static const YYINT err_syntax18_len[] = { 2,
+ 3,
+};
+static const YYINT err_syntax18_defred[] = { 0,
+ 0, 0, 0, 1,
+};
+static const YYINT err_syntax18_dgoto[] = { 2,
+};
+static const YYINT err_syntax18_sindex[] = { -40,
+ -40, 0, -39, 0,
+};
+static const YYINT err_syntax18_rindex[] = { 0,
+ 0, 0, 0, 0,
+};
+static const YYINT err_syntax18_gindex[] = { 2,
+};
+#define YYTABLESIZE 3
+static const YYINT err_syntax18_table[] = { 1,
+ 0, 4, 3,
+};
+static const YYINT err_syntax18_check[] = { 40,
+ -1, 41, 1,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const err_syntax18_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'('","')'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const err_syntax18_rule[] = {
+"$accept : expr",
+"expr : '(' expr ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 13 "err_syntax18.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 251 "err_syntax18.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 1:
+#line 9 "err_syntax18.y"
+ { yyval = yystack.l_mark[1]; }
+break;
+#line 457 "err_syntax18.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/err_syntax18.tab.h b/contrib/byacc/test/yacc/err_syntax18.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax18.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax19.error b/contrib/byacc/test/yacc/err_syntax19.error
new file mode 100644
index 000000000000..895c8fe16264
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax19.error
@@ -0,0 +1,3 @@
+YACC: e - line 9 of "./test/err_syntax19.y", illegal $-name
+ { $$ = $<oops>; }
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax19.output b/contrib/byacc/test/yacc/err_syntax19.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax19.output
diff --git a/contrib/byacc/test/yacc/err_syntax19.tab.c b/contrib/byacc/test/yacc/err_syntax19.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax19.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax19.tab.h b/contrib/byacc/test/yacc/err_syntax19.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax19.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax2.error b/contrib/byacc/test/yacc/err_syntax2.error
new file mode 100644
index 000000000000..fefda9fcf445
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax2.error
@@ -0,0 +1,3 @@
+YACC: e - line 1 of "./test/err_syntax2.y", unmatched /*
+%{ /*
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax2.output b/contrib/byacc/test/yacc/err_syntax2.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax2.output
diff --git a/contrib/byacc/test/yacc/err_syntax2.tab.c b/contrib/byacc/test/yacc/err_syntax2.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax2.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax2.tab.h b/contrib/byacc/test/yacc/err_syntax2.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax2.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax20.error b/contrib/byacc/test/yacc/err_syntax20.error
new file mode 100644
index 000000000000..76dac8152de8
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax20.error
@@ -0,0 +1 @@
+YACC: w - the symbol recur is undefined
diff --git a/contrib/byacc/test/yacc/err_syntax20.output b/contrib/byacc/test/yacc/err_syntax20.output
new file mode 100644
index 000000000000..cfe62800c64f
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax20.output
@@ -0,0 +1,41 @@
+ 0 $accept : expr $end
+
+ 1 expr : '(' recur ')'
+
+state 0
+ $accept : . expr $end (0)
+
+ '(' shift 1
+ . error
+
+ expr goto 2
+
+
+state 1
+ expr : '(' . recur ')' (1)
+
+ recur shift 3
+ . error
+
+
+state 2
+ $accept : expr . $end (0)
+
+ $end accept
+
+
+state 3
+ expr : '(' recur . ')' (1)
+
+ ')' shift 4
+ . error
+
+
+state 4
+ expr : '(' recur ')' . (1)
+
+ . reduce 1
+
+
+5 terminals, 2 nonterminals
+2 grammar rules, 5 states
diff --git a/contrib/byacc/test/yacc/err_syntax20.tab.c b/contrib/byacc/test/yacc/err_syntax20.tab.c
new file mode 100644
index 000000000000..85ea1ba908e1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax20.tab.c
@@ -0,0 +1,511 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse err_syntax20_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex err_syntax20_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror err_syntax20_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar err_syntax20_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval err_syntax20_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval err_syntax20_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug err_syntax20_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs err_syntax20_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag err_syntax20_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs err_syntax20_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen err_syntax20_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred err_syntax20_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto err_syntax20_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex err_syntax20_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex err_syntax20_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex err_syntax20_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable err_syntax20_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck err_syntax20_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname err_syntax20_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule err_syntax20_rule
+#endif /* yyrule */
+#define YYPREFIX "err_syntax20_"
+
+#define YYPURE 0
+
+#line 2 "err_syntax20.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 104 "err_syntax20.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define recur 257
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT err_syntax20_lhs[] = { -1,
+ 0,
+};
+static const YYINT err_syntax20_len[] = { 2,
+ 3,
+};
+static const YYINT err_syntax20_defred[] = { 0,
+ 0, 0, 0, 1,
+};
+static const YYINT err_syntax20_dgoto[] = { 2,
+};
+static const YYINT err_syntax20_sindex[] = { -40,
+ -256, 0, -39, 0,
+};
+static const YYINT err_syntax20_rindex[] = { 0,
+ 0, 0, 0, 0,
+};
+static const YYINT err_syntax20_gindex[] = { 0,
+};
+#define YYTABLESIZE 2
+static const YYINT err_syntax20_table[] = { 1,
+ 3, 4,
+};
+static const YYINT err_syntax20_check[] = { 40,
+ 257, 41,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 257
+#define YYUNDFTOKEN 260
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const err_syntax20_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'('","')'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"recur",0,0,
+"illegal-symbol",
+};
+static const char *const err_syntax20_rule[] = {
+"$accept : expr",
+"expr : '(' recur ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 16 "err_syntax20.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 247 "err_syntax20.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 1:
+#line 12 "err_syntax20.y"
+ { yystack.l_mark[-1].rechk = 3; }
+break;
+#line 453 "err_syntax20.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/err_syntax20.tab.h b/contrib/byacc/test/yacc/err_syntax20.tab.h
new file mode 100644
index 000000000000..60dabd611dd2
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax20.tab.h
@@ -0,0 +1 @@
+#define recur 257
diff --git a/contrib/byacc/test/yacc/err_syntax21.error b/contrib/byacc/test/yacc/err_syntax21.error
new file mode 100644
index 000000000000..162d82d0c96d
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax21.error
@@ -0,0 +1 @@
+YACC: e - line 12 of "./test/err_syntax21.y", $0 is untyped
diff --git a/contrib/byacc/test/yacc/err_syntax21.output b/contrib/byacc/test/yacc/err_syntax21.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax21.output
diff --git a/contrib/byacc/test/yacc/err_syntax21.tab.c b/contrib/byacc/test/yacc/err_syntax21.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax21.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax21.tab.h b/contrib/byacc/test/yacc/err_syntax21.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax21.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax22.error b/contrib/byacc/test/yacc/err_syntax22.error
new file mode 100644
index 000000000000..9c71619c4e25
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax22.error
@@ -0,0 +1 @@
+YACC: e - line 17 of "./test/err_syntax22.y", $2 (recur) is untyped
diff --git a/contrib/byacc/test/yacc/err_syntax22.output b/contrib/byacc/test/yacc/err_syntax22.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax22.output
diff --git a/contrib/byacc/test/yacc/err_syntax22.tab.c b/contrib/byacc/test/yacc/err_syntax22.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax22.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax22.tab.h b/contrib/byacc/test/yacc/err_syntax22.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax22.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax23.error b/contrib/byacc/test/yacc/err_syntax23.error
new file mode 100644
index 000000000000..bcde6e7fac40
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax23.error
@@ -0,0 +1 @@
+YACC: e - line 18 of "./test/err_syntax23.y", $$ is untyped
diff --git a/contrib/byacc/test/yacc/err_syntax23.output b/contrib/byacc/test/yacc/err_syntax23.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax23.output
diff --git a/contrib/byacc/test/yacc/err_syntax23.tab.c b/contrib/byacc/test/yacc/err_syntax23.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax23.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax23.tab.h b/contrib/byacc/test/yacc/err_syntax23.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax23.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax24.error b/contrib/byacc/test/yacc/err_syntax24.error
new file mode 100644
index 000000000000..bdd3aeda0db3
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax24.error
@@ -0,0 +1,2 @@
+YACC: w - line 21 of "./test/err_syntax24.y", the default action assigns an undefined value to $$
+YACC: e - line 22 of "./test/err_syntax24.y", $$ is untyped
diff --git a/contrib/byacc/test/yacc/err_syntax24.output b/contrib/byacc/test/yacc/err_syntax24.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax24.output
diff --git a/contrib/byacc/test/yacc/err_syntax24.tab.c b/contrib/byacc/test/yacc/err_syntax24.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax24.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax24.tab.h b/contrib/byacc/test/yacc/err_syntax24.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax24.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax25.error b/contrib/byacc/test/yacc/err_syntax25.error
new file mode 100644
index 000000000000..ea45a70310de
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax25.error
@@ -0,0 +1,3 @@
+YACC: e - line 11 of "./test/err_syntax25.y", too many %union declarations
+%union {
+^
diff --git a/contrib/byacc/test/yacc/err_syntax25.output b/contrib/byacc/test/yacc/err_syntax25.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax25.output
diff --git a/contrib/byacc/test/yacc/err_syntax25.tab.c b/contrib/byacc/test/yacc/err_syntax25.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax25.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax25.tab.h b/contrib/byacc/test/yacc/err_syntax25.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax25.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax26.error b/contrib/byacc/test/yacc/err_syntax26.error
new file mode 100644
index 000000000000..cddd5741bf7a
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax26.error
@@ -0,0 +1 @@
+YACC: e - line 6 of "./test/err_syntax26.y", unexpected end-of-file
diff --git a/contrib/byacc/test/yacc/err_syntax26.output b/contrib/byacc/test/yacc/err_syntax26.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax26.output
diff --git a/contrib/byacc/test/yacc/err_syntax26.tab.c b/contrib/byacc/test/yacc/err_syntax26.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax26.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax26.tab.h b/contrib/byacc/test/yacc/err_syntax26.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax26.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax27.error b/contrib/byacc/test/yacc/err_syntax27.error
new file mode 100644
index 000000000000..4737f99b9a37
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax27.error
@@ -0,0 +1 @@
+YACC: e - line 3 of "./test/err_syntax27.y", missing '}'
diff --git a/contrib/byacc/test/yacc/err_syntax27.output b/contrib/byacc/test/yacc/err_syntax27.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax27.output
diff --git a/contrib/byacc/test/yacc/err_syntax27.tab.c b/contrib/byacc/test/yacc/err_syntax27.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax27.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax27.tab.h b/contrib/byacc/test/yacc/err_syntax27.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax27.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax3.error b/contrib/byacc/test/yacc/err_syntax3.error
new file mode 100644
index 000000000000..6926214f5e7b
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax3.error
@@ -0,0 +1,3 @@
+YACC: e - line 6 of "./test/err_syntax3.y", unterminated string
+%token <text> '(' '*' '&
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax3.output b/contrib/byacc/test/yacc/err_syntax3.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax3.output
diff --git a/contrib/byacc/test/yacc/err_syntax3.tab.c b/contrib/byacc/test/yacc/err_syntax3.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax3.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax3.tab.h b/contrib/byacc/test/yacc/err_syntax3.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax3.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax4.error b/contrib/byacc/test/yacc/err_syntax4.error
new file mode 100644
index 000000000000..72b683ee7d4b
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax4.error
@@ -0,0 +1,3 @@
+YACC: e - line 1 of "./test/err_syntax4.y", unmatched %{
+%{
+^
diff --git a/contrib/byacc/test/yacc/err_syntax4.output b/contrib/byacc/test/yacc/err_syntax4.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax4.output
diff --git a/contrib/byacc/test/yacc/err_syntax4.tab.c b/contrib/byacc/test/yacc/err_syntax4.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax4.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax4.tab.h b/contrib/byacc/test/yacc/err_syntax4.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax4.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax5.error b/contrib/byacc/test/yacc/err_syntax5.error
new file mode 100644
index 000000000000..fd3bf0df6b9f
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax5.error
@@ -0,0 +1,3 @@
+YACC: e - line 6 of "./test/err_syntax5.y", unterminated %union declaration
+%union {
+^
diff --git a/contrib/byacc/test/yacc/err_syntax5.output b/contrib/byacc/test/yacc/err_syntax5.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax5.output
diff --git a/contrib/byacc/test/yacc/err_syntax5.tab.c b/contrib/byacc/test/yacc/err_syntax5.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax5.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax5.tab.h b/contrib/byacc/test/yacc/err_syntax5.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax5.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax6.error b/contrib/byacc/test/yacc/err_syntax6.error
new file mode 100644
index 000000000000..ae83bd2a3735
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax6.error
@@ -0,0 +1,3 @@
+YACC: e - line 6 of "./test/err_syntax6.y", illegal tag
+%token <text) '(' '*' '&
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax6.output b/contrib/byacc/test/yacc/err_syntax6.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax6.output
diff --git a/contrib/byacc/test/yacc/err_syntax6.tab.c b/contrib/byacc/test/yacc/err_syntax6.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax6.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax6.tab.h b/contrib/byacc/test/yacc/err_syntax6.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax6.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax7.error b/contrib/byacc/test/yacc/err_syntax7.error
new file mode 100644
index 000000000000..fb6342288f52
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7.error
@@ -0,0 +1,3 @@
+YACC: e - line 6 of "./test/err_syntax7.y", illegal character
+%token <text> '\777'
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax7.output b/contrib/byacc/test/yacc/err_syntax7.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7.output
diff --git a/contrib/byacc/test/yacc/err_syntax7.tab.c b/contrib/byacc/test/yacc/err_syntax7.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax7.tab.h b/contrib/byacc/test/yacc/err_syntax7.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax7a.error b/contrib/byacc/test/yacc/err_syntax7a.error
new file mode 100644
index 000000000000..f6adba64ddc1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7a.error
@@ -0,0 +1,3 @@
+YACC: e - line 6 of "./test/err_syntax7a.y", illegal character
+%token <text> '\xfff'
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax7a.output b/contrib/byacc/test/yacc/err_syntax7a.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7a.output
diff --git a/contrib/byacc/test/yacc/err_syntax7a.tab.c b/contrib/byacc/test/yacc/err_syntax7a.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7a.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax7a.tab.h b/contrib/byacc/test/yacc/err_syntax7a.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7a.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax7b.error b/contrib/byacc/test/yacc/err_syntax7b.error
new file mode 100644
index 000000000000..f3e512fd1a71
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7b.error
@@ -0,0 +1,3 @@
+YACC: e - line 6 of "./test/err_syntax7b.y", illegal character
+%token <text> '\x.'
+ ^
diff --git a/contrib/byacc/test/yacc/err_syntax7b.output b/contrib/byacc/test/yacc/err_syntax7b.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7b.output
diff --git a/contrib/byacc/test/yacc/err_syntax7b.tab.c b/contrib/byacc/test/yacc/err_syntax7b.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7b.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax7b.tab.h b/contrib/byacc/test/yacc/err_syntax7b.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax7b.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax8.error b/contrib/byacc/test/yacc/err_syntax8.error
new file mode 100644
index 000000000000..53a3a328d05e
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8.error
@@ -0,0 +1 @@
+YACC: e - line 6 of "./test/err_syntax8.y", illegal use of reserved symbol .
diff --git a/contrib/byacc/test/yacc/err_syntax8.output b/contrib/byacc/test/yacc/err_syntax8.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8.output
diff --git a/contrib/byacc/test/yacc/err_syntax8.tab.c b/contrib/byacc/test/yacc/err_syntax8.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax8.tab.h b/contrib/byacc/test/yacc/err_syntax8.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax8a.error b/contrib/byacc/test/yacc/err_syntax8a.error
new file mode 100644
index 000000000000..3135551633f0
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8a.error
@@ -0,0 +1 @@
+YACC: e - line 6 of "./test/err_syntax8a.y", illegal use of reserved symbol $$123
diff --git a/contrib/byacc/test/yacc/err_syntax8a.output b/contrib/byacc/test/yacc/err_syntax8a.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8a.output
diff --git a/contrib/byacc/test/yacc/err_syntax8a.tab.c b/contrib/byacc/test/yacc/err_syntax8a.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8a.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax8a.tab.h b/contrib/byacc/test/yacc/err_syntax8a.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax8a.tab.h
diff --git a/contrib/byacc/test/yacc/err_syntax9.error b/contrib/byacc/test/yacc/err_syntax9.error
new file mode 100644
index 000000000000..43696bd1f4c3
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax9.error
@@ -0,0 +1 @@
+YACC: e - line 7 of "./test/err_syntax9.y", the start symbol text cannot be declared to be a token
diff --git a/contrib/byacc/test/yacc/err_syntax9.output b/contrib/byacc/test/yacc/err_syntax9.output
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax9.output
diff --git a/contrib/byacc/test/yacc/err_syntax9.tab.c b/contrib/byacc/test/yacc/err_syntax9.tab.c
new file mode 100644
index 000000000000..6c35f23329b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax9.tab.c
@@ -0,0 +1,15 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
diff --git a/contrib/byacc/test/yacc/err_syntax9.tab.h b/contrib/byacc/test/yacc/err_syntax9.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/err_syntax9.tab.h
diff --git a/contrib/byacc/test/yacc/error.error b/contrib/byacc/test/yacc/error.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/error.error
diff --git a/contrib/byacc/test/yacc/error.output b/contrib/byacc/test/yacc/error.output
new file mode 100644
index 000000000000..0c4db6225e24
--- /dev/null
+++ b/contrib/byacc/test/yacc/error.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+2 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/yacc/error.tab.c b/contrib/byacc/test/yacc/error.tab.c
new file mode 100644
index 000000000000..e7aa39508c42
--- /dev/null
+++ b/contrib/byacc/test/yacc/error.tab.c
@@ -0,0 +1,508 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse error_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex error_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror error_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar error_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval error_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval error_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug error_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs error_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag error_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs error_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen error_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred error_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto error_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex error_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex error_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex error_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable error_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck error_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname error_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule error_rule
+#endif /* yyrule */
+#define YYPREFIX "error_"
+
+#define YYPURE 0
+
+#line 2 "error.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 104 "error.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT error_lhs[] = { -1,
+ 0,
+};
+static const YYINT error_len[] = { 2,
+ 1,
+};
+static const YYINT error_defred[] = { 0,
+ 1, 0,
+};
+static const YYINT error_dgoto[] = { 2,
+};
+static const YYINT error_sindex[] = { -256,
+ 0, 0,
+};
+static const YYINT error_rindex[] = { 0,
+ 0, 0,
+};
+static const YYINT error_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const YYINT error_table[] = { 1,
+};
+static const YYINT error_check[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const error_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const error_rule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 8 "error.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 249 "error.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/error.tab.h b/contrib/byacc/test/yacc/error.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/error.tab.h
diff --git a/contrib/byacc/test/yacc/grammar.dot b/contrib/byacc/test/yacc/grammar.dot
new file mode 100644
index 000000000000..1988e12ddd6b
--- /dev/null
+++ b/contrib/byacc/test/yacc/grammar.dot
@@ -0,0 +1,906 @@
+digraph test-grammar {
+ edge [fontsize=10];
+ node [shape=box,fontsize=10];
+ orientation=landscape;
+ rankdir=LR;
+ /*
+ margin=0.2;
+ page="8.27,11.69"; // for A4 printing
+ ratio=auto;
+ */
+
+ q0 [label="0:\l $accept -> . program $end\l program -> . { $end }\l program -> . translation_unit\l translation_unit -> . external_declaration\l translation_unit -> . translation_unit external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q1 [label="1:\l external_declaration -> error . T_MATCHRBRACE\l external_declaration -> error . ';'\l"];
+ q2 [label="2:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q3 [label="3:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l pointer -> '*' . opt_type_qualifiers\l pointer -> '*' . opt_type_qualifiers pointer\l opt_type_qualifiers -> . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l opt_type_qualifiers -> . type_qualifier_list\l type_qualifier_list -> . type_qualifier\l type_qualifier_list -> . type_qualifier_list type_qualifier\l"];
+ q4 [label="4:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_or_ref -> '&' . any_id\l"];
+ q5 [label="5:\l any_id -> T_IDENTIFIER . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q6 [label="6:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q7 [label="7:\l type_qualifier -> T_DEFINE_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q8 [label="8:\l storage_class -> T_AUTO . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q9 [label="9:\l linkage_specification -> T_EXTERN . T_STRING_LITERAL braces\l linkage_specification -> T_EXTERN . T_STRING_LITERAL declaration\l storage_class -> T_EXTERN . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q10 [label="10:\l storage_class -> T_REGISTER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q11 [label="11:\l storage_class -> T_STATIC . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q12 [label="12:\l any_typedef -> T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"];
+ q13 [label="13:\l storage_class -> T_INLINE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q14 [label="14:\l any_typedef -> T_EXTENSION . T_TYPEDEF\l storage_class -> T_EXTENSION . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q15 [label="15:\l type_specifier -> T_CHAR . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q16 [label="16:\l type_specifier -> T_DOUBLE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q17 [label="17:\l type_specifier -> T_FLOAT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q18 [label="18:\l type_specifier -> T_INT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q19 [label="19:\l type_specifier -> T_VOID . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q20 [label="20:\l type_specifier -> T_LONG . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q21 [label="21:\l type_specifier -> T_SHORT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q22 [label="22:\l type_specifier -> T_SIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q23 [label="23:\l type_specifier -> T_UNSIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q24 [label="24:\l enumeration -> T_ENUM . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"];
+ q25 [label="25:\l struct_or_union -> T_STRUCT . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"];
+ q26 [label="26:\l struct_or_union -> T_UNION . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"];
+ q27 [label="27:\l type_specifier -> T_Bool . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q28 [label="28:\l type_specifier -> T_Complex . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q29 [label="29:\l type_specifier -> T_Imaginary . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q30 [label="30:\l type_qualifier -> T_TYPE_QUALIFIER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q31 [label="31:\l external_declaration -> T_ASM . T_ASMARG ';'\l"];
+ q32 [label="32:\l external_declaration -> ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q33 [label="33:\l $accept -> program . $end\l"];
+ q34 [label="34:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l function_definition -> decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q35 [label="35:\l decl_specifiers -> decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q36 [label="36:\l decl_specifier -> storage_class . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q37 [label="37:\l decl_specifier -> type_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q38 [label="38:\l decl_specifier -> type_qualifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q39 [label="39:\l type_specifier -> struct_or_union_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q40 [label="40:\l type_specifier -> enum_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q41 [label="41:\l $$4 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l"];
+ q42 [label="42:\l declarator -> direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"];
+ q43 [label="43:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union . any_id braces\l struct_or_union_specifier -> struct_or_union . braces\l struct_or_union_specifier -> struct_or_union . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"];
+ q44 [label="44:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q45 [label="45:\l identifier_or_ref -> any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q46 [label="46:\l direct_declarator -> identifier_or_ref . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q47 [label="47:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration . any_id braces\l enum_specifier -> enumeration . braces\l enum_specifier -> enumeration . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"];
+ q48 [label="48:\l program -> translation_unit . { $end }\l translation_unit -> translation_unit . external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q49 [label="49:\l translation_unit -> external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q50 [label="50:\l external_declaration -> declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q51 [label="51:\l external_declaration -> function_definition . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q52 [label="52:\l external_declaration -> linkage_specification . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q53 [label="53:\l declaration -> any_typedef . decl_specifiers $$1 opt_declarator_list ';'\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"];
+ q54 [label="54:\l external_declaration -> error T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q55 [label="55:\l external_declaration -> error ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q56 [label="56:\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q57 [label="57:\l direct_declarator -> '(' declarator . ')'\l"];
+ q58 [label="58:\l type_qualifier_list -> type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q59 [label="59:\l pointer -> . '*' opt_type_qualifiers\l pointer -> '*' opt_type_qualifiers . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l pointer -> . '*' opt_type_qualifiers pointer\l pointer -> '*' opt_type_qualifiers . pointer\l"];
+ q60 [label="60:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l opt_type_qualifiers -> type_qualifier_list . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l type_qualifier_list -> type_qualifier_list . type_qualifier\l"];
+ q61 [label="61:\l identifier_or_ref -> '&' any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q62 [label="62:\l braces -> . T_LBRACE T_MATCHRBRACE\l linkage_specification -> T_EXTERN T_STRING_LITERAL . braces\l linkage_specification -> T_EXTERN T_STRING_LITERAL . declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"];
+ q63 [label="63:\l any_typedef -> T_EXTENSION T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"];
+ q64 [label="64:\l external_declaration -> T_ASM T_ASMARG . ';'\l"];
+ q65 [label="65:\l storage_class -> T_EXTERN . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q66 [label="66:\l storage_class -> T_EXTENSION . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q67 [label="67:\l declaration -> decl_specifiers ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q68 [label="68:\l decl_specifiers -> decl_specifiers decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q69 [label="69:\l declaration -> decl_specifiers init_declarator_list . ';'\l init_declarator_list -> init_declarator_list . ',' init_declarator\l"];
+ q70 [label="70:\l init_declarator_list -> init_declarator . { ',' ';' }\l"];
+ q71 [label="71:\l $$2 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"];
+ q72 [label="72:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"];
+ q73 [label="73:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l direct_declarator -> direct_declarator '(' . parameter_type_list ')'\l direct_declarator -> direct_declarator '(' . opt_identifier_list ')'\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l opt_identifier_list -> . { ')' }\l opt_identifier_list -> . identifier_list\l identifier_list -> . any_id\l identifier_list -> . identifier_list ',' any_id\l"];
+ q74 [label="74:\l direct_declarator -> direct_declarator T_BRACKETS . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q75 [label="75:\l braces -> T_LBRACE . T_MATCHRBRACE\l"];
+ q76 [label="76:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union any_id . braces\l struct_or_union_specifier -> struct_or_union any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q77 [label="77:\l struct_or_union_specifier -> struct_or_union braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q78 [label="78:\l declarator -> pointer direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"];
+ q79 [label="79:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration any_id . braces\l enum_specifier -> enumeration any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q80 [label="80:\l enum_specifier -> enumeration braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q81 [label="81:\l translation_unit -> translation_unit external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q82 [label="82:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q83 [label="83:\l $$1 -> . { ';' T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l declaration -> any_typedef decl_specifiers . $$1 opt_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"];
+ q84 [label="84:\l direct_declarator -> '(' declarator ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q85 [label="85:\l pointer -> '*' opt_type_qualifiers pointer . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l"];
+ q86 [label="86:\l type_qualifier_list -> type_qualifier_list type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q87 [label="87:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q88 [label="88:\l linkage_specification -> T_EXTERN T_STRING_LITERAL declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q89 [label="89:\l linkage_specification -> T_EXTERN T_STRING_LITERAL braces . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q90 [label="90:\l external_declaration -> T_ASM T_ASMARG ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q91 [label="91:\l declaration -> decl_specifiers init_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q92 [label="92:\l init_declarator_list -> init_declarator_list ',' . init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q93 [label="93:\l $$5 -> . { T_INITIALIZER }\l init_declarator -> declarator '=' . $$5 T_INITIALIZER\l"];
+ q94 [label="94:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"];
+ q95 [label="95:\l opt_declaration_list -> T_VA_DCL . { T_LBRACE }\l"];
+ q96 [label="96:\l declaration_list -> declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"];
+ q97 [label="97:\l function_definition -> declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE\l"];
+ q98 [label="98:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l opt_declaration_list -> declaration_list . { T_LBRACE }\l declaration_list -> declaration_list . declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"];
+ q99 [label="99:\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_declaration -> decl_specifiers . declarator\l parameter_declaration -> decl_specifiers . abs_declarator\l parameter_declaration -> decl_specifiers . { ')' ',' }\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"];
+ q100 [label="100:\l direct_declarator -> direct_declarator '(' parameter_type_list . ')'\l"];
+ q101 [label="101:\l parameter_type_list -> parameter_list . { ')' }\l parameter_type_list -> parameter_list . ',' T_ELLIPSIS\l parameter_list -> parameter_list . ',' parameter_declaration\l"];
+ q102 [label="102:\l parameter_list -> parameter_declaration . { ')' ',' }\l"];
+ q103 [label="103:\l direct_declarator -> direct_declarator '(' opt_identifier_list . ')'\l"];
+ q104 [label="104:\l opt_identifier_list -> identifier_list . { ')' }\l identifier_list -> identifier_list . ',' any_id\l"];
+ q105 [label="105:\l identifier_list -> any_id . { ')' ',' }\l"];
+ q106 [label="106:\l braces -> T_LBRACE T_MATCHRBRACE . { ')' ',' ';' T_ASM T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q107 [label="107:\l struct_or_union_specifier -> struct_or_union any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q108 [label="108:\l enum_specifier -> enumeration any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"];
+ q109 [label="109:\l declaration -> any_typedef decl_specifiers $$1 . opt_declarator_list ';'\l opt_declarator_list -> . { ';' }\l opt_declarator_list -> . declarator_list\l declarator_list -> . declarator\l declarator_list -> . declarator_list ',' declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q110 [label="110:\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"];
+ q111 [label="111:\l init_declarator_list -> init_declarator_list ',' init_declarator . { ',' ';' }\l"];
+ q112 [label="112:\l init_declarator -> declarator '=' $$5 . T_INITIALIZER\l"];
+ q113 [label="113:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE\l"];
+ q114 [label="114:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE\l"];
+ q115 [label="115:\l declaration_list -> declaration_list declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"];
+ q116 [label="116:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> '(' . abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> '(' . parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l direct_abs_declarator -> '(' . ')'\l"];
+ q117 [label="117:\l direct_abs_declarator -> T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"];
+ q118 [label="118:\l parameter_declaration -> decl_specifiers declarator . { ')' ',' }\l"];
+ q119 [label="119:\l parameter_declaration -> decl_specifiers abs_declarator . { ')' ',' }\l"];
+ q120 [label="120:\l abs_declarator -> direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"];
+ q121 [label="121:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> pointer . { ')' ',' }\l abs_declarator -> pointer . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"];
+ q122 [label="122:\l direct_declarator -> direct_declarator '(' parameter_type_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q123 [label="123:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> parameter_list ',' . T_ELLIPSIS\l parameter_list -> parameter_list ',' . parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l"];
+ q124 [label="124:\l direct_declarator -> direct_declarator '(' opt_identifier_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"];
+ q125 [label="125:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_list -> identifier_list ',' . any_id\l"];
+ q126 [label="126:\l declarator_list -> declarator . { ',' ';' }\l"];
+ q127 [label="127:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list . ';'\l"];
+ q128 [label="128:\l opt_declarator_list -> declarator_list . { ';' }\l declarator_list -> declarator_list . ',' declarator\l"];
+ q129 [label="129:\l init_declarator -> declarator '=' $$5 T_INITIALIZER . { ',' ';' }\l"];
+ q130 [label="130:\l $$3 -> . { T_MATCHRBRACE }\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE\l"];
+ q131 [label="131:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q132 [label="132:\l direct_abs_declarator -> '(' ')' . { ')' ',' T_BRACKETS '(' }\l"];
+ q133 [label="133:\l direct_abs_declarator -> '(' abs_declarator . ')'\l"];
+ q134 [label="134:\l direct_abs_declarator -> '(' parameter_type_list . ')'\l"];
+ q135 [label="135:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l direct_abs_declarator -> direct_abs_declarator '(' . parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator '(' . ')'\l"];
+ q136 [label="136:\l direct_abs_declarator -> direct_abs_declarator T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"];
+ q137 [label="137:\l abs_declarator -> pointer direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"];
+ q138 [label="138:\l parameter_type_list -> parameter_list ',' T_ELLIPSIS . { ')' }\l"];
+ q139 [label="139:\l parameter_list -> parameter_list ',' parameter_declaration . { ')' ',' }\l"];
+ q140 [label="140:\l identifier_list -> identifier_list ',' any_id . { ')' ',' }\l"];
+ q141 [label="141:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q142 [label="142:\l declarator_list -> declarator_list ',' . declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"];
+ q143 [label="143:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE\l"];
+ q144 [label="144:\l direct_abs_declarator -> '(' abs_declarator ')' . { ')' ',' T_BRACKETS '(' }\l"];
+ q145 [label="145:\l direct_abs_declarator -> '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"];
+ q146 [label="146:\l direct_abs_declarator -> direct_abs_declarator '(' ')' . { ')' ',' T_BRACKETS '(' }\l"];
+ q147 [label="147:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list . ')'\l"];
+ q148 [label="148:\l declarator_list -> declarator_list ',' declarator . { ',' ';' }\l"];
+ q149 [label="149:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"];
+ q150 [label="150:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"];
+
+ q0 -> q1 [label="error"];
+ q0 -> q2 [label="'('"];
+ q0 -> q3 [label="'*'"];
+ q0 -> q4 [label="'&'"];
+ q0 -> q5 [label="T_IDENTIFIER"];
+ q0 -> q6 [label="T_TYPEDEF_NAME"];
+ q0 -> q7 [label="T_DEFINE_NAME"];
+ q0 -> q8 [label="T_AUTO"];
+ q0 -> q9 [label="T_EXTERN"];
+ q0 -> q10 [label="T_REGISTER"];
+ q0 -> q11 [label="T_STATIC"];
+ q0 -> q12 [label="T_TYPEDEF"];
+ q0 -> q13 [label="T_INLINE"];
+ q0 -> q14 [label="T_EXTENSION"];
+ q0 -> q15 [label="T_CHAR"];
+ q0 -> q16 [label="T_DOUBLE"];
+ q0 -> q17 [label="T_FLOAT"];
+ q0 -> q18 [label="T_INT"];
+ q0 -> q19 [label="T_VOID"];
+ q0 -> q20 [label="T_LONG"];
+ q0 -> q21 [label="T_SHORT"];
+ q0 -> q22 [label="T_SIGNED"];
+ q0 -> q23 [label="T_UNSIGNED"];
+ q0 -> q24 [label="T_ENUM"];
+ q0 -> q25 [label="T_STRUCT"];
+ q0 -> q26 [label="T_UNION"];
+ q0 -> q27 [label="T_Bool"];
+ q0 -> q28 [label="T_Complex"];
+ q0 -> q29 [label="T_Imaginary"];
+ q0 -> q30 [label="T_TYPE_QUALIFIER"];
+ q0 -> q31 [label="T_ASM"];
+ q0 -> q32 [label="';'"];
+ q0 -> q33 [label="program"];
+ q0 -> q34 [label="decl_specifiers"];
+ q0 -> q35 [label="decl_specifier"];
+ q0 -> q36 [label="storage_class"];
+ q0 -> q37 [label="type_specifier"];
+ q0 -> q38 [label="type_qualifier"];
+ q0 -> q39 [label="struct_or_union_specifier"];
+ q0 -> q40 [label="enum_specifier"];
+ q0 -> q41 [label="declarator"];
+ q0 -> q42 [label="direct_declarator"];
+ q0 -> q43 [label="struct_or_union"];
+ q0 -> q44 [label="pointer"];
+ q0 -> q45 [label="any_id"];
+ q0 -> q46 [label="identifier_or_ref"];
+ q0 -> q47 [label="enumeration"];
+ q0 -> q48 [label="translation_unit"];
+ q0 -> q49 [label="external_declaration"];
+ q0 -> q50 [label="declaration"];
+ q0 -> q51 [label="function_definition"];
+ q0 -> q52 [label="linkage_specification"];
+ q0 -> q53 [label="any_typedef"];
+ q1 -> q54 [label="T_MATCHRBRACE"];
+ q1 -> q55 [label="';'"];
+ q2 -> q2 [label="'('"];
+ q2 -> q3 [label="'*'"];
+ q2 -> q4 [label="'&'"];
+ q2 -> q5 [label="T_IDENTIFIER"];
+ q2 -> q56 [label="T_TYPEDEF_NAME"];
+ q2 -> q57 [label="declarator"];
+ q2 -> q42 [label="direct_declarator"];
+ q2 -> q44 [label="pointer"];
+ q2 -> q45 [label="any_id"];
+ q2 -> q46 [label="identifier_or_ref"];
+ q3 -> q7 [label="T_DEFINE_NAME"];
+ q3 -> q30 [label="T_TYPE_QUALIFIER"];
+ q3 -> q58 [label="type_qualifier"];
+ q3 -> q59 [label="opt_type_qualifiers"];
+ q3 -> q60 [label="type_qualifier_list"];
+ q4 -> q5 [label="T_IDENTIFIER"];
+ q4 -> q56 [label="T_TYPEDEF_NAME"];
+ q4 -> q61 [label="any_id"];
+ q9 -> q62 [label="T_STRING_LITERAL"];
+ q14 -> q63 [label="T_TYPEDEF"];
+ q31 -> q64 [label="T_ASMARG"];
+ q34 -> q2 [label="'('"];
+ q34 -> q3 [label="'*'"];
+ q34 -> q4 [label="'&'"];
+ q34 -> q5 [label="T_IDENTIFIER"];
+ q34 -> q6 [label="T_TYPEDEF_NAME"];
+ q34 -> q7 [label="T_DEFINE_NAME"];
+ q34 -> q8 [label="T_AUTO"];
+ q34 -> q65 [label="T_EXTERN"];
+ q34 -> q10 [label="T_REGISTER"];
+ q34 -> q11 [label="T_STATIC"];
+ q34 -> q13 [label="T_INLINE"];
+ q34 -> q66 [label="T_EXTENSION"];
+ q34 -> q15 [label="T_CHAR"];
+ q34 -> q16 [label="T_DOUBLE"];
+ q34 -> q17 [label="T_FLOAT"];
+ q34 -> q18 [label="T_INT"];
+ q34 -> q19 [label="T_VOID"];
+ q34 -> q20 [label="T_LONG"];
+ q34 -> q21 [label="T_SHORT"];
+ q34 -> q22 [label="T_SIGNED"];
+ q34 -> q23 [label="T_UNSIGNED"];
+ q34 -> q24 [label="T_ENUM"];
+ q34 -> q25 [label="T_STRUCT"];
+ q34 -> q26 [label="T_UNION"];
+ q34 -> q27 [label="T_Bool"];
+ q34 -> q28 [label="T_Complex"];
+ q34 -> q29 [label="T_Imaginary"];
+ q34 -> q30 [label="T_TYPE_QUALIFIER"];
+ q34 -> q67 [label="';'"];
+ q34 -> q68 [label="decl_specifier"];
+ q34 -> q36 [label="storage_class"];
+ q34 -> q37 [label="type_specifier"];
+ q34 -> q38 [label="type_qualifier"];
+ q34 -> q39 [label="struct_or_union_specifier"];
+ q34 -> q40 [label="enum_specifier"];
+ q34 -> q69 [label="init_declarator_list"];
+ q34 -> q70 [label="init_declarator"];
+ q34 -> q71 [label="declarator"];
+ q34 -> q42 [label="direct_declarator"];
+ q34 -> q43 [label="struct_or_union"];
+ q34 -> q44 [label="pointer"];
+ q34 -> q45 [label="any_id"];
+ q34 -> q46 [label="identifier_or_ref"];
+ q34 -> q47 [label="enumeration"];
+ q41 -> q72 [label="$$4"];
+ q42 -> q73 [label="'('"];
+ q42 -> q74 [label="T_BRACKETS"];
+ q43 -> q5 [label="T_IDENTIFIER"];
+ q43 -> q56 [label="T_TYPEDEF_NAME"];
+ q43 -> q75 [label="T_LBRACE"];
+ q43 -> q76 [label="any_id"];
+ q43 -> q77 [label="braces"];
+ q44 -> q2 [label="'('"];
+ q44 -> q4 [label="'&'"];
+ q44 -> q5 [label="T_IDENTIFIER"];
+ q44 -> q56 [label="T_TYPEDEF_NAME"];
+ q44 -> q78 [label="direct_declarator"];
+ q44 -> q45 [label="any_id"];
+ q44 -> q46 [label="identifier_or_ref"];
+ q47 -> q5 [label="T_IDENTIFIER"];
+ q47 -> q56 [label="T_TYPEDEF_NAME"];
+ q47 -> q75 [label="T_LBRACE"];
+ q47 -> q79 [label="any_id"];
+ q47 -> q80 [label="braces"];
+ q48 -> q1 [label="error"];
+ q48 -> q2 [label="'('"];
+ q48 -> q3 [label="'*'"];
+ q48 -> q4 [label="'&'"];
+ q48 -> q5 [label="T_IDENTIFIER"];
+ q48 -> q6 [label="T_TYPEDEF_NAME"];
+ q48 -> q7 [label="T_DEFINE_NAME"];
+ q48 -> q8 [label="T_AUTO"];
+ q48 -> q9 [label="T_EXTERN"];
+ q48 -> q10 [label="T_REGISTER"];
+ q48 -> q11 [label="T_STATIC"];
+ q48 -> q12 [label="T_TYPEDEF"];
+ q48 -> q13 [label="T_INLINE"];
+ q48 -> q14 [label="T_EXTENSION"];
+ q48 -> q15 [label="T_CHAR"];
+ q48 -> q16 [label="T_DOUBLE"];
+ q48 -> q17 [label="T_FLOAT"];
+ q48 -> q18 [label="T_INT"];
+ q48 -> q19 [label="T_VOID"];
+ q48 -> q20 [label="T_LONG"];
+ q48 -> q21 [label="T_SHORT"];
+ q48 -> q22 [label="T_SIGNED"];
+ q48 -> q23 [label="T_UNSIGNED"];
+ q48 -> q24 [label="T_ENUM"];
+ q48 -> q25 [label="T_STRUCT"];
+ q48 -> q26 [label="T_UNION"];
+ q48 -> q27 [label="T_Bool"];
+ q48 -> q28 [label="T_Complex"];
+ q48 -> q29 [label="T_Imaginary"];
+ q48 -> q30 [label="T_TYPE_QUALIFIER"];
+ q48 -> q31 [label="T_ASM"];
+ q48 -> q32 [label="';'"];
+ q48 -> q34 [label="decl_specifiers"];
+ q48 -> q35 [label="decl_specifier"];
+ q48 -> q36 [label="storage_class"];
+ q48 -> q37 [label="type_specifier"];
+ q48 -> q38 [label="type_qualifier"];
+ q48 -> q39 [label="struct_or_union_specifier"];
+ q48 -> q40 [label="enum_specifier"];
+ q48 -> q41 [label="declarator"];
+ q48 -> q42 [label="direct_declarator"];
+ q48 -> q43 [label="struct_or_union"];
+ q48 -> q44 [label="pointer"];
+ q48 -> q45 [label="any_id"];
+ q48 -> q46 [label="identifier_or_ref"];
+ q48 -> q47 [label="enumeration"];
+ q48 -> q81 [label="external_declaration"];
+ q48 -> q50 [label="declaration"];
+ q48 -> q51 [label="function_definition"];
+ q48 -> q52 [label="linkage_specification"];
+ q48 -> q53 [label="any_typedef"];
+ q53 -> q82 [label="T_TYPEDEF_NAME"];
+ q53 -> q7 [label="T_DEFINE_NAME"];
+ q53 -> q8 [label="T_AUTO"];
+ q53 -> q65 [label="T_EXTERN"];
+ q53 -> q10 [label="T_REGISTER"];
+ q53 -> q11 [label="T_STATIC"];
+ q53 -> q13 [label="T_INLINE"];
+ q53 -> q66 [label="T_EXTENSION"];
+ q53 -> q15 [label="T_CHAR"];
+ q53 -> q16 [label="T_DOUBLE"];
+ q53 -> q17 [label="T_FLOAT"];
+ q53 -> q18 [label="T_INT"];
+ q53 -> q19 [label="T_VOID"];
+ q53 -> q20 [label="T_LONG"];
+ q53 -> q21 [label="T_SHORT"];
+ q53 -> q22 [label="T_SIGNED"];
+ q53 -> q23 [label="T_UNSIGNED"];
+ q53 -> q24 [label="T_ENUM"];
+ q53 -> q25 [label="T_STRUCT"];
+ q53 -> q26 [label="T_UNION"];
+ q53 -> q27 [label="T_Bool"];
+ q53 -> q28 [label="T_Complex"];
+ q53 -> q29 [label="T_Imaginary"];
+ q53 -> q30 [label="T_TYPE_QUALIFIER"];
+ q53 -> q83 [label="decl_specifiers"];
+ q53 -> q35 [label="decl_specifier"];
+ q53 -> q36 [label="storage_class"];
+ q53 -> q37 [label="type_specifier"];
+ q53 -> q38 [label="type_qualifier"];
+ q53 -> q39 [label="struct_or_union_specifier"];
+ q53 -> q40 [label="enum_specifier"];
+ q53 -> q43 [label="struct_or_union"];
+ q53 -> q47 [label="enumeration"];
+ q57 -> q84 [label="')'"];
+ q59 -> q3 [label="'*'"];
+ q59 -> q85 [label="pointer"];
+ q60 -> q7 [label="T_DEFINE_NAME"];
+ q60 -> q30 [label="T_TYPE_QUALIFIER"];
+ q60 -> q86 [label="type_qualifier"];
+ q62 -> q82 [label="T_TYPEDEF_NAME"];
+ q62 -> q7 [label="T_DEFINE_NAME"];
+ q62 -> q8 [label="T_AUTO"];
+ q62 -> q65 [label="T_EXTERN"];
+ q62 -> q10 [label="T_REGISTER"];
+ q62 -> q11 [label="T_STATIC"];
+ q62 -> q12 [label="T_TYPEDEF"];
+ q62 -> q13 [label="T_INLINE"];
+ q62 -> q14 [label="T_EXTENSION"];
+ q62 -> q15 [label="T_CHAR"];
+ q62 -> q16 [label="T_DOUBLE"];
+ q62 -> q17 [label="T_FLOAT"];
+ q62 -> q18 [label="T_INT"];
+ q62 -> q19 [label="T_VOID"];
+ q62 -> q20 [label="T_LONG"];
+ q62 -> q21 [label="T_SHORT"];
+ q62 -> q22 [label="T_SIGNED"];
+ q62 -> q23 [label="T_UNSIGNED"];
+ q62 -> q24 [label="T_ENUM"];
+ q62 -> q25 [label="T_STRUCT"];
+ q62 -> q26 [label="T_UNION"];
+ q62 -> q27 [label="T_Bool"];
+ q62 -> q28 [label="T_Complex"];
+ q62 -> q29 [label="T_Imaginary"];
+ q62 -> q30 [label="T_TYPE_QUALIFIER"];
+ q62 -> q75 [label="T_LBRACE"];
+ q62 -> q87 [label="decl_specifiers"];
+ q62 -> q35 [label="decl_specifier"];
+ q62 -> q36 [label="storage_class"];
+ q62 -> q37 [label="type_specifier"];
+ q62 -> q38 [label="type_qualifier"];
+ q62 -> q39 [label="struct_or_union_specifier"];
+ q62 -> q40 [label="enum_specifier"];
+ q62 -> q43 [label="struct_or_union"];
+ q62 -> q47 [label="enumeration"];
+ q62 -> q88 [label="declaration"];
+ q62 -> q89 [label="braces"];
+ q62 -> q53 [label="any_typedef"];
+ q64 -> q90 [label="';'"];
+ q69 -> q91 [label="';'"];
+ q69 -> q92 [label="','"];
+ q71 -> q93 [label="'='"];
+ q71 -> q94 [label="$$2"];
+ q72 -> q82 [label="T_TYPEDEF_NAME"];
+ q72 -> q7 [label="T_DEFINE_NAME"];
+ q72 -> q8 [label="T_AUTO"];
+ q72 -> q65 [label="T_EXTERN"];
+ q72 -> q10 [label="T_REGISTER"];
+ q72 -> q11 [label="T_STATIC"];
+ q72 -> q12 [label="T_TYPEDEF"];
+ q72 -> q13 [label="T_INLINE"];
+ q72 -> q14 [label="T_EXTENSION"];
+ q72 -> q15 [label="T_CHAR"];
+ q72 -> q16 [label="T_DOUBLE"];
+ q72 -> q17 [label="T_FLOAT"];
+ q72 -> q18 [label="T_INT"];
+ q72 -> q19 [label="T_VOID"];
+ q72 -> q20 [label="T_LONG"];
+ q72 -> q21 [label="T_SHORT"];
+ q72 -> q22 [label="T_SIGNED"];
+ q72 -> q23 [label="T_UNSIGNED"];
+ q72 -> q24 [label="T_ENUM"];
+ q72 -> q25 [label="T_STRUCT"];
+ q72 -> q26 [label="T_UNION"];
+ q72 -> q27 [label="T_Bool"];
+ q72 -> q28 [label="T_Complex"];
+ q72 -> q29 [label="T_Imaginary"];
+ q72 -> q30 [label="T_TYPE_QUALIFIER"];
+ q72 -> q95 [label="T_VA_DCL"];
+ q72 -> q87 [label="decl_specifiers"];
+ q72 -> q35 [label="decl_specifier"];
+ q72 -> q36 [label="storage_class"];
+ q72 -> q37 [label="type_specifier"];
+ q72 -> q38 [label="type_qualifier"];
+ q72 -> q39 [label="struct_or_union_specifier"];
+ q72 -> q40 [label="enum_specifier"];
+ q72 -> q43 [label="struct_or_union"];
+ q72 -> q47 [label="enumeration"];
+ q72 -> q96 [label="declaration"];
+ q72 -> q53 [label="any_typedef"];
+ q72 -> q97 [label="opt_declaration_list"];
+ q72 -> q98 [label="declaration_list"];
+ q73 -> q5 [label="T_IDENTIFIER"];
+ q73 -> q6 [label="T_TYPEDEF_NAME"];
+ q73 -> q7 [label="T_DEFINE_NAME"];
+ q73 -> q8 [label="T_AUTO"];
+ q73 -> q65 [label="T_EXTERN"];
+ q73 -> q10 [label="T_REGISTER"];
+ q73 -> q11 [label="T_STATIC"];
+ q73 -> q13 [label="T_INLINE"];
+ q73 -> q66 [label="T_EXTENSION"];
+ q73 -> q15 [label="T_CHAR"];
+ q73 -> q16 [label="T_DOUBLE"];
+ q73 -> q17 [label="T_FLOAT"];
+ q73 -> q18 [label="T_INT"];
+ q73 -> q19 [label="T_VOID"];
+ q73 -> q20 [label="T_LONG"];
+ q73 -> q21 [label="T_SHORT"];
+ q73 -> q22 [label="T_SIGNED"];
+ q73 -> q23 [label="T_UNSIGNED"];
+ q73 -> q24 [label="T_ENUM"];
+ q73 -> q25 [label="T_STRUCT"];
+ q73 -> q26 [label="T_UNION"];
+ q73 -> q27 [label="T_Bool"];
+ q73 -> q28 [label="T_Complex"];
+ q73 -> q29 [label="T_Imaginary"];
+ q73 -> q30 [label="T_TYPE_QUALIFIER"];
+ q73 -> q99 [label="decl_specifiers"];
+ q73 -> q35 [label="decl_specifier"];
+ q73 -> q36 [label="storage_class"];
+ q73 -> q37 [label="type_specifier"];
+ q73 -> q38 [label="type_qualifier"];
+ q73 -> q39 [label="struct_or_union_specifier"];
+ q73 -> q40 [label="enum_specifier"];
+ q73 -> q100 [label="parameter_type_list"];
+ q73 -> q101 [label="parameter_list"];
+ q73 -> q102 [label="parameter_declaration"];
+ q73 -> q103 [label="opt_identifier_list"];
+ q73 -> q104 [label="identifier_list"];
+ q73 -> q43 [label="struct_or_union"];
+ q73 -> q105 [label="any_id"];
+ q73 -> q47 [label="enumeration"];
+ q75 -> q106 [label="T_MATCHRBRACE"];
+ q76 -> q75 [label="T_LBRACE"];
+ q76 -> q107 [label="braces"];
+ q78 -> q73 [label="'('"];
+ q78 -> q74 [label="T_BRACKETS"];
+ q79 -> q75 [label="T_LBRACE"];
+ q79 -> q108 [label="braces"];
+ q83 -> q82 [label="T_TYPEDEF_NAME"];
+ q83 -> q7 [label="T_DEFINE_NAME"];
+ q83 -> q8 [label="T_AUTO"];
+ q83 -> q65 [label="T_EXTERN"];
+ q83 -> q10 [label="T_REGISTER"];
+ q83 -> q11 [label="T_STATIC"];
+ q83 -> q13 [label="T_INLINE"];
+ q83 -> q66 [label="T_EXTENSION"];
+ q83 -> q15 [label="T_CHAR"];
+ q83 -> q16 [label="T_DOUBLE"];
+ q83 -> q17 [label="T_FLOAT"];
+ q83 -> q18 [label="T_INT"];
+ q83 -> q19 [label="T_VOID"];
+ q83 -> q20 [label="T_LONG"];
+ q83 -> q21 [label="T_SHORT"];
+ q83 -> q22 [label="T_SIGNED"];
+ q83 -> q23 [label="T_UNSIGNED"];
+ q83 -> q24 [label="T_ENUM"];
+ q83 -> q25 [label="T_STRUCT"];
+ q83 -> q26 [label="T_UNION"];
+ q83 -> q27 [label="T_Bool"];
+ q83 -> q28 [label="T_Complex"];
+ q83 -> q29 [label="T_Imaginary"];
+ q83 -> q30 [label="T_TYPE_QUALIFIER"];
+ q83 -> q68 [label="decl_specifier"];
+ q83 -> q36 [label="storage_class"];
+ q83 -> q37 [label="type_specifier"];
+ q83 -> q38 [label="type_qualifier"];
+ q83 -> q39 [label="struct_or_union_specifier"];
+ q83 -> q40 [label="enum_specifier"];
+ q83 -> q43 [label="struct_or_union"];
+ q83 -> q47 [label="enumeration"];
+ q83 -> q109 [label="$$1"];
+ q87 -> q2 [label="'('"];
+ q87 -> q3 [label="'*'"];
+ q87 -> q4 [label="'&'"];
+ q87 -> q5 [label="T_IDENTIFIER"];
+ q87 -> q6 [label="T_TYPEDEF_NAME"];
+ q87 -> q7 [label="T_DEFINE_NAME"];
+ q87 -> q8 [label="T_AUTO"];
+ q87 -> q65 [label="T_EXTERN"];
+ q87 -> q10 [label="T_REGISTER"];
+ q87 -> q11 [label="T_STATIC"];
+ q87 -> q13 [label="T_INLINE"];
+ q87 -> q66 [label="T_EXTENSION"];
+ q87 -> q15 [label="T_CHAR"];
+ q87 -> q16 [label="T_DOUBLE"];
+ q87 -> q17 [label="T_FLOAT"];
+ q87 -> q18 [label="T_INT"];
+ q87 -> q19 [label="T_VOID"];
+ q87 -> q20 [label="T_LONG"];
+ q87 -> q21 [label="T_SHORT"];
+ q87 -> q22 [label="T_SIGNED"];
+ q87 -> q23 [label="T_UNSIGNED"];
+ q87 -> q24 [label="T_ENUM"];
+ q87 -> q25 [label="T_STRUCT"];
+ q87 -> q26 [label="T_UNION"];
+ q87 -> q27 [label="T_Bool"];
+ q87 -> q28 [label="T_Complex"];
+ q87 -> q29 [label="T_Imaginary"];
+ q87 -> q30 [label="T_TYPE_QUALIFIER"];
+ q87 -> q67 [label="';'"];
+ q87 -> q68 [label="decl_specifier"];
+ q87 -> q36 [label="storage_class"];
+ q87 -> q37 [label="type_specifier"];
+ q87 -> q38 [label="type_qualifier"];
+ q87 -> q39 [label="struct_or_union_specifier"];
+ q87 -> q40 [label="enum_specifier"];
+ q87 -> q69 [label="init_declarator_list"];
+ q87 -> q70 [label="init_declarator"];
+ q87 -> q110 [label="declarator"];
+ q87 -> q42 [label="direct_declarator"];
+ q87 -> q43 [label="struct_or_union"];
+ q87 -> q44 [label="pointer"];
+ q87 -> q45 [label="any_id"];
+ q87 -> q46 [label="identifier_or_ref"];
+ q87 -> q47 [label="enumeration"];
+ q92 -> q2 [label="'('"];
+ q92 -> q3 [label="'*'"];
+ q92 -> q4 [label="'&'"];
+ q92 -> q5 [label="T_IDENTIFIER"];
+ q92 -> q56 [label="T_TYPEDEF_NAME"];
+ q92 -> q111 [label="init_declarator"];
+ q92 -> q110 [label="declarator"];
+ q92 -> q42 [label="direct_declarator"];
+ q92 -> q44 [label="pointer"];
+ q92 -> q45 [label="any_id"];
+ q92 -> q46 [label="identifier_or_ref"];
+ q93 -> q112 [label="$$5"];
+ q94 -> q82 [label="T_TYPEDEF_NAME"];
+ q94 -> q7 [label="T_DEFINE_NAME"];
+ q94 -> q8 [label="T_AUTO"];
+ q94 -> q65 [label="T_EXTERN"];
+ q94 -> q10 [label="T_REGISTER"];
+ q94 -> q11 [label="T_STATIC"];
+ q94 -> q12 [label="T_TYPEDEF"];
+ q94 -> q13 [label="T_INLINE"];
+ q94 -> q14 [label="T_EXTENSION"];
+ q94 -> q15 [label="T_CHAR"];
+ q94 -> q16 [label="T_DOUBLE"];
+ q94 -> q17 [label="T_FLOAT"];
+ q94 -> q18 [label="T_INT"];
+ q94 -> q19 [label="T_VOID"];
+ q94 -> q20 [label="T_LONG"];
+ q94 -> q21 [label="T_SHORT"];
+ q94 -> q22 [label="T_SIGNED"];
+ q94 -> q23 [label="T_UNSIGNED"];
+ q94 -> q24 [label="T_ENUM"];
+ q94 -> q25 [label="T_STRUCT"];
+ q94 -> q26 [label="T_UNION"];
+ q94 -> q27 [label="T_Bool"];
+ q94 -> q28 [label="T_Complex"];
+ q94 -> q29 [label="T_Imaginary"];
+ q94 -> q30 [label="T_TYPE_QUALIFIER"];
+ q94 -> q95 [label="T_VA_DCL"];
+ q94 -> q87 [label="decl_specifiers"];
+ q94 -> q35 [label="decl_specifier"];
+ q94 -> q36 [label="storage_class"];
+ q94 -> q37 [label="type_specifier"];
+ q94 -> q38 [label="type_qualifier"];
+ q94 -> q39 [label="struct_or_union_specifier"];
+ q94 -> q40 [label="enum_specifier"];
+ q94 -> q43 [label="struct_or_union"];
+ q94 -> q47 [label="enumeration"];
+ q94 -> q96 [label="declaration"];
+ q94 -> q53 [label="any_typedef"];
+ q94 -> q113 [label="opt_declaration_list"];
+ q94 -> q98 [label="declaration_list"];
+ q97 -> q114 [label="T_LBRACE"];
+ q98 -> q82 [label="T_TYPEDEF_NAME"];
+ q98 -> q7 [label="T_DEFINE_NAME"];
+ q98 -> q8 [label="T_AUTO"];
+ q98 -> q65 [label="T_EXTERN"];
+ q98 -> q10 [label="T_REGISTER"];
+ q98 -> q11 [label="T_STATIC"];
+ q98 -> q12 [label="T_TYPEDEF"];
+ q98 -> q13 [label="T_INLINE"];
+ q98 -> q14 [label="T_EXTENSION"];
+ q98 -> q15 [label="T_CHAR"];
+ q98 -> q16 [label="T_DOUBLE"];
+ q98 -> q17 [label="T_FLOAT"];
+ q98 -> q18 [label="T_INT"];
+ q98 -> q19 [label="T_VOID"];
+ q98 -> q20 [label="T_LONG"];
+ q98 -> q21 [label="T_SHORT"];
+ q98 -> q22 [label="T_SIGNED"];
+ q98 -> q23 [label="T_UNSIGNED"];
+ q98 -> q24 [label="T_ENUM"];
+ q98 -> q25 [label="T_STRUCT"];
+ q98 -> q26 [label="T_UNION"];
+ q98 -> q27 [label="T_Bool"];
+ q98 -> q28 [label="T_Complex"];
+ q98 -> q29 [label="T_Imaginary"];
+ q98 -> q30 [label="T_TYPE_QUALIFIER"];
+ q98 -> q87 [label="decl_specifiers"];
+ q98 -> q35 [label="decl_specifier"];
+ q98 -> q36 [label="storage_class"];
+ q98 -> q37 [label="type_specifier"];
+ q98 -> q38 [label="type_qualifier"];
+ q98 -> q39 [label="struct_or_union_specifier"];
+ q98 -> q40 [label="enum_specifier"];
+ q98 -> q43 [label="struct_or_union"];
+ q98 -> q47 [label="enumeration"];
+ q98 -> q115 [label="declaration"];
+ q98 -> q53 [label="any_typedef"];
+ q99 -> q116 [label="'('"];
+ q99 -> q3 [label="'*'"];
+ q99 -> q4 [label="'&'"];
+ q99 -> q5 [label="T_IDENTIFIER"];
+ q99 -> q6 [label="T_TYPEDEF_NAME"];
+ q99 -> q7 [label="T_DEFINE_NAME"];
+ q99 -> q8 [label="T_AUTO"];
+ q99 -> q65 [label="T_EXTERN"];
+ q99 -> q10 [label="T_REGISTER"];
+ q99 -> q11 [label="T_STATIC"];
+ q99 -> q13 [label="T_INLINE"];
+ q99 -> q66 [label="T_EXTENSION"];
+ q99 -> q15 [label="T_CHAR"];
+ q99 -> q16 [label="T_DOUBLE"];
+ q99 -> q17 [label="T_FLOAT"];
+ q99 -> q18 [label="T_INT"];
+ q99 -> q19 [label="T_VOID"];
+ q99 -> q20 [label="T_LONG"];
+ q99 -> q21 [label="T_SHORT"];
+ q99 -> q22 [label="T_SIGNED"];
+ q99 -> q23 [label="T_UNSIGNED"];
+ q99 -> q24 [label="T_ENUM"];
+ q99 -> q25 [label="T_STRUCT"];
+ q99 -> q26 [label="T_UNION"];
+ q99 -> q27 [label="T_Bool"];
+ q99 -> q28 [label="T_Complex"];
+ q99 -> q29 [label="T_Imaginary"];
+ q99 -> q30 [label="T_TYPE_QUALIFIER"];
+ q99 -> q117 [label="T_BRACKETS"];
+ q99 -> q68 [label="decl_specifier"];
+ q99 -> q36 [label="storage_class"];
+ q99 -> q37 [label="type_specifier"];
+ q99 -> q38 [label="type_qualifier"];
+ q99 -> q39 [label="struct_or_union_specifier"];
+ q99 -> q40 [label="enum_specifier"];
+ q99 -> q118 [label="declarator"];
+ q99 -> q42 [label="direct_declarator"];
+ q99 -> q119 [label="abs_declarator"];
+ q99 -> q120 [label="direct_abs_declarator"];
+ q99 -> q43 [label="struct_or_union"];
+ q99 -> q121 [label="pointer"];
+ q99 -> q45 [label="any_id"];
+ q99 -> q46 [label="identifier_or_ref"];
+ q99 -> q47 [label="enumeration"];
+ q100 -> q122 [label="')'"];
+ q101 -> q123 [label="','"];
+ q103 -> q124 [label="')'"];
+ q104 -> q125 [label="','"];
+ q109 -> q2 [label="'('"];
+ q109 -> q3 [label="'*'"];
+ q109 -> q4 [label="'&'"];
+ q109 -> q5 [label="T_IDENTIFIER"];
+ q109 -> q56 [label="T_TYPEDEF_NAME"];
+ q109 -> q126 [label="declarator"];
+ q109 -> q42 [label="direct_declarator"];
+ q109 -> q44 [label="pointer"];
+ q109 -> q45 [label="any_id"];
+ q109 -> q46 [label="identifier_or_ref"];
+ q109 -> q127 [label="opt_declarator_list"];
+ q109 -> q128 [label="declarator_list"];
+ q110 -> q93 [label="'='"];
+ q112 -> q129 [label="T_INITIALIZER"];
+ q113 -> q130 [label="T_LBRACE"];
+ q114 -> q131 [label="T_MATCHRBRACE"];
+ q116 -> q116 [label="'('"];
+ q116 -> q3 [label="'*'"];
+ q116 -> q4 [label="'&'"];
+ q116 -> q5 [label="T_IDENTIFIER"];
+ q116 -> q6 [label="T_TYPEDEF_NAME"];
+ q116 -> q7 [label="T_DEFINE_NAME"];
+ q116 -> q8 [label="T_AUTO"];
+ q116 -> q65 [label="T_EXTERN"];
+ q116 -> q10 [label="T_REGISTER"];
+ q116 -> q11 [label="T_STATIC"];
+ q116 -> q13 [label="T_INLINE"];
+ q116 -> q66 [label="T_EXTENSION"];
+ q116 -> q15 [label="T_CHAR"];
+ q116 -> q16 [label="T_DOUBLE"];
+ q116 -> q17 [label="T_FLOAT"];
+ q116 -> q18 [label="T_INT"];
+ q116 -> q19 [label="T_VOID"];
+ q116 -> q20 [label="T_LONG"];
+ q116 -> q21 [label="T_SHORT"];
+ q116 -> q22 [label="T_SIGNED"];
+ q116 -> q23 [label="T_UNSIGNED"];
+ q116 -> q24 [label="T_ENUM"];
+ q116 -> q25 [label="T_STRUCT"];
+ q116 -> q26 [label="T_UNION"];
+ q116 -> q27 [label="T_Bool"];
+ q116 -> q28 [label="T_Complex"];
+ q116 -> q29 [label="T_Imaginary"];
+ q116 -> q30 [label="T_TYPE_QUALIFIER"];
+ q116 -> q117 [label="T_BRACKETS"];
+ q116 -> q132 [label="')'"];
+ q116 -> q99 [label="decl_specifiers"];
+ q116 -> q35 [label="decl_specifier"];
+ q116 -> q36 [label="storage_class"];
+ q116 -> q37 [label="type_specifier"];
+ q116 -> q38 [label="type_qualifier"];
+ q116 -> q39 [label="struct_or_union_specifier"];
+ q116 -> q40 [label="enum_specifier"];
+ q116 -> q57 [label="declarator"];
+ q116 -> q42 [label="direct_declarator"];
+ q116 -> q133 [label="abs_declarator"];
+ q116 -> q120 [label="direct_abs_declarator"];
+ q116 -> q134 [label="parameter_type_list"];
+ q116 -> q101 [label="parameter_list"];
+ q116 -> q102 [label="parameter_declaration"];
+ q116 -> q43 [label="struct_or_union"];
+ q116 -> q121 [label="pointer"];
+ q116 -> q45 [label="any_id"];
+ q116 -> q46 [label="identifier_or_ref"];
+ q116 -> q47 [label="enumeration"];
+ q120 -> q135 [label="'('"];
+ q120 -> q136 [label="T_BRACKETS"];
+ q121 -> q116 [label="'('"];
+ q121 -> q4 [label="'&'"];
+ q121 -> q5 [label="T_IDENTIFIER"];
+ q121 -> q56 [label="T_TYPEDEF_NAME"];
+ q121 -> q117 [label="T_BRACKETS"];
+ q121 -> q78 [label="direct_declarator"];
+ q121 -> q137 [label="direct_abs_declarator"];
+ q121 -> q45 [label="any_id"];
+ q121 -> q46 [label="identifier_or_ref"];
+ q123 -> q82 [label="T_TYPEDEF_NAME"];
+ q123 -> q7 [label="T_DEFINE_NAME"];
+ q123 -> q8 [label="T_AUTO"];
+ q123 -> q65 [label="T_EXTERN"];
+ q123 -> q10 [label="T_REGISTER"];
+ q123 -> q11 [label="T_STATIC"];
+ q123 -> q13 [label="T_INLINE"];
+ q123 -> q66 [label="T_EXTENSION"];
+ q123 -> q15 [label="T_CHAR"];
+ q123 -> q16 [label="T_DOUBLE"];
+ q123 -> q17 [label="T_FLOAT"];
+ q123 -> q18 [label="T_INT"];
+ q123 -> q19 [label="T_VOID"];
+ q123 -> q20 [label="T_LONG"];
+ q123 -> q21 [label="T_SHORT"];
+ q123 -> q22 [label="T_SIGNED"];
+ q123 -> q23 [label="T_UNSIGNED"];
+ q123 -> q24 [label="T_ENUM"];
+ q123 -> q25 [label="T_STRUCT"];
+ q123 -> q26 [label="T_UNION"];
+ q123 -> q27 [label="T_Bool"];
+ q123 -> q28 [label="T_Complex"];
+ q123 -> q29 [label="T_Imaginary"];
+ q123 -> q30 [label="T_TYPE_QUALIFIER"];
+ q123 -> q138 [label="T_ELLIPSIS"];
+ q123 -> q99 [label="decl_specifiers"];
+ q123 -> q35 [label="decl_specifier"];
+ q123 -> q36 [label="storage_class"];
+ q123 -> q37 [label="type_specifier"];
+ q123 -> q38 [label="type_qualifier"];
+ q123 -> q39 [label="struct_or_union_specifier"];
+ q123 -> q40 [label="enum_specifier"];
+ q123 -> q139 [label="parameter_declaration"];
+ q123 -> q43 [label="struct_or_union"];
+ q123 -> q47 [label="enumeration"];
+ q125 -> q5 [label="T_IDENTIFIER"];
+ q125 -> q56 [label="T_TYPEDEF_NAME"];
+ q125 -> q140 [label="any_id"];
+ q127 -> q141 [label="';'"];
+ q128 -> q142 [label="','"];
+ q130 -> q143 [label="$$3"];
+ q133 -> q144 [label="')'"];
+ q134 -> q145 [label="')'"];
+ q135 -> q82 [label="T_TYPEDEF_NAME"];
+ q135 -> q7 [label="T_DEFINE_NAME"];
+ q135 -> q8 [label="T_AUTO"];
+ q135 -> q65 [label="T_EXTERN"];
+ q135 -> q10 [label="T_REGISTER"];
+ q135 -> q11 [label="T_STATIC"];
+ q135 -> q13 [label="T_INLINE"];
+ q135 -> q66 [label="T_EXTENSION"];
+ q135 -> q15 [label="T_CHAR"];
+ q135 -> q16 [label="T_DOUBLE"];
+ q135 -> q17 [label="T_FLOAT"];
+ q135 -> q18 [label="T_INT"];
+ q135 -> q19 [label="T_VOID"];
+ q135 -> q20 [label="T_LONG"];
+ q135 -> q21 [label="T_SHORT"];
+ q135 -> q22 [label="T_SIGNED"];
+ q135 -> q23 [label="T_UNSIGNED"];
+ q135 -> q24 [label="T_ENUM"];
+ q135 -> q25 [label="T_STRUCT"];
+ q135 -> q26 [label="T_UNION"];
+ q135 -> q27 [label="T_Bool"];
+ q135 -> q28 [label="T_Complex"];
+ q135 -> q29 [label="T_Imaginary"];
+ q135 -> q30 [label="T_TYPE_QUALIFIER"];
+ q135 -> q146 [label="')'"];
+ q135 -> q99 [label="decl_specifiers"];
+ q135 -> q35 [label="decl_specifier"];
+ q135 -> q36 [label="storage_class"];
+ q135 -> q37 [label="type_specifier"];
+ q135 -> q38 [label="type_qualifier"];
+ q135 -> q39 [label="struct_or_union_specifier"];
+ q135 -> q40 [label="enum_specifier"];
+ q135 -> q147 [label="parameter_type_list"];
+ q135 -> q101 [label="parameter_list"];
+ q135 -> q102 [label="parameter_declaration"];
+ q135 -> q43 [label="struct_or_union"];
+ q135 -> q47 [label="enumeration"];
+ q137 -> q135 [label="'('"];
+ q137 -> q136 [label="T_BRACKETS"];
+ q142 -> q2 [label="'('"];
+ q142 -> q3 [label="'*'"];
+ q142 -> q4 [label="'&'"];
+ q142 -> q5 [label="T_IDENTIFIER"];
+ q142 -> q56 [label="T_TYPEDEF_NAME"];
+ q142 -> q148 [label="declarator"];
+ q142 -> q42 [label="direct_declarator"];
+ q142 -> q44 [label="pointer"];
+ q142 -> q45 [label="any_id"];
+ q142 -> q46 [label="identifier_or_ref"];
+ q143 -> q149 [label="T_MATCHRBRACE"];
+ q147 -> q150 [label="')'"];
+}
diff --git a/contrib/byacc/test/yacc/grammar.error b/contrib/byacc/test/yacc/grammar.error
new file mode 100644
index 000000000000..d442f8abaeb5
--- /dev/null
+++ b/contrib/byacc/test/yacc/grammar.error
@@ -0,0 +1 @@
+YACC: 1 shift/reduce conflict, 29 reduce/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/grammar.output b/contrib/byacc/test/yacc/grammar.output
new file mode 100644
index 000000000000..6351322345b5
--- /dev/null
+++ b/contrib/byacc/test/yacc/grammar.output
@@ -0,0 +1,2214 @@
+ 0 $accept : program $end
+
+ 1 program :
+ 2 | translation_unit
+
+ 3 translation_unit : external_declaration
+ 4 | translation_unit external_declaration
+
+ 5 external_declaration : declaration
+ 6 | function_definition
+ 7 | ';'
+ 8 | linkage_specification
+ 9 | T_ASM T_ASMARG ';'
+ 10 | error T_MATCHRBRACE
+ 11 | error ';'
+
+ 12 braces : T_LBRACE T_MATCHRBRACE
+
+ 13 linkage_specification : T_EXTERN T_STRING_LITERAL braces
+ 14 | T_EXTERN T_STRING_LITERAL declaration
+
+ 15 declaration : decl_specifiers ';'
+ 16 | decl_specifiers init_declarator_list ';'
+
+ 17 $$1 :
+
+ 18 declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'
+
+ 19 any_typedef : T_EXTENSION T_TYPEDEF
+ 20 | T_TYPEDEF
+
+ 21 opt_declarator_list :
+ 22 | declarator_list
+
+ 23 declarator_list : declarator
+ 24 | declarator_list ',' declarator
+
+ 25 $$2 :
+
+ 26 $$3 :
+
+ 27 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE
+
+ 28 $$4 :
+
+ 29 function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE
+
+ 30 opt_declaration_list :
+ 31 | T_VA_DCL
+ 32 | declaration_list
+
+ 33 declaration_list : declaration
+ 34 | declaration_list declaration
+
+ 35 decl_specifiers : decl_specifier
+ 36 | decl_specifiers decl_specifier
+
+ 37 decl_specifier : storage_class
+ 38 | type_specifier
+ 39 | type_qualifier
+
+ 40 storage_class : T_AUTO
+ 41 | T_EXTERN
+ 42 | T_REGISTER
+ 43 | T_STATIC
+ 44 | T_INLINE
+ 45 | T_EXTENSION
+
+ 46 type_specifier : T_CHAR
+ 47 | T_DOUBLE
+ 48 | T_FLOAT
+ 49 | T_INT
+ 50 | T_LONG
+ 51 | T_SHORT
+ 52 | T_SIGNED
+ 53 | T_UNSIGNED
+ 54 | T_VOID
+ 55 | T_Bool
+ 56 | T_Complex
+ 57 | T_Imaginary
+ 58 | T_TYPEDEF_NAME
+ 59 | struct_or_union_specifier
+ 60 | enum_specifier
+
+ 61 type_qualifier : T_TYPE_QUALIFIER
+ 62 | T_DEFINE_NAME
+
+ 63 struct_or_union_specifier : struct_or_union any_id braces
+ 64 | struct_or_union braces
+ 65 | struct_or_union any_id
+
+ 66 struct_or_union : T_STRUCT
+ 67 | T_UNION
+
+ 68 init_declarator_list : init_declarator
+ 69 | init_declarator_list ',' init_declarator
+
+ 70 init_declarator : declarator
+
+ 71 $$5 :
+
+ 72 init_declarator : declarator '=' $$5 T_INITIALIZER
+
+ 73 enum_specifier : enumeration any_id braces
+ 74 | enumeration braces
+ 75 | enumeration any_id
+
+ 76 enumeration : T_ENUM
+
+ 77 any_id : T_IDENTIFIER
+ 78 | T_TYPEDEF_NAME
+
+ 79 declarator : pointer direct_declarator
+ 80 | direct_declarator
+
+ 81 direct_declarator : identifier_or_ref
+ 82 | '(' declarator ')'
+ 83 | direct_declarator T_BRACKETS
+ 84 | direct_declarator '(' parameter_type_list ')'
+ 85 | direct_declarator '(' opt_identifier_list ')'
+
+ 86 pointer : '*' opt_type_qualifiers
+ 87 | '*' opt_type_qualifiers pointer
+
+ 88 opt_type_qualifiers :
+ 89 | type_qualifier_list
+
+ 90 type_qualifier_list : type_qualifier
+ 91 | type_qualifier_list type_qualifier
+
+ 92 parameter_type_list : parameter_list
+ 93 | parameter_list ',' T_ELLIPSIS
+
+ 94 parameter_list : parameter_declaration
+ 95 | parameter_list ',' parameter_declaration
+
+ 96 parameter_declaration : decl_specifiers declarator
+ 97 | decl_specifiers abs_declarator
+ 98 | decl_specifiers
+
+ 99 opt_identifier_list :
+ 100 | identifier_list
+
+ 101 identifier_list : any_id
+ 102 | identifier_list ',' any_id
+
+ 103 identifier_or_ref : any_id
+ 104 | '&' any_id
+
+ 105 abs_declarator : pointer
+ 106 | pointer direct_abs_declarator
+ 107 | direct_abs_declarator
+
+ 108 direct_abs_declarator : '(' abs_declarator ')'
+ 109 | direct_abs_declarator T_BRACKETS
+ 110 | T_BRACKETS
+ 111 | direct_abs_declarator '(' parameter_type_list ')'
+ 112 | direct_abs_declarator '(' ')'
+ 113 | '(' parameter_type_list ')'
+ 114 | '(' ')'
+
+state 0
+ $accept : . program $end (0)
+ program : . (1)
+
+ error shift 1
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 9
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_ASM shift 31
+ ';' shift 32
+ $end reduce 1
+
+ program goto 33
+ decl_specifiers goto 34
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 41
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+ translation_unit goto 48
+ external_declaration goto 49
+ declaration goto 50
+ function_definition goto 51
+ linkage_specification goto 52
+ any_typedef goto 53
+
+
+state 1
+ external_declaration : error . T_MATCHRBRACE (10)
+ external_declaration : error . ';' (11)
+
+ T_MATCHRBRACE shift 54
+ ';' shift 55
+ . error
+
+
+state 2
+ direct_declarator : '(' . declarator ')' (82)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ declarator goto 57
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 3
+ pointer : '*' . opt_type_qualifiers (86)
+ pointer : '*' . opt_type_qualifiers pointer (87)
+ opt_type_qualifiers : . (88)
+
+ T_DEFINE_NAME shift 7
+ T_TYPE_QUALIFIER shift 30
+ '(' reduce 88
+ '*' reduce 88
+ '&' reduce 88
+ T_IDENTIFIER reduce 88
+ T_TYPEDEF_NAME reduce 88
+ T_BRACKETS reduce 88
+ ',' reduce 88
+ ')' reduce 88
+
+ type_qualifier goto 58
+ opt_type_qualifiers goto 59
+ type_qualifier_list goto 60
+
+
+state 4
+ identifier_or_ref : '&' . any_id (104)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ any_id goto 61
+
+
+state 5
+ any_id : T_IDENTIFIER . (77)
+
+ . reduce 77
+
+
+6: reduce/reduce conflict (reduce 58, reduce 78) on '('
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPEDEF_NAME
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_DEFINE_NAME
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_AUTO
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTERN
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_REGISTER
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_STATIC
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_INLINE
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTENSION
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_CHAR
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_DOUBLE
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_FLOAT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_INT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_VOID
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_LONG
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_SHORT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_SIGNED
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNSIGNED
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_ENUM
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_STRUCT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNION
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_Bool
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_Complex
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_Imaginary
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPE_QUALIFIER
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_BRACKETS
+6: reduce/reduce conflict (reduce 58, reduce 78) on ';'
+6: reduce/reduce conflict (reduce 58, reduce 78) on ','
+6: reduce/reduce conflict (reduce 58, reduce 78) on ')'
+state 6
+ type_specifier : T_TYPEDEF_NAME . (58)
+ any_id : T_TYPEDEF_NAME . (78)
+
+ '(' reduce 58
+ '*' reduce 58
+ '&' reduce 58
+ T_IDENTIFIER reduce 58
+ T_TYPEDEF_NAME reduce 58
+ T_DEFINE_NAME reduce 58
+ T_AUTO reduce 58
+ T_EXTERN reduce 58
+ T_REGISTER reduce 58
+ T_STATIC reduce 58
+ T_TYPEDEF reduce 78
+ T_INLINE reduce 58
+ T_EXTENSION reduce 58
+ T_CHAR reduce 58
+ T_DOUBLE reduce 58
+ T_FLOAT reduce 58
+ T_INT reduce 58
+ T_VOID reduce 58
+ T_LONG reduce 58
+ T_SHORT reduce 58
+ T_SIGNED reduce 58
+ T_UNSIGNED reduce 58
+ T_ENUM reduce 58
+ T_STRUCT reduce 58
+ T_UNION reduce 58
+ T_Bool reduce 58
+ T_Complex reduce 58
+ T_Imaginary reduce 58
+ T_TYPE_QUALIFIER reduce 58
+ T_BRACKETS reduce 58
+ T_LBRACE reduce 78
+ T_VA_DCL reduce 78
+ ';' reduce 58
+ ',' reduce 58
+ '=' reduce 78
+ ')' reduce 58
+
+
+state 7
+ type_qualifier : T_DEFINE_NAME . (62)
+
+ . reduce 62
+
+
+state 8
+ storage_class : T_AUTO . (40)
+
+ . reduce 40
+
+
+state 9
+ linkage_specification : T_EXTERN . T_STRING_LITERAL braces (13)
+ linkage_specification : T_EXTERN . T_STRING_LITERAL declaration (14)
+ storage_class : T_EXTERN . (41)
+
+ T_STRING_LITERAL shift 62
+ '(' reduce 41
+ '*' reduce 41
+ '&' reduce 41
+ T_IDENTIFIER reduce 41
+ T_TYPEDEF_NAME reduce 41
+ T_DEFINE_NAME reduce 41
+ T_AUTO reduce 41
+ T_EXTERN reduce 41
+ T_REGISTER reduce 41
+ T_STATIC reduce 41
+ T_INLINE reduce 41
+ T_EXTENSION reduce 41
+ T_CHAR reduce 41
+ T_DOUBLE reduce 41
+ T_FLOAT reduce 41
+ T_INT reduce 41
+ T_VOID reduce 41
+ T_LONG reduce 41
+ T_SHORT reduce 41
+ T_SIGNED reduce 41
+ T_UNSIGNED reduce 41
+ T_ENUM reduce 41
+ T_STRUCT reduce 41
+ T_UNION reduce 41
+ T_Bool reduce 41
+ T_Complex reduce 41
+ T_Imaginary reduce 41
+ T_TYPE_QUALIFIER reduce 41
+ ';' reduce 41
+
+
+state 10
+ storage_class : T_REGISTER . (42)
+
+ . reduce 42
+
+
+state 11
+ storage_class : T_STATIC . (43)
+
+ . reduce 43
+
+
+state 12
+ any_typedef : T_TYPEDEF . (20)
+
+ . reduce 20
+
+
+state 13
+ storage_class : T_INLINE . (44)
+
+ . reduce 44
+
+
+state 14
+ any_typedef : T_EXTENSION . T_TYPEDEF (19)
+ storage_class : T_EXTENSION . (45)
+
+ T_TYPEDEF shift 63
+ '(' reduce 45
+ '*' reduce 45
+ '&' reduce 45
+ T_IDENTIFIER reduce 45
+ T_TYPEDEF_NAME reduce 45
+ T_DEFINE_NAME reduce 45
+ T_AUTO reduce 45
+ T_EXTERN reduce 45
+ T_REGISTER reduce 45
+ T_STATIC reduce 45
+ T_INLINE reduce 45
+ T_EXTENSION reduce 45
+ T_CHAR reduce 45
+ T_DOUBLE reduce 45
+ T_FLOAT reduce 45
+ T_INT reduce 45
+ T_VOID reduce 45
+ T_LONG reduce 45
+ T_SHORT reduce 45
+ T_SIGNED reduce 45
+ T_UNSIGNED reduce 45
+ T_ENUM reduce 45
+ T_STRUCT reduce 45
+ T_UNION reduce 45
+ T_Bool reduce 45
+ T_Complex reduce 45
+ T_Imaginary reduce 45
+ T_TYPE_QUALIFIER reduce 45
+ ';' reduce 45
+
+
+state 15
+ type_specifier : T_CHAR . (46)
+
+ . reduce 46
+
+
+state 16
+ type_specifier : T_DOUBLE . (47)
+
+ . reduce 47
+
+
+state 17
+ type_specifier : T_FLOAT . (48)
+
+ . reduce 48
+
+
+state 18
+ type_specifier : T_INT . (49)
+
+ . reduce 49
+
+
+state 19
+ type_specifier : T_VOID . (54)
+
+ . reduce 54
+
+
+state 20
+ type_specifier : T_LONG . (50)
+
+ . reduce 50
+
+
+state 21
+ type_specifier : T_SHORT . (51)
+
+ . reduce 51
+
+
+state 22
+ type_specifier : T_SIGNED . (52)
+
+ . reduce 52
+
+
+state 23
+ type_specifier : T_UNSIGNED . (53)
+
+ . reduce 53
+
+
+state 24
+ enumeration : T_ENUM . (76)
+
+ . reduce 76
+
+
+state 25
+ struct_or_union : T_STRUCT . (66)
+
+ . reduce 66
+
+
+state 26
+ struct_or_union : T_UNION . (67)
+
+ . reduce 67
+
+
+state 27
+ type_specifier : T_Bool . (55)
+
+ . reduce 55
+
+
+state 28
+ type_specifier : T_Complex . (56)
+
+ . reduce 56
+
+
+state 29
+ type_specifier : T_Imaginary . (57)
+
+ . reduce 57
+
+
+state 30
+ type_qualifier : T_TYPE_QUALIFIER . (61)
+
+ . reduce 61
+
+
+state 31
+ external_declaration : T_ASM . T_ASMARG ';' (9)
+
+ T_ASMARG shift 64
+ . error
+
+
+state 32
+ external_declaration : ';' . (7)
+
+ . reduce 7
+
+
+state 33
+ $accept : program . $end (0)
+
+ $end accept
+
+
+state 34
+ declaration : decl_specifiers . ';' (15)
+ declaration : decl_specifiers . init_declarator_list ';' (16)
+ function_definition : decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27)
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ';' shift 67
+ . error
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ init_declarator_list goto 69
+ init_declarator goto 70
+ declarator goto 71
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 35
+ decl_specifiers : decl_specifier . (35)
+
+ . reduce 35
+
+
+state 36
+ decl_specifier : storage_class . (37)
+
+ . reduce 37
+
+
+state 37
+ decl_specifier : type_specifier . (38)
+
+ . reduce 38
+
+
+state 38
+ decl_specifier : type_qualifier . (39)
+
+ . reduce 39
+
+
+state 39
+ type_specifier : struct_or_union_specifier . (59)
+
+ . reduce 59
+
+
+state 40
+ type_specifier : enum_specifier . (60)
+
+ . reduce 60
+
+
+state 41
+ function_definition : declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE (29)
+ $$4 : . (28)
+
+ . reduce 28
+
+ $$4 goto 72
+
+
+state 42
+ declarator : direct_declarator . (80)
+ direct_declarator : direct_declarator . T_BRACKETS (83)
+ direct_declarator : direct_declarator . '(' parameter_type_list ')' (84)
+ direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85)
+
+ '(' shift 73
+ T_BRACKETS shift 74
+ T_TYPEDEF_NAME reduce 80
+ T_DEFINE_NAME reduce 80
+ T_AUTO reduce 80
+ T_EXTERN reduce 80
+ T_REGISTER reduce 80
+ T_STATIC reduce 80
+ T_TYPEDEF reduce 80
+ T_INLINE reduce 80
+ T_EXTENSION reduce 80
+ T_CHAR reduce 80
+ T_DOUBLE reduce 80
+ T_FLOAT reduce 80
+ T_INT reduce 80
+ T_VOID reduce 80
+ T_LONG reduce 80
+ T_SHORT reduce 80
+ T_SIGNED reduce 80
+ T_UNSIGNED reduce 80
+ T_ENUM reduce 80
+ T_STRUCT reduce 80
+ T_UNION reduce 80
+ T_Bool reduce 80
+ T_Complex reduce 80
+ T_Imaginary reduce 80
+ T_TYPE_QUALIFIER reduce 80
+ T_LBRACE reduce 80
+ T_VA_DCL reduce 80
+ ';' reduce 80
+ ',' reduce 80
+ '=' reduce 80
+ ')' reduce 80
+
+
+state 43
+ struct_or_union_specifier : struct_or_union . any_id braces (63)
+ struct_or_union_specifier : struct_or_union . braces (64)
+ struct_or_union_specifier : struct_or_union . any_id (65)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ T_LBRACE shift 75
+ . error
+
+ any_id goto 76
+ braces goto 77
+
+
+state 44
+ declarator : pointer . direct_declarator (79)
+
+ '(' shift 2
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ direct_declarator goto 78
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 45
+ identifier_or_ref : any_id . (103)
+
+ . reduce 103
+
+
+state 46
+ direct_declarator : identifier_or_ref . (81)
+
+ . reduce 81
+
+
+state 47
+ enum_specifier : enumeration . any_id braces (73)
+ enum_specifier : enumeration . braces (74)
+ enum_specifier : enumeration . any_id (75)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ T_LBRACE shift 75
+ . error
+
+ any_id goto 79
+ braces goto 80
+
+
+state 48
+ program : translation_unit . (2)
+ translation_unit : translation_unit . external_declaration (4)
+
+ error shift 1
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 9
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_ASM shift 31
+ ';' shift 32
+ $end reduce 2
+
+ decl_specifiers goto 34
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 41
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+ external_declaration goto 81
+ declaration goto 50
+ function_definition goto 51
+ linkage_specification goto 52
+ any_typedef goto 53
+
+
+state 49
+ translation_unit : external_declaration . (3)
+
+ . reduce 3
+
+
+state 50
+ external_declaration : declaration . (5)
+
+ . reduce 5
+
+
+state 51
+ external_declaration : function_definition . (6)
+
+ . reduce 6
+
+
+state 52
+ external_declaration : linkage_specification . (8)
+
+ . reduce 8
+
+
+state 53
+ declaration : any_typedef . decl_specifiers $$1 opt_declarator_list ';' (18)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ . error
+
+ decl_specifiers goto 83
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+
+
+state 54
+ external_declaration : error T_MATCHRBRACE . (10)
+
+ . reduce 10
+
+
+state 55
+ external_declaration : error ';' . (11)
+
+ . reduce 11
+
+
+state 56
+ any_id : T_TYPEDEF_NAME . (78)
+
+ . reduce 78
+
+
+state 57
+ direct_declarator : '(' declarator . ')' (82)
+
+ ')' shift 84
+ . error
+
+
+state 58
+ type_qualifier_list : type_qualifier . (90)
+
+ . reduce 90
+
+
+state 59
+ pointer : '*' opt_type_qualifiers . (86)
+ pointer : '*' opt_type_qualifiers . pointer (87)
+
+ '*' shift 3
+ '(' reduce 86
+ '&' reduce 86
+ T_IDENTIFIER reduce 86
+ T_TYPEDEF_NAME reduce 86
+ T_BRACKETS reduce 86
+ ',' reduce 86
+ ')' reduce 86
+
+ pointer goto 85
+
+
+state 60
+ opt_type_qualifiers : type_qualifier_list . (89)
+ type_qualifier_list : type_qualifier_list . type_qualifier (91)
+
+ T_DEFINE_NAME shift 7
+ T_TYPE_QUALIFIER shift 30
+ '(' reduce 89
+ '*' reduce 89
+ '&' reduce 89
+ T_IDENTIFIER reduce 89
+ T_TYPEDEF_NAME reduce 89
+ T_BRACKETS reduce 89
+ ',' reduce 89
+ ')' reduce 89
+
+ type_qualifier goto 86
+
+
+state 61
+ identifier_or_ref : '&' any_id . (104)
+
+ . reduce 104
+
+
+state 62
+ linkage_specification : T_EXTERN T_STRING_LITERAL . braces (13)
+ linkage_specification : T_EXTERN T_STRING_LITERAL . declaration (14)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_LBRACE shift 75
+ . error
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 88
+ braces goto 89
+ any_typedef goto 53
+
+
+state 63
+ any_typedef : T_EXTENSION T_TYPEDEF . (19)
+
+ . reduce 19
+
+
+state 64
+ external_declaration : T_ASM T_ASMARG . ';' (9)
+
+ ';' shift 90
+ . error
+
+
+state 65
+ storage_class : T_EXTERN . (41)
+
+ . reduce 41
+
+
+state 66
+ storage_class : T_EXTENSION . (45)
+
+ . reduce 45
+
+
+state 67
+ declaration : decl_specifiers ';' . (15)
+
+ . reduce 15
+
+
+state 68
+ decl_specifiers : decl_specifiers decl_specifier . (36)
+
+ . reduce 36
+
+
+state 69
+ declaration : decl_specifiers init_declarator_list . ';' (16)
+ init_declarator_list : init_declarator_list . ',' init_declarator (69)
+
+ ';' shift 91
+ ',' shift 92
+ . error
+
+
+state 70
+ init_declarator_list : init_declarator . (68)
+
+ . reduce 68
+
+
+state 71
+ function_definition : decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27)
+ init_declarator : declarator . (70)
+ init_declarator : declarator . '=' $$5 T_INITIALIZER (72)
+ $$2 : . (25)
+
+ '=' shift 93
+ T_TYPEDEF_NAME reduce 25
+ T_DEFINE_NAME reduce 25
+ T_AUTO reduce 25
+ T_EXTERN reduce 25
+ T_REGISTER reduce 25
+ T_STATIC reduce 25
+ T_TYPEDEF reduce 25
+ T_INLINE reduce 25
+ T_EXTENSION reduce 25
+ T_CHAR reduce 25
+ T_DOUBLE reduce 25
+ T_FLOAT reduce 25
+ T_INT reduce 25
+ T_VOID reduce 25
+ T_LONG reduce 25
+ T_SHORT reduce 25
+ T_SIGNED reduce 25
+ T_UNSIGNED reduce 25
+ T_ENUM reduce 25
+ T_STRUCT reduce 25
+ T_UNION reduce 25
+ T_Bool reduce 25
+ T_Complex reduce 25
+ T_Imaginary reduce 25
+ T_TYPE_QUALIFIER reduce 25
+ T_LBRACE reduce 25
+ T_VA_DCL reduce 25
+ ';' reduce 70
+ ',' reduce 70
+
+ $$2 goto 94
+
+
+state 72
+ function_definition : declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE (29)
+ opt_declaration_list : . (30)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_VA_DCL shift 95
+ T_LBRACE reduce 30
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 96
+ any_typedef goto 53
+ opt_declaration_list goto 97
+ declaration_list goto 98
+
+
+state 73
+ direct_declarator : direct_declarator '(' . parameter_type_list ')' (84)
+ direct_declarator : direct_declarator '(' . opt_identifier_list ')' (85)
+ opt_identifier_list : . (99)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ')' reduce 99
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ parameter_type_list goto 100
+ parameter_list goto 101
+ parameter_declaration goto 102
+ opt_identifier_list goto 103
+ identifier_list goto 104
+ struct_or_union goto 43
+ any_id goto 105
+ enumeration goto 47
+
+
+state 74
+ direct_declarator : direct_declarator T_BRACKETS . (83)
+
+ . reduce 83
+
+
+state 75
+ braces : T_LBRACE . T_MATCHRBRACE (12)
+
+ T_MATCHRBRACE shift 106
+ . error
+
+
+state 76
+ struct_or_union_specifier : struct_or_union any_id . braces (63)
+ struct_or_union_specifier : struct_or_union any_id . (65)
+
+ T_LBRACE shift 75
+ '(' reduce 65
+ '*' reduce 65
+ '&' reduce 65
+ T_IDENTIFIER reduce 65
+ T_TYPEDEF_NAME reduce 65
+ T_DEFINE_NAME reduce 65
+ T_AUTO reduce 65
+ T_EXTERN reduce 65
+ T_REGISTER reduce 65
+ T_STATIC reduce 65
+ T_INLINE reduce 65
+ T_EXTENSION reduce 65
+ T_CHAR reduce 65
+ T_DOUBLE reduce 65
+ T_FLOAT reduce 65
+ T_INT reduce 65
+ T_VOID reduce 65
+ T_LONG reduce 65
+ T_SHORT reduce 65
+ T_SIGNED reduce 65
+ T_UNSIGNED reduce 65
+ T_ENUM reduce 65
+ T_STRUCT reduce 65
+ T_UNION reduce 65
+ T_Bool reduce 65
+ T_Complex reduce 65
+ T_Imaginary reduce 65
+ T_TYPE_QUALIFIER reduce 65
+ T_BRACKETS reduce 65
+ ';' reduce 65
+ ',' reduce 65
+ ')' reduce 65
+
+ braces goto 107
+
+
+state 77
+ struct_or_union_specifier : struct_or_union braces . (64)
+
+ . reduce 64
+
+
+state 78
+ declarator : pointer direct_declarator . (79)
+ direct_declarator : direct_declarator . T_BRACKETS (83)
+ direct_declarator : direct_declarator . '(' parameter_type_list ')' (84)
+ direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85)
+
+ '(' shift 73
+ T_BRACKETS shift 74
+ T_TYPEDEF_NAME reduce 79
+ T_DEFINE_NAME reduce 79
+ T_AUTO reduce 79
+ T_EXTERN reduce 79
+ T_REGISTER reduce 79
+ T_STATIC reduce 79
+ T_TYPEDEF reduce 79
+ T_INLINE reduce 79
+ T_EXTENSION reduce 79
+ T_CHAR reduce 79
+ T_DOUBLE reduce 79
+ T_FLOAT reduce 79
+ T_INT reduce 79
+ T_VOID reduce 79
+ T_LONG reduce 79
+ T_SHORT reduce 79
+ T_SIGNED reduce 79
+ T_UNSIGNED reduce 79
+ T_ENUM reduce 79
+ T_STRUCT reduce 79
+ T_UNION reduce 79
+ T_Bool reduce 79
+ T_Complex reduce 79
+ T_Imaginary reduce 79
+ T_TYPE_QUALIFIER reduce 79
+ T_LBRACE reduce 79
+ T_VA_DCL reduce 79
+ ';' reduce 79
+ ',' reduce 79
+ '=' reduce 79
+ ')' reduce 79
+
+
+state 79
+ enum_specifier : enumeration any_id . braces (73)
+ enum_specifier : enumeration any_id . (75)
+
+ T_LBRACE shift 75
+ '(' reduce 75
+ '*' reduce 75
+ '&' reduce 75
+ T_IDENTIFIER reduce 75
+ T_TYPEDEF_NAME reduce 75
+ T_DEFINE_NAME reduce 75
+ T_AUTO reduce 75
+ T_EXTERN reduce 75
+ T_REGISTER reduce 75
+ T_STATIC reduce 75
+ T_INLINE reduce 75
+ T_EXTENSION reduce 75
+ T_CHAR reduce 75
+ T_DOUBLE reduce 75
+ T_FLOAT reduce 75
+ T_INT reduce 75
+ T_VOID reduce 75
+ T_LONG reduce 75
+ T_SHORT reduce 75
+ T_SIGNED reduce 75
+ T_UNSIGNED reduce 75
+ T_ENUM reduce 75
+ T_STRUCT reduce 75
+ T_UNION reduce 75
+ T_Bool reduce 75
+ T_Complex reduce 75
+ T_Imaginary reduce 75
+ T_TYPE_QUALIFIER reduce 75
+ T_BRACKETS reduce 75
+ ';' reduce 75
+ ',' reduce 75
+ ')' reduce 75
+
+ braces goto 108
+
+
+state 80
+ enum_specifier : enumeration braces . (74)
+
+ . reduce 74
+
+
+state 81
+ translation_unit : translation_unit external_declaration . (4)
+
+ . reduce 4
+
+
+state 82
+ type_specifier : T_TYPEDEF_NAME . (58)
+
+ . reduce 58
+
+
+83: shift/reduce conflict (shift 82, reduce 17) on T_TYPEDEF_NAME
+state 83
+ declaration : any_typedef decl_specifiers . $$1 opt_declarator_list ';' (18)
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+ $$1 : . (17)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ '(' reduce 17
+ '*' reduce 17
+ '&' reduce 17
+ T_IDENTIFIER reduce 17
+ ';' reduce 17
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ $$1 goto 109
+
+
+state 84
+ direct_declarator : '(' declarator ')' . (82)
+
+ . reduce 82
+
+
+state 85
+ pointer : '*' opt_type_qualifiers pointer . (87)
+
+ . reduce 87
+
+
+state 86
+ type_qualifier_list : type_qualifier_list type_qualifier . (91)
+
+ . reduce 91
+
+
+state 87
+ declaration : decl_specifiers . ';' (15)
+ declaration : decl_specifiers . init_declarator_list ';' (16)
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ';' shift 67
+ . error
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ init_declarator_list goto 69
+ init_declarator goto 70
+ declarator goto 110
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 88
+ linkage_specification : T_EXTERN T_STRING_LITERAL declaration . (14)
+
+ . reduce 14
+
+
+state 89
+ linkage_specification : T_EXTERN T_STRING_LITERAL braces . (13)
+
+ . reduce 13
+
+
+state 90
+ external_declaration : T_ASM T_ASMARG ';' . (9)
+
+ . reduce 9
+
+
+state 91
+ declaration : decl_specifiers init_declarator_list ';' . (16)
+
+ . reduce 16
+
+
+state 92
+ init_declarator_list : init_declarator_list ',' . init_declarator (69)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ init_declarator goto 111
+ declarator goto 110
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 93
+ init_declarator : declarator '=' . $$5 T_INITIALIZER (72)
+ $$5 : . (71)
+
+ . reduce 71
+
+ $$5 goto 112
+
+
+state 94
+ function_definition : decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27)
+ opt_declaration_list : . (30)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_VA_DCL shift 95
+ T_LBRACE reduce 30
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 96
+ any_typedef goto 53
+ opt_declaration_list goto 113
+ declaration_list goto 98
+
+
+state 95
+ opt_declaration_list : T_VA_DCL . (31)
+
+ . reduce 31
+
+
+state 96
+ declaration_list : declaration . (33)
+
+ . reduce 33
+
+
+state 97
+ function_definition : declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE (29)
+
+ T_LBRACE shift 114
+ . error
+
+
+state 98
+ opt_declaration_list : declaration_list . (32)
+ declaration_list : declaration_list . declaration (34)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_LBRACE reduce 32
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 115
+ any_typedef goto 53
+
+
+state 99
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+ parameter_declaration : decl_specifiers . declarator (96)
+ parameter_declaration : decl_specifiers . abs_declarator (97)
+ parameter_declaration : decl_specifiers . (98)
+
+ '(' shift 116
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_BRACKETS shift 117
+ ',' reduce 98
+ ')' reduce 98
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 118
+ direct_declarator goto 42
+ abs_declarator goto 119
+ direct_abs_declarator goto 120
+ struct_or_union goto 43
+ pointer goto 121
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 100
+ direct_declarator : direct_declarator '(' parameter_type_list . ')' (84)
+
+ ')' shift 122
+ . error
+
+
+state 101
+ parameter_type_list : parameter_list . (92)
+ parameter_type_list : parameter_list . ',' T_ELLIPSIS (93)
+ parameter_list : parameter_list . ',' parameter_declaration (95)
+
+ ',' shift 123
+ ')' reduce 92
+
+
+state 102
+ parameter_list : parameter_declaration . (94)
+
+ . reduce 94
+
+
+state 103
+ direct_declarator : direct_declarator '(' opt_identifier_list . ')' (85)
+
+ ')' shift 124
+ . error
+
+
+state 104
+ opt_identifier_list : identifier_list . (100)
+ identifier_list : identifier_list . ',' any_id (102)
+
+ ',' shift 125
+ ')' reduce 100
+
+
+state 105
+ identifier_list : any_id . (101)
+
+ . reduce 101
+
+
+state 106
+ braces : T_LBRACE T_MATCHRBRACE . (12)
+
+ . reduce 12
+
+
+state 107
+ struct_or_union_specifier : struct_or_union any_id braces . (63)
+
+ . reduce 63
+
+
+state 108
+ enum_specifier : enumeration any_id braces . (73)
+
+ . reduce 73
+
+
+state 109
+ declaration : any_typedef decl_specifiers $$1 . opt_declarator_list ';' (18)
+ opt_declarator_list : . (21)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ ';' reduce 21
+
+ declarator goto 126
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ opt_declarator_list goto 127
+ declarator_list goto 128
+
+
+state 110
+ init_declarator : declarator . (70)
+ init_declarator : declarator . '=' $$5 T_INITIALIZER (72)
+
+ '=' shift 93
+ ';' reduce 70
+ ',' reduce 70
+
+
+state 111
+ init_declarator_list : init_declarator_list ',' init_declarator . (69)
+
+ . reduce 69
+
+
+state 112
+ init_declarator : declarator '=' $$5 . T_INITIALIZER (72)
+
+ T_INITIALIZER shift 129
+ . error
+
+
+state 113
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE (27)
+
+ T_LBRACE shift 130
+ . error
+
+
+state 114
+ function_definition : declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE (29)
+
+ T_MATCHRBRACE shift 131
+ . error
+
+
+state 115
+ declaration_list : declaration_list declaration . (34)
+
+ . reduce 34
+
+
+state 116
+ direct_declarator : '(' . declarator ')' (82)
+ direct_abs_declarator : '(' . abs_declarator ')' (108)
+ direct_abs_declarator : '(' . parameter_type_list ')' (113)
+ direct_abs_declarator : '(' . ')' (114)
+
+ '(' shift 116
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_BRACKETS shift 117
+ ')' shift 132
+ . error
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 57
+ direct_declarator goto 42
+ abs_declarator goto 133
+ direct_abs_declarator goto 120
+ parameter_type_list goto 134
+ parameter_list goto 101
+ parameter_declaration goto 102
+ struct_or_union goto 43
+ pointer goto 121
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 117
+ direct_abs_declarator : T_BRACKETS . (110)
+
+ . reduce 110
+
+
+state 118
+ parameter_declaration : decl_specifiers declarator . (96)
+
+ . reduce 96
+
+
+state 119
+ parameter_declaration : decl_specifiers abs_declarator . (97)
+
+ . reduce 97
+
+
+state 120
+ abs_declarator : direct_abs_declarator . (107)
+ direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109)
+ direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111)
+ direct_abs_declarator : direct_abs_declarator . '(' ')' (112)
+
+ '(' shift 135
+ T_BRACKETS shift 136
+ ',' reduce 107
+ ')' reduce 107
+
+
+state 121
+ declarator : pointer . direct_declarator (79)
+ abs_declarator : pointer . (105)
+ abs_declarator : pointer . direct_abs_declarator (106)
+
+ '(' shift 116
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ T_BRACKETS shift 117
+ ',' reduce 105
+ ')' reduce 105
+
+ direct_declarator goto 78
+ direct_abs_declarator goto 137
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 122
+ direct_declarator : direct_declarator '(' parameter_type_list ')' . (84)
+
+ . reduce 84
+
+
+state 123
+ parameter_type_list : parameter_list ',' . T_ELLIPSIS (93)
+ parameter_list : parameter_list ',' . parameter_declaration (95)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_ELLIPSIS shift 138
+ . error
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ parameter_declaration goto 139
+ struct_or_union goto 43
+ enumeration goto 47
+
+
+state 124
+ direct_declarator : direct_declarator '(' opt_identifier_list ')' . (85)
+
+ . reduce 85
+
+
+state 125
+ identifier_list : identifier_list ',' . any_id (102)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ any_id goto 140
+
+
+state 126
+ declarator_list : declarator . (23)
+
+ . reduce 23
+
+
+state 127
+ declaration : any_typedef decl_specifiers $$1 opt_declarator_list . ';' (18)
+
+ ';' shift 141
+ . error
+
+
+state 128
+ opt_declarator_list : declarator_list . (22)
+ declarator_list : declarator_list . ',' declarator (24)
+
+ ',' shift 142
+ ';' reduce 22
+
+
+state 129
+ init_declarator : declarator '=' $$5 T_INITIALIZER . (72)
+
+ . reduce 72
+
+
+state 130
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE (27)
+ $$3 : . (26)
+
+ . reduce 26
+
+ $$3 goto 143
+
+
+state 131
+ function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . (29)
+
+ . reduce 29
+
+
+state 132
+ direct_abs_declarator : '(' ')' . (114)
+
+ . reduce 114
+
+
+state 133
+ direct_abs_declarator : '(' abs_declarator . ')' (108)
+
+ ')' shift 144
+ . error
+
+
+state 134
+ direct_abs_declarator : '(' parameter_type_list . ')' (113)
+
+ ')' shift 145
+ . error
+
+
+state 135
+ direct_abs_declarator : direct_abs_declarator '(' . parameter_type_list ')' (111)
+ direct_abs_declarator : direct_abs_declarator '(' . ')' (112)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ')' shift 146
+ . error
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ parameter_type_list goto 147
+ parameter_list goto 101
+ parameter_declaration goto 102
+ struct_or_union goto 43
+ enumeration goto 47
+
+
+state 136
+ direct_abs_declarator : direct_abs_declarator T_BRACKETS . (109)
+
+ . reduce 109
+
+
+state 137
+ abs_declarator : pointer direct_abs_declarator . (106)
+ direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109)
+ direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111)
+ direct_abs_declarator : direct_abs_declarator . '(' ')' (112)
+
+ '(' shift 135
+ T_BRACKETS shift 136
+ ',' reduce 106
+ ')' reduce 106
+
+
+state 138
+ parameter_type_list : parameter_list ',' T_ELLIPSIS . (93)
+
+ . reduce 93
+
+
+state 139
+ parameter_list : parameter_list ',' parameter_declaration . (95)
+
+ . reduce 95
+
+
+state 140
+ identifier_list : identifier_list ',' any_id . (102)
+
+ . reduce 102
+
+
+state 141
+ declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' . (18)
+
+ . reduce 18
+
+
+state 142
+ declarator_list : declarator_list ',' . declarator (24)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ declarator goto 148
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 143
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE (27)
+
+ T_MATCHRBRACE shift 149
+ . error
+
+
+state 144
+ direct_abs_declarator : '(' abs_declarator ')' . (108)
+
+ . reduce 108
+
+
+state 145
+ direct_abs_declarator : '(' parameter_type_list ')' . (113)
+
+ . reduce 113
+
+
+state 146
+ direct_abs_declarator : direct_abs_declarator '(' ')' . (112)
+
+ . reduce 112
+
+
+state 147
+ direct_abs_declarator : direct_abs_declarator '(' parameter_type_list . ')' (111)
+
+ ')' shift 150
+ . error
+
+
+state 148
+ declarator_list : declarator_list ',' declarator . (24)
+
+ . reduce 24
+
+
+state 149
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . (27)
+
+ . reduce 27
+
+
+state 150
+ direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')' . (111)
+
+ . reduce 111
+
+
+State 6 contains 29 reduce/reduce conflicts.
+State 83 contains 1 shift/reduce conflict.
+
+
+44 terminals, 43 nonterminals
+115 grammar rules, 151 states
diff --git a/contrib/byacc/test/yacc/grammar.tab.c b/contrib/byacc/test/yacc/grammar.tab.c
new file mode 100644
index 000000000000..e78f1881512c
--- /dev/null
+++ b/contrib/byacc/test/yacc/grammar.tab.c
@@ -0,0 +1,2026 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse grammar_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex grammar_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror grammar_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar grammar_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval grammar_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval grammar_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug grammar_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs grammar_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag grammar_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs grammar_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen grammar_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred grammar_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto grammar_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex grammar_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex grammar_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex grammar_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable grammar_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck grammar_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname grammar_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule grammar_rule
+#endif /* yyrule */
+#define YYPREFIX "grammar_"
+
+#define YYPURE 0
+
+#line 9 "grammar.y"
+#ifdef YYBISON
+#include <stdlib.h>
+#define YYSTYPE_IS_DECLARED
+#define yyerror yaccError
+#endif
+
+#if defined(YYBISON) || !defined(YYBYACC)
+static void yyerror(const char *s);
+#endif
+#line 81 "grammar.y"
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#define OPT_LINTLIBRARY 1
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+/* #include "cproto.h" */
+#define MAX_TEXT_SIZE 1024
+
+/* Prototype styles */
+#if OPT_LINTLIBRARY
+#define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
+#define PROTO_LINTLIBRARY -1 /* form lint-library source */
+#endif
+#define PROTO_NONE 0 /* do not output any prototypes */
+#define PROTO_TRADITIONAL 1 /* comment out parameters */
+#define PROTO_ABSTRACT 2 /* comment out parameter names */
+#define PROTO_ANSI 3 /* ANSI C prototype */
+
+typedef int PrototypeStyle;
+
+typedef char boolean;
+
+extern boolean types_out;
+extern PrototypeStyle proto_style;
+
+#define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
+#define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
+#define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
+
+#if OPT_LINTLIBRARY
+#define FUNC_UNKNOWN -1 /* unspecified */
+#else
+#define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
+#endif
+#define FUNC_NONE 0 /* not a function definition */
+#define FUNC_TRADITIONAL 1 /* traditional style */
+#define FUNC_ANSI 2 /* ANSI style */
+#define FUNC_BOTH 3 /* both styles */
+
+typedef int FuncDefStyle;
+
+/* Source file text */
+typedef struct text {
+ char text[MAX_TEXT_SIZE]; /* source text */
+ long begin; /* offset in temporary file */
+} Text;
+
+/* Declaration specifier flags */
+#define DS_NONE 0 /* default */
+#define DS_EXTERN 1 /* contains "extern" specifier */
+#define DS_STATIC 2 /* contains "static" specifier */
+#define DS_CHAR 4 /* contains "char" type specifier */
+#define DS_SHORT 8 /* contains "short" type specifier */
+#define DS_FLOAT 16 /* contains "float" type specifier */
+#define DS_INLINE 32 /* contains "inline" specifier */
+#define DS_JUNK 64 /* we're not interested in this declaration */
+
+/* This structure stores information about a declaration specifier. */
+typedef struct decl_spec {
+ unsigned short flags; /* flags defined above */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+} DeclSpec;
+
+/* This is a list of function parameters. */
+typedef struct _ParameterList {
+ struct parameter *first; /* pointer to first parameter in list */
+ struct parameter *last; /* pointer to last parameter in list */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ char *comment; /* comment at start of parameter list */
+} ParameterList;
+
+/* This structure stores information about a declarator. */
+typedef struct _Declarator {
+ char *name; /* name of variable or function */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ FuncDefStyle func_def; /* style of function definition */
+ ParameterList params; /* function parameters */
+ boolean pointer; /* TRUE if it declares a pointer */
+ struct _Declarator *head; /* head function declarator */
+ struct _Declarator *func_stack; /* stack of function declarators */
+ struct _Declarator *next; /* next declarator in list */
+} Declarator;
+
+/* This structure stores information about a function parameter. */
+typedef struct parameter {
+ struct parameter *next; /* next parameter in list */
+ DeclSpec decl_spec;
+ Declarator *declarator;
+ char *comment; /* comment following the parameter */
+} Parameter;
+
+/* This is a list of declarators. */
+typedef struct declarator_list {
+ Declarator *first; /* pointer to first declarator in list */
+ Declarator *last; /* pointer to last declarator in list */
+} DeclaratorList;
+
+/* #include "symbol.h" */
+typedef struct symbol {
+ struct symbol *next; /* next symbol in list */
+ char *name; /* name of symbol */
+ char *value; /* value of symbol (for defines) */
+ short flags; /* symbol attributes */
+} Symbol;
+
+/* parser stack entry type */
+typedef union {
+ Text text;
+ DeclSpec decl_spec;
+ Parameter *parameter;
+ ParameterList param_list;
+ Declarator *declarator;
+ DeclaratorList decl_list;
+} YYSTYPE;
+
+/* The hash table length should be a prime number. */
+#define SYM_MAX_HASH 251
+
+typedef struct symbol_table {
+ Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
+} SymbolTable;
+
+extern SymbolTable *new_symbol_table /* Create symbol table */
+ (void);
+extern void free_symbol_table /* Destroy symbol table */
+ (SymbolTable *s);
+extern Symbol *find_symbol /* Lookup symbol name */
+ (SymbolTable *s, const char *n);
+extern Symbol *new_symbol /* Define new symbol */
+ (SymbolTable *s, const char *n, const char *v, int f);
+
+/* #include "semantic.h" */
+extern void new_decl_spec (DeclSpec *, const char *, long, int);
+extern void free_decl_spec (DeclSpec *);
+extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
+extern void check_untagged (DeclSpec *);
+extern Declarator *new_declarator (const char *, const char *, long);
+extern void free_declarator (Declarator *);
+extern void new_decl_list (DeclaratorList *, Declarator *);
+extern void free_decl_list (DeclaratorList *);
+extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
+extern Parameter *new_parameter (DeclSpec *, Declarator *);
+extern void free_parameter (Parameter *);
+extern void new_param_list (ParameterList *, Parameter *);
+extern void free_param_list (ParameterList *);
+extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
+extern void new_ident_list (ParameterList *);
+extern void add_ident_list (ParameterList *, ParameterList *, const char *);
+extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
+extern void gen_declarations (DeclSpec *, DeclaratorList *);
+extern void gen_prototype (DeclSpec *, Declarator *);
+extern void gen_func_declarator (Declarator *);
+extern void gen_func_definition (DeclSpec *, Declarator *);
+
+extern void init_parser (void);
+extern void process_file (FILE *infile, char *name);
+extern char *cur_text (void);
+extern char *cur_file_name (void);
+extern char *implied_typedef (void);
+extern void include_file (char *name, int convert);
+extern char *supply_parm (int count);
+extern char *xstrdup (const char *);
+extern int already_declared (char *name);
+extern int is_actual_func (Declarator *d);
+extern int lint_ellipsis (Parameter *p);
+extern int want_typedef (void);
+extern void begin_tracking (void);
+extern void begin_typedef (void);
+extern void copy_typedef (char *s);
+extern void ellipsis_varargs (Declarator *d);
+extern void end_typedef (void);
+extern void flush_varargs (void);
+extern void fmt_library (int code);
+extern void imply_typedef (const char *s);
+extern void indent (FILE *outf);
+extern void put_blankline (FILE *outf);
+extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
+extern void put_char (FILE *outf, int c);
+extern void put_error (void);
+extern void put_newline (FILE *outf);
+extern void put_padded (FILE *outf, const char *s);
+extern void put_string (FILE *outf, const char *s);
+extern void track_in (void);
+
+extern boolean file_comments;
+extern FuncDefStyle func_style;
+extern char base_file[];
+
+extern int yylex (void);
+
+/* declaration specifier attributes for the typedef statement currently being
+ * scanned
+ */
+static int cur_decl_spec_flags;
+
+/* pointer to parameter list for the current function definition */
+static ParameterList *func_params;
+
+/* A parser semantic action sets this pointer to the current declarator in
+ * a function parameter declaration in order to catch any comments following
+ * the parameter declaration on the same line. If the lexer scans a comment
+ * and <cur_declarator> is not NULL, then the comment is attached to the
+ * declarator. To ignore subsequent comments, the lexer sets this to NULL
+ * after scanning a comment or end of line.
+ */
+static Declarator *cur_declarator;
+
+/* temporary string buffer */
+static char buf[MAX_TEXT_SIZE];
+
+/* table of typedef names */
+static SymbolTable *typedef_names;
+
+/* table of define names */
+static SymbolTable *define_names;
+
+/* table of type qualifiers */
+static SymbolTable *type_qualifiers;
+
+/* information about the current input file */
+typedef struct {
+ char *base_name; /* base input file name */
+ char *file_name; /* current file name */
+ FILE *file; /* input file */
+ unsigned line_num; /* current line number in input file */
+ FILE *tmp_file; /* temporary file */
+ long begin_comment; /* tmp file offset after last written ) or ; */
+ long end_comment; /* tmp file offset after last comment */
+ boolean convert; /* if TRUE, convert function definitions */
+ boolean changed; /* TRUE if conversion done in this file */
+} IncludeStack;
+
+static IncludeStack *cur_file; /* current input file */
+
+/* #include "yyerror.c" */
+
+static int haveAnsiParam (void);
+
+
+/* Flags to enable us to find if a procedure returns a value.
+ */
+static int return_val; /* nonzero on BRACES iff return-expression found */
+
+static const char *
+dft_decl_spec (void)
+{
+ return (lintLibrary() && !return_val) ? "void" : "int";
+}
+
+static int
+haveAnsiParam (void)
+{
+ Parameter *p;
+ if (func_params != 0) {
+ for (p = func_params->first; p != 0; p = p->next) {
+ if (p->declarator->func_def == FUNC_ANSI) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+#line 388 "grammar.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define T_IDENTIFIER 257
+#define T_TYPEDEF_NAME 258
+#define T_DEFINE_NAME 259
+#define T_AUTO 260
+#define T_EXTERN 261
+#define T_REGISTER 262
+#define T_STATIC 263
+#define T_TYPEDEF 264
+#define T_INLINE 265
+#define T_EXTENSION 266
+#define T_CHAR 267
+#define T_DOUBLE 268
+#define T_FLOAT 269
+#define T_INT 270
+#define T_VOID 271
+#define T_LONG 272
+#define T_SHORT 273
+#define T_SIGNED 274
+#define T_UNSIGNED 275
+#define T_ENUM 276
+#define T_STRUCT 277
+#define T_UNION 278
+#define T_Bool 279
+#define T_Complex 280
+#define T_Imaginary 281
+#define T_TYPE_QUALIFIER 282
+#define T_BRACKETS 283
+#define T_LBRACE 284
+#define T_MATCHRBRACE 285
+#define T_ELLIPSIS 286
+#define T_INITIALIZER 287
+#define T_STRING_LITERAL 288
+#define T_ASM 289
+#define T_ASMARG 290
+#define T_VA_DCL 291
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT grammar_lhs[] = { -1,
+ 0, 0, 26, 26, 27, 27, 27, 27, 27, 27,
+ 27, 31, 30, 30, 28, 28, 34, 28, 32, 32,
+ 33, 33, 35, 35, 37, 38, 29, 39, 29, 36,
+ 36, 36, 40, 40, 1, 1, 2, 2, 2, 3,
+ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 6, 6, 6, 19, 19, 8, 8, 9,
+ 41, 9, 7, 7, 7, 25, 23, 23, 10, 10,
+ 11, 11, 11, 11, 11, 20, 20, 21, 21, 22,
+ 22, 14, 14, 15, 15, 16, 16, 16, 17, 17,
+ 18, 18, 24, 24, 12, 12, 12, 13, 13, 13,
+ 13, 13, 13, 13,
+};
+static const YYINT grammar_len[] = { 2,
+ 0, 1, 1, 2, 1, 1, 1, 1, 3, 2,
+ 2, 2, 3, 3, 2, 3, 0, 5, 2, 1,
+ 0, 1, 1, 3, 0, 0, 7, 0, 5, 0,
+ 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 3, 2, 2, 1, 1, 1, 3, 1,
+ 0, 4, 3, 2, 2, 1, 1, 1, 2, 1,
+ 1, 3, 2, 4, 4, 2, 3, 0, 1, 1,
+ 2, 1, 3, 1, 3, 2, 2, 1, 0, 1,
+ 1, 3, 1, 2, 1, 2, 1, 3, 2, 1,
+ 4, 3, 3, 2,
+};
+static const YYINT grammar_defred[] = { 0,
+ 0, 0, 0, 0, 77, 0, 62, 40, 0, 42,
+ 43, 20, 44, 0, 46, 47, 48, 49, 54, 50,
+ 51, 52, 53, 76, 66, 67, 55, 56, 57, 61,
+ 0, 7, 0, 0, 35, 37, 38, 39, 59, 60,
+ 28, 0, 0, 0, 103, 81, 0, 0, 3, 5,
+ 6, 8, 0, 10, 11, 78, 0, 90, 0, 0,
+ 104, 0, 19, 0, 41, 45, 15, 36, 0, 68,
+ 0, 0, 0, 83, 0, 0, 64, 0, 0, 74,
+ 4, 58, 0, 82, 87, 91, 0, 14, 13, 9,
+ 16, 0, 71, 0, 31, 33, 0, 0, 0, 0,
+ 0, 94, 0, 0, 101, 12, 63, 73, 0, 0,
+ 69, 0, 0, 0, 34, 0, 110, 96, 97, 0,
+ 0, 84, 0, 85, 0, 23, 0, 0, 72, 26,
+ 29, 114, 0, 0, 0, 109, 0, 93, 95, 102,
+ 18, 0, 0, 108, 113, 112, 0, 24, 27, 111,
+};
+static const YYINT grammar_dgoto[] = { 33,
+ 87, 35, 36, 37, 38, 39, 40, 69, 70, 41,
+ 42, 119, 120, 100, 101, 102, 103, 104, 43, 44,
+ 59, 60, 45, 46, 47, 48, 49, 50, 51, 52,
+ 77, 53, 127, 109, 128, 97, 94, 143, 72, 98,
+ 112,
+};
+static const YYINT grammar_sindex[] = { -2,
+ -3, 27, -239, -177, 0, 0, 0, 0, -274, 0,
+ 0, 0, 0, -246, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -266, 0, 0, 455, 0, 0, 0, 0, 0, 0,
+ 0, -35, -245, 128, 0, 0, -245, -2, 0, 0,
+ 0, 0, 642, 0, 0, 0, -15, 0, -12, -239,
+ 0, 590, 0, -27, 0, 0, 0, 0, -10, 0,
+ -11, 534, -72, 0, -237, -232, 0, -35, -232, 0,
+ 0, 0, 642, 0, 0, 0, 455, 0, 0, 0,
+ 0, 27, 0, 534, 0, 0, -222, 617, 209, 34,
+ 39, 0, 44, 42, 0, 0, 0, 0, 27, -11,
+ 0, -200, -196, -195, 0, 174, 0, 0, 0, -33,
+ 243, 0, 561, 0, -177, 0, 33, 49, 0, 0,
+ 0, 0, 53, 55, 417, 0, -33, 0, 0, 0,
+ 0, 27, -188, 0, 0, 0, 57, 0, 0, 0,
+};
+static const YYINT grammar_rindex[] = { 99,
+ 0, 0, 275, 0, 0, -38, 0, 0, 481, 0,
+ 0, 0, 0, 509, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 30, 0, 0, 0, 0, 0, 101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 343, 309,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 98, -182, 62, 0, 0, 133, 0, 64, 379, 0,
+ 0, 0, -5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -182, 0, 0, 0, -180, -19, 0,
+ 65, 0, 0, 68, 0, 0, 0, 0, 51, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -13,
+ 19, 0, 0, 0, 0, 0, 0, 52, 0, 0,
+ 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+static const YYINT grammar_gindex[] = { 0,
+ 11, -17, 0, 0, 13, 0, 0, 0, 20, 8,
+ -43, -1, -8, -89, 0, -9, 0, 0, 0, -44,
+ 0, 0, 4, 0, 0, 0, 70, -53, 0, 0,
+ -18, 0, 0, 0, 0, 22, 0, 0, 0, 0,
+ 0,
+};
+#define YYTABLESIZE 924
+static const YYINT grammar_table[] = { 58,
+ 78, 58, 58, 58, 73, 58, 135, 61, 88, 57,
+ 34, 5, 56, 62, 85, 58, 68, 63, 96, 7,
+ 58, 98, 78, 64, 98, 84, 134, 107, 80, 3,
+ 107, 90, 17, 92, 17, 4, 17, 2, 75, 3,
+ 96, 71, 30, 89, 115, 147, 76, 106, 91, 93,
+ 79, 75, 70, 17, 121, 55, 32, 107, 34, 105,
+ 108, 114, 105, 83, 4, 68, 2, 70, 3, 68,
+ 80, 121, 86, 80, 122, 106, 105, 78, 106, 5,
+ 56, 68, 123, 99, 124, 125, 129, 130, 80, 131,
+ 80, 141, 142, 144, 110, 145, 149, 150, 1, 110,
+ 2, 30, 99, 32, 79, 92, 118, 79, 100, 21,
+ 22, 111, 137, 139, 133, 113, 126, 81, 0, 0,
+ 0, 0, 79, 57, 79, 0, 99, 0, 140, 0,
+ 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
+ 0, 70, 0, 0, 0, 99, 0, 0, 0, 148,
+ 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 2, 0, 0,
+ 65, 0, 65, 65, 65, 0, 65, 0, 0, 0,
+ 0, 0, 0, 0, 5, 6, 7, 8, 65, 10,
+ 11, 65, 13, 66, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 0, 4, 0, 116, 132, 3, 0, 0, 58, 58,
+ 58, 58, 58, 58, 58, 78, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 78, 4, 74, 116, 136,
+ 3, 17, 78, 1, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 4, 54, 116, 5, 56, 0, 31, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 88, 80, 88, 88, 88, 0, 88, 0,
+ 80, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 89, 79, 89, 89,
+ 89, 0, 89, 0, 79, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 86, 25, 86, 86, 5, 56, 86, 0, 25, 65,
+ 65, 65, 65, 65, 65, 65, 0, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 75, 0, 75, 75,
+ 75, 0, 75, 0, 0, 0, 0, 0, 0, 0,
+ 5, 6, 7, 8, 65, 10, 11, 75, 13, 66,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 117, 146, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 8, 65,
+ 10, 11, 0, 13, 66, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 117, 4, 0, 2, 0, 3, 0, 0, 5,
+ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67, 0, 0, 0, 0, 41, 0,
+ 41, 0, 41, 0, 0, 117, 0, 0, 0, 0,
+ 0, 88, 88, 0, 0, 0, 0, 0, 0, 41,
+ 0, 0, 0, 0, 0, 0, 45, 0, 45, 0,
+ 45, 0, 0, 0, 0, 0, 0, 88, 0, 0,
+ 0, 0, 0, 0, 0, 89, 89, 45, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 89, 0, 0, 0, 0, 0, 0, 0, 86,
+ 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 75, 75, 75, 75, 75,
+ 75, 75, 0, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 7, 8, 65, 10, 11,
+ 0, 13, 66, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 8, 65, 10, 11, 0, 13,
+ 66, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 41, 41, 41,
+ 41, 41, 41, 41, 0, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 0, 0, 45, 45, 45, 45, 45,
+ 45, 45, 0, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 82, 7, 8, 65, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 0, 0, 82, 7,
+ 8, 65, 10, 11, 95, 13, 66, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 0, 0, 0, 138, 82, 7, 8,
+ 65, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 0, 75, 82, 7, 8, 65, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 82,
+ 7, 8, 65, 10, 11, 0, 13, 66, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30,
+};
+static const YYINT grammar_check[] = { 38,
+ 44, 40, 41, 42, 40, 44, 40, 4, 62, 2,
+ 0, 257, 258, 288, 59, 3, 34, 264, 72, 259,
+ 59, 41, 61, 290, 44, 41, 116, 41, 47, 42,
+ 44, 59, 38, 44, 40, 38, 42, 40, 284, 42,
+ 94, 34, 282, 62, 98, 135, 43, 285, 59, 61,
+ 47, 284, 44, 59, 99, 59, 59, 76, 48, 41,
+ 79, 284, 44, 53, 38, 83, 40, 59, 42, 87,
+ 41, 116, 60, 44, 41, 41, 73, 121, 44, 257,
+ 258, 99, 44, 73, 41, 44, 287, 284, 59, 285,
+ 61, 59, 44, 41, 87, 41, 285, 41, 0, 92,
+ 0, 284, 41, 284, 41, 41, 99, 44, 41, 59,
+ 59, 92, 121, 123, 116, 94, 109, 48, -1, -1,
+ -1, -1, 59, 116, 61, -1, 116, -1, 125, -1,
+ -1, -1, -1, 123, -1, -1, -1, -1, -1, -1,
+ -1, 44, -1, -1, -1, 135, -1, -1, -1, 142,
+ -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
+ -1, -1, -1, -1, -1, 38, -1, 40, -1, -1,
+ 38, -1, 40, 41, 42, -1, 44, -1, -1, -1,
+ -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
+ 263, 59, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ -1, 38, -1, 40, 41, 42, -1, -1, 257, 258,
+ 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 38, 283, 40, 283,
+ 42, 257, 291, 256, 257, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 38, 285, 40, 257, 258, -1, 289, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 38, 284, 40, 41, 42, -1, 44, -1,
+ 291, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 38, 284, 40, 41,
+ 42, -1, 44, -1, 291, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 38, 284, 40, 41, 257, 258, 44, -1, 291, 257,
+ 258, 259, 260, 261, 262, 263, -1, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 38, -1, 40, 41,
+ 42, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ 257, 258, 259, 260, 261, 262, 263, 59, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 41, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 38, -1, 40, -1, 42, -1, -1, 257,
+ 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 59, -1, -1, -1, -1, 38, -1,
+ 40, -1, 42, -1, -1, 283, -1, -1, -1, -1,
+ -1, 257, 258, -1, -1, -1, -1, -1, -1, 59,
+ -1, -1, -1, -1, -1, -1, 38, -1, 40, -1,
+ 42, -1, -1, -1, -1, -1, -1, 283, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 59, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 283, -1, -1, -1, -1, -1, -1, -1, 257,
+ 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 283, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 258, 259, 260, 261, 262, 263,
+ -1, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 257, 258, 259, 260, 261, 262, 263, -1, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 257, 258, 259,
+ 260, 261, 262, 263, -1, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, -1, -1, 258, 259,
+ 260, 261, 262, 263, 291, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, -1, -1, -1, 286, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, -1, 284, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 258,
+ 259, 260, 261, 262, 263, -1, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282,
+};
+#define YYFINAL 33
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 291
+#define YYUNDFTOKEN 335
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const grammar_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,"'&'",0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,
+"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN",
+"T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR",
+"T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED",
+"T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary",
+"T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS",
+"T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"illegal-symbol",
+};
+static const char *const grammar_rule[] = {
+"$accept : program",
+"program :",
+"program : translation_unit",
+"translation_unit : external_declaration",
+"translation_unit : translation_unit external_declaration",
+"external_declaration : declaration",
+"external_declaration : function_definition",
+"external_declaration : ';'",
+"external_declaration : linkage_specification",
+"external_declaration : T_ASM T_ASMARG ';'",
+"external_declaration : error T_MATCHRBRACE",
+"external_declaration : error ';'",
+"braces : T_LBRACE T_MATCHRBRACE",
+"linkage_specification : T_EXTERN T_STRING_LITERAL braces",
+"linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
+"declaration : decl_specifiers ';'",
+"declaration : decl_specifiers init_declarator_list ';'",
+"$$1 :",
+"declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
+"any_typedef : T_EXTENSION T_TYPEDEF",
+"any_typedef : T_TYPEDEF",
+"opt_declarator_list :",
+"opt_declarator_list : declarator_list",
+"declarator_list : declarator",
+"declarator_list : declarator_list ',' declarator",
+"$$2 :",
+"$$3 :",
+"function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
+"$$4 :",
+"function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
+"opt_declaration_list :",
+"opt_declaration_list : T_VA_DCL",
+"opt_declaration_list : declaration_list",
+"declaration_list : declaration",
+"declaration_list : declaration_list declaration",
+"decl_specifiers : decl_specifier",
+"decl_specifiers : decl_specifiers decl_specifier",
+"decl_specifier : storage_class",
+"decl_specifier : type_specifier",
+"decl_specifier : type_qualifier",
+"storage_class : T_AUTO",
+"storage_class : T_EXTERN",
+"storage_class : T_REGISTER",
+"storage_class : T_STATIC",
+"storage_class : T_INLINE",
+"storage_class : T_EXTENSION",
+"type_specifier : T_CHAR",
+"type_specifier : T_DOUBLE",
+"type_specifier : T_FLOAT",
+"type_specifier : T_INT",
+"type_specifier : T_LONG",
+"type_specifier : T_SHORT",
+"type_specifier : T_SIGNED",
+"type_specifier : T_UNSIGNED",
+"type_specifier : T_VOID",
+"type_specifier : T_Bool",
+"type_specifier : T_Complex",
+"type_specifier : T_Imaginary",
+"type_specifier : T_TYPEDEF_NAME",
+"type_specifier : struct_or_union_specifier",
+"type_specifier : enum_specifier",
+"type_qualifier : T_TYPE_QUALIFIER",
+"type_qualifier : T_DEFINE_NAME",
+"struct_or_union_specifier : struct_or_union any_id braces",
+"struct_or_union_specifier : struct_or_union braces",
+"struct_or_union_specifier : struct_or_union any_id",
+"struct_or_union : T_STRUCT",
+"struct_or_union : T_UNION",
+"init_declarator_list : init_declarator",
+"init_declarator_list : init_declarator_list ',' init_declarator",
+"init_declarator : declarator",
+"$$5 :",
+"init_declarator : declarator '=' $$5 T_INITIALIZER",
+"enum_specifier : enumeration any_id braces",
+"enum_specifier : enumeration braces",
+"enum_specifier : enumeration any_id",
+"enumeration : T_ENUM",
+"any_id : T_IDENTIFIER",
+"any_id : T_TYPEDEF_NAME",
+"declarator : pointer direct_declarator",
+"declarator : direct_declarator",
+"direct_declarator : identifier_or_ref",
+"direct_declarator : '(' declarator ')'",
+"direct_declarator : direct_declarator T_BRACKETS",
+"direct_declarator : direct_declarator '(' parameter_type_list ')'",
+"direct_declarator : direct_declarator '(' opt_identifier_list ')'",
+"pointer : '*' opt_type_qualifiers",
+"pointer : '*' opt_type_qualifiers pointer",
+"opt_type_qualifiers :",
+"opt_type_qualifiers : type_qualifier_list",
+"type_qualifier_list : type_qualifier",
+"type_qualifier_list : type_qualifier_list type_qualifier",
+"parameter_type_list : parameter_list",
+"parameter_type_list : parameter_list ',' T_ELLIPSIS",
+"parameter_list : parameter_declaration",
+"parameter_list : parameter_list ',' parameter_declaration",
+"parameter_declaration : decl_specifiers declarator",
+"parameter_declaration : decl_specifiers abs_declarator",
+"parameter_declaration : decl_specifiers",
+"opt_identifier_list :",
+"opt_identifier_list : identifier_list",
+"identifier_list : any_id",
+"identifier_list : identifier_list ',' any_id",
+"identifier_or_ref : any_id",
+"identifier_or_ref : '&' any_id",
+"abs_declarator : pointer",
+"abs_declarator : pointer direct_abs_declarator",
+"abs_declarator : direct_abs_declarator",
+"direct_abs_declarator : '(' abs_declarator ')'",
+"direct_abs_declarator : direct_abs_declarator T_BRACKETS",
+"direct_abs_declarator : T_BRACKETS",
+"direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
+"direct_abs_declarator : direct_abs_declarator '(' ')'",
+"direct_abs_declarator : '(' parameter_type_list ')'",
+"direct_abs_declarator : '(' ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 1014 "grammar.y"
+
+/* lex.yy.c */
+#define BEGIN yy_start = 1 + 2 *
+
+#define CPP1 1
+#define INIT1 2
+#define INIT2 3
+#define CURLY 4
+#define LEXYACC 5
+#define ASM 6
+#define CPP_INLINE 7
+
+extern char *yytext;
+extern FILE *yyin, *yyout;
+
+static int curly; /* number of curly brace nesting levels */
+static int ly_count; /* number of occurances of %% */
+static int inc_depth; /* include nesting level */
+static SymbolTable *included_files; /* files already included */
+static int yy_start = 0; /* start state number */
+
+#define grammar_error(s) yaccError(s)
+
+static void
+yaccError (const char *msg)
+{
+ func_params = NULL;
+ put_error(); /* tell what line we're on, and what file */
+ fprintf(stderr, "%s at token '%s'\n", msg, yytext);
+}
+
+/* Initialize the table of type qualifier keywords recognized by the lexical
+ * analyzer.
+ */
+void
+init_parser (void)
+{
+ static const char *keywords[] = {
+ "const",
+ "restrict",
+ "volatile",
+ "interrupt",
+#ifdef vms
+ "noshare",
+ "readonly",
+#endif
+#if defined(MSDOS) || defined(OS2)
+ "__cdecl",
+ "__export",
+ "__far",
+ "__fastcall",
+ "__fortran",
+ "__huge",
+ "__inline",
+ "__interrupt",
+ "__loadds",
+ "__near",
+ "__pascal",
+ "__saveregs",
+ "__segment",
+ "__stdcall",
+ "__syscall",
+ "_cdecl",
+ "_cs",
+ "_ds",
+ "_es",
+ "_export",
+ "_far",
+ "_fastcall",
+ "_fortran",
+ "_huge",
+ "_interrupt",
+ "_loadds",
+ "_near",
+ "_pascal",
+ "_saveregs",
+ "_seg",
+ "_segment",
+ "_ss",
+ "cdecl",
+ "far",
+ "huge",
+ "near",
+ "pascal",
+#ifdef OS2
+ "__far16",
+#endif
+#endif
+#ifdef __GNUC__
+ /* gcc aliases */
+ "__builtin_va_arg",
+ "__builtin_va_list",
+ "__const",
+ "__const__",
+ "__inline",
+ "__inline__",
+ "__restrict",
+ "__restrict__",
+ "__volatile",
+ "__volatile__",
+#endif
+ };
+ unsigned i;
+
+ /* Initialize type qualifier table. */
+ type_qualifiers = new_symbol_table();
+ for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
+ new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
+ }
+}
+
+/* Process the C source file. Write function prototypes to the standard
+ * output. Convert function definitions and write the converted source
+ * code to a temporary file.
+ */
+void
+process_file (FILE *infile, char *name)
+{
+ char *s;
+
+ if (strlen(name) > 2) {
+ s = name + strlen(name) - 2;
+ if (*s == '.') {
+ ++s;
+ if (*s == 'l' || *s == 'y')
+ BEGIN LEXYACC;
+#if defined(MSDOS) || defined(OS2)
+ if (*s == 'L' || *s == 'Y')
+ BEGIN LEXYACC;
+#endif
+ }
+ }
+
+ included_files = new_symbol_table();
+ typedef_names = new_symbol_table();
+ define_names = new_symbol_table();
+ inc_depth = -1;
+ curly = 0;
+ ly_count = 0;
+ func_params = NULL;
+ yyin = infile;
+ include_file(strcpy(base_file, name), func_style != FUNC_NONE);
+ if (file_comments) {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) {
+ put_blankline(stdout);
+ begin_tracking();
+ }
+#endif
+ put_string(stdout, "/* ");
+ put_string(stdout, cur_file_name());
+ put_string(stdout, " */\n");
+ }
+ yyparse();
+ free_symbol_table(define_names);
+ free_symbol_table(typedef_names);
+ free_symbol_table(included_files);
+}
+
+#ifdef NO_LEAKS
+void
+free_parser(void)
+{
+ free_symbol_table (type_qualifiers);
+#ifdef FLEX_SCANNER
+ if (yy_current_buffer != 0)
+ yy_delete_buffer(yy_current_buffer);
+#endif
+}
+#endif
+#line 1092 "grammar.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 10:
+#line 377 "grammar.y"
+ {
+ yyerrok;
+ }
+break;
+case 11:
+#line 381 "grammar.y"
+ {
+ yyerrok;
+ }
+break;
+case 13:
+#line 392 "grammar.y"
+ {
+ /* Provide an empty action here so bison will not complain about
+ * incompatible types in the default action it normally would
+ * have generated.
+ */
+ }
+break;
+case 14:
+#line 399 "grammar.y"
+ {
+ /* empty */
+ }
+break;
+case 15:
+#line 406 "grammar.y"
+ {
+#if OPT_LINTLIBRARY
+ if (types_out && want_typedef()) {
+ gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0);
+ flush_varargs();
+ }
+#endif
+ free_decl_spec(&yystack.l_mark[-1].decl_spec);
+ end_typedef();
+ }
+break;
+case 16:
+#line 417 "grammar.y"
+ {
+ if (func_params != NULL) {
+ set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
+ } else {
+ gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_list(&yystack.l_mark[-1].decl_list);
+ }
+ free_decl_spec(&yystack.l_mark[-2].decl_spec);
+ end_typedef();
+ }
+break;
+case 17:
+#line 431 "grammar.y"
+ {
+ cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags;
+ free_decl_spec(&yystack.l_mark[0].decl_spec);
+ }
+break;
+case 18:
+#line 436 "grammar.y"
+ {
+ end_typedef();
+ }
+break;
+case 19:
+#line 443 "grammar.y"
+ {
+ begin_typedef();
+ }
+break;
+case 20:
+#line 447 "grammar.y"
+ {
+ begin_typedef();
+ }
+break;
+case 23:
+#line 459 "grammar.y"
+ {
+ int flags = cur_decl_spec_flags;
+
+ /* If the typedef is a pointer type, then reset the short type
+ * flags so it does not get promoted.
+ */
+ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
+ free_declarator(yystack.l_mark[0].declarator);
+ }
+break;
+case 24:
+#line 471 "grammar.y"
+ {
+ int flags = cur_decl_spec_flags;
+
+ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
+ free_declarator(yystack.l_mark[0].declarator);
+ }
+break;
+case 25:
+#line 483 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &(yystack.l_mark[0].declarator->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+break;
+case 26:
+#line 494 "grammar.y"
+ {
+ /* If we're converting to K&R and we've got a nominally K&R
+ * function which has a parameter which is ANSI (i.e., a prototyped
+ * function pointer), then we must override the deciphered value of
+ * 'func_def' so that the parameter will be converted.
+ */
+ if (func_style == FUNC_TRADITIONAL
+ && haveAnsiParam()
+ && yystack.l_mark[-3].declarator->head->func_def == func_style) {
+ yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH;
+ }
+
+ func_params = NULL;
+
+ if (cur_file->convert)
+ gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
+ gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&yystack.l_mark[-4].decl_spec);
+ free_declarator(yystack.l_mark[-3].declarator);
+ }
+break;
+case 28:
+#line 519 "grammar.y"
+ {
+ if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &(yystack.l_mark[0].declarator->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+break;
+case 29:
+#line 529 "grammar.y"
+ {
+ DeclSpec decl_spec;
+
+ func_params = NULL;
+
+ new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE);
+ if (cur_file->convert)
+ gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator);
+ gen_prototype(&decl_spec, yystack.l_mark[-4].declarator);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&decl_spec);
+ free_declarator(yystack.l_mark[-4].declarator);
+ }
+break;
+case 36:
+#line 560 "grammar.y"
+ {
+ join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec);
+ free(yystack.l_mark[-1].decl_spec.text);
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 40:
+#line 575 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 41:
+#line 579 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN);
+ }
+break;
+case 42:
+#line 583 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 43:
+#line 587 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC);
+ }
+break;
+case 44:
+#line 591 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE);
+ }
+break;
+case 45:
+#line 595 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK);
+ }
+break;
+case 46:
+#line 602 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
+ }
+break;
+case 47:
+#line 606 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 48:
+#line 610 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT);
+ }
+break;
+case 49:
+#line 614 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 50:
+#line 618 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 51:
+#line 622 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT);
+ }
+break;
+case 52:
+#line 626 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 53:
+#line 630 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 54:
+#line 634 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 55:
+#line 638 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
+ }
+break;
+case 56:
+#line 642 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 57:
+#line 646 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 58:
+#line 650 "grammar.y"
+ {
+ Symbol *s;
+ s = find_symbol(typedef_names, yystack.l_mark[0].text.text);
+ if (s != NULL)
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
+ }
+break;
+case 61:
+#line 662 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 62:
+#line 666 "grammar.y"
+ {
+ /* This rule allows the <pointer> nonterminal to scan #define
+ * names as if they were type modifiers.
+ */
+ Symbol *s;
+ s = find_symbol(define_names, yystack.l_mark[0].text.text);
+ if (s != NULL)
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
+ }
+break;
+case 63:
+#line 679 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s %s", yystack.l_mark[-2].text.text, yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
+ }
+break;
+case 64:
+#line 686 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 65:
+#line 693 "grammar.y"
+ {
+ (void)sprintf(buf, "%s %s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
+ new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 66:
+#line 701 "grammar.y"
+ {
+ imply_typedef(yyval.text.text);
+ }
+break;
+case 67:
+#line 705 "grammar.y"
+ {
+ imply_typedef(yyval.text.text);
+ }
+break;
+case 68:
+#line 712 "grammar.y"
+ {
+ new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator);
+ }
+break;
+case 69:
+#line 716 "grammar.y"
+ {
+ add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator);
+ }
+break;
+case 70:
+#line 723 "grammar.y"
+ {
+ if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator(yystack.l_mark[0].declarator);
+ fputs(cur_text(), cur_file->tmp_file);
+ }
+ cur_declarator = yyval.declarator;
+ }
+break;
+case 71:
+#line 732 "grammar.y"
+ {
+ if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator(yystack.l_mark[-1].declarator);
+ fputs(" =", cur_file->tmp_file);
+ }
+ }
+break;
+case 73:
+#line 744 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "enum %s", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
+ }
+break;
+case 74:
+#line 751 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 75:
+#line 758 "grammar.y"
+ {
+ (void)sprintf(buf, "enum %s", yystack.l_mark[0].text.text);
+ new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 76:
+#line 766 "grammar.y"
+ {
+ imply_typedef("enum");
+ yyval.text = yystack.l_mark[0].text;
+ }
+break;
+case 79:
+#line 779 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[0].declarator;
+ (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-1].text.begin;
+ yyval.declarator->pointer = TRUE;
+ }
+break;
+case 81:
+#line 792 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin);
+ }
+break;
+case 82:
+#line 796 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "(%s)", yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 83:
+#line 804 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ }
+break;
+case 84:
+#line 811 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 85:
+#line 819 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_TRADITIONAL;
+ }
+break;
+case 86:
+#line 830 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "*%s", yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 87:
+#line 835 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "*%s%s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 88:
+#line 843 "grammar.y"
+ {
+ strcpy(yyval.text.text, "");
+ yyval.text.begin = 0L;
+ }
+break;
+case 90:
+#line 852 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text);
+ yyval.text.begin = yystack.l_mark[0].decl_spec.begin;
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 91:
+#line 858 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "%s%s ", yystack.l_mark[-1].text.text, yystack.l_mark[0].decl_spec.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 93:
+#line 868 "grammar.y"
+ {
+ add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "...");
+ }
+break;
+case 94:
+#line 875 "grammar.y"
+ {
+ new_param_list(&yyval.param_list, yystack.l_mark[0].parameter);
+ }
+break;
+case 95:
+#line 879 "grammar.y"
+ {
+ add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter);
+ }
+break;
+case 96:
+#line 886 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
+ }
+break;
+case 97:
+#line 891 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
+ }
+break;
+case 98:
+#line 896 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[0].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0);
+ }
+break;
+case 99:
+#line 904 "grammar.y"
+ {
+ new_ident_list(&yyval.param_list);
+ }
+break;
+case 101:
+#line 912 "grammar.y"
+ {
+ new_ident_list(&yyval.param_list);
+ add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text);
+ }
+break;
+case 102:
+#line 917 "grammar.y"
+ {
+ add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text);
+ }
+break;
+case 103:
+#line 924 "grammar.y"
+ {
+ yyval.text = yystack.l_mark[0].text;
+ }
+break;
+case 104:
+#line 928 "grammar.y"
+ {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
+ yyval.text = yystack.l_mark[0].text;
+ } else
+#endif
+ (void)sprintf(yyval.text.text, "&%s", yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 105:
+#line 941 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
+ }
+break;
+case 106:
+#line 945 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[0].declarator;
+ (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 108:
+#line 957 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "(%s)", yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 109:
+#line 965 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ }
+break;
+case 110:
+#line 972 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
+ }
+break;
+case 111:
+#line 976 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 112:
+#line 984 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin);
+ yyval.declarator->func_stack = yystack.l_mark[-2].declarator;
+ yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 113:
+#line 991 "grammar.y"
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", yystack.l_mark[-2].text.begin);
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = d;
+ yyval.declarator->head = yyval.declarator;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 114:
+#line 1002 "grammar.y"
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", yystack.l_mark[-1].text.begin);
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin);
+ yyval.declarator->func_stack = d;
+ yyval.declarator->head = yyval.declarator;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+#line 1968 "grammar.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/grammar.tab.h b/contrib/byacc/test/yacc/grammar.tab.h
new file mode 100644
index 000000000000..531dd2e849b2
--- /dev/null
+++ b/contrib/byacc/test/yacc/grammar.tab.h
@@ -0,0 +1,35 @@
+#define T_IDENTIFIER 257
+#define T_TYPEDEF_NAME 258
+#define T_DEFINE_NAME 259
+#define T_AUTO 260
+#define T_EXTERN 261
+#define T_REGISTER 262
+#define T_STATIC 263
+#define T_TYPEDEF 264
+#define T_INLINE 265
+#define T_EXTENSION 266
+#define T_CHAR 267
+#define T_DOUBLE 268
+#define T_FLOAT 269
+#define T_INT 270
+#define T_VOID 271
+#define T_LONG 272
+#define T_SHORT 273
+#define T_SIGNED 274
+#define T_UNSIGNED 275
+#define T_ENUM 276
+#define T_STRUCT 277
+#define T_UNION 278
+#define T_Bool 279
+#define T_Complex 280
+#define T_Imaginary 281
+#define T_TYPE_QUALIFIER 282
+#define T_BRACKETS 283
+#define T_LBRACE 284
+#define T_MATCHRBRACE 285
+#define T_ELLIPSIS 286
+#define T_INITIALIZER 287
+#define T_STRING_LITERAL 288
+#define T_ASM 289
+#define T_ASMARG 290
+#define T_VA_DCL 291
diff --git a/contrib/byacc/test/yacc/help.error b/contrib/byacc/test/yacc/help.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/help.error
diff --git a/contrib/byacc/test/yacc/help.output b/contrib/byacc/test/yacc/help.output
new file mode 100644
index 000000000000..28e455543be0
--- /dev/null
+++ b/contrib/byacc/test/yacc/help.output
@@ -0,0 +1,19 @@
+Usage: YACC [options] filename
+
+Options:
+ -b file_prefix set filename prefix (default "y.")
+ -B create a backtracking parser
+ -d write definitions (.tab.h)
+ -D enable value stack memory reclamation
+ -i write interface (y.tab.i)
+ -g write a graphical description
+ -l suppress #line directives
+ -L enable position processing, e.g., "%locations"
+ -o output_file (default ".tab.c")
+ -p symbol_prefix set symbol prefix (default "yy")
+ -P create a reentrant parser, e.g., "%pure-parser"
+ -r produce separate code and table files (y.code.c)
+ -s suppress #define's for quoted names in %token lines
+ -t add debugging support
+ -v write description (y.output)
+ -V show version information and exit
diff --git a/contrib/byacc/test/yacc/no_b_opt.error b/contrib/byacc/test/yacc/no_b_opt.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_b_opt.error
diff --git a/contrib/byacc/test/yacc/no_b_opt.output b/contrib/byacc/test/yacc/no_b_opt.output
new file mode 100644
index 000000000000..28e455543be0
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_b_opt.output
@@ -0,0 +1,19 @@
+Usage: YACC [options] filename
+
+Options:
+ -b file_prefix set filename prefix (default "y.")
+ -B create a backtracking parser
+ -d write definitions (.tab.h)
+ -D enable value stack memory reclamation
+ -i write interface (y.tab.i)
+ -g write a graphical description
+ -l suppress #line directives
+ -L enable position processing, e.g., "%locations"
+ -o output_file (default ".tab.c")
+ -p symbol_prefix set symbol prefix (default "yy")
+ -P create a reentrant parser, e.g., "%pure-parser"
+ -r produce separate code and table files (y.code.c)
+ -s suppress #define's for quoted names in %token lines
+ -t add debugging support
+ -v write description (y.output)
+ -V show version information and exit
diff --git a/contrib/byacc/test/yacc/no_b_opt1.error b/contrib/byacc/test/yacc/no_b_opt1.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_b_opt1.error
diff --git a/contrib/byacc/test/yacc/no_b_opt1.output b/contrib/byacc/test/yacc/no_b_opt1.output
new file mode 100644
index 000000000000..87286c2661e6
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_b_opt1.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.c"
diff --git a/contrib/byacc/test/yacc/no_code_c.error b/contrib/byacc/test/yacc/no_code_c.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_code_c.error
diff --git a/contrib/byacc/test/yacc/no_code_c.output b/contrib/byacc/test/yacc/no_code_c.output
new file mode 100644
index 000000000000..87286c2661e6
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_code_c.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.c"
diff --git a/contrib/byacc/test/yacc/no_defines.error b/contrib/byacc/test/yacc/no_defines.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_defines.error
diff --git a/contrib/byacc/test/yacc/no_defines.output b/contrib/byacc/test/yacc/no_defines.output
new file mode 100644
index 000000000000..773985d66f33
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_defines.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.h"
diff --git a/contrib/byacc/test/yacc/no_graph.error b/contrib/byacc/test/yacc/no_graph.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_graph.error
diff --git a/contrib/byacc/test/yacc/no_graph.output b/contrib/byacc/test/yacc/no_graph.output
new file mode 100644
index 000000000000..d5575f400421
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_graph.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.dot"
diff --git a/contrib/byacc/test/yacc/no_include.error b/contrib/byacc/test/yacc/no_include.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_include.error
diff --git a/contrib/byacc/test/yacc/no_include.output b/contrib/byacc/test/yacc/no_include.output
new file mode 100644
index 000000000000..3ece4a454e39
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_include.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.i"
diff --git a/contrib/byacc/test/yacc/no_opts.error b/contrib/byacc/test/yacc/no_opts.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_opts.error
diff --git a/contrib/byacc/test/yacc/no_opts.output b/contrib/byacc/test/yacc/no_opts.output
new file mode 100644
index 000000000000..ad3131a69ab6
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_opts.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.y"
diff --git a/contrib/byacc/test/yacc/no_output.error b/contrib/byacc/test/yacc/no_output.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_output.error
diff --git a/contrib/byacc/test/yacc/no_output.output b/contrib/byacc/test/yacc/no_output.output
new file mode 100644
index 000000000000..a2f142a9d531
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_output.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.output"
diff --git a/contrib/byacc/test/yacc/no_output1.error b/contrib/byacc/test/yacc/no_output1.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_output1.error
diff --git a/contrib/byacc/test/yacc/no_output1.output b/contrib/byacc/test/yacc/no_output1.output
new file mode 100644
index 000000000000..a2f142a9d531
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_output1.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.output"
diff --git a/contrib/byacc/test/yacc/no_output2.error b/contrib/byacc/test/yacc/no_output2.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_output2.error
diff --git a/contrib/byacc/test/yacc/no_output2.output b/contrib/byacc/test/yacc/no_output2.output
new file mode 100644
index 000000000000..28e455543be0
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_output2.output
@@ -0,0 +1,19 @@
+Usage: YACC [options] filename
+
+Options:
+ -b file_prefix set filename prefix (default "y.")
+ -B create a backtracking parser
+ -d write definitions (.tab.h)
+ -D enable value stack memory reclamation
+ -i write interface (y.tab.i)
+ -g write a graphical description
+ -l suppress #line directives
+ -L enable position processing, e.g., "%locations"
+ -o output_file (default ".tab.c")
+ -p symbol_prefix set symbol prefix (default "yy")
+ -P create a reentrant parser, e.g., "%pure-parser"
+ -r produce separate code and table files (y.code.c)
+ -s suppress #define's for quoted names in %token lines
+ -t add debugging support
+ -v write description (y.output)
+ -V show version information and exit
diff --git a/contrib/byacc/test/yacc/no_p_opt.error b/contrib/byacc/test/yacc/no_p_opt.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_p_opt.error
diff --git a/contrib/byacc/test/yacc/no_p_opt.output b/contrib/byacc/test/yacc/no_p_opt.output
new file mode 100644
index 000000000000..28e455543be0
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_p_opt.output
@@ -0,0 +1,19 @@
+Usage: YACC [options] filename
+
+Options:
+ -b file_prefix set filename prefix (default "y.")
+ -B create a backtracking parser
+ -d write definitions (.tab.h)
+ -D enable value stack memory reclamation
+ -i write interface (y.tab.i)
+ -g write a graphical description
+ -l suppress #line directives
+ -L enable position processing, e.g., "%locations"
+ -o output_file (default ".tab.c")
+ -p symbol_prefix set symbol prefix (default "yy")
+ -P create a reentrant parser, e.g., "%pure-parser"
+ -r produce separate code and table files (y.code.c)
+ -s suppress #define's for quoted names in %token lines
+ -t add debugging support
+ -v write description (y.output)
+ -V show version information and exit
diff --git a/contrib/byacc/test/yacc/no_p_opt1.error b/contrib/byacc/test/yacc/no_p_opt1.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_p_opt1.error
diff --git a/contrib/byacc/test/yacc/no_p_opt1.output b/contrib/byacc/test/yacc/no_p_opt1.output
new file mode 100644
index 000000000000..87286c2661e6
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_p_opt1.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.c"
diff --git a/contrib/byacc/test/yacc/no_verbose.error b/contrib/byacc/test/yacc/no_verbose.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_verbose.error
diff --git a/contrib/byacc/test/yacc/no_verbose.output b/contrib/byacc/test/yacc/no_verbose.output
new file mode 100644
index 000000000000..a2f142a9d531
--- /dev/null
+++ b/contrib/byacc/test/yacc/no_verbose.output
@@ -0,0 +1 @@
+YACC: f - cannot open "nosuchfile.output"
diff --git a/contrib/byacc/test/yacc/nostdin.error b/contrib/byacc/test/yacc/nostdin.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/nostdin.error
diff --git a/contrib/byacc/test/yacc/nostdin.output b/contrib/byacc/test/yacc/nostdin.output
new file mode 100644
index 000000000000..28e455543be0
--- /dev/null
+++ b/contrib/byacc/test/yacc/nostdin.output
@@ -0,0 +1,19 @@
+Usage: YACC [options] filename
+
+Options:
+ -b file_prefix set filename prefix (default "y.")
+ -B create a backtracking parser
+ -d write definitions (.tab.h)
+ -D enable value stack memory reclamation
+ -i write interface (y.tab.i)
+ -g write a graphical description
+ -l suppress #line directives
+ -L enable position processing, e.g., "%locations"
+ -o output_file (default ".tab.c")
+ -p symbol_prefix set symbol prefix (default "yy")
+ -P create a reentrant parser, e.g., "%pure-parser"
+ -r produce separate code and table files (y.code.c)
+ -s suppress #define's for quoted names in %token lines
+ -t add debugging support
+ -v write description (y.output)
+ -V show version information and exit
diff --git a/contrib/byacc/test/yacc/ok_syntax1.error b/contrib/byacc/test/yacc/ok_syntax1.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/ok_syntax1.error
diff --git a/contrib/byacc/test/yacc/ok_syntax1.output b/contrib/byacc/test/yacc/ok_syntax1.output
new file mode 100644
index 000000000000..105a1d30d484
--- /dev/null
+++ b/contrib/byacc/test/yacc/ok_syntax1.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '\n' reduce 15
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '\n' reduce 16
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 13
+ '|' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 12
+ '|' reduce 12
+ '&' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 7
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 8
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+42 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/ok_syntax1.tab.c b/contrib/byacc/test/yacc/ok_syntax1.tab.c
new file mode 100644
index 000000000000..990623e75de8
--- /dev/null
+++ b/contrib/byacc/test/yacc/ok_syntax1.tab.c
@@ -0,0 +1,716 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse ok_syntax1_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex ok_syntax1_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror ok_syntax1_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar ok_syntax1_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval ok_syntax1_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval ok_syntax1_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug ok_syntax1_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs ok_syntax1_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag ok_syntax1_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs ok_syntax1_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen ok_syntax1_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred ok_syntax1_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto ok_syntax1_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex ok_syntax1_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex ok_syntax1_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex ok_syntax1_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable ok_syntax1_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck ok_syntax1_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname ok_syntax1_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule ok_syntax1_rule
+#endif /* yyrule */
+#define YYPREFIX "ok_syntax1_"
+
+#define YYPURE 1
+
+#line 9 "ok_syntax1.y"
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 43 "ok_syntax1.y"
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ char * cval;
+ int ival;
+ double dval;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+#line 128 "ok_syntax1.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(int regs[26], int * base)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base)
+# define YYLEX yylex(&yylval, base)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(regs, base, msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define OCT1 259
+#define HEX1 260
+#define HEX2 261
+#define HEX3 262
+#define STR1 263
+#define STR2 265
+#define BELL 266
+#define BS 267
+#define NL 268
+#define LF 269
+#define CR 270
+#define TAB 271
+#define VT 272
+#define UMINUS 273
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT ok_syntax1_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT ok_syntax1_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT ok_syntax1_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const YYINT ok_syntax1_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT ok_syntax1_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const YYINT ok_syntax1_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const YYINT ok_syntax1_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const YYINT ok_syntax1_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
+};
+static const YYINT ok_syntax1_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 273
+#define YYUNDFTOKEN 279
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const ok_syntax1_name[] = {
+
+"end-of-file",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'",
+"'\\r'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('",
+"')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"'\\377'",0,"DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1",
+"\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",0,
+0,0,0,0,"illegal-symbol",
+};
+static const char *const ok_syntax1_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 104 "ok_syntax1.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+#define UNUSED(x) ((void)(x))
+
+static void
+YYERROR_DECL()
+{
+ UNUSED(regs); /* %parse-param regs is not actually used here */
+ UNUSED(base); /* %parse-param base is not actually used here */
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval->ival = (c - 'a');
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval->ival = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 389 "ok_syntax1.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 66 "ok_syntax1.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 70 "ok_syntax1.y"
+ { printf("%d\n",yystack.l_mark[0].ival);}
+break;
+case 5:
+#line 72 "ok_syntax1.y"
+ { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
+break;
+case 6:
+#line 76 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-1].ival; }
+break;
+case 7:
+#line 78 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
+break;
+case 8:
+#line 80 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
+break;
+case 9:
+#line 82 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
+break;
+case 10:
+#line 84 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
+break;
+case 11:
+#line 86 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
+break;
+case 12:
+#line 88 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
+break;
+case 13:
+#line 90 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
+break;
+case 14:
+#line 92 "ok_syntax1.y"
+ { yyval.ival = - yystack.l_mark[0].ival; }
+break;
+case 15:
+#line 94 "ok_syntax1.y"
+ { yyval.ival = regs[yystack.l_mark[0].ival]; }
+break;
+case 17:
+#line 99 "ok_syntax1.y"
+ { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
+break;
+case 18:
+#line 101 "ok_syntax1.y"
+ { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
+break;
+#line 658 "ok_syntax1.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/ok_syntax1.tab.h b/contrib/byacc/test/yacc/ok_syntax1.tab.h
new file mode 100644
index 000000000000..8a51fa00660e
--- /dev/null
+++ b/contrib/byacc/test/yacc/ok_syntax1.tab.h
@@ -0,0 +1,30 @@
+#define DIGIT 257
+#define LETTER 258
+#define OCT1 259
+#define HEX1 260
+#define HEX2 261
+#define HEX3 262
+#define STR1 263
+#define STR2 265
+#define BELL 266
+#define BS 267
+#define NL 268
+#define LF 269
+#define CR 270
+#define TAB 271
+#define VT 272
+#define UMINUS 273
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ char * cval;
+ int ival;
+ double dval;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+extern YYSTYPE ok_syntax1_lval;
diff --git a/contrib/byacc/test/yacc/pure_calc.error b/contrib/byacc/test/yacc/pure_calc.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_calc.error
diff --git a/contrib/byacc/test/yacc/pure_calc.output b/contrib/byacc/test/yacc/pure_calc.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_calc.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/pure_calc.tab.c b/contrib/byacc/test/yacc/pure_calc.tab.c
new file mode 100644
index 000000000000..911db408e31a
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_calc.tab.c
@@ -0,0 +1,688 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc_rule
+#endif /* yyrule */
+#define YYPREFIX "calc_"
+
+#define YYPURE 1
+
+#line 2 "pure_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 117 "pure_calc.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval)
+# define YYLEX yylex(&yylval)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT calc_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const YYINT calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT calc_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const YYINT calc_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const YYINT calc_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const YYINT calc_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
+};
+static const YYINT calc_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#define YYUNDFTOKEN 265
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const calc_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
+};
+static const char *const calc_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 72 "pure_calc.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+static int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 361 "pure_calc.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 34 "pure_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 38 "pure_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 40 "pure_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 44 "pure_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 46 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 48 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 50 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 52 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 54 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 56 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 58 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 60 "pure_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 62 "pure_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 67 "pure_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 69 "pure_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 630 "pure_calc.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/pure_calc.tab.h b/contrib/byacc/test/yacc/pure_calc.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_calc.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/yacc/pure_error.error b/contrib/byacc/test/yacc/pure_error.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_error.error
diff --git a/contrib/byacc/test/yacc/pure_error.output b/contrib/byacc/test/yacc/pure_error.output
new file mode 100644
index 000000000000..0c4db6225e24
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_error.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+2 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/yacc/pure_error.tab.c b/contrib/byacc/test/yacc/pure_error.tab.c
new file mode 100644
index 000000000000..0184e924fabd
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_error.tab.c
@@ -0,0 +1,524 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse error_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex error_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror error_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar error_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval error_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval error_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug error_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs error_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag error_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs error_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen error_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred error_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto error_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex error_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex error_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex error_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable error_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck error_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname error_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule error_rule
+#endif /* yyrule */
+#define YYPREFIX "error_"
+
+#define YYPURE 1
+
+#line 2 "pure_error.y"
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 112 "pure_error.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval)
+# define YYLEX yylex(&yylval)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT error_lhs[] = { -1,
+ 0,
+};
+static const YYINT error_len[] = { 2,
+ 1,
+};
+static const YYINT error_defred[] = { 0,
+ 1, 0,
+};
+static const YYINT error_dgoto[] = { 2,
+};
+static const YYINT error_sindex[] = { -256,
+ 0, 0,
+};
+static const YYINT error_rindex[] = { 0,
+ 0, 0,
+};
+static const YYINT error_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const YYINT error_table[] = { 1,
+};
+static const YYINT error_check[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const error_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const error_rule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 17 "pure_error.y"
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(YYSTYPE *value)
+{
+ return value ? 0 : -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 258 "pure_error.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/pure_error.tab.h b/contrib/byacc/test/yacc/pure_error.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/pure_error.tab.h
diff --git a/contrib/byacc/test/yacc/quote_calc-s.error b/contrib/byacc/test/yacc/quote_calc-s.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc-s.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc-s.output b/contrib/byacc/test/yacc/quote_calc-s.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc-s.tab.c b/contrib/byacc/test/yacc/quote_calc-s.tab.c
new file mode 100644
index 000000000000..9d4d7bd5835d
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc-s.tab.c
@@ -0,0 +1,689 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc-s.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const YYINT quote_calc_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0,
+0,0,"illegal-symbol",
+};
+static const char *const quote_calc_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 369 "quote_calc-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 631 "quote_calc-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc-s.tab.h b/contrib/byacc/test/yacc/quote_calc-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/quote_calc.error b/contrib/byacc/test/yacc/quote_calc.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc.output b/contrib/byacc/test/yacc/quote_calc.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc.tab.c b/contrib/byacc/test/yacc/quote_calc.tab.c
new file mode 100644
index 000000000000..affdbe56db35
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc.tab.c
@@ -0,0 +1,695 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const YYINT quote_calc_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0,
+0,0,"illegal-symbol",
+};
+static const char *const quote_calc_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 375 "quote_calc.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 637 "quote_calc.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc.tab.h b/contrib/byacc/test/yacc/quote_calc.tab.h
new file mode 100644
index 000000000000..498eff210dbe
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc.tab.h
@@ -0,0 +1,15 @@
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/quote_calc2-s.error b/contrib/byacc/test/yacc/quote_calc2-s.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2-s.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc2-s.output b/contrib/byacc/test/yacc/quote_calc2-s.output
new file mode 100644
index 000000000000..ed28ae2f21c0
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD" expr
+ 8 | expr "SUB" expr
+ 9 | expr "MUL" expr
+ 10 | expr "DIV" expr
+ 11 | expr "MOD" expr
+ 12 | expr "AND" expr
+ 13 | expr '|' expr
+ 14 | "SUB" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB" . expr (14)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD" reduce 15
+ "SUB" reduce 15
+ "MUL" reduce 15
+ "DIV" reduce 15
+ "MOD" reduce 15
+ "AND" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD" reduce 16
+ "SUB" reduce 16
+ "MUL" reduce 16
+ "DIV" reduce 16
+ "MOD" reduce 16
+ "AND" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND"
+state 12
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB" expr . (14)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD" . expr (7)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB" . expr (8)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL" . expr (9)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV" . expr (10)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD" . expr (11)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND" . expr (12)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD" expr (7)
+ expr : expr "ADD" expr . (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr "SUB" expr . (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr "MUL" expr . (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr "DIV" expr . (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr "MOD" expr . (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr "AND" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND"
+state 32
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc2-s.tab.c b/contrib/byacc/test/yacc/quote_calc2-s.tab.c
new file mode 100644
index 000000000000..47b8fd0d3b15
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2-s.tab.c
@@ -0,0 +1,689 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc2_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc2_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc2_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc2_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc2_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc2_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc2_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc2_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc2_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc2_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc2_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc2_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc2_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc2_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc2_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc2_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc2_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc2_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc2_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc2_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc2_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc2.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc2-s.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc2_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc2_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc2_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc2_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc2_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc2_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc2_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const YYINT quote_calc2_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc2_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc2_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0,
+0,0,"illegal-symbol",
+};
+static const char *const quote_calc2_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD\" expr",
+"expr : expr \"SUB\" expr",
+"expr : expr \"MUL\" expr",
+"expr : expr \"DIV\" expr",
+"expr : expr \"MOD\" expr",
+"expr : expr \"AND\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc2.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 369 "quote_calc2-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc2.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc2.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc2.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc2.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc2.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc2.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc2.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc2.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 631 "quote_calc2-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc2-s.tab.h b/contrib/byacc/test/yacc/quote_calc2-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/quote_calc2.error b/contrib/byacc/test/yacc/quote_calc2.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc2.output b/contrib/byacc/test/yacc/quote_calc2.output
new file mode 100644
index 000000000000..ed28ae2f21c0
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD" expr
+ 8 | expr "SUB" expr
+ 9 | expr "MUL" expr
+ 10 | expr "DIV" expr
+ 11 | expr "MOD" expr
+ 12 | expr "AND" expr
+ 13 | expr '|' expr
+ 14 | "SUB" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB" . expr (14)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD" reduce 15
+ "SUB" reduce 15
+ "MUL" reduce 15
+ "DIV" reduce 15
+ "MOD" reduce 15
+ "AND" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD" reduce 16
+ "SUB" reduce 16
+ "MUL" reduce 16
+ "DIV" reduce 16
+ "MOD" reduce 16
+ "AND" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND"
+state 12
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB" expr . (14)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD" . expr (7)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB" . expr (8)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL" . expr (9)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV" . expr (10)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD" . expr (11)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND" . expr (12)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD" expr (7)
+ expr : expr "ADD" expr . (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr "SUB" expr . (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr "MUL" expr . (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr "DIV" expr . (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr "MOD" expr . (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr "AND" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND"
+state 32
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc2.tab.c b/contrib/byacc/test/yacc/quote_calc2.tab.c
new file mode 100644
index 000000000000..cdf8171f02e4
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2.tab.c
@@ -0,0 +1,695 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc2_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc2_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc2_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc2_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc2_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc2_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc2_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc2_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc2_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc2_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc2_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc2_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc2_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc2_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc2_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc2_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc2_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc2_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc2_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc2_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc2_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc2.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc2.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc2_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc2_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc2_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc2_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc2_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc2_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc2_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const YYINT quote_calc2_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc2_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc2_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0,
+0,0,"illegal-symbol",
+};
+static const char *const quote_calc2_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD\" expr",
+"expr : expr \"SUB\" expr",
+"expr : expr \"MUL\" expr",
+"expr : expr \"DIV\" expr",
+"expr : expr \"MOD\" expr",
+"expr : expr \"AND\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc2.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 375 "quote_calc2.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc2.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc2.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc2.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc2.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc2.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc2.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc2.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc2.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 637 "quote_calc2.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc2.tab.h b/contrib/byacc/test/yacc/quote_calc2.tab.h
new file mode 100644
index 000000000000..498eff210dbe
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc2.tab.h
@@ -0,0 +1,15 @@
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/quote_calc3-s.error b/contrib/byacc/test/yacc/quote_calc3-s.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3-s.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc3-s.output b/contrib/byacc/test/yacc/quote_calc3-s.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc3-s.tab.c b/contrib/byacc/test/yacc/quote_calc3-s.tab.c
new file mode 100644
index 000000000000..b91c1a14a022
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3-s.tab.c
@@ -0,0 +1,690 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc3_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc3_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc3_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc3_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc3_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc3_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc3_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc3_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc3_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc3_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc3_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc3_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc3_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc3_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc3_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc3_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc3_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc3_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc3_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc3_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc3_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc3-s.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc3_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc3_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc3_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc3_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc3_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc3_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc3_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const YYINT quote_calc3_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc3_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc3_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0,
+"illegal-symbol",
+};
+static const char *const quote_calc3_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc3.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 370 "quote_calc3-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc3.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc3.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 632 "quote_calc3-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc3-s.tab.h b/contrib/byacc/test/yacc/quote_calc3-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/quote_calc3.error b/contrib/byacc/test/yacc/quote_calc3.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc3.output b/contrib/byacc/test/yacc/quote_calc3.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc3.tab.c b/contrib/byacc/test/yacc/quote_calc3.tab.c
new file mode 100644
index 000000000000..ad4fe1ae6bf3
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3.tab.c
@@ -0,0 +1,690 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc3_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc3_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc3_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc3_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc3_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc3_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc3_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc3_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc3_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc3_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc3_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc3_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc3_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc3_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc3_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc3_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc3_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc3_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc3_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc3_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc3_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc3.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc3_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc3_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc3_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc3_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc3_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc3_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc3_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const YYINT quote_calc3_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc3_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc3_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0,
+"illegal-symbol",
+};
+static const char *const quote_calc3_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc3.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 370 "quote_calc3.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc3.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc3.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 632 "quote_calc3.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc3.tab.h b/contrib/byacc/test/yacc/quote_calc3.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc3.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/quote_calc4-s.error b/contrib/byacc/test/yacc/quote_calc4-s.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4-s.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc4-s.output b/contrib/byacc/test/yacc/quote_calc4-s.output
new file mode 100644
index 000000000000..a1d5afc95796
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD-operator" expr
+ 8 | expr "SUB-operator" expr
+ 9 | expr "MUL-operator" expr
+ 10 | expr "DIV-operator" expr
+ 11 | expr "MOD-operator" expr
+ 12 | expr "AND-operator" expr
+ 13 | expr '|' expr
+ 14 | "SUB-operator" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB-operator" . expr (14)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD-operator" reduce 15
+ "SUB-operator" reduce 15
+ "MUL-operator" reduce 15
+ "DIV-operator" reduce 15
+ "MOD-operator" reduce 15
+ "AND-operator" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD-operator" reduce 16
+ "SUB-operator" reduce 16
+ "MUL-operator" reduce 16
+ "DIV-operator" reduce 16
+ "MOD-operator" reduce 16
+ "AND-operator" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator"
+state 12
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB-operator" expr . (14)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD-operator" . expr (7)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB-operator" . expr (8)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL-operator" . expr (9)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV-operator" . expr (10)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD-operator" . expr (11)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND-operator" . expr (12)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr "ADD-operator" expr . (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr "SUB-operator" expr . (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr "MUL-operator" expr . (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr "DIV-operator" expr . (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr "MOD-operator" expr . (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr "AND-operator" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator"
+state 32
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc4-s.tab.c b/contrib/byacc/test/yacc/quote_calc4-s.tab.c
new file mode 100644
index 000000000000..4d1e3d4376f3
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4-s.tab.c
@@ -0,0 +1,690 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc4_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc4_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc4_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc4_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc4_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc4_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc4_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc4_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc4_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc4_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc4_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc4_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc4_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc4_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc4_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc4_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc4_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc4_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc4_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc4_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc4_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc4.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc4-s.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc4_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc4_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc4_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc4_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc4_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc4_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc4_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const YYINT quote_calc4_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc4_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc4_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0,
+"illegal-symbol",
+};
+static const char *const quote_calc4_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD-operator\" expr",
+"expr : expr \"SUB-operator\" expr",
+"expr : expr \"MUL-operator\" expr",
+"expr : expr \"DIV-operator\" expr",
+"expr : expr \"MOD-operator\" expr",
+"expr : expr \"AND-operator\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB-operator\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc4.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 370 "quote_calc4-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc4.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc4.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc4.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc4.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc4.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc4.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc4.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc4.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 632 "quote_calc4-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc4-s.tab.h b/contrib/byacc/test/yacc/quote_calc4-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/quote_calc4.error b/contrib/byacc/test/yacc/quote_calc4.error
new file mode 100644
index 000000000000..729d01c0abba
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4.error
@@ -0,0 +1 @@
+YACC: 54 shift/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/quote_calc4.output b/contrib/byacc/test/yacc/quote_calc4.output
new file mode 100644
index 000000000000..a1d5afc95796
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD-operator" expr
+ 8 | expr "SUB-operator" expr
+ 9 | expr "MUL-operator" expr
+ 10 | expr "DIV-operator" expr
+ 11 | expr "MOD-operator" expr
+ 12 | expr "AND-operator" expr
+ 13 | expr '|' expr
+ 14 | "SUB-operator" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB-operator" . expr (14)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD-operator" reduce 15
+ "SUB-operator" reduce 15
+ "MUL-operator" reduce 15
+ "DIV-operator" reduce 15
+ "MOD-operator" reduce 15
+ "AND-operator" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD-operator" reduce 16
+ "SUB-operator" reduce 16
+ "MUL-operator" reduce 16
+ "DIV-operator" reduce 16
+ "MOD-operator" reduce 16
+ "AND-operator" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator"
+state 12
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB-operator" expr . (14)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD-operator" . expr (7)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB-operator" . expr (8)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL-operator" . expr (9)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV-operator" . expr (10)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD-operator" . expr (11)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND-operator" . expr (12)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr "ADD-operator" expr . (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr "SUB-operator" expr . (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr "MUL-operator" expr . (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr "DIV-operator" expr . (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr "MOD-operator" expr . (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr "AND-operator" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator"
+state 32
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/yacc/quote_calc4.tab.c b/contrib/byacc/test/yacc/quote_calc4.tab.c
new file mode 100644
index 000000000000..a5f047ec8d3e
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4.tab.c
@@ -0,0 +1,690 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+
+#ifndef yyparse
+#define yyparse quote_calc4_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc4_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc4_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc4_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc4_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc4_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc4_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc4_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc4_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc4_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc4_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc4_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc4_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc4_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc4_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc4_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc4_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc4_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc4_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc4_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc4_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc4.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 111 "quote_calc4.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT quote_calc4_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const YYINT quote_calc4_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const YYINT quote_calc4_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const YYINT quote_calc4_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const YYINT quote_calc4_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const YYINT quote_calc4_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const YYINT quote_calc4_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const YYINT quote_calc4_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const YYINT quote_calc4_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#define YYUNDFTOKEN 277
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const quote_calc4_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0,
+"illegal-symbol",
+};
+static const char *const quote_calc4_rule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD-operator\" expr",
+"expr : expr \"SUB-operator\" expr",
+"expr : expr \"MUL-operator\" expr",
+"expr : expr \"DIV-operator\" expr",
+"expr : expr \"MOD-operator\" expr",
+"expr : expr \"AND-operator\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB-operator\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc4.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 370 "quote_calc4.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc4.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc4.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc4.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc4.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc4.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc4.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc4.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc4.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 632 "quote_calc4.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/quote_calc4.tab.h b/contrib/byacc/test/yacc/quote_calc4.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/yacc/quote_calc4.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/yacc/rename_debug.c b/contrib/byacc/test/yacc/rename_debug.c
new file mode 100644
index 000000000000..5202074113c3
--- /dev/null
+++ b/contrib/byacc/test/yacc/rename_debug.c
@@ -0,0 +1,388 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+#line 17 "rename_debug.c"
+#include "rename_debug.i"
+#include "rename_debug.h"
+typedef short YYINT;
+static const YYINT yylhs[] = { -1,
+ 0,
+};
+static const YYINT yylen[] = { 2,
+ 1,
+};
+static const YYINT yydefred[] = { 0,
+ 1, 0,
+};
+static const YYINT yydgoto[] = { 2,
+};
+static const YYINT yysindex[] = { -256,
+ 0, 0,
+};
+static const YYINT yyrindex[] = { 0,
+ 0, 0,
+};
+static const YYINT yygindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const YYINT yytable[] = { 1,
+};
+static const YYINT yycheck[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+#define YYMAXTOKEN 256
+#define YYUNDFTOKEN 259
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const yyrule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 12 "code_debug.y"
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 130 "rename_debug.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/rename_debug.error b/contrib/byacc/test/yacc/rename_debug.error
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/yacc/rename_debug.error
diff --git a/contrib/byacc/test/yacc/rename_debug.h b/contrib/byacc/test/yacc/rename_debug.h
new file mode 100644
index 000000000000..e1d14cbda095
--- /dev/null
+++ b/contrib/byacc/test/yacc/rename_debug.h
@@ -0,0 +1 @@
+#define YYERRCODE 256
diff --git a/contrib/byacc/test/yacc/rename_debug.i b/contrib/byacc/test/yacc/rename_debug.i
new file mode 100644
index 000000000000..b7b801439e7a
--- /dev/null
+++ b/contrib/byacc/test/yacc/rename_debug.i
@@ -0,0 +1,56 @@
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "code_debug.y"
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+extern int yydebug;
+extern int yynerrs;
+
+extern int yyerrflag;
+extern int yychar;
+extern YYSTYPE yyval;
+extern YYSTYPE yylval;
diff --git a/contrib/byacc/test/yacc/rename_debug.output b/contrib/byacc/test/yacc/rename_debug.output
new file mode 100644
index 000000000000..0c4db6225e24
--- /dev/null
+++ b/contrib/byacc/test/yacc/rename_debug.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+2 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.error b/contrib/byacc/test/yacc/varsyntax_calc1.error
new file mode 100644
index 000000000000..9c1f7152c30e
--- /dev/null
+++ b/contrib/byacc/test/yacc/varsyntax_calc1.error
@@ -0,0 +1,2 @@
+YACC: 2 rules never reduced
+YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts.
diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.output b/contrib/byacc/test/yacc/varsyntax_calc1.output
new file mode 100644
index 000000000000..2b628d47ddba
--- /dev/null
+++ b/contrib/byacc/test/yacc/varsyntax_calc1.output
@@ -0,0 +1,877 @@
+ 0 $accept : line $end
+
+ 1 lines :
+ 2 | lines line
+
+ 3 line : dexp '\n'
+ 4 | vexp '\n'
+ 5 | DREG '=' dexp '\n'
+ 6 | VREG '=' vexp '\n'
+ 7 | error '\n'
+
+ 8 dexp : CONST
+ 9 | DREG
+ 10 | dexp '+' dexp
+ 11 | dexp '-' dexp
+ 12 | dexp '*' dexp
+ 13 | dexp '/' dexp
+ 14 | '-' dexp
+ 15 | '(' dexp ')'
+
+ 16 vexp : dexp
+ 17 | '(' dexp ',' dexp ')'
+ 18 | VREG
+ 19 | vexp '+' vexp
+ 20 | dexp '+' vexp
+ 21 | vexp '-' vexp
+ 22 | dexp '-' vexp
+ 23 | vexp '*' vexp
+ 24 | dexp '*' vexp
+ 25 | vexp '/' vexp
+ 26 | dexp '/' vexp
+ 27 | '-' vexp
+ 28 | '(' vexp ')'
+
+state 0
+ $accept : . line $end (0)
+
+ error shift 1
+ DREG shift 2
+ VREG shift 3
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ line goto 7
+ dexp goto 8
+ vexp goto 9
+
+
+state 1
+ line : error . '\n' (7)
+
+ '\n' shift 10
+ . error
+
+
+state 2
+ line : DREG . '=' dexp '\n' (5)
+ dexp : DREG . (9)
+
+ '=' shift 11
+ '+' reduce 9
+ '-' reduce 9
+ '*' reduce 9
+ '/' reduce 9
+ '\n' reduce 9
+
+
+state 3
+ line : VREG . '=' vexp '\n' (6)
+ vexp : VREG . (18)
+
+ '=' shift 12
+ '+' reduce 18
+ '-' reduce 18
+ '*' reduce 18
+ '/' reduce 18
+ '\n' reduce 18
+
+
+state 4
+ dexp : CONST . (8)
+
+ . reduce 8
+
+
+state 5
+ dexp : '-' . dexp (14)
+ vexp : '-' . vexp (27)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 15
+ vexp goto 16
+
+
+state 6
+ dexp : '(' . dexp ')' (15)
+ vexp : '(' . dexp ',' dexp ')' (17)
+ vexp : '(' . vexp ')' (28)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 17
+ vexp goto 18
+
+
+state 7
+ $accept : line . $end (0)
+
+ $end accept
+
+
+8: shift/reduce conflict (shift 19, reduce 16) on '+'
+8: shift/reduce conflict (shift 20, reduce 16) on '-'
+8: shift/reduce conflict (shift 21, reduce 16) on '*'
+8: shift/reduce conflict (shift 22, reduce 16) on '/'
+8: shift/reduce conflict (shift 23, reduce 16) on '\n'
+state 8
+ line : dexp . '\n' (3)
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ '\n' shift 23
+
+
+state 9
+ line : vexp . '\n' (4)
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ '\n' shift 28
+ . error
+
+
+state 10
+ line : error '\n' . (7)
+
+ . reduce 7
+
+
+state 11
+ line : DREG '=' . dexp '\n' (5)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 31
+
+
+state 12
+ line : VREG '=' . vexp '\n' (6)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 33
+
+
+state 13
+ dexp : DREG . (9)
+
+ . reduce 9
+
+
+state 14
+ vexp : VREG . (18)
+
+ . reduce 18
+
+
+15: reduce/reduce conflict (reduce 14, reduce 16) on '+'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '-'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '*'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '/'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '\n'
+15: reduce/reduce conflict (reduce 14, reduce 16) on ')'
+state 15
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '-' dexp . (14)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 14
+
+
+state 16
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : '-' vexp . (27)
+
+ . reduce 27
+
+
+17: shift/reduce conflict (shift 19, reduce 16) on '+'
+17: shift/reduce conflict (shift 20, reduce 16) on '-'
+17: shift/reduce conflict (shift 21, reduce 16) on '*'
+17: shift/reduce conflict (shift 22, reduce 16) on '/'
+17: shift/reduce conflict (shift 34, reduce 16) on ')'
+state 17
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '(' dexp . ')' (15)
+ vexp : dexp . (16)
+ vexp : '(' dexp . ',' dexp ')' (17)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ ')' shift 34
+ ',' shift 35
+
+
+state 18
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : '(' vexp . ')' (28)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ ')' shift 36
+ . error
+
+
+state 19
+ dexp : dexp '+' . dexp (10)
+ vexp : dexp '+' . vexp (20)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 37
+ vexp goto 38
+
+
+state 20
+ dexp : dexp '-' . dexp (11)
+ vexp : dexp '-' . vexp (22)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 39
+ vexp goto 40
+
+
+state 21
+ dexp : dexp '*' . dexp (12)
+ vexp : dexp '*' . vexp (24)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 41
+ vexp goto 42
+
+
+state 22
+ dexp : dexp '/' . dexp (13)
+ vexp : dexp '/' . vexp (26)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 43
+ vexp goto 44
+
+
+state 23
+ line : dexp '\n' . (3)
+
+ . reduce 3
+
+
+state 24
+ vexp : vexp '+' . vexp (19)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 45
+
+
+state 25
+ vexp : vexp '-' . vexp (21)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 46
+
+
+state 26
+ vexp : vexp '*' . vexp (23)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 47
+
+
+state 27
+ vexp : vexp '/' . vexp (25)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 48
+
+
+state 28
+ line : vexp '\n' . (4)
+
+ . reduce 4
+
+
+state 29
+ dexp : '-' . dexp (14)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 49
+
+
+state 30
+ dexp : '(' . dexp ')' (15)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 50
+
+
+state 31
+ line : DREG '=' dexp . '\n' (5)
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ '\n' shift 55
+ . error
+
+
+32: shift/reduce conflict (shift 19, reduce 16) on '+'
+32: shift/reduce conflict (shift 20, reduce 16) on '-'
+32: shift/reduce conflict (shift 21, reduce 16) on '*'
+32: shift/reduce conflict (shift 22, reduce 16) on '/'
+state 32
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 33
+ line : VREG '=' vexp . '\n' (6)
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ '\n' shift 56
+ . error
+
+
+state 34
+ dexp : '(' dexp ')' . (15)
+
+ . reduce 15
+
+
+state 35
+ vexp : '(' dexp ',' . dexp ')' (17)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 57
+
+
+state 36
+ vexp : '(' vexp ')' . (28)
+
+ . reduce 28
+
+
+37: reduce/reduce conflict (reduce 10, reduce 16) on '+'
+37: reduce/reduce conflict (reduce 10, reduce 16) on '-'
+37: shift/reduce conflict (shift 21, reduce 16) on '*'
+37: shift/reduce conflict (shift 22, reduce 16) on '/'
+37: reduce/reduce conflict (reduce 10, reduce 16) on '\n'
+37: reduce/reduce conflict (reduce 10, reduce 16) on ')'
+state 37
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp '+' dexp . (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '*' shift 21
+ '/' shift 22
+ '+' reduce 10
+ '-' reduce 10
+ '\n' reduce 10
+ ')' reduce 10
+ ',' reduce 10
+
+
+state 38
+ vexp : vexp . '+' vexp (19)
+ vexp : dexp '+' vexp . (20)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 20
+ '-' reduce 20
+ '\n' reduce 20
+ ')' reduce 20
+
+
+39: reduce/reduce conflict (reduce 11, reduce 16) on '+'
+39: reduce/reduce conflict (reduce 11, reduce 16) on '-'
+39: shift/reduce conflict (shift 21, reduce 16) on '*'
+39: shift/reduce conflict (shift 22, reduce 16) on '/'
+39: reduce/reduce conflict (reduce 11, reduce 16) on '\n'
+39: reduce/reduce conflict (reduce 11, reduce 16) on ')'
+state 39
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp '-' dexp . (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '*' shift 21
+ '/' shift 22
+ '+' reduce 11
+ '-' reduce 11
+ '\n' reduce 11
+ ')' reduce 11
+ ',' reduce 11
+
+
+state 40
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : dexp '-' vexp . (22)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 22
+ '-' reduce 22
+ '\n' reduce 22
+ ')' reduce 22
+
+
+41: reduce/reduce conflict (reduce 12, reduce 16) on '+'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '-'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '*'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '/'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '\n'
+41: reduce/reduce conflict (reduce 12, reduce 16) on ')'
+state 41
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp '*' dexp . (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 12
+
+
+state 42
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : dexp '*' vexp . (24)
+ vexp : vexp . '/' vexp (25)
+
+ . reduce 24
+
+
+43: reduce/reduce conflict (reduce 13, reduce 16) on '+'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '-'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '*'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '/'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '\n'
+43: reduce/reduce conflict (reduce 13, reduce 16) on ')'
+state 43
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : dexp '/' dexp . (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 13
+
+
+state 44
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : dexp '/' vexp . (26)
+
+ . reduce 26
+
+
+state 45
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp '+' vexp . (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 19
+ '-' reduce 19
+ '\n' reduce 19
+ ')' reduce 19
+
+
+state 46
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp '-' vexp . (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 21
+ '-' reduce 21
+ '\n' reduce 21
+ ')' reduce 21
+
+
+state 47
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp '*' vexp . (23)
+ vexp : vexp . '/' vexp (25)
+
+ . reduce 23
+
+
+state 48
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : vexp '/' vexp . (25)
+
+ . reduce 25
+
+
+state 49
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '-' dexp . (14)
+
+ . reduce 14
+
+
+state 50
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '(' dexp . ')' (15)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ ')' shift 34
+ . error
+
+
+state 51
+ dexp : dexp '+' . dexp (10)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 58
+
+
+state 52
+ dexp : dexp '-' . dexp (11)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 59
+
+
+state 53
+ dexp : dexp '*' . dexp (12)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 60
+
+
+state 54
+ dexp : dexp '/' . dexp (13)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 61
+
+
+state 55
+ line : DREG '=' dexp '\n' . (5)
+
+ . reduce 5
+
+
+state 56
+ line : VREG '=' vexp '\n' . (6)
+
+ . reduce 6
+
+
+state 57
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : '(' dexp ',' dexp . ')' (17)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ ')' shift 62
+ . error
+
+
+state 58
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp '+' dexp . (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '*' shift 53
+ '/' shift 54
+ '+' reduce 10
+ '-' reduce 10
+ '\n' reduce 10
+ ')' reduce 10
+
+
+state 59
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp '-' dexp . (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '*' shift 53
+ '/' shift 54
+ '+' reduce 11
+ '-' reduce 11
+ '\n' reduce 11
+ ')' reduce 11
+
+
+state 60
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp '*' dexp . (12)
+ dexp : dexp . '/' dexp (13)
+
+ . reduce 12
+
+
+state 61
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : dexp '/' dexp . (13)
+
+ . reduce 13
+
+
+state 62
+ vexp : '(' dexp ',' dexp ')' . (17)
+
+ . reduce 17
+
+
+Rules never reduced:
+ lines : (1)
+ lines : lines line (2)
+
+
+State 8 contains 5 shift/reduce conflicts.
+State 15 contains 6 reduce/reduce conflicts.
+State 17 contains 5 shift/reduce conflicts.
+State 32 contains 4 shift/reduce conflicts.
+State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts.
+State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts.
+State 41 contains 6 reduce/reduce conflicts.
+State 43 contains 6 reduce/reduce conflicts.
+
+
+15 terminals, 5 nonterminals
+29 grammar rules, 63 states
diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.tab.c b/contrib/byacc/test/yacc/varsyntax_calc1.tab.c
new file mode 100644
index 000000000000..49a1527817c7
--- /dev/null
+++ b/contrib/byacc/test/yacc/varsyntax_calc1.tab.c
@@ -0,0 +1,915 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYCHECK "yyyymmdd"
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+#ident "check variant syntax features"
+
+#ifndef yyparse
+#define yyparse varsyntax_calc1_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex varsyntax_calc1_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror varsyntax_calc1_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar varsyntax_calc1_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval varsyntax_calc1_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval varsyntax_calc1_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug varsyntax_calc1_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs varsyntax_calc1_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag varsyntax_calc1_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs varsyntax_calc1_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen varsyntax_calc1_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred varsyntax_calc1_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto varsyntax_calc1_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex varsyntax_calc1_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex varsyntax_calc1_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex varsyntax_calc1_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable varsyntax_calc1_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck varsyntax_calc1_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname varsyntax_calc1_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule varsyntax_calc1_rule
+#endif /* yyrule */
+#define YYPREFIX "varsyntax_calc1_"
+
+#define YYPURE 0
+
+#line 3 "varsyntax_calc1.y"
+
+/* http://dinosaur.compilertools.net/yacc/index.html * /*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef struct interval
+{
+ double lo, hi;
+}
+INTERVAL;
+
+INTERVAL vmul(double, double, INTERVAL);
+INTERVAL vdiv(double, double, INTERVAL);
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+int dcheck(INTERVAL);
+
+double dreg[26];
+INTERVAL vreg[26];
+
+#line 32 "varsyntax_calc1.y"
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ int ival; /* dreg & vreg array index values*/
+ double dval; /* floating point values*/
+ INTERVAL vval; /* interval values*/
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+#line 142 "varsyntax_calc1.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DREG 257
+#define VREG 258
+#define CONST 259
+#define UMINUS 260
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT varsyntax_calc1_lhs[] = { -1,
+ 3, 3, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+};
+static const YYINT varsyntax_calc1_len[] = { 2,
+ 0, 2, 2, 2, 4, 4, 2, 1, 1, 3,
+ 3, 3, 3, 2, 3, 1, 5, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 2, 3,
+};
+static const YYINT varsyntax_calc1_defred[] = { 0,
+ 0, 0, 0, 8, 0, 0, 0, 0, 0, 7,
+ 0, 0, 9, 18, 14, 27, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 15, 0, 28, 0, 0, 0, 0,
+ 12, 24, 13, 26, 0, 0, 23, 25, 14, 0,
+ 0, 0, 0, 0, 5, 6, 0, 0, 0, 12,
+ 13, 17,
+};
+static const YYINT varsyntax_calc1_dgoto[] = { 7,
+ 32, 9, 0,
+};
+static const YYINT varsyntax_calc1_sindex[] = { -40,
+ -8, -48, -47, 0, -37, -37, 0, 2, 17, 0,
+ -34, -37, 0, 0, 0, 0, -25, 90, -37, -37,
+ -37, -37, 0, -37, -37, -37, -37, 0, -34, -34,
+ 25, 125, 31, 0, -34, 0, -11, 37, -11, 37,
+ 0, 0, 0, 0, 37, 37, 0, 0, 0, 111,
+ -34, -34, -34, -34, 0, 0, 118, 69, 69, 0,
+ 0, 0,
+};
+static const YYINT varsyntax_calc1_rindex[] = { 0,
+ 0, 38, 44, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -9, 0, 0, 0, 0, 51, -3, 56, 61,
+ 0, 0, 0, 0, 67, 72, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 78, 83, 0,
+ 0, 0,
+};
+static const YYINT varsyntax_calc1_gindex[] = { 0,
+ 4, 124, 0,
+};
+#define YYTABLESIZE 225
+static const YYINT varsyntax_calc1_table[] = { 6,
+ 16, 10, 6, 8, 5, 30, 20, 5, 15, 17,
+ 29, 23, 11, 12, 31, 34, 21, 19, 35, 20,
+ 0, 22, 37, 39, 41, 43, 28, 0, 0, 0,
+ 21, 16, 49, 50, 55, 22, 0, 20, 57, 20,
+ 56, 20, 0, 21, 19, 0, 20, 9, 22, 0,
+ 0, 0, 0, 18, 58, 59, 60, 61, 26, 24,
+ 10, 25, 0, 27, 0, 11, 53, 51, 0, 52,
+ 22, 54, 26, 24, 0, 25, 19, 27, 26, 9,
+ 9, 21, 9, 27, 9, 18, 18, 10, 18, 0,
+ 18, 10, 11, 10, 10, 10, 11, 0, 11, 11,
+ 11, 22, 0, 22, 0, 22, 0, 19, 0, 19,
+ 53, 19, 21, 0, 21, 54, 21, 0, 10, 0,
+ 10, 0, 10, 11, 0, 11, 0, 11, 16, 18,
+ 36, 26, 24, 0, 25, 33, 27, 0, 0, 0,
+ 0, 0, 38, 40, 42, 44, 0, 45, 46, 47,
+ 48, 34, 53, 51, 0, 52, 0, 54, 62, 53,
+ 51, 0, 52, 0, 54, 0, 21, 19, 0, 20,
+ 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 13,
+ 14, 4, 13, 0, 4,
+};
+static const YYINT varsyntax_calc1_check[] = { 40,
+ 10, 10, 40, 0, 45, 40, 10, 45, 5, 6,
+ 45, 10, 61, 61, 11, 41, 42, 43, 44, 45,
+ -1, 47, 19, 20, 21, 22, 10, -1, -1, -1,
+ 42, 41, 29, 30, 10, 47, -1, 41, 35, 43,
+ 10, 45, -1, 42, 43, -1, 45, 10, 47, -1,
+ -1, -1, -1, 10, 51, 52, 53, 54, 42, 43,
+ 10, 45, -1, 47, -1, 10, 42, 43, -1, 45,
+ 10, 47, 42, 43, -1, 45, 10, 47, 42, 42,
+ 43, 10, 45, 47, 47, 42, 43, 10, 45, -1,
+ 47, 41, 10, 43, 44, 45, 41, -1, 43, 44,
+ 45, 41, -1, 43, -1, 45, -1, 41, -1, 43,
+ 42, 45, 41, -1, 43, 47, 45, -1, 41, -1,
+ 43, -1, 45, 41, -1, 43, -1, 45, 5, 6,
+ 41, 42, 43, -1, 45, 12, 47, -1, -1, -1,
+ -1, -1, 19, 20, 21, 22, -1, 24, 25, 26,
+ 27, 41, 42, 43, -1, 45, -1, 47, 41, 42,
+ 43, -1, 45, -1, 47, -1, 42, 43, -1, 45,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 259, 257,
+ 258, 259, 257, -1, 259,
+};
+#define YYFINAL 7
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 260
+#define YYUNDFTOKEN 266
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const varsyntax_calc1_name[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,
+0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol",
+};
+static const char *const varsyntax_calc1_rule[] = {
+"$accept : line",
+"lines :",
+"lines : lines line",
+"line : dexp '\\n'",
+"line : vexp '\\n'",
+"line : DREG '=' dexp '\\n'",
+"line : VREG '=' vexp '\\n'",
+"line : error '\\n'",
+"dexp : CONST",
+"dexp : DREG",
+"dexp : dexp '+' dexp",
+"dexp : dexp '-' dexp",
+"dexp : dexp '*' dexp",
+"dexp : dexp '/' dexp",
+"dexp : '-' dexp",
+"dexp : '(' dexp ')'",
+"vexp : dexp",
+"vexp : '(' dexp ',' dexp ')'",
+"vexp : VREG",
+"vexp : vexp '+' vexp",
+"vexp : dexp '+' vexp",
+"vexp : vexp '-' vexp",
+"vexp : dexp '-' vexp",
+"vexp : vexp '*' vexp",
+"vexp : dexp '*' vexp",
+"vexp : vexp '/' vexp",
+"vexp : dexp '/' vexp",
+"vexp : '-' vexp",
+"vexp : '(' vexp ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 178 "varsyntax_calc1.y"
+ /* beginning of subroutines section */
+
+#define BSZ 50 /* buffer size for floating point numbers */
+
+ /* lexical analysis */
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ int c;
+
+ while ((c = getchar()) == ' ')
+ { /* skip over blanks */
+ }
+
+ if (isupper(c))
+ {
+ yylval.ival = c - 'A';
+ return (VREG);
+ }
+ if (islower(c))
+ {
+ yylval.ival = c - 'a';
+ return (DREG);
+ }
+
+ if (isdigit(c) || c == '.')
+ {
+ /* gobble up digits, points, exponents */
+ char buf[BSZ + 1], *cp = buf;
+ int dot = 0, expr = 0;
+
+ for (; (cp - buf) < BSZ; ++cp, c = getchar())
+ {
+
+ *cp = (char) c;
+ if (isdigit(c))
+ continue;
+ if (c == '.')
+ {
+ if (dot++ || expr)
+ return ('.'); /* will cause syntax error */
+ continue;
+ }
+
+ if (c == 'e')
+ {
+ if (expr++)
+ return ('e'); /* will cause syntax error */
+ continue;
+ }
+
+ /* end of number */
+ break;
+ }
+ *cp = '\0';
+
+ if ((cp - buf) >= BSZ)
+ printf("constant too long: truncated\n");
+ else
+ ungetc(c, stdin); /* push back last char read */
+ yylval.dval = atof(buf);
+ return (CONST);
+ }
+ return (c);
+}
+
+static INTERVAL
+hilo(double a, double b, double c, double d)
+{
+ /* returns the smallest interval containing a, b, c, and d */
+ /* used by *, / routines */
+ INTERVAL v;
+
+ if (a > b)
+ {
+ v.hi = a;
+ v.lo = b;
+ }
+ else
+ {
+ v.hi = b;
+ v.lo = a;
+ }
+
+ if (c > d)
+ {
+ if (c > v.hi)
+ v.hi = c;
+ if (d < v.lo)
+ v.lo = d;
+ }
+ else
+ {
+ if (d > v.hi)
+ v.hi = d;
+ if (c < v.lo)
+ v.lo = c;
+ }
+ return (v);
+}
+
+INTERVAL
+vmul(double a, double b, INTERVAL v)
+{
+ return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
+}
+
+int
+dcheck(INTERVAL v)
+{
+ if (v.hi >= 0. && v.lo <= 0.)
+ {
+ printf("divisor interval contains 0.\n");
+ return (1);
+ }
+ return (0);
+}
+
+INTERVAL
+vdiv(double a, double b, INTERVAL v)
+{
+ return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
+}
+#line 492 "varsyntax_calc1.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 59 "varsyntax_calc1.y"
+ {
+ (void) printf("%15.8f\n", yystack.l_mark[-1].dval);
+ }
+break;
+case 4:
+#line 63 "varsyntax_calc1.y"
+ {
+ (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
+ }
+break;
+case 5:
+#line 67 "varsyntax_calc1.y"
+ {
+ dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
+ }
+break;
+case 6:
+#line 71 "varsyntax_calc1.y"
+ {
+ vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
+ }
+break;
+case 7:
+#line 75 "varsyntax_calc1.y"
+ {
+ yyerrok;
+ }
+break;
+case 9:
+#line 82 "varsyntax_calc1.y"
+ {
+ yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/
+ }
+break;
+case 10:
+#line 86 "varsyntax_calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
+ }
+break;
+case 11:
+#line 90 "varsyntax_calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
+ }
+break;
+case 12:
+#line 94 "varsyntax_calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
+ }
+break;
+case 13:
+#line 98 "varsyntax_calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
+ }
+break;
+case 14:
+#line 102 "varsyntax_calc1.y"
+ {
+ yyval.dval = -yystack.l_mark[0].dval;
+ }
+break;
+case 15:
+#line 106 "varsyntax_calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-1].dval;
+ }
+break;
+case 16:
+#line 112 "varsyntax_calc1.y"
+ {
+ yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
+ }
+break;
+case 17:
+#line 116 "varsyntax_calc1.y"
+ {
+ yyval.vval.lo = yystack.l_mark[-3].dval;
+ yyval.vval.hi = yystack.l_mark[-1].dval;
+ if ( yyval.vval.lo > yyval.vval.hi )
+ {
+ (void) printf("interval out of order\n");
+ YYERROR;
+ }
+ }
+break;
+case 18:
+#line 126 "varsyntax_calc1.y"
+ {
+ yyval.vval = vreg[yystack.l_mark[0].ival];
+ }
+break;
+case 19:
+#line 130 "varsyntax_calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 20:
+#line 135 "varsyntax_calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 21:
+#line 140 "varsyntax_calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 22:
+#line 145 "varsyntax_calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 23:
+#line 150 "varsyntax_calc1.y"
+ {
+ yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 24:
+#line 154 "varsyntax_calc1.y"
+ {
+ yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 25:
+#line 158 "varsyntax_calc1.y"
+ {
+ if (dcheck(yystack.l_mark[0].vval)) YYERROR;
+ yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 26:
+#line 163 "varsyntax_calc1.y"
+ {
+ if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
+ yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 27:
+#line 168 "varsyntax_calc1.y"
+ {
+ yyval.vval.hi = -yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = -yystack.l_mark[0].vval.hi;
+ }
+break;
+case 28:
+#line 173 "varsyntax_calc1.y"
+ {
+ yyval.vval = yystack.l_mark[-1].vval;
+ }
+break;
+#line 857 "varsyntax_calc1.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.tab.h b/contrib/byacc/test/yacc/varsyntax_calc1.tab.h
new file mode 100644
index 000000000000..fd07f2cc3d41
--- /dev/null
+++ b/contrib/byacc/test/yacc/varsyntax_calc1.tab.h
@@ -0,0 +1,18 @@
+#define DREG 257
+#define VREG 258
+#define CONST 259
+#define UMINUS 260
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ int ival; /* dreg & vreg array index values*/
+ double dval; /* floating point values*/
+ INTERVAL vval; /* interval values*/
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+extern YYSTYPE varsyntax_calc1_lval;