[Top][All Lists]

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

[PATCH 0/8] provide more control over C++ file names

From: Akim Demaille
Subject: [PATCH 0/8] provide more control over C++ file names
Date: Sat, 6 Oct 2018 18:03:09 +0200

I think I have finally reached a point where I have implemented
everything I had on my mind about the names of the auxiliary files in
C++.  If I had known earlier what a burden it is, I guess I would have
hesitated more...  But I really wanted two C++ parsers to be able to
export and use a single location.hh file.

These patches are quite different from my first proposal, so let's
start a new thread.  But see

I have explained all the details in NEWS, so rather than paraphrasing,
here is the NEWS snippet that says it all.  The tests are included and
work well.  The documentation is yet to write, but NEWS should be a
good starting point.

Comments are most welcome.  I will push this soon to gnu (it's on my
github), but I'm open to later changes.

** Bison 3.2

*** C++: Renaming location.hh

  When both %defines and %locations are enabled, Bison generates a
  location.hh file.  If you don't use locations outside of the parser, you
  may avoid its creation with:

    %define api.location.file none

  However this file is useful if, for instance, your parser builds an AST
  decorated with locations: you may use Bison's location independently of
  Bison's parser.  You can now give it another name, for instance:

    %define api.location.file "my-location.hh"

  This name can have directory components, and even be absolute.  The name
  under which the location file is included is controlled by

  This way it is possible to have several parsers share the same location

  For instance, in src/foo/parser.hh, generate the include/ast/loc.hh file:

    %define api.namespace {foo}
    %define api.location.file "include/ast/loc.hh"
    %define api.location.include {<ast/loc.hh>}

  and use it in src/bar/parser.hh:

    %define api.namespace {bar}
    %code requires {#include <ast/loc.hh>}
    %define api.location.type {bar::location}

  Absolute file names are supported, so in your Makefile, passing the flag
  -Dapi.location.file='"$(top_srcdir)/include/ast/location.hh"' to bison is

*** C++: stack.hh and position.hh are deprecated

  When asked to generate a header file (%defines), the skeleton
  generates a stack.hh file.  This file had no interest for users; it is now
  made useless: its content is included in the parser definition.  It is
  still generated for backward compatibility.

  To stop generating it, use the following directive:

    %define api.stack.file none

  When in addition to %defines, location support is requested (%locations),
  the file position.hh is also generated.  It is now also useless: its
  content is now included in location.hh.

  To stop generating it, use the following directive:

    %define api.position.file none

  Any definition of api.location.file eliminates both position.hh and
  stack.hh (i.e., implies '%define api.position.file none' and '%define
  api.stack.file none').

Akim Demaille (8):
  c++: provide control over the stack.hh file name
  c++: add support for api.position.file and api.location.file
  c++: make stack.hh completely useless
  c++: make position.hh completely useless
  c++: when api.location.file is defined, don't generate stack.hh
  c++: support absolute api.location.file names
  c++: provide a means to control how location.hh is included
  NEWS: document api.*.file changes

 NEWS               | 75 ++++++++++++++++++++++++++++++++++++
 data/bison.m4      | 41 ++++++++++++++++++--
 data/        | 14 ++++---
 data/      | 13 +++----
 data/   | 94 ++++++++++++++++++++++++++++------------------
 data/stack.hh      | 47 +++++++++++------------
 src/scan-skel.l    |  7 ++--
 tests/       | 79 ++++++++++++++++++++++++++++++++++++++
 tests/      |  2 +
 tests/     | 33 ++++++++++++++++
 tests/    | 45 +++++++++++++++++++++-
 tests/ |  2 +-
 12 files changed, 370 insertions(+), 82 deletions(-)


reply via email to

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