mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-14 14:53:03 +00:00
Copy BYacc's nice way to report the grammar.
* src/gram.h, src/gram.c (grammar_rhs_print, grammar_rules_print): New. Don't print the rules' location, it is confusing and useless. (rule_print): Use grammar_rhs_print. * src/print.c (print_grammar): Use grammar_rules_print.
This commit is contained in:
@@ -130,6 +130,8 @@ AT_CLEANUP
|
||||
|
||||
AT_SETUP([Unresolved SR Conflicts])
|
||||
|
||||
AT_KEYWORDS([report])
|
||||
|
||||
AT_DATA([input.y],
|
||||
[[%token NUM OP
|
||||
%%
|
||||
@@ -147,10 +149,10 @@ AT_CHECK([cat input.output], [],
|
||||
|
||||
Grammar
|
||||
|
||||
Number, Line, Rule
|
||||
0 3 $axiom -> exp $
|
||||
1 3 exp -> exp OP exp
|
||||
2 3 exp -> NUM
|
||||
0 $axiom: exp $
|
||||
|
||||
1 exp: exp OP exp
|
||||
2 | NUM
|
||||
|
||||
|
||||
Terminals, with rules where they appear
|
||||
@@ -241,6 +243,8 @@ AT_CLEANUP
|
||||
|
||||
AT_SETUP([Solved SR Conflicts])
|
||||
|
||||
AT_KEYWORDS([report])
|
||||
|
||||
AT_DATA([input.y],
|
||||
[[%token NUM OP
|
||||
%right OP
|
||||
@@ -254,10 +258,10 @@ AT_CHECK([bison input.y -o input.c --report=all], 0, [], [])
|
||||
AT_CHECK([cat input.output], [],
|
||||
[[Grammar
|
||||
|
||||
Number, Line, Rule
|
||||
0 4 $axiom -> exp $
|
||||
1 4 exp -> exp OP exp
|
||||
2 4 exp -> NUM
|
||||
0 $axiom: exp $
|
||||
|
||||
1 exp: exp OP exp
|
||||
2 | NUM
|
||||
|
||||
|
||||
Terminals, with rules where they appear
|
||||
|
||||
@@ -89,7 +89,16 @@ exp: useful;
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]], 0, [],
|
||||
[[input.y contains 9 useless nonterminals
|
||||
[[input.y: warning: 9 useless nonterminals
|
||||
input.y:4.8-15: warning: useless nonterminal: useless1
|
||||
input.y:5.8-15: warning: useless nonterminal: useless2
|
||||
input.y:6.8-15: warning: useless nonterminal: useless3
|
||||
input.y:7.8-15: warning: useless nonterminal: useless4
|
||||
input.y:8.8-15: warning: useless nonterminal: useless5
|
||||
input.y:9.8-15: warning: useless nonterminal: useless6
|
||||
input.y:10.8-15: warning: useless nonterminal: useless7
|
||||
input.y:11.8-15: warning: useless nonterminal: useless8
|
||||
input.y:12.8-15: warning: useless nonterminal: useless9
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
|
||||
@@ -133,7 +142,25 @@ useless9: '9';
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]], 0, [],
|
||||
[[input.y contains 9 useless nonterminals and 9 useless rules
|
||||
[[input.y: warning: 9 useless nonterminals and 9 useless rules
|
||||
input.y:6.1-8: warning: useless nonterminal: useless1
|
||||
input.y:7.1-8: warning: useless nonterminal: useless2
|
||||
input.y:8.1-8: warning: useless nonterminal: useless3
|
||||
input.y:9.1-8: warning: useless nonterminal: useless4
|
||||
input.y:10.1-8: warning: useless nonterminal: useless5
|
||||
input.y:11.1-8: warning: useless nonterminal: useless6
|
||||
input.y:12.1-8: warning: useless nonterminal: useless7
|
||||
input.y:13.1-8: warning: useless nonterminal: useless8
|
||||
input.y:14.1-8: warning: useless nonterminal: useless9
|
||||
input.y:6.9-13: warning: useless rule: useless1: '1'
|
||||
input.y:7.9-13: warning: useless rule: useless2: '2'
|
||||
input.y:8.9-13: warning: useless rule: useless3: '3'
|
||||
input.y:9.9-13: warning: useless rule: useless4: '4'
|
||||
input.y:10.9-13: warning: useless rule: useless5: '5'
|
||||
input.y:11.9-13: warning: useless rule: useless6: '6'
|
||||
input.y:12.9-13: warning: useless rule: useless7: '7'
|
||||
input.y:13.9-13: warning: useless rule: useless8: '8'
|
||||
input.y:14.9-13: warning: useless rule: useless9: '9'
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
|
||||
@@ -208,7 +235,12 @@ non_productive: non_productive useless_token
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison not-reduced.y]], 0, [],
|
||||
[[not-reduced.y contains 2 useless nonterminals and 3 useless rules
|
||||
[[not-reduced.y: warning: 2 useless nonterminals and 3 useless rules
|
||||
not-reduced.y:14.1-13: warning: useless nonterminal: not_reachable
|
||||
not-reduced.y:11.6-19: warning: useless nonterminal: non_productive
|
||||
not-reduced.y:11.4-57: warning: useless rule: exp: non_productive
|
||||
not-reduced.y:14.14-56: warning: useless rule: not_reachable: useful
|
||||
not-reduced.y:17.15-18.63: warning: useless rule: non_productive: non_productive useless_token
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0,
|
||||
@@ -275,7 +307,12 @@ indirection: underivable;
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]], 0, [],
|
||||
[[input.y contains 2 useless nonterminals and 3 useless rules
|
||||
[[input.y: warning: 2 useless nonterminals and 3 useless rules
|
||||
input.y:5.15-25: warning: useless nonterminal: underivable
|
||||
input.y:6.14-24: warning: useless nonterminal: indirection
|
||||
input.y:5.13-25: warning: useless rule: exp: underivable
|
||||
input.y:6.12-24: warning: useless rule: underivable: indirection
|
||||
input.y:7.12-24: warning: useless rule: indirection: underivable
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
|
||||
|
||||
@@ -112,6 +112,8 @@ AT_CLEANUP
|
||||
|
||||
AT_SETUP([Rule Line Numbers])
|
||||
|
||||
AT_KEYWORDS([report])
|
||||
|
||||
AT_DATA([input.y],
|
||||
[[%%
|
||||
expr:
|
||||
@@ -148,12 +150,15 @@ AT_CHECK([bison input.y -o input.c -v])
|
||||
AT_CHECK([cat input.output], [],
|
||||
[[Grammar
|
||||
|
||||
Number, Line, Rule
|
||||
0 5 $axiom -> expr $
|
||||
1 5 @1 -> /* empty */
|
||||
2 2 expr -> 'a' @1 'b'
|
||||
3 18 @2 -> /* empty */
|
||||
4 15 expr -> @2 'c'
|
||||
0 $axiom: expr $
|
||||
|
||||
1 @1: /* empty */
|
||||
|
||||
2 expr: 'a' @1 'b'
|
||||
|
||||
3 @2: /* empty */
|
||||
|
||||
4 expr: @2 'c'
|
||||
|
||||
|
||||
Terminals, with rules where they appear
|
||||
@@ -349,6 +354,8 @@ AT_CLEANUP
|
||||
|
||||
AT_SETUP([Web2c Report])
|
||||
|
||||
AT_KEYWORDS([report])
|
||||
|
||||
AT_DATA([input.y],
|
||||
[[%token undef_id_tok const_id_tok
|
||||
|
||||
@@ -375,13 +382,12 @@ AT_CHECK([bison -v input.y])
|
||||
|
||||
AT_CHECK([sed -n 's/ *$//;/^$/!p' input.output], 0,
|
||||
[[Grammar
|
||||
Number, Line, Rule
|
||||
0 6 $axiom -> CONST_DEC_PART $
|
||||
1 6 CONST_DEC_PART -> CONST_DEC_LIST
|
||||
2 10 CONST_DEC_LIST -> CONST_DEC
|
||||
3 12 CONST_DEC_LIST -> CONST_DEC_LIST CONST_DEC
|
||||
4 16 @1 -> /* empty */
|
||||
5 15 CONST_DEC -> @1 undef_id_tok '=' const_id_tok ';'
|
||||
0 $axiom: CONST_DEC_PART $
|
||||
1 CONST_DEC_PART: CONST_DEC_LIST
|
||||
2 CONST_DEC_LIST: CONST_DEC
|
||||
3 | CONST_DEC_LIST CONST_DEC
|
||||
4 @1: /* empty */
|
||||
5 CONST_DEC: @1 undef_id_tok '=' const_id_tok ';'
|
||||
Terminals, with rules where they appear
|
||||
$ (0) 0
|
||||
';' (59) 5
|
||||
@@ -470,6 +476,8 @@ AT_CLEANUP
|
||||
|
||||
AT_SETUP([Web2c Actions])
|
||||
|
||||
AT_KEYWORDS([report])
|
||||
|
||||
AT_DATA([input.y],
|
||||
[[%%
|
||||
statement: struct_stat;
|
||||
|
||||
Reference in New Issue
Block a user