bison-patches
[Top][All Lists]
Advanced

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

doc: simplify the extraction of example snippets


From: Akim Demaille
Subject: doc: simplify the extraction of example snippets
Date: Sun, 6 Sep 2020 13:15:23 +0200

commit 0d8407440c6514795e1fc055062002b731c5f209
Author: Akim Demaille <akim.demaille@gmail.com>
Date:   Sat Sep 5 09:15:41 2020 +0200

    doc: simplify the extraction of example snippets
    
    * doc/bison.texi: Use qualified paths.
    * examples/extexi: Comment changes.

diff --git a/doc/bison.texi b/doc/bison.texi
index f9aaf343..82ec5b95 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -1659,7 +1659,7 @@ calculator.  As in C, comments are placed between 
@samp{/*@dots{}*/} or
 after @samp{//}.
 
 @ignore
-@comment file: rpcalc.y
+@comment file: c/rpcalc/rpcalc.y
 @example
 /* Parser for rpcalc.   -*- C -*-
 
@@ -1683,7 +1683,7 @@ after @samp{//}.
 @end example
 @end ignore
 
-@comment file: rpcalc.y
+@comment file: c/rpcalc/rpcalc.y
 @example
 /* Reverse Polish Notation calculator. */
 
@@ -1737,7 +1737,7 @@ declared is @code{NUM}, the token kind for numeric 
constants.
 
 Here are the grammar rules for the Reverse Polish Notation calculator.
 
-@comment file: rpcalc.y
+@comment file: c/rpcalc/rpcalc.y
 @example
 @group
 input:
@@ -1957,7 +1957,7 @@ A token kind code of zero is returned if the end-of-input 
is encountered.
 
 Here is the code for the lexical analyzer:
 
-@comment file: rpcalc.y
+@comment file: c/rpcalc/rpcalc.y
 @example
 @group
 /* The lexical analyzer returns a double floating point
@@ -2008,7 +2008,7 @@ In keeping with the spirit of this example, the 
controlling function is
 kept to the bare minimum.  The only requirement is that it call
 @code{yyparse} to start the process of parsing.
 
-@comment file: rpcalc.y
+@comment file: c/rpcalc/rpcalc.y
 @example
 @group
 int
@@ -2029,7 +2029,7 @@ always @code{"syntax error"}).  It is up to the 
programmer to supply
 @code{yyerror} (@pxref{Interface}), so
 here is the definition we will use:
 
-@comment file: rpcalc.y
+@comment file: c/rpcalc/rpcalc.y
 @example
 #include <stdio.h>
 
@@ -2545,7 +2545,7 @@ Note that multiple assignment and nested function calls 
are permitted.
 Here are the C and Bison declarations for the multi-function calculator.
 
 @ignore
-@comment file: mfcalc.y
+@comment file: c/mfcalc/mfcalc.y
 @example
 /* Parser for mfcalc.   -*- C -*-
 
@@ -2569,7 +2569,7 @@ Here are the C and Bison declarations for the 
multi-function calculator.
 @end example
 @end ignore
 
-@comment file: mfcalc.y: 1
+@comment file: c/mfcalc/mfcalc.y: 1
 @example
 @group
 %@{
@@ -2623,7 +2623,7 @@ Here are the grammar rules for the multi-function 
calculator.
 Most of them are copied directly from @code{calc}; three rules,
 those which mention @code{VAR} or @code{FUN}, are new.
 
-@comment file: mfcalc.y: 3
+@comment file: c/mfcalc/mfcalc.y: 3
 @example
 %% /* The grammar follows. */
 @group
@@ -2674,7 +2674,7 @@ definition, which is kept in the header @file{calc.h}, is 
as follows.  It
 provides for either functions or variables to be placed in the table.
 
 @ignore
-@comment file: calc.h
+@comment file: c/mfcalc/calc.h
 @example
 /* Functions for mfcalc.   -*- C -*-
 
@@ -2698,7 +2698,7 @@ provides for either functions or variables to be placed 
in the table.
 @end example
 @end ignore
 
-@comment file: calc.h
+@comment file: c/mfcalc/calc.h
 @example
 @group
 /* Function type. */
@@ -2734,7 +2734,7 @@ symrec *getsym (char const *name);
 The new version of @code{main} will call @code{init_table} to initialize
 the symbol table:
 
-@comment file: mfcalc.y: 3
+@comment file: c/mfcalc/mfcalc.y: 3
 @example
 @group
 struct init
@@ -2788,7 +2788,7 @@ linked to the front of the list, and a pointer to the 
object is returned.
 The function @code{getsym} is passed the name of the symbol to look up.  If
 found, a pointer to that symbol is returned; otherwise zero is returned.
 
-@comment file: mfcalc.y: 3
+@comment file: c/mfcalc/mfcalc.y: 3
 @example
 @group
 /* The mfcalc code assumes that malloc and realloc
@@ -2844,7 +2844,7 @@ returned to @code{yyparse}.
 No change is needed in the handling of numeric values and arithmetic
 operators in @code{yylex}.
 
-@comment file: mfcalc.y: 3
+@comment file: c/mfcalc/mfcalc.y: 3
 @example
 #include <ctype.h>
 #include <stddef.h>
@@ -2879,7 +2879,7 @@ yylex (void)
 Bison generated a definition of @code{YYSTYPE} with a member named
 @code{NUM} to store value of @code{NUM} symbols.
 
-@comment file: mfcalc.y: 3
+@comment file: c/mfcalc/mfcalc.y: 3
 @example
 @group
   /* Char starts an identifier => read the name. */
@@ -2932,7 +2932,7 @@ The error reporting function is unchanged, and the new 
version of
 @code{main} includes a call to @code{init_table} and sets the @code{yydebug}
 on user demand (@xref{Tracing}, for details):
 
-@comment file: mfcalc.y: 3
+@comment file: c/mfcalc/mfcalc.y: 3
 @example
 @group
 /* Called by yyparse on error. */
@@ -10954,7 +10954,7 @@ calculator, @code{mfcalc} (@pxref{Multi-function 
Calc}).  To enable run-time
 traces, and semantic value reports, insert the following directives in its
 prologue:
 
-@comment file: mfcalc.y: 2
+@comment file: c/mfcalc/mfcalc.y: 2
 @example
 /* Generate the parser description file. */
 %verbose
@@ -13079,7 +13079,7 @@ The first part includes the CPP guard and imports the 
required standard
 library components, and the declaration of the parser class.
 
 @ignore
-@comment file: calc++/driver.hh
+@comment file: c++/calc++/driver.hh
 @example
 /* Driver for calc++.   -*- C++ -*-
 
@@ -13102,7 +13102,7 @@ library components, and the declaration of the parser 
class.
 @end example
 @end ignore
 
-@comment file: calc++/driver.hh
+@comment file: c++/calc++/driver.hh
 @example
 #ifndef DRIVER_HH
 # define DRIVER_HH
@@ -13117,7 +13117,7 @@ Then comes the declaration of the scanning function.  
Flex expects 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.
 
-@comment file: calc++/driver.hh
+@comment file: c++/calc++/driver.hh
 @example
 // Give Flex the prototype of yylex we want ...
 # define YY_DECL \
@@ -13129,7 +13129,7 @@ YY_DECL;
 @noindent
 The @code{driver} class is then declared with its most obvious members.
 
-@comment file: calc++/driver.hh
+@comment file: c++/calc++/driver.hh
 @example
 // Conducting the whole scanning and parsing of Calc++.
 class driver
@@ -13145,7 +13145,7 @@ public:
 @noindent
 The main routine is of course calling the parser.
 
-@comment file: calc++/driver.hh
+@comment file: c++/calc++/driver.hh
 @example
   // Run the parser on file F.  Return 0 on success.
   int parse (const std::string& f);
@@ -13159,7 +13159,7 @@ The main routine is of course calling the parser.
 To encapsulate the coordination with the Flex scanner, it is useful to have
 member functions to open and close the scanning phase.
 
-@comment file: calc++/driver.hh
+@comment file: c++/calc++/driver.hh
 @example
   // Handling the scanner.
   void scan_begin ();
@@ -13175,7 +13175,7 @@ member functions to open and close the scanning phase.
 The implementation of the driver (@file{driver.cc}) is straightforward.
 
 @ignore
-@comment file: calc++/driver.cc
+@comment file: c++/calc++/driver.cc
 @example
 /* Driver for calc++.   -*- C++ -*-
 
@@ -13198,7 +13198,7 @@ The implementation of the driver (@file{driver.cc}) is 
straightforward.
 @end example
 @end ignore
 
-@comment file: calc++/driver.cc
+@comment file: c++/calc++/driver.cc
 @example
 #include "driver.hh"
 #include "parser.hh"
@@ -13215,7 +13215,7 @@ driver::driver ()
 
 The @code{parse} member function deserves some attention.
 
-@comment file: calc++/driver.cc
+@comment file: c++/calc++/driver.cc
 @example
 @group
 int
@@ -13242,7 +13242,7 @@ skeleton changed several times, it is safer to require 
the version you
 designed the grammar for.
 
 @ignore
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 /* Parser for calc++.   -*- C++ -*-
 
@@ -13265,7 +13265,7 @@ designed the grammar for.
 @end example
 @end ignore
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %skeleton "lalr1.cc" // -*- C++ -*-
 %require "@value{VERSION}"
@@ -13277,7 +13277,7 @@ designed the grammar for.
 Because our scanner returns only genuine tokens and never simple characters
 (i.e., it returns @samp{PLUS}, not @samp{'+'}), we can avoid conversions.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %define api.token.raw
 @end example
@@ -13291,7 +13291,7 @@ properly use it, we enable assertions.  To fully 
benefit from type-safety
 and more natural definition of ``symbol'', we enable
 @code{api.token.constructor}.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %define api.token.constructor
 %define api.value.type variant
@@ -13308,7 +13308,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}.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 @group
 %code requires @{
@@ -13323,7 +13323,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.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 // The parsing context.
 %param @{ driver& drv @}
@@ -13332,7 +13332,7 @@ global variables.
 @noindent
 Then we request location tracking.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %locations
 @end example
@@ -13342,7 +13342,7 @@ Use the following two directives to enable parser 
tracing and detailed error
 messages.  However, detailed error messages can contain incorrect
 information if lookahead correction is not enabled (@pxref{LAC}).
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %define parse.trace
 %define parse.error detailed
@@ -13354,7 +13354,7 @@ information if lookahead correction is not enabled 
(@pxref{LAC}).
 The code between @samp{%code @{} and @samp{@}} is output in the @file{*.cc}
 file; it needs detailed knowledge about the driver.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 @group
 %code @{
@@ -13369,7 +13369,7 @@ User friendly names are provided for each symbol.  To 
avoid name clashes in
 the generated files (@pxref{Calc++ Scanner}), prefix tokens with @code{TOK_}
 (@pxref{%define Summary}).
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %define api.token.prefix @{TOK_@}
 %token
@@ -13388,7 +13388,7 @@ Since we use variant-based semantic values, 
@code{%union} is not used, and
 @code{%token}, @code{%nterm} and @code{%type} expect genuine types, not type
 tags.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %token <std::string> IDENTIFIER "identifier"
 %token <int> NUMBER "number"
@@ -13401,7 +13401,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}).
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %printer @{ yyo << $$; @} <*>;
 @end example
@@ -13409,7 +13409,7 @@ regular destructors.  All the values are printed using 
their
 @noindent
 The grammar itself is straightforward (@pxref{Location Tracking Calc}).
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 %%
 %start unit;
@@ -13438,7 +13438,7 @@ exp:
 @noindent
 Finally the @code{error} member function reports the errors.
 
-@comment file: calc++/parser.yy
+@comment file: c++/calc++/parser.yy
 @example
 void
 yy::parser::error (const location_type& l, const std::string& m)
@@ -13454,7 +13454,7 @@ In addition to standard headers, the Flex scanner 
includes the driver's,
 then the parser's to get the set of defined tokens.
 
 @ignore
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 /* Scanner for calc++.   -*- C++ -*-
 
@@ -13477,7 +13477,7 @@ then the parser's to get the set of defined tokens.
 @end example
 @end ignore
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 %@{ /* -*- C++ -*- */
 # include <cerrno>
@@ -13491,7 +13491,7 @@ then the parser's to get the set of defined tokens.
 @end example
 
 @ignore
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 %@{
 #if defined __clang__
@@ -13564,7 +13564,7 @@ Since our calculator has no @code{#include}-like 
feature, we don't need
 either, and we parse an actual file, this is not an interactive session with
 the user.  Finally, we enable scanner tracing.
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 %option noyywrap nounput noinput batch debug
 @end example
@@ -13573,7 +13573,7 @@ the user.  Finally, we enable scanner tracing.
 The following function will be handy to convert a string denoting a number
 into a @code{NUMBER} token.
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 %@{
   // A number symbol corresponding to the value in S.
@@ -13585,7 +13585,7 @@ into a @code{NUMBER} token.
 @noindent
 Abbreviations allow for more readable rules.
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 id    [a-zA-Z][a-zA-Z_0-9]*
 int   [0-9]+
@@ -13600,7 +13600,7 @@ matching ends of lines, the end 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.
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 @group
 %@{
@@ -13624,7 +13624,7 @@ the blanks preceding tokens.  Comments would be treated 
equally.
 @noindent
 The rules are simple.  The driver is used to report errors.
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 "-"        return yy::parser::make_MINUS  (loc);
 "+"        return yy::parser::make_PLUS   (loc);
@@ -13650,7 +13650,7 @@ The rules are simple.  The driver is used to report 
errors.
 You should keep your rules simple, both in the parser and in the scanner.
 Throwing from the auxiliary functions is then very handy to report errors.
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 @group
 yy::parser::symbol_type
@@ -13669,7 +13669,7 @@ make_NUMBER (const std::string &s, const 
yy::parser::location_type& loc)
 Finally, because the scanner-related driver's member-functions depend
 on the scanner's data, it is simpler to implement them in this file.
 
-@comment file: calc++/scanner.ll
+@comment file: c++/calc++/scanner.ll
 @example
 @group
 void
@@ -13701,7 +13701,7 @@ driver::scan_end ()
 The top level file, @file{calc++.cc}, poses no problem.
 
 @ignore
-@comment file: calc++/calc++.cc
+@comment file: c++/calc++/calc++.cc
 @example
 /* Main for calc++.   -*- C++ -*-
 
@@ -13724,7 +13724,7 @@ The top level file, @file{calc++.cc}, poses no problem.
 @end example
 @end ignore
 
-@comment file: calc++/calc++.cc
+@comment file: c++/calc++/calc++.cc
 @example
 #include <iostream>
 #include "driver.hh"
diff --git a/examples/extexi b/examples/extexi
index 948a9234..5e6ce13d 100755
--- a/examples/extexi
+++ b/examples/extexi
@@ -23,21 +23,21 @@
 
 # Look for @example environments preceded with lines such as:
 #
-#      @comment file calc.y
+#      @comment file c/mfcalc/calc.y
 # or
-#      @comment file calc.y: 3
+#      @comment file c/mfcalc/calc.y: 3
 #
-# and output their content in that file (calc.y).  When numbers are
-# provided, use them to decide the output order (block numbered 1 is
-# output before block 2, even if the latter appears before).  The same
-# number may be used several time, in which case the order of
+# and output their content in that file (c/mfcalc/calc.y).  When
+# numbers are provided, use them to decide the output order (block 1
+# is output before block 2, even if the latter appears before).  The
+# same number may be used several time, in which case the order of
 # appearance is used.
 #
 # Use @ignore for code to extract that must not be part of the
 # documentation.  For instance:
 #
 #      @ignore
-#      @comment file: calc++/scanner.ll
+#      @comment file: c++/calc++/scanner.ll
 #      @example
 #      // Work around an incompatibility in Flex.
 #      # undef yywrap
@@ -87,7 +87,9 @@ sub message($)
 # The list of files we should extract.
 my @file_wanted;
 
-# Whether we should extract that file, and then under which path.
+# Whether we should extract that file, and then under which path.  We
+# check if the prefix matches.  So for instance if "foo/bar.y" is
+# wanted (i.e., in @FILE_WANTED), "file: bar.y" matches.
 sub file_wanted ($)
 {
   my ($f) = @_;




reply via email to

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