mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-13 06:13:02 +00:00
* src/gram.c: Remove comments that duplicate comments in gram.h.
When reporting useless rules and nonterminals, say "useless in grammar" instead of "useless", and say "useless in parser" instead of "never reduced". Discussed starting at <http://lists.gnu.org/archive/html/bison-patches/2007-10/msg00033.html>. * NEWS (2.3a+): Mention this change. * data/xslt/xml2text.xsl: Update output text and expected input XML element names to match changes below. * data/xslt/xml2xhtml.xsl: Likewise. (xsl:template match="bison-xml-report"): Add missing entry in Table of Contents: "Rules useless in parser due to conflicts". * doc/bison.texinfo (Decl Summary): Reword a little. (Understanding): Update example output for changes below. * src/gram.c: (rule_useful_p): Rename to... (rule_useful_in_grammar_p): ... this. (rule_useless_p): Rename to... (rule_useless_in_grammar_p): ... this. (rule_never_reduced_p): Rename to... (rule_useless_in_parser_p): ... this. (grammar_rules_print): Update for renames. (grammar_rules_print_xml): Update for renames. (grammar_rules_never_reduced_report): Rename to... (grammar_rules_useless_report): ... this since it is used for either kind of useless rule. * src/gram.h: Reword comments and update function names in prototypes. * src/main.c (main): Say "rule useless in parser due to conflicts". * src/print-xml.c (print_rules_never_reduced): Rename to... (print_rules_useless_in_parser): ... this, and rename output XML element "rules-never-reduced" to "rules-useless-in-parser". (print_xml): Update for rename. * src/print.c (print_results): Say "Rules useless in parser due to conflicts". * src/reduce.c (reduce_grammar_tables): Say "rule useless in grammar". (nonterminals_reduce): Say "nonterminal useless in grammar". (reduce_output): Say "Nonterminals useless in grammar". Say "Rules useless in grammar". (reduce_xml): Rename output XML element "useless" to "useless-in-grammar". (reduce_print): Don't report the count of grammatically useless rules as "rules never reduced" just because %yacc is specified. In the correct report of this count, say nonterminal(s) and rule(s) "useless in grammar". * tests/conflicts.at (S/R in initial): Update expected output. (Defaulted Conflicted Reduction): Likewise. (Unreachable States After Conflict Resolution): Likewise. * tests/existing.at (GNU pic Grammar): Likewise. * tests/reduce.at (Useless Nonterminals): Likewise. (Useless Rules): Likewise. (Reduced Automaton): Likewise. (Underivable Rules): Likewise. (Empty Language): Likewise.
This commit is contained in:
@@ -37,7 +37,7 @@ 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 */
|
||||
[[input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */
|
||||
]])
|
||||
|
||||
AT_CLEANUP
|
||||
@@ -364,12 +364,12 @@ id : '0';
|
||||
|
||||
AT_CHECK([bison -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'
|
||||
|
||||
@@ -667,17 +667,17 @@ reported_conflicts:
|
||||
|
||||
AT_CHECK([[bison --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
|
||||
|
||||
@@ -819,10 +819,10 @@ AT_CHECK([[cat input.y >> input-keep.y]])
|
||||
|
||||
AT_CHECK([[bison input-keep.y]], 0, [],
|
||||
[[input-keep.y: conflicts: 2 shift/reduce, 2 reduce/reduce
|
||||
input-keep.y:22.4: warning: rule never reduced because of conflicts: unreachable1: /* empty */
|
||||
input-keep.y:26.16: warning: rule never reduced because of conflicts: unreachable2: /* empty */
|
||||
input-keep.y:32.5-7: warning: rule never reduced because of conflicts: reported_conflicts: 'a'
|
||||
input-keep.y:33.4: warning: rule never reduced because of conflicts: reported_conflicts: /* empty */
|
||||
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
|
||||
|
||||
@@ -1519,7 +1519,7 @@ expr:
|
||||
# don't actually check the output. But SEGV is watching us, and
|
||||
# so might do dmalloc.
|
||||
AT_CHECK([[bison --verbose --defines input.y]], 0, [],
|
||||
[[input.y:453.11-48: warning: rule never reduced because of conflicts: path: ORDINAL LAST object_type relative_path
|
||||
[[input.y:453.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
|
||||
]])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
100
tests/reduce.at
100
tests/reduce.at
@@ -1,5 +1,5 @@
|
||||
# Exercising Bison Grammar Reduction. -*- Autotest -*-
|
||||
# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -87,20 +87,20 @@ exp: useful;
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]], 0, [],
|
||||
[[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
|
||||
[[input.y: warning: 9 nonterminals useless in grammar
|
||||
input.y:4.8-15: warning: nonterminal useless in grammar: useless1
|
||||
input.y:5.8-15: warning: nonterminal useless in grammar: useless2
|
||||
input.y:6.8-15: warning: nonterminal useless in grammar: useless3
|
||||
input.y:7.8-15: warning: nonterminal useless in grammar: useless4
|
||||
input.y:8.8-15: warning: nonterminal useless in grammar: useless5
|
||||
input.y:9.8-15: warning: nonterminal useless in grammar: useless6
|
||||
input.y:10.8-15: warning: nonterminal useless in grammar: useless7
|
||||
input.y:11.8-15: warning: nonterminal useless in grammar: useless8
|
||||
input.y:12.8-15: warning: nonterminal useless in grammar: useless9
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
|
||||
[[Useless nonterminals
|
||||
[[Nonterminals useless in grammar
|
||||
useless1
|
||||
useless2
|
||||
useless3
|
||||
@@ -142,29 +142,29 @@ useless9: '9';
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]], 0, [],
|
||||
[[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.11-13: warning: useless rule: useless1: '1'
|
||||
input.y:7.11-13: warning: useless rule: useless2: '2'
|
||||
input.y:8.11-13: warning: useless rule: useless3: '3'
|
||||
input.y:9.11-13: warning: useless rule: useless4: '4'
|
||||
input.y:10.11-13: warning: useless rule: useless5: '5'
|
||||
input.y:11.11-13: warning: useless rule: useless6: '6'
|
||||
input.y:12.11-13: warning: useless rule: useless7: '7'
|
||||
input.y:13.11-13: warning: useless rule: useless8: '8'
|
||||
input.y:14.11-13: warning: useless rule: useless9: '9'
|
||||
[[input.y: warning: 9 nonterminals and 9 rules useless in grammar
|
||||
input.y:6.1-8: warning: nonterminal useless in grammar: useless1
|
||||
input.y:7.1-8: warning: nonterminal useless in grammar: useless2
|
||||
input.y:8.1-8: warning: nonterminal useless in grammar: useless3
|
||||
input.y:9.1-8: warning: nonterminal useless in grammar: useless4
|
||||
input.y:10.1-8: warning: nonterminal useless in grammar: useless5
|
||||
input.y:11.1-8: warning: nonterminal useless in grammar: useless6
|
||||
input.y:12.1-8: warning: nonterminal useless in grammar: useless7
|
||||
input.y:13.1-8: warning: nonterminal useless in grammar: useless8
|
||||
input.y:14.1-8: warning: nonterminal useless in grammar: useless9
|
||||
input.y:6.11-13: warning: rule useless in grammar: useless1: '1'
|
||||
input.y:7.11-13: warning: rule useless in grammar: useless2: '2'
|
||||
input.y:8.11-13: warning: rule useless in grammar: useless3: '3'
|
||||
input.y:9.11-13: warning: rule useless in grammar: useless4: '4'
|
||||
input.y:10.11-13: warning: rule useless in grammar: useless5: '5'
|
||||
input.y:11.11-13: warning: rule useless in grammar: useless6: '6'
|
||||
input.y:12.11-13: warning: rule useless in grammar: useless7: '7'
|
||||
input.y:13.11-13: warning: rule useless in grammar: useless8: '8'
|
||||
input.y:14.11-13: warning: rule useless in grammar: useless9: '9'
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
|
||||
[[Useless nonterminals
|
||||
[[Nonterminals useless in grammar
|
||||
useless1
|
||||
useless2
|
||||
useless3
|
||||
@@ -184,7 +184,7 @@ Terminals which are not used
|
||||
'7'
|
||||
'8'
|
||||
'9'
|
||||
Useless rules
|
||||
Rules useless in grammar
|
||||
2 useless1: '1'
|
||||
3 useless2: '2'
|
||||
4 useless3: '3'
|
||||
@@ -237,21 +237,21 @@ non_productive: non_productive useless_token
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison not-reduced.y]], 0, [],
|
||||
[[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.6-57: warning: useless rule: exp: non_productive
|
||||
not-reduced.y:14.16-56: warning: useless rule: not_reachable: useful
|
||||
not-reduced.y:17.17-18.63: warning: useless rule: non_productive: non_productive useless_token
|
||||
[[not-reduced.y: warning: 2 nonterminals and 3 rules useless in grammar
|
||||
not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
|
||||
not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
|
||||
not-reduced.y:11.6-57: warning: rule useless in grammar: exp: non_productive
|
||||
not-reduced.y:14.16-56: warning: rule useless in grammar: not_reachable: useful
|
||||
not-reduced.y:17.17-18.63: warning: rule useless in grammar: non_productive: non_productive useless_token
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0,
|
||||
[[Useless nonterminals
|
||||
[[Nonterminals useless in grammar
|
||||
not_reachable
|
||||
non_productive
|
||||
Terminals which are not used
|
||||
useless_token
|
||||
Useless rules
|
||||
Rules useless in grammar
|
||||
2 exp: non_productive
|
||||
3 not_reachable: useful
|
||||
4 non_productive: non_productive useless_token
|
||||
@@ -311,19 +311,19 @@ indirection: underivable;
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]], 0, [],
|
||||
[[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.15-25: warning: useless rule: exp: underivable
|
||||
input.y:6.14-24: warning: useless rule: underivable: indirection
|
||||
input.y:7.14-24: warning: useless rule: indirection: underivable
|
||||
[[input.y: warning: 2 nonterminals and 3 rules useless in grammar
|
||||
input.y:5.15-25: warning: nonterminal useless in grammar: underivable
|
||||
input.y:6.14-24: warning: nonterminal useless in grammar: indirection
|
||||
input.y:5.15-25: warning: rule useless in grammar: exp: underivable
|
||||
input.y:6.14-24: warning: rule useless in grammar: underivable: indirection
|
||||
input.y:7.14-24: warning: rule useless in grammar: indirection: underivable
|
||||
]])
|
||||
|
||||
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
|
||||
[[Useless nonterminals
|
||||
[[Nonterminals useless in grammar
|
||||
underivable
|
||||
indirection
|
||||
Useless rules
|
||||
Rules useless in grammar
|
||||
2 exp: underivable
|
||||
3 underivable: indirection
|
||||
4 indirection: underivable
|
||||
@@ -346,7 +346,7 @@ exp: exp;
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison input.y]], 1, [],
|
||||
[[input.y: warning: 2 useless nonterminals and 2 useless rules
|
||||
[[input.y: warning: 2 nonterminals and 2 rules useless in grammar
|
||||
input.y:3.1-3: fatal error: start symbol exp does not derive any sentence
|
||||
]])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user