e: 'e' | /* Nothing. */;
]])
-AT_CHECK([bison -o input.c input.y], 0, [],
-[[input.y:4.9: warning: rule never reduced because of conflicts: e: /* empty */
+AT_BISON_CHECK([-o input.c input.y], 0, [],
+[[input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */
]])
AT_CLEANUP
]])
# Specify the output files to avoid problems on different file systems.
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input '0<0'])
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c --report=all input.y], 0, [],
+AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
[input.y: conflicts: 1 shift/reduce
])
state 5
- 1 exp: exp . OP exp [$end, OP]
+ 1 exp: exp . OP exp
1 | exp OP exp . [$end, OP]
OP shift, and go to state 4
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c --report=all input.y])
+AT_BISON_CHECK([-o input.c --report=all input.y])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
state 5
- 1 exp: exp . OP exp [$end, OP]
+ 1 exp: exp . OP exp
1 | exp OP exp . [$end, OP]
$default reduce using rule 1 (exp)
%%
]])
-AT_CHECK([bison -o input.c --report=all input.y], 0, [],
+AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
[[input.y: conflicts: 1 reduce/reduce
-input.y:4.6-8: warning: rule never reduced because of conflicts: id: '0'
+input.y:4.6-8: warning: rule useless in parser due to conflicts: id: '0'
]])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
-[[Rules never reduced
+[[Rules useless in parser due to conflicts
4 id: '0'
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
[input.y: conflicts: 1 shift/reduce
input.y: expected 0 shift/reduce conflicts
])
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
[input.y: conflicts: 1 shift/reduce
input.y: expected 2 shift/reduce conflicts
])
a: 'a';
]])
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
[input.y: conflicts: 1 reduce/reduce
input.y: expected 0 reduce/reduce conflicts
])
;
]])
-AT_CHECK([bison -o input.c input.y], 0, [],
+AT_BISON_CHECK([-o input.c input.y], 0, [],
[[input.y: conflicts: 4 shift/reduce
]])
AT_CLEANUP
;
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
;
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
start: resolved_conflict 'a' reported_conflicts 'a' ;
-/* S/R conflict resolved as shift, so the state with item
+/* S/R conflict resolved as reduce, so the state with item
* (resolved_conflict: 'a' . unreachable1) and all it transition successors are
* unreachable, and the associated production is useless. */
resolved_conflict:
]])
-AT_CHECK([[bison --report=all input.y]], 0, [],
+AT_BISON_CHECK([[--report=all input.y]], 0, [],
[[input.y: conflicts: 1 shift/reduce, 1 reduce/reduce
-input.y:12.5-20: warning: rule never reduced because of conflicts: resolved_conflict: 'a' unreachable1
-input.y:20.5-20: warning: rule never reduced because of conflicts: unreachable1: 'a' unreachable2
-input.y:21.4: warning: rule never reduced because of conflicts: unreachable1: /* empty */
-input.y:25.13: warning: rule never reduced because of conflicts: unreachable2: /* empty */
-input.y:25.16: warning: rule never reduced because of conflicts: unreachable2: /* empty */
-input.y:31.5-7: warning: rule never reduced because of conflicts: reported_conflicts: 'a'
-input.y:32.4: warning: rule never reduced because of conflicts: reported_conflicts: /* empty */
+input.y:12.5-20: warning: rule useless in parser due to conflicts: resolved_conflict: 'a' unreachable1
+input.y:20.5-20: warning: rule useless in parser due to conflicts: unreachable1: 'a' unreachable2
+input.y:21.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input.y:25.13: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:25.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:31.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input.y:32.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
]])
AT_CHECK([[cat input.output]], 0,
-[[Rules never reduced
+[[Rules useless in parser due to conflicts
2 resolved_conflict: 'a' unreachable1
$default reduce using rule 1 (start)
]])
+AT_DATA([[input-keep.y]],
+[[%define lr.keep_unreachable_states
+]])
+AT_CHECK([[cat input.y >> input-keep.y]])
+
+AT_BISON_CHECK([[input-keep.y]], 0, [],
+[[input-keep.y: conflicts: 2 shift/reduce, 2 reduce/reduce
+input-keep.y:22.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input-keep.y:26.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input-keep.y:32.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input-keep.y:33.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
+]])
+
AT_CLEANUP
empty_c2: %prec 'c' ;
empty_c3: %prec 'd' ;
]])
-AT_CHECK([[bison --report=all -o input.c input.y]], 0, [], [ignore])
+AT_BISON_CHECK([[--report=all -o input.c input.y]], 0, [], [ignore])
AT_CHECK([[cat input.output | sed -n '/^state 0$/,/^state 1$/p']], 0,
[[state 0
empty_c3: %prec 'c' ;
]])
-AT_CHECK([[bison --report=all -o input.c input.y]], 0, [], [ignore])
+AT_BISON_CHECK([[--report=all -o input.c input.y]], 0, [], [ignore])
AT_CHECK([[cat input.output | sed -n '/^state 0$/,/^state 1$/p']], 0,
[[state 0