useless9: '9';
]])
+AT_BISON_CHECK([[-fcaret input.y]], 0, [],
+[[input.y: warning: 9 nonterminals useless in grammar [-Wother]
+input.y: warning: 9 rules useless in grammar [-Wother]
+input.y:6.1-8: warning: nonterminal useless in grammar: useless1 [-Wother]
+ useless1: '1';
+ ^^^^^^^^
+input.y:7.1-8: warning: nonterminal useless in grammar: useless2 [-Wother]
+ useless2: '2';
+ ^^^^^^^^
+input.y:8.1-8: warning: nonterminal useless in grammar: useless3 [-Wother]
+ useless3: '3';
+ ^^^^^^^^
+input.y:9.1-8: warning: nonterminal useless in grammar: useless4 [-Wother]
+ useless4: '4';
+ ^^^^^^^^
+input.y:10.1-8: warning: nonterminal useless in grammar: useless5 [-Wother]
+ useless5: '5';
+ ^^^^^^^^
+input.y:11.1-8: warning: nonterminal useless in grammar: useless6 [-Wother]
+ useless6: '6';
+ ^^^^^^^^
+input.y:12.1-8: warning: nonterminal useless in grammar: useless7 [-Wother]
+ useless7: '7';
+ ^^^^^^^^
+input.y:13.1-8: warning: nonterminal useless in grammar: useless8 [-Wother]
+ useless8: '8';
+ ^^^^^^^^
+input.y:14.1-8: warning: nonterminal useless in grammar: useless9 [-Wother]
+ useless9: '9';
+ ^^^^^^^^
+input.y:6.11-13: warning: rule useless in grammar [-Wother]
+ useless1: '1';
+ ^^^
+input.y:7.11-13: warning: rule useless in grammar [-Wother]
+ useless2: '2';
+ ^^^
+input.y:8.11-13: warning: rule useless in grammar [-Wother]
+ useless3: '3';
+ ^^^
+input.y:9.11-13: warning: rule useless in grammar [-Wother]
+ useless4: '4';
+ ^^^
+input.y:10.11-13: warning: rule useless in grammar [-Wother]
+ useless5: '5';
+ ^^^
+input.y:11.11-13: warning: rule useless in grammar [-Wother]
+ useless6: '6';
+ ^^^
+input.y:12.11-13: warning: rule useless in grammar [-Wother]
+ useless7: '7';
+ ^^^
+input.y:13.11-13: warning: rule useless in grammar [-Wother]
+ useless8: '8';
+ ^^^
+input.y:14.11-13: warning: rule useless in grammar [-Wother]
+ useless9: '9';
+ ^^^
+]])
+
AT_BISON_CHECK([[input.y]], 0, [],
[[input.y: warning: 9 nonterminals useless in grammar [-Wother]
input.y: warning: 9 rules useless in grammar [-Wother]
%%
]])
+AT_BISON_CHECK([[-fcaret not-reduced.y]], 0, [],
+[[not-reduced.y: warning: 2 nonterminals useless in grammar [-Wother]
+not-reduced.y: warning: 3 rules useless in grammar [-Wother]
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable [-Wother]
+ not_reachable: useful { /* A not reachable action. */ }
+ ^^^^^^^^^^^^^
+not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive [-Wother]
+ | non_productive { /* A non productive action. */ }
+ ^^^^^^^^^^^^^^
+not-reduced.y:11.6-57: warning: rule useless in grammar [-Wother]
+ | non_productive { /* A non productive action. */ }
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:14.16-56: warning: rule useless in grammar [-Wother]
+ not_reachable: useful { /* A not reachable action. */ }
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:17.17-18.63: warning: rule useless in grammar [-Wother]
+ non_productive: non_productive useless_token
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+]])
+
AT_BISON_CHECK([[not-reduced.y]], 0, [],
[[not-reduced.y: warning: 2 nonterminals useless in grammar [-Wother]
not-reduced.y: warning: 3 rules useless in grammar [-Wother]
[],
dnl TABLES
-[[state 0
+[[State 0
0 $accept: . S $end
1 S: . 'a' A 'a'
S go to state 4
-state 1
+State 1
1 S: 'a' . A 'a'
4 A: . 'a' 'a'
A go to state 6
-state 2
+State 2
2 S: 'b' . A 'b'
4 A: . 'a' 'a'
A go to state 7
-state 3
+State 3
3 S: 'c' . c
4 A: . 'a' 'a'
c go to state 10
-state 4
+State 4
0 $accept: S . $end
$end shift, and go to state 11
-state 5
+State 5
4 A: 'a' . 'a'
5 | 'a' . ]AT_COND_CASE([[LALR]], [[['a', 'b']]], [[['a']]])[
Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
-state 6
+State 6
1 S: 'a' A . 'a'
'a' shift, and go to state 13
-state 7
+State 7
2 S: 'b' A . 'b'
'b' shift, and go to state 14
-state 8
+State 8
4 A: 'a' . 'a'
5 | 'a' . [$end]
[[$default]])[ reduce using rule 5 (A)
-state 9
+State 9
7 c: A .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 7 (c)
-state 10
+State 10
3 S: 'c' c .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 3 (S)
-state 11
+State 11
0 $accept: S $end .
$default accept
-state 12
+State 12
4 A: 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[ ['a']]])[
[[$default]])[ reduce using rule 4 (A)
-state 13
+State 13
1 S: 'a' A 'a' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 1 (S)
-state 14
+State 14
2 S: 'b' A 'b' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 2 (S)
-state 15
+State 15
6 c: 'a' 'b' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[]], [[
-state 16
+State 16
4 A: 'a' . 'a'
5 | 'a' . ['b']
[[$default]])[ reduce using rule 5 (A)]AT_COND_CASE([[canonical LR]], [[
-state 17
+State 17
4 A: 'a' 'a' . [$end]
$end reduce using rule 4 (A)
-state 18
+State 18
4 A: 'a' 'a' . ['b']
[],
dnl TABLES
-[[state 0
+[[State 0
0 $accept: . S $end
1 S: . 'a' A 'a'
S go to state 4
-state 1
+State 1
1 S: 'a' . A 'a'
4 A: . 'a' 'a' 'a'
A go to state 6
-state 2
+State 2
2 S: 'b' . A 'b'
4 A: . 'a' 'a' 'a'
A go to state 7
-state 3
+State 3
3 S: 'c' . c
4 A: . 'a' 'a' 'a'
c go to state 10
-state 4
+State 4
0 $accept: S . $end
$end shift, and go to state 11
-state 5
+State 5
4 A: 'a' . 'a' 'a'
5 | 'a' . 'a'
'a' shift, and go to state 12
-state 6
+State 6
1 S: 'a' A . 'a'
'a' shift, and go to state 13
-state 7
+State 7
2 S: 'b' A . 'b'
'b' shift, and go to state 14
-state 8
+State 8
4 A: 'a' . 'a' 'a'
5 | 'a' . 'a'
'a' shift, and go to state 15
-state 9
+State 9
7 c: A .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 7 (c)
-state 10
+State 10
3 S: 'c' c .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 3 (S)
-state 11
+State 11
0 $accept: S $end .
$default accept
-state 12
+State 12
4 A: 'a' 'a' . 'a'
5 | 'a' 'a' . ]AT_COND_CASE([[LALR]], [[['a', 'b']]], [[['a']]])[
Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
-state 13
+State 13
1 S: 'a' A 'a' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 1 (S)
-state 14
+State 14
2 S: 'b' A 'b' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 2 (S)
-state 15
+State 15
4 A: 'a' 'a' . 'a'
5 | 'a' 'a' . [$end]
[[$default]])[ reduce using rule 5 (A)
-state 16
+State 16
4 A: 'a' 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[ ['a']]])[
[[$default]])[ reduce using rule 4 (A)
-state 17
+State 17
6 c: 'a' 'a' 'b' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[]], [[
-state 18
+State 18
4 A: 'a' . 'a' 'a'
5 | 'a' . 'a'
[[19]])[
-state 19]AT_COND_CASE([[canonical LR]], [[
+State 19]AT_COND_CASE([[canonical LR]], [[
4 A: 'a' 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 4 (A)
-state 20]])[
+State 20]])[
4 A: 'a' 'a' . 'a'
5 | 'a' 'a' . ['b']
[[$default]])[ reduce using rule 5 (A)]AT_COND_CASE([[canonical LR]], [[
-state 21
+State 21
4 A: 'a' 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[ ['b']]])[
[],
dnl TABLES
-[[state 0
+[[State 0
0 $accept: . S $end
1 S: . 'a' A 'a'
S go to state 4
-state 1
+State 1
1 S: 'a' . A 'a'
4 A: . 'a' 'a' B
A go to state 6
-state 2
+State 2
2 S: 'b' . A 'b'
4 A: . 'a' 'a' B
A go to state 7
-state 3
+State 3
3 S: 'c' . c
4 A: . 'a' 'a' B
c go to state 10
-state 4
+State 4
0 $accept: S . $end
$end shift, and go to state 11
-state 5
+State 5
4 A: 'a' . 'a' B
'a' shift, and go to state 12
-state 6
+State 6
1 S: 'a' A . 'a'
'a' shift, and go to state 13
-state 7
+State 7
2 S: 'b' A . 'b'
'b' shift, and go to state 14
-state 8
+State 8
4 A: 'a' . 'a' B
7 c: 'a' . 'a' 'b'
'a' shift, and go to state 15
-state 9
+State 9
8 c: A .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 8 (c)
-state 10
+State 10
3 S: 'c' c .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 3 (S)
-state 11
+State 11
0 $accept: S $end .
$default accept
-state 12
+State 12
4 A: 'a' 'a' . B
5 B: . 'a'
Conflict between rule 6 and token 'a' resolved as reduce (%left 'a').
-state 13
+State 13
1 S: 'a' A 'a' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 1 (S)
-state 14
+State 14
2 S: 'b' A 'b' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 2 (S)
-state 15
+State 15
4 A: 'a' 'a' . B
5 B: . 'a'
B go to state ]AT_COND_CASE([[canonical LR]], [[21]], [[17]])[
-state 16
+State 16
5 B: 'a' .]AT_COND_CASE([[canonical LR]], [[ ['a']]])[
[[$default]])[ reduce using rule 5 (B)
-state 17
+State 17
4 A: 'a' 'a' B .]AT_COND_CASE([[canonical LR]], [[ ['a']]])[
[[$default]])[ reduce using rule 4 (A)
-state 18
+State 18
7 c: 'a' 'a' 'b' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 7 (c)]AT_COND_CASE([[LALR]], [], [[
-state 19
+State 19
4 A: 'a' . 'a' B
[[20]])[
-state 20]AT_COND_CASE([[canonical LR]], [[
+State 20]AT_COND_CASE([[canonical LR]], [[
5 B: 'a' . [$end]
$end reduce using rule 5 (B)
-state 21
+State 21
4 A: 'a' 'a' B . [$end]
$end reduce using rule 4 (A)
-state 22]])[
+State 22]])[
4 A: 'a' 'a' . B
5 B: . 'a'
B go to state ]AT_COND_CASE([[canonical LR]], [[24
-state 23
+State 23
5 B: 'a' . ['b']
'b' reduce using rule 5 (B)
-state 24
+State 24
4 A: 'a' 'a' B . ['b']
]], [])],
dnl TABLES
-[[state 0
+[[State 0
0 $accept: . S $end
1 S: . 'a' A 'f'
S go to state 4
-state 1
+State 1
1 S: 'a' . A 'f'
2 | 'a' . B
B go to state 7
-state 2
+State 2
3 S: 'b' . A 'f'
4 | 'b' . B 'g'
B go to state 10
-state 3
+State 3
6 S: 'c' . 'c' A 'g'
7 | 'c' . 'c' B
'c' shift, and go to state 11
-state 4
+State 4
0 $accept: S . $end
$end shift, and go to state 12
-state 5
+State 5
8 A: 'd' . 'e'
9 B: 'd' . 'e'
[[20]])[
-state 6
+State 6
1 S: 'a' A . 'f'
'f' shift, and go to state 14
-state 7
+State 7
2 S: 'a' B .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 2 (S)
-state 8
+State 8
5 S: 'b' 'd' . [$end]
8 A: 'd' . 'e'
[[$default]])[ reduce using rule 5 (S)
-state 9
+State 9
3 S: 'b' A . 'f'
'f' shift, and go to state 15
-state 10
+State 10
4 S: 'b' B . 'g'
'g' shift, and go to state 16
-state 11
+State 11
6 S: 'c' 'c' . A 'g'
7 | 'c' 'c' . B
B go to state 18
-state 12
+State 12
0 $accept: S $end .
$default accept]AT_COND_CASE([[LALR]], [[
-state 13
+State 13
8 A: 'd' 'e' . ['f', 'g']
9 B: 'd' 'e' . [$end, 'g']
$default reduce using rule 8 (A)]], [[
-state 13
+State 13
8 A: 'd' 'e' . ['f']
9 B: 'd' 'e' . ]AT_COND_CASE([[canonical LR]], [[[$end]]], [[['g']]])[
[[$default]])[ reduce using rule 8 (A)]])[
-state 14
+State 14
1 S: 'a' A 'f' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 1 (S)
-state 15
+State 15
3 S: 'b' A 'f' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 3 (S)
-state 16
+State 16
4 S: 'b' B 'g' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 4 (S)
-state 17
+State 17
6 S: 'c' 'c' A . 'g'
'g' shift, and go to state 19
-state 18
+State 18
7 S: 'c' 'c' B .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[$default]])[ reduce using rule 7 (S)
-state 19
+State 19
6 S: 'c' 'c' A 'g' .]AT_COND_CASE([[canonical LR]], [[ [$end]]])[
[[]], [[
-state 20]AT_COND_CASE([[canonical LR]], [[
+State 20]AT_COND_CASE([[canonical LR]], [[
8 A: 'd' 'e' . ['f']
9 B: 'd' 'e' . ['g']
'g' reduce using rule 9 (B)
-state 21
+State 21
8 A: 'd' . 'e'
9 B: 'd' . 'e'
'e' shift, and go to state 22
-state 22
+State 22
8 A: 'd' 'e' . ['g']
9 B: 'd' 'e' . [$end]
]],
dnl Visit each state mentioned above.
[['a', 'a']],
-[[state 0
+[[State 0
0 $accept: . start $end
1 start: . a b
a go to state 3
-state 1
+State 1
4 a: 'a' .]AT_COND_CASE([[accepting]], [[ [$end, 'a', 'b']
$default reduce using rule 4 (a)]])[
-state 2
+State 2
0 $accept: start . $end
$end shift, and go to state 4
-state 3
+State 3
1 start: a . b
2 | a . b 'a'
c go to state 6
-state 4
+State 4
0 $accept: start $end .
$default accept
-state 5
+State 5
1 start: a b . [$end]
2 | a b . 'a'
[[$end]])[ reduce using rule 1 (start)
-state 6
+State 6
3 start: a c . 'b'
'b' shift, and go to state 8
-state 7
+State 7
2 start: a b 'a' .]AT_COND_CASE([[accepting]], [[ [$end]
$default reduce using rule 2 (start)]])[
-state 8
+State 8
3 start: a c 'b' .]AT_COND_CASE([[accepting]], [[ [$end]