From fc695704a1c2aacb9eefa7734e39f58d6cbe90d4 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 2 Oct 2005 16:34:02 +0000 Subject: [PATCH] * data/location.cc: New, extract from... * data/lalr1.cc: here. (location.hh): Include it after the user prologue, in case the filename type is defined by the user. Forward declation location and position before the pre-prologue. (yyresult_): Rename as... (yyresult): this, it's a local variable, not an attribute. * data/Makefile.am (dist_pkgdata_DATA): Adjust. --- ChangeLog | 13 ++- data/Makefile.am | 2 +- data/lalr1.cc | 245 +++-------------------------------------------- 3 files changed, 27 insertions(+), 233 deletions(-) diff --git a/ChangeLog b/ChangeLog index 118d2a57..396d189a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,15 @@ -2005-10-01 Akim +2005-10-02 Akim Demaille + + * data/location.cc: New, extract from... + * data/lalr1.cc: here. + (location.hh): Include it after the user prologue, in case the + filename type is defined by the user. + Forward declation location and position before the pre-prologue. + (yyresult_): Rename as... + (yyresult): this, it's a local variable, not an attribute. + * data/Makefile.am (dist_pkgdata_DATA): Adjust. + +2005-10-01 Akim Demaille * examples/extexi: Restore the #line generation. diff --git a/data/Makefile.am b/data/Makefile.am index 26e0a001..2d9b033d 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -17,7 +17,7 @@ dist_pkgdata_DATA = README \ c.m4 yacc.c glr.c \ - c++.m4 lalr1.cc + c++.m4 location.cc lalr1.cc m4sugardir = $(pkgdatadir)/m4sugar dist_m4sugar_DATA = m4sugar/m4sugar.m4 diff --git a/data/lalr1.cc b/data/lalr1.cc index fa0e8fac..558d2374 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -20,6 +20,7 @@ m4_divert(-1) # 02110-1301 USA m4_include(b4_pkgdatadir/[c++.m4]) +m4_include(b4_pkgdatadir/[location.cc]) # We do want M4 expansion after # for CPP macros. m4_changecom() @@ -37,10 +38,12 @@ dnl FIXME: I don\'t know why the macros are missing now. :( #include #include #include "stack.hh" -#include "location.hh" -/* Using locations. */ -#define YYLSP_NEEDED ]b4_locations_flag[ +namespace yy +{ + class position; + class location; +} /* First part of user declarations. */ ]b4_pre_prologue[ @@ -48,6 +51,9 @@ dnl FIXME: I don\'t know why the macros are missing now. :( ]/* Line __line__ of lalr1.cc. */ b4_syncline([@oline@], [@ofile@])[ +]dnl Include location.hh here: it might depend on headers included above. +[#include "location.hh" + /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG ]b4_debug[ @@ -506,7 +512,7 @@ yy::]b4_parser_class_name[::parse () /// @@$. location_type yyloc; - int yyresult_; + int yyresult; YYCDEBUG << "Starting parse" << std::endl; @@ -765,12 +771,12 @@ yyerrlab1: /* Accept. */ yyacceptlab: - yyresult_ = 0; + yyresult = 0; goto yyreturn; /* Abort. */ yyabortlab: - yyresult_ = 1; + yyresult = 1; goto yyreturn; yyreturn: @@ -786,7 +792,7 @@ yyreturn: yypop_ (); } - return yyresult_; + return yyresult; } // Generate an error message. @@ -1107,227 +1113,4 @@ namespace yy } #endif // not BISON_STACK_HH] -dnl -@output position.hh -b4_copyright([Position class for Bison C++ parsers], [2002, 2003, 2004, 2005])[ - -/** - ** \file position.hh - ** Define the position class. - */ - -#ifndef BISON_POSITION_HH -# define BISON_POSITION_HH - -# include -# include - -namespace yy -{ - /// Abstract a position. - class position - { - public: - /// Initial column number. - static const unsigned int initial_column = 0; - /// Initial line number. - static const unsigned int initial_line = 1; - - /** \name Ctor & dtor. - ** \{ */ - public: - /// Construct a position. - position () : - filename (0), - line (initial_line), - column (initial_column) - { - } - /** \} */ - - - /** \name Line and Column related manipulators - ** \{ */ - public: - /// (line related) Advance to the COUNT next lines. - inline void lines (int count = 1) - { - column = initial_column; - line += count; - } - - /// (column related) Advance to the COUNT next columns. - inline void columns (int count = 1) - { - int leftmost = initial_column; - int current = column; - if (leftmost <= current + count) - column += count; - else - column = initial_column; - } - /** \} */ - - public: - /// File name to which this position refers. - ]b4_filename_type[* filename; - /// Current line number. - unsigned int line; - /// Current column number. - unsigned int column; - }; - - /// Add and assign a position. - inline const position& - operator+= (position& res, const int width) - { - res.columns (width); - return res; - } - - /// Add two position objects. - inline const position - operator+ (const position& begin, const int width) - { - position res = begin; - return res += width; - } - - /// Add and assign a position. - inline const position& - operator-= (position& res, const int width) - { - return res += -width; - } - - /// Add two position objects. - inline const position - operator- (const position& begin, const int width) - { - return begin + -width; - } - - /** \brief Intercept output stream redirection. - ** \param ostr the destination output stream - ** \param pos a reference to the position to redirect - */ - inline std::ostream& - operator<< (std::ostream& ostr, const position& pos) - { - if (pos.filename) - ostr << *pos.filename << ':'; - return ostr << pos.line << '.' << pos.column; - } - -} -#endif // not BISON_POSITION_HH] -@output location.hh -b4_copyright([Location class for Bison C++ parsers], [2002, 2003, 2004, 2005])[ - -/** - ** \file location.hh - ** Define the location class. - */ - -#ifndef BISON_LOCATION_HH -# define BISON_LOCATION_HH - -# include -# include -# include "position.hh" - -namespace yy -{ - - /// Abstract a location. - class location - { - /** \name Ctor & dtor. - ** \{ */ - public: - /// Construct a location. - location () : - begin (), - end () - { - } - /** \} */ - - - /** \name Line and Column related manipulators - ** \{ */ - public: - /// Reset initial location to final location. - inline void step () - { - begin = end; - } - - /// Extend the current location to the COUNT next columns. - inline void columns (unsigned int count = 1) - { - end += count; - } - - /// Extend the current location to the COUNT next lines. - inline void lines (unsigned int count = 1) - { - end.lines (count); - } - /** \} */ - - - public: - /// Beginning of the located region. - position begin; - /// End of the located region. - position end; - }; - - /// Join two location objects to create a location. - inline const location operator+ (const location& begin, const location& end) - { - location res = begin; - res.end = end.end; - return res; - } - - /// Add two location objects. - inline const location operator+ (const location& begin, unsigned int width) - { - location res = begin; - res.columns (width); - return res; - } - - /// Add and assign a location. - inline location& operator+= (location& res, unsigned int width) - { - res.columns (width); - return res; - } - - /** \brief Intercept output stream redirection. - ** \param ostr the destination output stream - ** \param loc a reference to the location to redirect - ** - ** Avoid duplicate information. - */ - inline std::ostream& operator<< (std::ostream& ostr, const location& loc) - { - position last = loc.end - 1; - ostr << loc.begin; - if (last.filename - && (!loc.begin.filename - || *loc.begin.filename != *last.filename)) - ostr << '-' << last; - else if (loc.begin.line != last.line) - ostr << '-' << last.line << '.' << last.column; - else if (loc.begin.column != last.column) - ostr << '-' << last.column; - return ostr; - } - -} - -#endif // not BISON_LOCATION_HH] +m4_divert(-1) -- 2.45.2