bison-patches
[Top][All Lists]
Advanced

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

FYI: master: examples: shorten the name of the calc++ files


From: Akim Demaille
Subject: FYI: master: examples: shorten the name of the calc++ files
Date: Thu, 23 Aug 2018 13:37:39 +0200

I’m installing this, so that the directory of the example
is nicer to browse.

commit db8345289d92bc43865fdd3fe91cc5bfb8a96329
Author: Akim Demaille <address@hidden>
Date:   Thu Aug 23 08:42:00 2018 +0200

    examples: shorten the name of the calc++ files
    
    * doc/bison.texi: Turn the calc++- prefix into calc++/.
    * examples/extexi (%file_wanted): Replace with
    (&file_wanted): this.
    * examples/calc++/local.mk: Adjust.

diff --git a/doc/bison.texi b/doc/bison.texi
index 9eff2886..14389147 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -11113,18 +11113,17 @@ the file for parsing, instantiate the parser etc.), 
we recommend
 transforming the simple parsing context structure into a fully blown
 @dfn{parsing driver} class.
 
-The declaration of this driver class, @file{calc++-driver.hh}, is as
-follows.  The first part includes the CPP guard and imports the
-required standard library components, and the declaration of the parser
-class.
+The declaration of this driver class, in @file{driver.hh}, is as follows.  The
+first part includes the CPP guard and imports the required standard library
+components, and the declaration of the parser class.
 
address@hidden file: calc++-driver.hh
address@hidden file: calc++/driver.hh
 @example
-#ifndef CALCXX_DRIVER_HH
-# define CALCXX_DRIVER_HH
+#ifndef DRIVER_HH
+# define DRIVER_HH
 # include <string>
 # include <map>
-# include "calc++-parser.hh"
+# include "parser.hh"
 @end example
 
 
@@ -11134,7 +11133,7 @@ the signature of @code{yylex} to be defined in the macro
 @code{YY_DECL}, and the C++ parser expects it to be declared.  We can
 factor both as follows.
 
address@hidden file: calc++-driver.hh
address@hidden file: calc++/driver.hh
 @example
 // Tell Flex the lexer's prototype ...
 # define YY_DECL \
@@ -11147,7 +11146,7 @@ YY_DECL;
 The @code{calcxx_driver} class is then declared with its most obvious
 members.
 
address@hidden file: calc++-driver.hh
address@hidden file: calc++/driver.hh
 @example
 // Conducting the whole scanning and parsing of Calc++.
 class calcxx_driver
@@ -11165,7 +11164,7 @@ public:
 To encapsulate the coordination with the Flex scanner, it is useful to have
 member functions to open and close the scanning phase.
 
address@hidden file: calc++-driver.hh
address@hidden file: calc++/driver.hh
 @example
   // Handling the scanner.
   void scan_begin ();
@@ -11176,7 +11175,7 @@ member functions to open and close the scanning phase.
 @noindent
 Similarly for the parser itself.
 
address@hidden file: calc++-driver.hh
address@hidden file: calc++/driver.hh
 @example
   // Run the parser on file F.
   // Return 0 on success.
@@ -11194,13 +11193,13 @@ dumping them on the standard error output, we will 
pass them to the
 compiler driver using the following two member functions.  Finally, we
 close the class declaration and CPP guard.
 
address@hidden file: calc++-driver.hh
address@hidden file: calc++/driver.hh
 @example
   // Error handling.
   void error (const yy::location& l, const std::string& m);
   void error (const std::string& m);
 @};
-#endif // ! CALCXX_DRIVER_HH
+#endif // ! DRIVER_HH
 @end example
 
 The implementation of the driver is straightforward.  The @code{parse}
@@ -11208,10 +11207,10 @@ member function deserves some attention.  The 
@code{error} functions
 are simple stubs, they should actually register the located error
 messages and set error state.
 
address@hidden file: calc++-driver.cc
address@hidden file: calc++/driver.cc
 @example
