[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: master: examples: calc++: make sure the file name in location is set,
Akim Demaille <=