bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: POSIX_ME_HARDER (Was: Bison patch for POSIX and Yacc compatibility w


From: Akim Demaille
Subject: Re: POSIX_ME_HARDER (Was: Bison patch for POSIX and Yacc compatibility with %union)
Date: Wed, 15 Jan 2003 09:42:29 +0100
User-agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i386-pc-linux-gnu)

First of all, sorry for my low throughput: I have other tasks I have
to address first.  In the near future, I'll be more present for Bison
and others.

 Paul> Akim Demaille <address@hidden> writes:
 >> I find this patch to be quite hard to understand.  Why did you chose
 >> to allow the identifier at the scanner level?  Why not having accepted
 >> this extension in the grammar instead?

 Paul> Because Yacc and older Bisons accept an arbitrary sequence of C
 Paul> tokens (other than '}' and '{') between '%union' and '{'.  I
 Paul> presumed that one might want something other than a single C
 Paul> token, perhaps if one is generating a parser in Objective C or
 Paul> C++, languages that I don't know in every detail.

I just don't care what says other Yaccs and what POSIX says when they
are plain wrong.  I don't want to introduce gratuitous incompatibilities
between versions of Bison, but when something is useless and becomes a
burden for newer versions *and* adjusting a .y to the new scheme is
easy, then I definitely vote for an incompatible change.

 Paul> That is why I installed a conservative change (i.e., do it the
 Paul> way that Bison used to do it) rather than a small change (i.e.,
 Paul> make the minimal change needed to support that particular
 Paul> grammar).  If we can get experts in C++ and Objective C to sign
 Paul> off on a smaller change, though, that would be better.

This argument does not hold water.  The net result is that the sources
are atrocious, error prone, intricate, while The Right Thing was
elegant and did not hamper new extensions in Bison.

I ask for the reversal of this patch.