-#include "calc++-driver.hh"
-#include "calc++-parser.hh"
+#include "driver.hh"
+#include "parser.hh"
 
 calcxx_driver::calcxx_driver ()
   : trace_scanning (false), trace_parsing (false)
@@ -11252,13 +11251,12 @@ calcxx_driver::error (const std::string& m)
 @node Calc++ Parser
 @subsubsection Calc++ Parser
 
-The grammar file @file{calc++-parser.yy} starts by asking for the C++
-deterministic parser skeleton, the creation of the parser header file,
-and specifies the name of the parser class.  Because the C++ skeleton
-changed several times, it is safer to require the version you designed
-the grammar for.
+The grammar file @file{parser.yy} starts by asking for the C++ deterministic
+parser skeleton, the creation of the parser header file, and specifies the
+name of the parser class.  Because the C++ skeleton changed several times,
+it is safer to require the version you designed the grammar for.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %skeleton "lalr1.cc" /* -*- C++ -*- */
 %require "@value{VERSION}"
@@ -11274,7 +11272,7 @@ require the variant-based interface.  To make sure we 
properly use it, we
 enable assertions.  To fully benefit from type-safety and more natural
 definition of ``symbol'', we enable @code{api.token.constructor}.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %define api.token.constructor
 %define api.value.type variant
