Commit Graph

525 Commits

Author SHA1 Message Date
Joel E. Denny
408476bca9 In XML output, remove redundant class attribute on symbol element.
* data/xslt/bison.xsl (xsl:key name="bison:symbolByName"): New.
* data/xslt/xml2xhtml.xsl (xsl:template match="symbol"): Use it to
look up a symbol to determine whether it's a nonterminal or terminal.
* src/gram.c (rule_rhs_print_xml): Remove class attribute.
* src/state.c (state_rule_lookahead_tokens_print_xml): Likewise.

Add prec/assoc information to XML output.
* src/gram.c (grammar_rules_print_xml): For each rule that has a
%prec, add a percent_prec attribute.
* src/print-xml.c (print_grammar): For each terminal that has a
precedence or associativity, add a prec or assoc attribute.
(xml_indent): New.
(xml_puts): Use xml_indent.
(xml_printf): Use xml_indent.
* src/print-xml.h (xml_indent): Prototype.

* tests/existing.at (GNU pic Grammar): Fix a rule miscopied from
<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00026.html>.
2007-12-15 02:08:02 +00:00
Joel E. Denny
d4a26c4832 * data/xslt/bison.xsl (bison:ruleNumber): Rename to...
(bison:ruleByNumber): ... this for clarity.
* data/xslt/xml2dot.xsl (xsl:template match="item"): Update.
* data/xslt/xml2text.xsl (xsl:template match="item"): Update.
(xsl:template match="reduction"): Update.
(xsl:template match="item"): Update.
(xsl:template match="reduction"): Update.

In the XML output, don't print the list of rules where symbols appear.
Compute it in XSLT instead.  Discussed at
<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00024.html>.
* data/xslt/bison.xsl (bison:ruleByLhs): New.
(bison:ruleByRhs): New.
* data/xslt/xml2text.xsl (xsl:template match="terminal"): Use
bison:ruleByRhs.
(xsl:template match="terminal/rule"): Remove.
(xsl:template match="nonterminal"): Use bison:ruleByLhs and
bison:ruleByRhs.
(xsl:template match="nonterminal/left/rule|nonterminal/right/rule"):
Remove.
* data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Use
bison:ruleByRhs and mode="number-link" for rule template.
(xsl:template match="terminal/rule"): Remove.
(xsl:template match="nonterminal"): Use bison:ruleByLhs and
bison:ruleByRhs and mode="number-link" for rule template.
(xsl:template match="nonterminal/left/rule|nonterminal/right/rule"):
Rewrite as...
(xsl:template match="rule" mode="number-link"): ... this.
* src/print-xml.c (print_grammar): Don't print the list of rules.
2007-12-08 16:05:38 +00:00
Akim Demaille
0f6cd9e3f8 * data/Makefile.am (dist_pkgdata_DATA): Ship and install bison.xsl. 2007-11-26 10:04:15 +00:00
Joel E. Denny
d80fb37a26 In the XML output, list useless and unused symbols and rules with the
useful ones and add a "usefulness" attribute.  Discussed starting at
<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00017.html>.
* src/gram.c (grammar_rules_partial_print_xml): Remove.
(grammar_rules_print_xml): Print all rules instead of just those
useful in the grammar, and add a "usefulness" attribute.
* src/gram.h (grammar_rules_partial_print_xml): Remove prototype.
* src/print-xml.c (print_rules_useless_in_parser): Remove.
(print_grammar): Print all nonterminals instead of just useful ones,
and add a "usefulness" attribute to nonterminals and terminals.
(print_xml): Don't print a separate "reductions" or
"rules-useless-in-parser" element.
* src/reduce.c (reduce_output): Use reduce_token_unused_in_grammar.
(reduce_xml): Remove.
(reduce_token_unused_in_grammar): New.
(reduce_nonterminal_useless_in_grammar): New.
* src/reduce.h (reduce_xml): Remove prototype.
(reduce_token_unused_in_grammar): Add prototype.
(reduce_nonterminal_useless_in_grammar): Add prototype.
* data/xslt/xml2text.xsl: Update for XML changes.
* data/xslt/xml2xhtml.xsl: Update for XML changes.
* tests/reduce.at (Useless Terminals): Update output.
(Useless Rules): Update output.
(Reduced Automaton): Update output.