I also ask for the reversal of the `;'-ending patch.  POSIX is wrong
when it accepts rules that are not ended.  How can POSIX dare keep
;-less rules when the paper from Johnson, 25 years ago, already
encourages ;-full, while on the other hand they withdraw egrep and
fgrep from the standard?

These people are becoming a problem for Bison.  I urge you to stop
POSIXING_BISON_HARDER.

I also just discovered the following change, that I have not seen on
bison-patches, but maybe I just missed it:

2002-12-09  Paul Eggert  <address@hidden>

        Change identifier spellings to avoid collisions with names
        that are reserved by POSIX.

        Don't use names ending in _t, since POSIX reserves them.
        For consistency, remove _e and _s endings -- they're weren't
        needed to remove ambiguity.  All uses changed.
        * src/uniqstr.h (uniqstr): Renamed from uniqstr_t, which in
        turn was just renamed from struniq_t.
        * src/uniqstr.c (uniqstr_processor): Renamed from struniq_processor,
        which in turn was just renamed from struniq_processor_t.
        (hash_compare_uniqstr): Renamed from hash_compare_struniq, which
        in turn was renamed from hash_compare_struniq_t.
        * src/LR0.c (struct state_list): Renamed from struct state_list_s.
        (state_list): Renamed from state_list_t.
        * src/assoc.h (assoc): Renamed from assoc_t.
        * src/conflicts.c (enum conflict_resolution): Renamed from
        enum conflict_resolution_e.
        * src/derives.c (struct rule_list): Renamed from struct rule_list_s.
        (rule_list): Renamed from rule_list_t.
        * src/getargs.h (enum trace): Renamed from enum trace_e.
        (enum report): Renamed from enum report_e.
        * src/gram.h (item_number): Renamed from item_number_t.
        (rule_number): Renamed from rule_number_t.
        (struct rule_s): Remove the "rule_s" part; not used.
        (rule): Renamed from rule_t.
        (rule_filter): Renamed from rule_filter_t.
        * src/lalr.c (struct goto_list): Renamed from struct goto_list_s.
        (goto_list): Renamed from goto_list_t.
        * src/lalr.h (goto_number): Renamed from goto_number_t.
        * src/location.h (location): Renamed from location_t.
        * src/muscle_tab.c (muscle_entry): Renamed from muscle_entry_t,
        and moved here from:
        * src/muscle_tab.h (muscle_entry_t): here.
        * src/nullable.c (struct rule_list): Renamed from struct rule_list_s.
        (rule_list): Renamed from rule_list_t.
        * src/print_graph.c (static_graph): Renamed from graph.
        * src/reader.h (braced_code): Renamed from braced_code_t.
        Remove brace_code_e tag.
        * src/relation.h (relation_node): Renamed from relation_node_t.
        (relation_nodes): Renamed from relation_nodes_t.
        (relation): Renamed from relation_t.
        * src/state.h (state_number): Renamed from state_number_t.
        (struct state): Renamed from struct state_s.
        (state): Renamed from state_t.
        (transitions): Renamed from transitions_t.  Unused (and
        misspelled) transtion_s tag removed.
        (errs): Renamed from errs_t.  Unused errs_s tag removed.
        (reductions): Renamed from reductions_t.  Unused tag
        reductions_s removed.
        * src/symlist.h (symbol_list): Renamed from symbol_list_t.
        (struct symbol_list): Renamed from struct symbol_list_s.
        * src/symtab.h (symbol_number): Renamed from symbol_number_t.
        (struct symbol): Renamed from struct symbol_s.
        (symbol): Renamed from symbol_t.
        * src/tables.c (vector_number): Renamed from vector_number_t.
        (action_number): Renamed from action_t.
        * src/tables.h (base_number): Renamed from base_t.
        * src/vcg.h (enum color): Renamed from enum color_e.
        (enum textmode): Renamed from enum textmode_e.
        (enum shape): Renamed from enum shape_e.
        (struct colorentry): Renamed from struct colorentry_s.
        (struct classname): Renamed from struct classname_s.
        (struct infoname): Renamed from struct infoname_s.
        (enum layoutalgorithm): Renamed from enum layoutalgorithm_e.
        (enum decision): Renamed from enum decision_e.
        (enum orientation): Renamed from enum orientation_e.
        (enum alignment): Renamed from enum alignment_e.
        (enum arrow_mode): Renamed from enum arrow_mode_e.
        (enum crossing_type): Renamed from enum crossing_type_e.
        (enum view): Renamed from enum view_e.
        (struct node): Renamed from struct node_s.
        (node): Renamed from node_t.
        (enum linestyle): Renamed from enum linestyle_e.
        (enum arrowstyle): Renamed from enum arrowstyle_e.
        (struct edge): Renamed from struct edge.
        (edge): Renamed from edge_t.
        (struct graph): Renamed from struct graph_s.
        (graph): Renamed from graph_t.
        * tests/calc.at (_AT_DATA_CALC_Y, Simple LALR Calculator):
        Rename value_t -> value.
        * tests/input.at (Torturing the Scanner): Rename value_t -> value,
        value_t_as_yystype -> value_as_yystype.

        Don't include <errno.h> in the mainstream code, since it
        reserves E[A-Z0-9]* and we want to use symbols like 'EQUALS'.
        * lib/get-errno.c, lib/get-errno.h: New files.
        * lib/Makefile.am (libbison_a_SOURCES): Add get-errno.h,
        get-errno.c.
        * src/files.c (xfopen, xfclose): Use get_errno instead of errno.
        * src/output.c (output_skeleton): Likewise.
        * src/scan-gram.l (<INITIAL>{int}): Use set_errno and get_errno
        instead of errno.
        (<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>\\x[0-9abcdefABCDEF]+):
        Likewise.
        (handle_action_dollar, handle_action_at): Likewise.
        * src/system.h: Do not include <errno.h>.
        (TAB_EXT): Renamed from EXT_TAB.
        (OUTPUT_EXT): Renamed from EXT_OUTPUT.

        Avoid str[a-z]*, since <string.h> reserves that name space.
        Change all instances of "struniq" in names to "uniqstr", and
        likewise for "STRUNIQ" and "UNIQSTR".
        * src/uniqstr.c: Renamed from src/struniq.c.
        * src/uniqstr.h: Renamed from src/struniq.h.
        * src/Makefile.am (bison_SOURCES): Adjust to these renamings.
        * src/files.c (strsuffix): Remove; unused.
        (concat2): Renamed from stringappend.  Now static.
        * src/files.h (strsuffix, stringappend): Remove; unused.
        * src/parse-gram.y (<chars>): Renamed from <string>.
        (<uniqstr>): Renamed from <struniq>.
        * src/scan-gram.l (obstack_for_string): Renamed from string_obstack.
        * src/vcg.h (struct node_s.expand): Renamed from struct node_s.stretch.
        (struct graph_s.expand): Renamed from struct graph_s.stretch.
        * src/vcg_defaults.h (G_EXPAND): Renamed from G_STRETCH.
        (G_LONG_STRAIGHT_PHASE): Renamed from G_STRAIGHT_PHASE.
        (N_EXPAND): Renamed from N_STRETCH.

        Avoid *_MAX and *_MIN, since <limits.h> reserves that name space.
        * data/yacc.c (YYSTACK_GAP_MAXIMUM): Renamed from YYSTACK_GAP_MAX.
        * src/gram.h (ITEM_NUMBER_MAX, ITEM_NUMBER_MIN, RULE_NUMBER_MAX):
        Remove; unused.
        * src/lalr.h (GOTO_NUMBER_MAXIMUM): Renamed from GOTO_NUMBER_MAX.
        * src/state.h (STATE_NUMBER_MAXIMUM): Renamed from STATE_NUMBER_MAX.
        * src/symtab.h (SYMBOL_NUMBER_MAXIMUM): Renamed from SYMBOL_NUMBER_MAX.
        * src/tables.c (VECTOR_NUMBER_MAX, VECTOR_NUMBER_MIN): Remove; unused.
        (BASE_MAXIMUM): Renamed from BASE_MAX.
        (BASE_MINIMUM): Renamed from BASE_MIN.
        (ACTION_MAX): Remove; unused.
        (ACTION_NUMBER_MINIMUM): Renamed from ACTION_MIN.
        Unnecessary casts removed from above defines.


        Fix misspelling in names.
        * src/vcg.h (enum_alignment_e): Renamed from enum_alignement_e.
        * src/vcg_defaults.h (G_NODE_ALIGNMENT): Renamed from
        G_NODE_ALIGNEMENT.


        * lib/timevar.c (timevar_report): Renamed from time_report,
        for consistency with other names.
        * lib/timevar.h (timevar_report): New decl.
        * src/system.h (time_report): Remove; decl is now in lib/timevar.h.


        Sort include-file uses.

        Reorder all include files under src to be in the order "system.h".
        then the ../lib include files in angle brackets (alphabetized),
        then the . include files in double-quotes (alphabetized).  Fix
        dependency breakages encountered in this process, as follows:
        * src/closure.h, src/derives.h, src/state.h: Include "gram.h".
        * src/complain.c: Don't include stdlib.h, string.h _LIBC stuff.
        * src/state.h: Include "symtab.h".


well, frankly, this patch is incredibly rude.  There were conventions
in the code, clear conventions denoting types vs. vars and funs.  Now
there is nothing.  Just because FU*IX reserved str*, *_t!!!  *If*
someday, some stddef.h defines state_t then I would have adjusted
Bison to compile on this system, just as *if* some C09 introduces the
keyword "state", then I would have renamed all the ids "state" into
something else.  Just a run of sed, that's all.  I know FU*IX reserved
str*, but that's hardly a reason not to use struniq, which is so much
more in the tone of the language.  Actually, we could have decided to
go on with s/(\w+)_t/a_$1/, after discussion.  But that huge smashing
of the ids kills it all.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]