@@ -11291,7 +11289,7 @@ driver's header needs detailed knowledge about the 
parser class (in
 particular its inner types), it is the parser's header which will use a
 forward declaration of the driver.  @xref{%code Summary}.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %code requires
 @{
@@ -11305,7 +11303,7 @@ The driver is passed by reference to the parser and to 
the scanner.
 This provides a simple but effective pure interface, not relying on
 global variables.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 // The parsing context.
 %param @{ calcxx_driver& driver @}
@@ -11317,7 +11315,7 @@ first location's file name.  Afterward new locations 
are computed
 relatively to the previous locations: the file name will be
 propagated.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %locations
 %initial-action
@@ -11332,7 +11330,7 @@ Use the following two directives to enable parser 
tracing and verbose error
 messages.  However, verbose error messages can contain incorrect information
 (@pxref{LAC}).
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %define parse.trace
 %define parse.error verbose
@@ -11343,11 +11341,11 @@ messages.  However, verbose error messages can 
contain incorrect information
 The code between @samp{%code @{} and @address@hidden is output in the
 @file{*.cc} file; it needs detailed knowledge about the driver.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %code
 @{
-# include "calc++-driver.hh"
+# include "driver.hh"
 @}
 @end example
 
@@ -11359,7 +11357,7 @@ allows for nicer error messages referring to ``end of 
file'' instead of
 avoid name clashes in the generated files (@pxref{Calc++ Scanner}), prefix
 tokens with @code{TOK_} (@pxref{%define Summary,,api.token.prefix}).
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %define api.token.prefix @address@hidden
 %token
@@ -11379,7 +11377,7 @@ Since we use variant-based semantic values, 
@code{%union} is not used, and
 both @code{%type} and @code{%token} expect genuine types, as opposed to type
 tags.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %token <std::string> IDENTIFIER "identifier"
 %token <int> NUMBER "number"
@@ -11392,7 +11390,7 @@ recovery; the memory, for strings for instance, will be 
reclaimed by the
 regular destructors.  All the values are printed using their
 @code{operator<<} (@pxref{Printer Decl, , Printing Semantic Values}).
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %printer @{ yyoutput << $$; @} <*>;
 @end example
@@ -11401,7 +11399,7 @@ regular destructors.  All the values are printed using 
their
 The grammar itself is straightforward (@pxref{Location Tracking Calc, ,
 Location Tracking Calculator - @code{ltcalc}}).
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 %%
 %start unit;
@@ -11431,7 +11429,7 @@ exp:
 Finally the @code{error} member function registers the errors to the
 driver.
 
address@hidden file: calc++-parser.yy
address@hidden file: calc++/parser.yy
 @example
 void
 yy::calcxx_parser::error (const location_type& l,
@@ -11447,15 +11445,15 @@ yy::calcxx_parser::error (const location_type& l,
 The Flex scanner first includes the driver declaration, then the
 parser's to get the set of defined tokens.
 
address@hidden file: calc++-scanner.ll
address@hidden file: calc++/scanner.ll
 @example
 address@hidden /* -*- C++ -*- */
 # include <cerrno>
 # include <climits>
 # include <cstdlib>
 # include <string>
-# include "calc++-driver.hh"
-# include "calc++-parser.hh"
+# include "driver.hh"
+# include "parser.hh"
 
 // Work around an incompatibility in flex (at least versions
 // 2.5.31 through 2.5.33): it generates code that does
@@ -11481,7 +11479,7 @@ Because there is no @code{#include}-like feature we 
don't need
 actual file, this is not an interactive session with the user.
 Finally, we enable scanner tracing.
 
address@hidden file: calc++-scanner.ll
address@hidden file: calc++/scanner.ll
 @example
 %option noyywrap nounput batch debug noinput
 @end example
@@ -11489,7 +11487,7 @@ Finally, we enable scanner tracing.
 @noindent
 Abbreviations allow for more readable rules.
 
address@hidden file: calc++-scanner.ll
address@hidden file: calc++/scanner.ll
 @example
 id    [a-zA-Z][a-zA-Z_0-9]*
 int   [0-9]+
@@ -11505,7 +11503,7 @@ cursor is adjusted, and each time blanks are matched, 
the begin cursor
 is moved onto the end cursor to effectively ignore the blanks
 preceding tokens.  Comments would be treated equally.
 
address@hidden file: calc++-scanner.ll
address@hidden file: calc++/scanner.ll
 @example
 @group
 address@hidden
@@ -11527,7 +11525,7 @@ preceding tokens.  Comments would be treated equally.
 @noindent
 The rules are simple.  The driver is used to report errors.
 
address@hidden file: calc++-scanner.ll
address@hidden file: calc++/scanner.ll
 @example
 "-"      return yy::calcxx_parser::make_MINUS  (loc);
 "+"      return yy::calcxx_parser::make_PLUS   (loc);
@@ -11556,7 +11554,7 @@ The rules are simple.  The driver is used to report 
errors.
 Finally, because the scanner-related driver's member-functions depend
 on the scanner's data, it is simpler to implement them in this file.
 
address@hidden file: calc++-scanner.ll
address@hidden file: calc++/scanner.ll
 @example
 @group
 void
@@ -11590,7 +11588,7 @@ The top level file, @file{calc++.cc}, poses no problem.
 @comment file: calc++.cc
 @example
 #include <iostream>
-#include "calc++-driver.hh"
+#include "driver.hh"
 
 @group
 int
diff --git a/examples/calc++/.gitignore b/examples/calc++/.gitignore
index 50eb5ba1..9c74fd08 100644
--- a/examples/calc++/.gitignore
+++ b/examples/calc++/.gitignore
@@ -2,18 +2,18 @@
 /*.tmp
 /.deps
 /calc++
-/calc++-driver.cc
-/calc++-driver.hh
-/calc++-parser.cc
-/calc++-parser.hh
-/calc++-parser.output
-/calc++-parser.stamp
-/calc++-parser.yy
-/calc++-scanner.cc
-/calc++-scanner.ll
 /calc++.cc
 /calc++.exe
 /calc.stamp
+/driver.cc
+/driver.hh
 /location.hh
+/parser.cc
+/parser.hh
+/parser.output
+/parser.stamp
+/parser.yy
 /position.hh
+/scanner.cc
+/scanner.ll
 /stack.hh
diff --git a/examples/calc++/local.mk b/examples/calc++/local.mk
index 53c6834b..06c1ed67 100644
--- a/examples/calc++/local.mk
+++ b/examples/calc++/local.mk
@@ -20,7 +20,7 @@
 
 # Don't depend on $(BISON) otherwise we would rebuild these files
 # in srcdir, including during distcheck, which is forbidden.
-%D%/calc++-parser.stamp: $(BISON_IN)
+%D%/parser.stamp: $(BISON_IN)
 SUFFIXES += .yy .stamp
 .yy.stamp:
        $(AM_V_YACC)rm -f $@
@@ -28,14 +28,14 @@ SUFFIXES += .yy .stamp
        $(AM_V_at)$(YACCCOMPILE) -o $*.cc $<
        $(AM_V_at)mv -f address@hidden $@
 
-$(calcxx_sources_generated): %D%/calc++-parser.stamp
-       @test -f $@ || rm -f %D%/calc++-parser.stamp
-       @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) %D%/calc++-parser.stamp
-CLEANFILES +=                                   \
-  $(calcxx_sources_generated)                   \
-  %D%/calc++-parser.output                      \
-  %D%/calc++-parser.stamp                       \
-  %D%/calc++-scanner.cc
+$(calcxx_sources_generated): %D%/parser.stamp
+       @test -f $@ || rm -f %D%/parser.stamp
+       @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) %D%/parser.stamp
+CLEANFILES +=                                  \
+  $(calcxx_sources_generated)                  \
+  %D%/parser.output                            \
+  %D%/parser.stamp                             \
+  %D%/scanner.cc
 
 
 ## -------------------- ##
@@ -45,18 +45,18 @@ CLEANFILES +=                                   \
 # Avoid using BUILT_SOURCES which is too global.
 $(%C%_calc___OBJECTS): $(calcxx_sources_generated)
 
-calcxx_sources_extracted =                      \
-  %D%/calc++-driver.cc                          \
-  %D%/calc++-driver.hh                          \
-  %D%/calc++-scanner.ll                         \
+calcxx_sources_extracted =                     \
+  %D%/driver.cc                                        \
+  %D%/driver.hh                                        \
+  %D%/scanner.ll                               \
   %D%/calc++.cc
 calcxx_extracted =                              \
   $(calcxx_sources_extracted)                   \
-  %D%/calc++-parser.yy
+  %D%/parser.yy
 extracted += $(calcxx_extracted)
 calcxx_sources_generated =                      \
-  %D%/calc++-parser.cc                          \
-  %D%/calc++-parser.hh                          \
+  %D%/parser.cc                                 \
+  %D%/parser.hh                                 \
   %D%/location.hh                               \
   %D%/position.hh                               \
   %D%/stack.hh
diff --git a/examples/calc++/y.tab.h b/examples/calc++/y.tab.h
deleted file mode 100644
index 798b670e..00000000
--- a/examples/calc++/y.tab.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// Work around an Automake 1.11.2 bug: it asks for the creation of
-// y.tab.c and y.tab.h and then renames them as calc++-parser.cc and
-// calc++-parser.h, but in the former it does not convert the
-// #include "y.tab.h".  We don't want this to show in the
-// documentation.
-#include "calc++-parser.hh"
diff --git a/examples/extexi b/examples/extexi
index 95c6c395..f7157c07 100755
--- a/examples/extexi
+++ b/examples/extexi
@@ -65,8 +65,21 @@ sub message($)
     }
 }
 
-# basename => full file name for files we should extract.
-my %file_wanted;
+# The list of files we should extract.
+my @file_wanted;
+
+# Whether we should extract that file, and then under which path.
+sub file_wanted ($)
+{
+  my ($f) = @_;
+  for my $file (@file_wanted)
+    {
+      # No endswith in Perl 5...
+      return $file if $f eq substr($file, -length($f));
+    }
+  undef
+}
+
 
 sub process ($)
 {
@@ -89,9 +102,9 @@ sub process ($)
         {
           my $f = $1;
           $block = $2 || 1;
-          if ($file_wanted{$f})
+          if (file_wanted($f))
             {
-              $file = $file_wanted{$f};
+              $file = file_wanted($f);
               message(" GEN $file");
             }
           else
@@ -142,8 +155,7 @@ for my $arg (@ARGV)
 {
   if ($seen_dash)
     {
-      use File::Basename;
-      $file_wanted{basename($arg)} = $arg;
+      push @file_wanted, $arg;
     }
   elsif ($arg eq '--')
     {




reply via email to

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