Say "Terminals unused in grammar" instead of "Unused terminals".
* NEWS (2.3a+): Update.
* doc/bison.texinfo (Understanding): Update example output.
* src/reduce.c (reduce_output): Implement.
* data/xslt/xml2text.xsl: Implement.
* data/xslt/xml2xhtml.xsl: Implement.
2007-11-24 19:41:25 +00:00
Joel E. Denny
cff03fb2b9 * 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.
2007-11-10 03:42:37 +00:00
Joel E. Denny
66f0441da3 * data/bison.m4 (b4_cat): Put a newline after the end delimiter of the
here document and before the EOF so that BSD's implementation of Bourne
shell doesn't parse the delimiter as part of the here document.
* doc/.cvsignore: Add cross-options.texi.
* src/getargs.c (usage): Add a blank line after the warning categories.
2007-11-10 01:36:54 +00:00
Paolo Bonzini
d0ee410565 2007-11-08 Paolo Bonzini <bonzini@gnu.org>
* data/lalr1.java (Lexer): Remove usage of b4_pure_if.
2007-11-08 09:08:45 +00:00
Joel E. Denny
d9df47b656 Deprecate %pure-parser and add `%define api.pure'. Discussed starting
at
<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00006.html>.
* NEWS (2.3a+): Mention.
* data/bison.m4 (b4_pure_if): Don't define it here.
* data/c.m4 (b4_identification): Depend on individual skeletons to
define b4_pure_flag, b4_push_flag, or b4_pull_flag if they use the
values of the %define variables api.pure or api.push_pull.  Define
YYPURE, YYPUSH, and YYPULL accordingly.
* data/glr.c: Define b4_pure_if based on `%define api.pure' unless
glr.cc has already defined b4_pure_flag.
* data/push.c: Define b4_pure_if based on `%define api.pure'.
Remove YYPUSH and YYPULL since they're back in b4_identification again.
* data/yacc.c Define b4_pure_if based on `%define api.pure'.
* doc/bison.texinfo (Pure Decl): Update.
(Push Decl): Update.
(Decl Summary): Add api.pure to %define entry.
In %pure-parser entry, say it's deprecated and reference %define.
(Pure Calling): Update.
(Error Reporting): Update.
(C++ Scanner Interface): Update.
(How Can I Reset the Parser): Update.
(Table of Symbols): In %pure-parser entry, say it's deprecated and
reference %define.
* src/getargs.c (pure_parser): Remove global variable.
* src/getargs.h (pure_parser): Remove extern.
* src/output.c (prepare): Don't define pure_flag muscle.
* src/parse-gram.y (prologue_declaration): Implement %pure-parser as a
wrapper around `%define api.pure'.
* tests/calc.at (Simple LALR Calculator): Update.
(Simple GLR Calculator): Update.
* tests/cxx-type.at (GLR: Resolve ambiguity, pure, no locations):
Update.
(GLR: Resolve ambiguity, pure, locations): Update.
(GLR: Merge conflicting parses, pure, no locations): Update.
(GLR: Merge conflicting parses, pure, locations): Update.
* tests/glr-regression.at (Uninitialized location when reporting
ambiguity): Update
* tests/input.at (Unused %define api.pure): New test case.
* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Update definition for
AT_PURE_IF and AT_PURE_AND_LOC_IF.
* tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update.
2007-10-29 17:36:40 +00:00
Joel E. Denny
c373bf8bb8 %define push_pull -> %define api.push_pull. Discussed starting at
<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00005.html>.
* data/push.c: Expect the new name.
* data/yacc.c: Likewise.
* doc/bison.texinfo (Push Decl): Update.
(Decl Summary): Update %define entry.
(Push Parser Function): Update.
(Pull Parser Function): Update.
(Parser Create Function): Update.
(Parser Delete Function): Update.
* tests/calc.at (Simple LALR Calculator): Update.
* tests/input.at (%define enum variables): Update.
* tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update.
(Push Parsing: Multiple impure instances): Update.
(Push Parsing: Unsupported Skeletons): Update.
* tests/torture.at (Exploding the Stack Size with Alloca): Update.
(Exploding the Stack Size with Malloc): Update.

* NEWS (2.3a+): Add an entry for the push parser, and clean up the
other entries some.
2007-10-28 20:11:35 +00:00
Joel E. Denny
32f19b6b47 For the XML output's terminal element, rename @number to @token-number,
and add @symbol-number.  In the nonterminal element, rename @number to
@symbol-number.  Discussed starting at
<http://lists.gnu.org/archive/html/bison-patches/2007-10/msg00040.html>.
* data/xslt/xml2text.xsl (xsl:template match="terminal"): Update for
renames.
(xsl:template match="nonterminal"): Likewise.
* data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Likewise.
(xsl:template match="nonterminal"): Likewise.
* src/print-xml.c (print_grammar): Implement.
2007-10-28 00:24:22 +00:00
Joel E. Denny
255a6b901a * data/xslt/xml2dot.xsl (xsl:template match="automaton/state"): After
2007-10-11 change, the child elements here are items not rules.
(<xsl:template match="item"): New.
(xsl:template match="rule"): Update for new reduced itemset.
(xsl:template match="point"): Remove.
(xsl:template match="empty"): For consistency with --graph, don't
output "/* empty */".
* data/xslt/xml2text.xsl (xsl:template match="terminal"): When invoking
line-wrap, don't pass a negative value as first-line-length since this
won't work with the following changes.
(xsl:template name="line-wrap"): Simplify slightly.
(xsl:template name="ws-search"): Eliminate recursion.
* src/print_graph.c (print_core): Don't print a reduction's lookahead
set next to an item whose dot is not at the end of the RHS even if it
happens to be associated with the same rule.
2007-10-21 15:34:08 +00:00
Wojciech Polak
36c48187a6 (xsl:template match="terminal"): Use new attribute names.
(xsl:template match="nonterminal"): Likewise.
2007-10-17 18:12:20 +00:00
Wojciech Polak
95134bc179 (xsl:template match="item"): New.
(xsl:template match="rule"): Support new reduced itemset.
(xsl:template match="point"): Remove.
2007-10-11 16:38:42 +00:00
Wojciech Polak
85a6eb13f8 (xsl:template name="escape"): Write xsl:param "required" attribute as comment. 2007-10-11 16:37:59 +00:00
Wojciech Polak
fc8b70bf14 (bison:ruleNumber): New key. Improve processing time. Suggested by Joel E. Denny. 2007-10-11 16:37:38 +00:00
Joel E. Denny
21f1b063d8 Make xml2dot.xsl and --graph produce the same output.
* data/xslt/xml2dot.xsl (xsl:template match="rule"): Use a `&#10;'
instead of a `\n'.  That is, don't add escapes yet or they'll be doubly
escaped later.
(xsl:template name="output-node"): Use the new escape template instead
of the string-replace template directly.
(xsl:template name="output-edge"): Likewise.
(xsl:template name="escape"): New, escapes backslashes and newlines in
addition to quotation marks.
* src/graphviz.c (start_graph, output_node, output_edge): Add
whitespace to output for legibility.

Make xml2text.xsl and --report produce the same output, and remove the
XML "conflicts" element since a conflict summary is easily extracted
from the automaton.
* data/xslt/bison.xsl: New.
(xsl:template match="state" mode="bison:count-conflicts): New.
* data/xslt/xml2text.xsl: Import bison.xsl.
(xsl:template match="bison-xml-report"): Instead of styling the
"conflicts" element, style the "automaton" element with mode
"conflicts".  Unlike the former, the latter lists S/R and R/R
conflicts for a state on the same line.
(xsl:template match="conflicts"): Remove.
(xsl:template match="conflict"): Remove.
(xsl:template match="terminal"): Line-wrap the list of rules in which
the terminal is used.
(xsl:template match="nonterminal"): Likewise for nonterminals.
(xsl:template match="automaton" mode="conflicts"): New.
(xsl:template match="state" mode="conflicts"): New.
(xsl:template name="line-wrap"): New.
(xsl:template name="ws-search"): New.
* data/xslt/xml2xhtml.xsl: Import bison.xsl.
(xsl:template match="bison-xml-report"): Instead of styling the
"conflicts" element, style the "automaton" element with mode
"conflicts."
(xsl:template match="conflicts"): Remove.
(xsl:template match="conflict"): Remove.
(xsl:template match="automaton" mode="conflicts"): New.
(xsl:template match="state" mode="conflicts): New.
* src/conflicts.c (conflicts_output_xml): Remove.
* src/conflicts.h (conflicts_output_xml): Remove prototype.
* src/print-xml.c (print_xml): Don't invoke conflicts_output_xml.
* src/print.c (print_grammar): Consistently wrap at the 66th column so
the corresponding XSLT is easier.  Also, never wrap between a word and
the comma that follows it.
2007-10-09 08:48:43 +00:00
Joel E. Denny
793fbca50a Improve C++ namespace support. Discussed starting at
<http://lists.gnu.org/archive/html/help-bison/2007-09/msg00016.html>.
* data/c++.m4: (b4_namespace_ref, b4_namespace_open,
b4_namespace_close): New macros that interpret the %define variable
"namespace" so its value can contain "::" to indicate nested
namespaces.
* data/glr.cc (b4_namespace): Don't define, and replace all uses with
the above macros.
* data/lalr1.cc (b4_namespace): Likewise.
* data/location.cc (b4_namespace): Likewise.
* doc/bison.texinfo (Decl Summary): Move `%define push_pull' entry
inside a new table in the general %define entry.  Document `%define
namespace' there as well.  Point the %name-prefix entry to it since it
explains it more completely in the case of C++.
(C++ Bison Interface): Mention `%define namespace' instead of
%name-prefix.
(Table of Symbols): Remove the `%define push_pull' entry.  The %define
entry suffices.
* tests/c++.at (Relative namespace references): New test case.
(Absolute namespace references): New test case.
(Syntactically invalid namespace references): New test case.
* tests/input.at (C++ namespace reference errors): New test case.
2007-10-08 10:09:07 +00:00
Joel E. Denny
35b8730d01 Add syncline support and location accessor to internal %define
interfaces.
* data/bison.m4 (b4_percent_define_get_loc): New.
(b4_percent_define_get_syncline): New.
(b4_percent_define_flag_if): Use b4_percent_define_get_loc.
(b4_percent_define_default): Record defining location as line 1 rather
than 0 for the sake of synchronizing #line's, and define
b4_percent_define_syncline(VARIABLE).
(b4_percent_define_check_values): Use b4_percent_define_get_loc.
* src/muscle_tab.c (muscle_syncline_grow): New.
(muscle_code_grow): Use muscle_syncline_grow.
(muscle_percent_define_insert): Use muscle_percent_define_get_loc, and
define b4_percent_define_syncline(VARIABLE).
(muscle_percent_define_get_loc): New.
(muscle_percent_define_get_syncline): New.
(muscle_percent_define_flag_if): Use muscle_percent_define_get_loc, and
remove some unused variables.
(muscle_percent_define_default): Record defining location as line 1
rather than 0 for the sake of synchronizing #line's, and define
b4_percent_define_syncline(VARIABLE).
(muscle_percent_define_check_values): Use
muscle_percent_define_get_loc.
* src/muscle_tab.h (muscle_percent_define_get_loc): Prototype.
(muscle_percent_define_get_syncline): Prototype.
* tests/skeletons.at (%define Boolean variables: invalid skeleton
defaults): Update output for location change.
(Complaining during macro argument expansion): Extend to test
b4_percent_define_get_loc and b4_percent_define_get_syncline errors.
2007-10-08 04:00:13 +00:00
Joel E. Denny
7dc4a6940c Fix some error-reporting macro bugs.
* data/bison.m4 (b4_cat): New.
(b4_error, b4_error_at): Use b4_cat to send error directives directly
to stdout so they don't become arguments to other macros.  Update
comments and add examples.
(b4_warn, b4_warn_at, b4_complain, b4_complain_at): Update comments and
add examples.
(b4_fatal, b4_fatal_at): Likewise, and invoke m4_exit(1) immediately
after printing the error directive so that M4 doesn't report subsequent
problems that are induced by this problem.
* src/scan-skel.l: Recognize @` digraph outside of directive arguments
instead of just in them.  Recognize @\n in both places.  Both expand to
the empty string.  Needed by b4_cat.
* tests/skeletons.at (Complaining during macro argument expansion):
New test case.
(Fatal errors make M4 exit immediately): New test case.
2007-10-08 01:53:08 +00:00
Joel E. Denny
d782395d52 Replace %push-parser' and %push-pull-parser' with
`%define push_pull "push"' and `%define push_pull "both"'.
`%define push_pull "pull"' is the default.
* doc/bison.texinfo (Push Decl, Push Parser Function,
Pull Parser Function, Parser Create Function, Parser Delete Function):
Update declarations.
(Decl Summary, Table of Symbols): Replace %push-parser and
%push-pull-parser entries with a %define push_pull entry.
* data/bison.m4 (b4_percent_define_check_values): New macro.
(b4_pull_if, b4_push_if, b4_use_push_for_pull_if): Move these
definitions...
* data/c.m4 (b4_identification): ... and the YYPUSH and YYPULL cpp
definitions...
* data/push.c: ... to here and compute them from the value of the
%define variable push_pull.
* data/c-skel.m4: Instead of choosing the push.c skeleton for push
parsing requests here...
* data/yacc.c: ... hack this to switch to push.c any time
b4_use_push_pull_flag or the %define variable push_pull is set.  This
will go away when we mv push.c yacc.c.
* data/c++-skel.m4, data/glr.c, data/java-skel.m4: Don't report that
push parsing is not supported since unused %define variables are
reported anyway.
* src/getargs.c, src/getargs.h (pull_parser, push_parser): Remove.
* src/muscle_tab.h (muscle_percent_define_check_values): Update
comments for consistency with b4_percent_define_check_values.
* src/output.c (prepare): Don't insert b4_pull_flag and b4_push_flag
muscles.
* src/parse-gram.y (PERCENT_PUSH_PARSER, PERCENT_PUSH_PULL_PARSER):
Remove.
(prologue_declaration): Remove %push-parser and %push-pull-parser
rules.
* src/scan-gram.l (%push-parser, %push-pull-parser): Remove rules.
* tests/calc.at: Update declarations.
* tests/input.at (%define enum variables): New test case.
* tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update
declaration.
(Push Parsing: Multiple impure instances): Update declaration.
(Push Parsing: Unsupported Skeletons): New test case.
* tests/torture.at (Exploding the Stack Size with Alloca): Update
declaration.
(Exploding the Stack Size with Malloc): Update declaration.
2007-09-25 05:47:27 +00:00
Wojciech Polak
ca2cc7aeec data/Makefile.am (xsltdir): New variable.
(dist_xslt_DATA): Add xslt/*.xsl files.
2007-09-24 19:32:02 +00:00
Wojciech Polak
bbeff19643 Transform XML into XHTML. 2007-09-24 19:31:08 +00:00
Wojciech Polak
9fb1f8d8f7 Transform XML into plain text. 2007-09-24 19:30:49 +00:00
Wojciech Polak
dc6025ffeb Transform XML into DOT. 2007-09-24 19:30:17 +00:00
Joel E. Denny
922bdd7ffa Spell "boolean" as "Boolean". Reported by Akim Demaille.
* data/bison.m4 (b4_percent_define_flag_if): Fix complaint.
* doc/bison.texinfo (Decl Summary): Fix.
* src/muscle_tab.c (muscle_percent_define_flag_if): Fix complaint.
* tests/input.at (Boolean %define variables): Update output.
* tests/skeletons.at (%define boolean variables: invalid skeleton
defaults): Rename to...
(%define Boolean variables: invalid skeleton defaults): ... this and
update output.
2007-08-28 07:14:11 +00:00
Joel E. Denny
1b17b01d0f In impure push mode, don't allow more than one yypstate to be allocated
since multiple impure parsers would corrupt yynerrs.
* data/push.c (yypstate_allocated): New static global variable
initialized to 0.
(yypull_parse): If yypstate_new returns 0, don't report it as memory
exhaustion if yypstate_allocated is 1, but still return 2.
(yypstate_new): Invoke yyerror and return 0 if yypstate_allocated is
already 1.  Otherwise, set it to 1.
(yypstate_delete): Set it to 0.
* tests/push.at (Push Parsing: Multiple impure instances): New test
case.
2007-08-18 00:45:52 +00:00
Paul Eggert
f16b08196c Update to GPLv3.
* doc/gpl-3.0.texi: New file.
* doc/gpl.texi: Remove.
* COPYING, GNUmakefile, HACKING, Makefile.am, Makefile.cfg:
* Makefile.maint, NEWS, PACKAGING, README, README-alpha:
* README-hacking, TODO, bootstrap, bootstrap.conf:
* configure.ac, data/Makefile.am, data/README, data/bison.m4:
* data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4:
* data/glr.c, data/glr.cc, data/java-skel.m4, data/java.m4:
* data/lalr1.cc, data/lalr1.java, data/location.cc:
* data/push.c, data/yacc.c, data/m4sugar/m4sugar.m4:
* djgpp/Makefile.maint, djgpp/README.in, djgpp/config.bat:
* djgpp/config.sed, djgpp/config.site, djgpp/config_h.sed:
* djgpp/djunpack.bat, djgpp/subpipe.c, djgpp/subpipe.h:
* djgpp/testsuite.sed, doc/Makefile.am, doc/bison.texinfo:
* doc/fdl.texi, doc/refcard.tex, etc/Makefile.am, etc/README:
* etc/bench.pl.in, examples/Makefile.am, examples/extexi:
* examples/calc++/Makefile.am, lib/Makefile.am, lib/abitset.c:
* lib/abitset.h, lib/bbitset.h, lib/bitset.c, lib/bitset.h:
* lib/bitset_stats.c, lib/bitset_stats.h, lib/bitsetv-print.c:
* lib/bitsetv-print.h, lib/bitsetv.c, lib/bitsetv.h:
* lib/ebitset.c, lib/ebitset.h, lib/get-errno.c:
* lib/get-errno.h, lib/lbitset.c, lib/lbitset.h:
* lib/libiberty.h, lib/main.c, lib/subpipe.c, lib/subpipe.h:
* lib/timevar.c, lib/timevar.def, lib/timevar.h:
* lib/vbitset.c, lib/vbitset.h, lib/yyerror.c:
* m4/c-working.m4, m4/cxx.m4, m4/m4.m4, m4/subpipe.m4:
* m4/timevar.m4, src/LR0.c, src/LR0.h, src/Makefile.am:
* src/assoc.c, src/assoc.h, src/closure.c, src/closure.h:
* src/complain.c, src/complain.h, src/conflicts.c:
* src/conflicts.h, src/derives.c, src/derives.h, src/files.c:
* src/files.h, src/flex-scanner.h, src/getargs.c:
* src/getargs.h, src/gram.c, src/gram.h, src/graphviz.c:
* src/lalr.c, src/lalr.h, src/location.c, src/location.h:
* src/main.c, src/muscle_tab.c, src/muscle_tab.h:
* src/nullable.c, src/nullable.h, src/output.c, src/output.h:
* src/parse-gram.c, src/parse-gram.h, src/parse-gram.y:
* src/print.c, src/print.h, src/print_graph.c:
* src/print_graph.h, src/reader.c, src/reader.h, src/reduce.c:
* src/reduce.h, src/relation.c, src/relation.h:
* src/revision.h, src/scan-code.h, src/scan-code.l:
* src/scan-gram.h, src/scan-gram.l, src/scan-skel.h:
* src/scan-skel.l, src/state.c, src/state.h, src/symlist.c:
* src/symlist.h, src/symtab.c, src/symtab.h, src/system.h:
* src/tables.c, src/tables.h, src/uniqstr.c, src/uniqstr.h:
* tests/Makefile.am, tests/actions.at, tests/c++.at:
* tests/calc.at, tests/conflicts.at, tests/cxx-type.at:
* tests/existing.at, tests/glr-regression.at:
* tests/headers.at, tests/input.at, tests/java.at:
* tests/local.at, tests/output.at, tests/push.at:
* tests/reduce.at, tests/regression.at, tests/sets.at:
* tests/skeletons.at, tests/synclines.at, tests/testsuite.at:
* tests/torture.at:
Update to GPLv3.
2007-08-15 20:21:33 +00:00
Joel E. Denny
a2ea208d82 * data/yacc.c (yyexhaustedlab): Define it when YYERROR_VERBOSE is
true since it's then always used regardless of whether yyoverflow is
defined.  Reported by Christian Burger at
<http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00031.html>.
* THANKS: Add Christian Burger.
2007-08-03 04:51:23 +00:00
Joel E. Denny
eb1b07409f Fix push parsing memory leak reported by Brandon Lucia at
<http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00032.html>.
* THANKS: Add Brandon Lucia.
* data/push.c (yypstate_delete): Free the stack if it was reallocated
but the parse never completed and thus freed it.
* tests/Makefile.am (TESTSUITE_AT): Add push.at.
* tests/testsuite.at: Include push.at.
* test/push.at: New.
(Push Parsing: Memory Leak for Early Deletion): New test case.
2007-07-28 04:27:32 +00:00
Joel E. Denny
8a86eef0fa * data/glr.c (yy_yypstack, yypstates, yypdumpstack): Use YYFPRINTF
instead of fprintf.  Guard these functions with #if YYDEBUG instead of
#ifdef YYDEBUG for consistency with all other uses of YYDEBUG in Bison
and so that YYFPRINTF is guaranteed to be defined here.
2007-07-02 02:07:20 +00:00
Joel E. Denny
0c650a2027 * data/glr.c (yylval): As in yacc.c, don't extern in the header for
the case of pure parsers.  Reported by Frans Englich at
<http://lists.gnu.org/archive/html/help-bison/2007-05/msg00018.html>.
* THANKS: Add Frans Englich.
2007-05-26 19:10:43 +00:00
Joel E. Denny
f124d4233f Extend the front-end API for %define variables to more completely
mirror the back-end.  This will be useful in the future.
* data/bison.m4 (b4_percent_define_get, b4_percent_define_ifdef):
Update comments to mention the new front-end counterparts of these
macros.
* src/muscle_tab.c (MUSCLE_COMMON_DECODE): New macro with common code
for muscle_string_decode and muscle_location_decode.
(muscle_string_decode): New static function.
(muscle_location_decode): Use MUSCLE_COMMON_DECODE.
(muscle_percent_define_get, muscle_percent_define_ifdef): New
functions.
(muscle_percent_define_flag_if): Use muscle_percent_define_ifdef and
muscle_percent_define_get to mimic the b4_percent_define_flag_if
implementation more closely.
(muscle_percent_define_invalid_value): New function.
* src/muscle_tab.h (muscle_percent_define_get,
muscle_percent_define_ifdef, muscle_percent_define_invalid_value):
Prototype.
2007-05-20 05:01:53 +00:00
Paolo Bonzini
01b477c6b6 2007-03-07 Paolo Bonzini <bonzini@gnu.org>
* data/java.m4 (b4_single_class_if): Remove.
        (b4_abstract_if): Look at "%define abstract".
        (b4_lexer_if): New.
        (b4_union_name): Rename...
        (b4_yystype): ... to this.  Map to "%define stype".
        (b4_rhs_value, b4_parse_param_decl, b4_lex_param_decl,
        b4_maybe_throws): Fix quoting.
        (b4_lex_param_call): Move below to keep b4_*_param_decl close.
        * data/lalr1.java (Lexer interface): Always define.
        (Lexer interface within parser class): Remove.
        (YYLexer class): New, used when "%code lexer" is present.
        (constructor): When "%code lexer" is used, pass %lex-param
        to the lexer constructor.
        (yylex, yyparse): Remove %lex-param from method invocations
        (YYStack, yyaction, yyparse): Rename b4_union_name to b4_yystype.

        * doc/bison.texinfo (Java Bison Interface): Mention "%define
        abstract".  Rename "%define union_name" to "%define stype".
        Rename method names according to previous patch.
        (Java Scanner Interface): Describe "%code lexer" instead of
        "%pure-parser" and "%define single_class".
        (Java Differences): Mention "%code lexer".

        * tests/java.at (_AT_DATA_JAVA_CALC_Y): Remove final argument.
        Include scanner here, using macros from tests/local.at.
        (AT_DATA_CALC_Y): Remove final argument.
        (_AT_CHECK_JAVA_CALC): Likewise.
        (AT_CHECK_JAVA_CALC): Likewise.  Test all four combinations
        of %locations and %error-verbose.
        (main): Test with and without %lex-param.
        * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Push AT_LEXPARAM_IF.
        (AT_BISON_OPTION_POPDEFS): Pop it.
2007-03-09 09:13:43 +00:00
Joel E. Denny
9611cfa20b Miscellaneous %define and %code cleanup.
* data/bison.m4 (b4_percent_define_flag_if): Correct comments on how
values are interpreted.
* doc/bison.texinfo (Decl Summary): Clean up and extend %define
documentation a little more.
* src/muscle_tab.c (MUSCLE_USER_NAME_CONVERT,
muscle_percent_define_insert, muscle_percent_code_grow): New
functions/macros.
* src/muscle_tab.h (muscle_percent_define_insert,
muscle_percent_code_grow): Prototype.
* src/parse-gram.y (prologue_declaration): Use
muscle_percent_define_insert and muscle_percent_code_grow when parsing
%define and %code directives.

Make it easy to share %define boolean variables between the front-end
and back-end.  Though not used yet, this will be useful in the future.
* data/bison.m4 (b4_check_user_names): Rewrite comments to talk about
Bison uses of names rather than just skeleton uses of names.
(b4_percent_define_get, b4_percent_define_ifdef): Rename
b4_percent_define_skeleton_variables(VARIABLE) to
b4_percent_define_bison_variables(VARIABLE).
(b4_percent_code_get, b4_percent_code_ifdef): Rename
b4_percent_code_skeleton_qualifiers(QUALIFIER) to
b4_percent_code_bison_qualifiers(QUALIFIER).
(b4_check_user_names_wrap): Update for renames.
* src/muscle_tab.c, src/muscle_tab.h (muscle_percent_define_flag_if,
muscle_percent_define_default): New functions mimicking
b4_percent_define_flag_if and b4_percent_define_default.

For %define variables, report locations for invalid values and
redefinitions.
* data/bison.m4 (b4_percent_define_flag_if): Read
b4_percent_define_loc(VARIABLE) to report the location of an invalid
value for VARIABLE.
(b4_percent_define_default): Save a special location in
b4_percent_define_loc(VARIABLE) in case the default value for VARIABLE
must later be reported as invalid.
* src/muscle_tab.c (muscle_location_grow, muscle_location_decode): New
functions.
(muscle_percent_define_insert): Record the location of VARIABLE in
muscle percent_define_loc(VARIABLE), and use it to report the previous
location for a redefinition.
(muscle_percent_define_flag_if): Update like b4_percent_define_flag_if.
(muscle_percent_define_default): Update like b4_percent_define_default.
(muscle_grow_user_name_list): Rename to...
(muscle_user_name_list_grow): ... this for consistency and use
muscle_location_grow.
* src/muscle_tab.h (muscle_location_grow): Prototype.
* tests/input.at (%define errors): Update expected output.
* tests/skeletons.at (%define boolean variables: invalid skeleton
defaults): New test case.
2007-03-02 06:26:28 +00:00
Paolo Bonzini
d3b129885f 2007-02-27 Paolo Bonzini <bonzini@gnu.org>
* data/lalr1.java: Prefix all private members with yy.
2007-02-27 07:31:19 +00:00
Joel E. Denny
f57a753663 Use YYFPRINTF instead of fprintf where appropriate. Reported by
Sbastien Fricker at
<http://lists.gnu.org/archive/html/bug-bison/2007-02/msg00035.html>.
* THANKS: Add Sbastien Fricker.
* data/glr.c, data/push.c, data/yacc.c (yy_reduce_print): Implement.
* doc/bison.texinfo (Tracing): Make it clearer that YYFPRINTF must
accept a variable number of arguments.
2007-02-24 05:43:35 +00:00
Joel E. Denny
574add857a * data/Makefile.am: Update copyright date.
* data/push.c (yypull_parse): Report memory exhaustion and return 2 if
yypstate_new returns NULL.
(yypstate_new): Return NULL if malloc does.
* src/reader.c (packgram): Move translation of rule actions from the
beginning of packgram to...
(check_and_convert_grammar): ... here right before packgram is invoked
so it's easier to write more complete comments, and remove redundant
code.
2007-02-11 07:34:26 +00:00
Paolo Bonzini
8a93f8e60c 2007-02-05 Paolo Bonzini <bonzini@gnu.org>
* data/lalr1.java (Stack): Work around old verifiers that disallow
	access to the private fields of an inner class, from the outer class.
	We can make Stack's fields public because user code doesn't have access
	to the instance of Stack used by parse().
2007-02-05 09:58:04 +00:00
Paolo Bonzini
c1d19e10c3 2007-01-30 Paolo Bonzini <bonzini@gnu.org>
* data/bison.m4 (b4_percent_define_flag_if): Don't treat 0 as false.
	Complain if the value does not match empty, "true" or "false".
	* data/c++.m4: Adjust default definitions of %define variables.
	* data/java.m4: Adjust default definitions of %define variables.
	* doc/bison.texinfo (Decl Summary): Adjust the %define entry according
	to above behavior.
	* tests/input.at (Boolean %define variables): Test new behavior.
2007-01-30 08:01:29 +00:00
Paolo Bonzini
8405b70c05 2007-01-29 Paolo Bonzini <bonzini@gnu.org>
* NEWS: Mention java.
	* TODO: Remove things that are done.
	* bootstrap.conf: Add javacomp-script and javaexec-script.
	* configure.ac: Invoke gt_JAVACOMP and gt_JAVAEXEC.

	* data/Makefile.am: Add new files.
	* data/java-skel.m4: New.
	* data/java.m4: New.
	* data/lalr1.java: New.

	* doc/bison.texinfo: Put "A Complete C++ Example" under
	C++ Parsers.  Add Java Parsers.  Put C++ Parsers and Java Parsers
	under Other Languages.

	* src/getargs.c (valid_languages): Add Java.
	* src/getargs.h (struct bison_language): Update size of string fields.

	* tests/Makefile.am: Add java.at.
	* tests/atlocal.in: Add CONF_JAVA and CONF_JAVAC.
	* tests/java.at: New.
	* tests/testsuite.at: Include it.
2007-01-29 10:54:42 +00:00
Paolo Bonzini
592d0b1eb5 2007-01-23 Paolo Bonzini <bonzini@gnu.org>
Simplify implementation of unqualified %code, implement macros for
	uniform treatment of boolean %define flags.  Document %define.
	* data/bison.m4 (b4_percent_define_ifdef, b4_percent_define_flag_if,
	b4_percent_code_ifdef): New.
	(b4_percent_code_get): Map unqualified %code to b4_percent_code().
	* data/c++.m4: Define default value for global_tokens_and_yystype.
	* data/glr.cc: Likewise.
	* data/location.cc: Use b4_percent_define_flag_if.

	* doc/bison.texinfo (Directives): Document %define.

	* src/parse-gram.y (Unqualified %code): Change muscle name to
	b4_percent_code().
	(content.opt): Default to empty.
2007-01-23 12:24:27 +00:00
Joel E. Denny
5f340b4884 Back out previous patch. 2007-01-18 08:32:33 +00:00
Joel E. Denny
d4bdb91677 Implement @gettext<...@> directive to call gettext from skeletons. It
can be used anywhere including inside arguments of directives of the
form @foo(...@).  Eventually, it should be possible to write an
xgettext-like utility to extract @gettext<...@> text from skeletons.
* data/bison.m4 (b4_check_user_names): Use @gettext<...@> when invoking
b4_warn_at since b4_warn_at doesn't invoke gettext anymore.
* data/glr.cc, data/lalr1.cc: Likewise but for b4_fatal and
b4_complain reporting a push-parsing request or a missing %defines.
* src/scan-skel.l (INITIAL): Recognize `@gettext<' to start...
(SC_AT_GETTEXT_ARG): ... this new start condition where gettext is
invoked.
(SC_AT_DIRECTIVE_ARG): Rename to...
(SC_AT_DIRECTIVE_ARGS): ... this, and recognize `@gettext<' to start
SC_AT_GETTEXT_ARG.
(at_directive_perform): Don't invoke gettext for @warn(...@),
@warn_at(...@), etc.  Instead, let the skeletons decide what should be
passed to @gettext<...@>.
* tests/skeletons.at (@gettext<...@>): New test case.

* tests/skeletons.at (installed skeleton file name): Rename to...
(installed skeleton file names): ... this.
2007-01-18 05:14:59 +00:00
Joel E. Denny
279cabb657 * NEWS, data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4,
data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
djgpp/config.site, src/files.c, src/files.h, src/main.c,
src/muscle_tab.c, src/muscle_tab.h, src/parse-gram.y, src/reader.h,
src/scan-skel.h, src/scan-skel.l, tests/actions.at, tests/calc.at,
tests/glr-regression.at, tests/input.at, tests/local.at,
tests/output.at, tests/torture.at: Update copyright to 2007.
2007-01-17 08:36:07 +00:00
Akim Demaille
7cff04b572 * data/lalr1.cc (yy_reduce_print_): Add a missing end-of-line. 2007-01-16 12:27:19 +00:00
Joel E. Denny
a4e25e1dec Clean up %define and %code implementation in M4 some. Most
importantly, rename all related macros to be in the b4_percent_define
and b4_percent_code namespaces.  Also, complete support for `.' in
%define variable names and %code qualifiers.
* data/bison.m4 (b4_check_user_names): Check for special
"SKELETON-NAMESPACE(name)" macros instead of using two nested
m4_foreach loops.
(b4_get_percent_define, b4_get_percent_code): Rename to...
(b4_percent_define_get, b4_percent_code_get): ... these.
Extend documentation with examples.
For SKELETON-NAMESPACE (as documented for b4_check_user_names), use
b4_percent_define_skeleton_variables and
b4_percent_code_skeleton_qualifiers.
Expect any value for the %define variable `foo' to be stored in the
macro named `b4_percent_define(foo)'; expect any %code blocks for the
qualifier `foo' to be stored in a macro named `b4_percent_code(foo)';
expect any unqualified %code blocks to be stored in a macro named
`b4_percent_code_unqualified'.
Use m4_indir so that %define variable names and %code qualifiers can
contain `.', which is allowed by the grammar parser.
(b4_percent_define_default): New macro to set a default value for a
%define variable.
(m4_wrap): Update wrapped code, and fix some underquoting.
(b4_check_user_names_wrap): Update and define outside the m4_wrap.
Expect grammar uses of %define variables and %code qualifiers to be
defined in b4_percent_define_user_variables and
b4_percent_code_user_qualifiers.
* data/c++.m4: Use b4_percent_define_default rather than
m4_define_default.  Fix some underquoting.  Skeleton usage of %define
variable define_location_comparison now implies skeleton usage of
%define variable filename_type.
* data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
data/push.c, data/yacc.c: Update macro names.
* src/parse-gram.y (prologue_declaration, grammar_declaration): Update
muscle names.
2007-01-16 06:16:04 +00:00
Joel E. Denny
78143faa16 Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
locals.  Reported by Juan Manuel Guerrero at
<http://lists.gnu.org/archive/html/bug-bison/2007-01/msg00000.html>.
* data/push.c: Enclose the #ifdef YYSTACK_USE_ALLOCA in b4_push_if.
Fix some indentation also.
* tests/torture.at (Exploding the Stack Size with Alloca): Add comment
explaining this issue.
2007-01-10 00:50:55 +00:00
Joel E. Denny
7ecec4ddf9 Simplify union and prologue handling, and escape union and lex/parse
params with digraphs.
* data/bison.m4 (b4_pre_prologue, b4_post_prologue): Set their default
values to the empty string since these are no longer guaranteed
initialized by the front-end.
* data/glr.c, data/glr.cc, data/lalr1.cc, data/push.c, data/yacc.c: Add
braces around b4_user_stype since this is no longer done by the
front-end.
* src/files.c, src/files.h (pre_prologue_obstack,
post_prologue_obstack): Remove.
* src/muscle_tab.c (muscle_pair_list_grow): Don't duplicate header
comments here.  Use MUSCLE_OBSTACK_SGROW so that values are escaped
with digraphs.  This fixes lex params and parse params.
* src/muscle_tab.h (muscle_pair_list_grow): Update comments.
* src/output.c (prepare): Remove muscle insertion of the prologues.
(output): Remove freeing of pre_prologue_obstack and
post_prologue_obstack.
* src/parse-gram.y (prologue_declaration): Use muscle_code_grow rather
than prologue_augment for prologue parsing so you don't need prologue
obstacks.
(grammar_declaration): Use `braceless' instead of "{...}" so that
braces are already stripped and code is escaped with digraphs.
* src/reader.c (prologue_augment): Remove.
(reader): Remove initialization of pre_prologue_obstack and
post_prologue_obstack.
* src/reader.h (prologue_augment): Remove.

* data/c.m4: Remove stray parenthesis.
2007-01-09 05:24:11 +00:00
Joel E. Denny
6afc30cc87 Instead of having skeletons declare all valid %define variables and
%code qualifiers, provide macros that retrieve the associated values
and build these lists automatically.  Thus Bison will now warn when a
variable or qualifier is not used by the skeleton in the current
invocation regardless of whether it might sometimes be used by that
skeleton in other invocations.  Also, move all %define value macros to
the b4_percent_define_ namespace, and remove the %define "NAME" {CODE}
form, which is replaced by %code.
* data/bison.m4 (b4_check_for_unrecognized_names): Rename to...
(b4_check_user_names): ... this, and change the series of valid name
arguments to a single list argument for names used in the skeleton
similar to the existing list argument for names used in the grammar.
Warn instead of complaining.
(b4_get_percent_define, b4_get_percent_code): New to retrieve %define
values and %code code, to format %code code properly, and to build
lists of all %define variables and %code qualifiers used in the
skeleton: b4_skeleton_percent_define_variables and
b4_skeleton_percent_code_qualifiers.
(b4_check_percent_define_variables, b4_check_percent_code_qualifiers):
Remove, and...
(m4_wrap): ... m4_wrap b4_check_user_names invocations instead so that
the skeleton names lists can finish building first.  In place of
b4_used_percent_define_variables and b4_used_percent_code_qualifiers,
expect the lists b4_user_percent_define_variables and
b4_user_percent_code_qualifiers.
* data/c++.m4: Where setting default values for b4_parser_class_name,
b4_location_type, b4_filename_type, b4_namespace, and
b4_define_location_comparison, update their names to the
b4_percent_define_ namespace.
* data/glr.c: Don't use b4_check_percent_define_variables and
b4_check_percent_code_qualifiers.  Use b4_get_percent_code.
* data/glr.cc, data/lalr1.cc: Likewise, and use b4_get_percent_define.
(b4_parser_class_name, b4_namespace): Define these using
b4_get_percent_define for parser_class_name and namespace.  Normally
this would be a bad idea since there might be cases when the variables
aren't used, but these variables are too pervasive in these skeletons
for that to be a problem.
* data/location.cc: Use b4_get_percent_define.
* data/push.c: Don't use b4_check_percent_define_variables and
b4_check_percent_code_qualifiers.  Use b4_get_percent_code.
* data/yacc.c: Likewise, and don't call m4_exit in
b4_use_push_for_pull_if or m4_wrap code will never execute.
* src/muscle_tab.c, src/muscle_tab.h (muscle_grow_used_name_list):
Rename to...
(muscle_grow_user_name_list): ... this for consistency with the
terminology used in bison.m4.
* src/parse-gram.y (prologue_declaration): Prepend "percent_define_" to
%define variable names, and rename muscle used_percent_define_variables
to user_percent_define_variables.
(grammar_declaration): Rename muscle used_percent_code_qualifiers to
user_percent_code_qualifiers.
(content): Remove.
(content.opt): Replace content RHS with STRING RHS so %define "NAME"
{CODE} form is no longer accepted.
* tests/input.at (Reject bad %code qualifiers): Rename to...
(Reject unused %code qualifiers): ... this, and update test output.
(%define error): Update test output.
2007-01-08 21:38:30 +00:00
Joel E. Denny
7eb8a0bcca Check for unrecognized %define variables similar to checking for
unrecognized %code qualifiers.  Check for redefined %define variables.
* data/bison.m4 (b4_check_for_unrecognized_names): New macro that
generalizes...
(b4_check_percent_code_qualifiers): ... this, which now wraps it.
(b4_check_percent_define_variables): New, also wraps it.
* data/glr.c: Unless glr.cc is wrapping glr.c, declare no valid %define
variables using b4_check_percent_define_variables.
* data/glr.cc, data/lalr1.cc: Declare the valid %define variables as
all those exercised in the test suite and all those listed in the
`Default values' section of c++.m4.  Are there others?
* data/push.c, data/yacc.c: Declare no valid %define variables.
* src/muscle_tab.c, src/muscle_tab.h (muscle_find_const): New function,
similar to muscle_find, but it works even when the muscle stores a
const value.
(muscle_grow_used_name_list): New function for constructing the used
name list muscles that b4_check_for_unrecognized_names requires.
* src/parse-gram.y (prologue_declaration): Warn if a variable is
%define'd more than once.  Define the b4_used_percent_define_variables
muscle with muscle_grow_used_name_list.
(grammar_declaration): Abbreviate %code code with
muscle_grow_used_name_list.
* tests/input.at (%define errors): New.
2007-01-07 07:50:27 +00:00