bison-patches
[Top][All Lists]
Advanced

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

FYI: master: examples: calc++: make sure the file name in location is se


From: Akim Demaille
Subject: FYI: master: examples: calc++: make sure the file name in location is set
Date: Fri, 24 Aug 2018 19:26:23 +0200

Installed in master.

commit 1a968edcb847fef1029f2850d688a4f915d19252
Author: Akim Demaille <address@hidden>
Date:   Fri Aug 24 09:02:37 2018 +0200

    examples: calc++: make sure the file name in location is set
    
    Reported by Hans Ã…berg.
    http://lists.gnu.org/archive/html/bug-bison/2018-08/msg00039.html
    
    * doc/bison.texi (A Complete C++ Example): Move the token's location
    from the scanner to the driver.

diff --git a/doc/bison.texi b/doc/bison.texi
index 88c337f2..8896fb77 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -11164,7 +11164,10 @@ member functions to open and close the scanning phase.
   // Handling the scanner.
   void scan_begin ();
   void scan_end ();
+  // Whether to generate scanner debug traces.
   bool trace_scanning;
+  // The token's location used by the scanner.
+  yy::location location;
 @end example
 
 @noindent
@@ -11176,7 +11179,6 @@ Similarly for the parser itself.
   // Return 0 on success.
   int parse (const std::string& f);
   // The name of the file being parsed.
-  // Used later to pass the file name to the location tracker.
   std::string file;
   // Whether parser traces should be generated.
   bool trace_parsing;
@@ -11219,6 +11221,7 @@ int
 driver::parse (const std::string &f)
 @{
   file = f;
+  location.initialize (&file);
   scan_begin ();
   yy::parser parser (*this);
   parser.set_debug_level (trace_parsing);
@@ -11302,19 +11305,11 @@ global variables.
 @end example
 
 @noindent
-Then we request location tracking, and initialize the
-first location's file name.  Afterward new locations are computed
-relatively to the previous locations: the file name will be
-propagated.
+Then we request location tracking.
 
 @comment file: calc++/parser.yy
 @example
 %locations
-%initial-action
address@hidden
-  // Initialize the initial location.
-  @@$.begin.filename = @@$.end.filename = &drv.file;
address@hidden;
 @end example
 
 @noindent
@@ -11457,9 +11452,6 @@ parser's to get the set of defined tokens.
 #if defined __GNUC__ && 7 <= __GNUC__
 # pragma GCC diagnostic ignored "-Wnull-dereference"
 #endif
-
-// The location of the current token.
-static yy::location loc;
 address@hidden
 @end example
 
@@ -11504,6 +11496,8 @@ preceding tokens.  Comments would be treated equally.
 %%
 @group
 address@hidden
+  // A handy shortcut to the location held by the driver.
+  yy::location& loc = drv.location;
   // Code run each time yylex is called.
   loc.step ();
 address@hidden




reply via email to

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