X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/d4fb5e3cb9116c90ba5afa7ca272df89bbc4e32a..b50d2359d7608270561abd5c3cbf6e84834c2019:/data/lalr1.cc diff --git a/data/lalr1.cc b/data/lalr1.cc index 83342119..c00de055 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() @@ -27,17 +28,16 @@ m4_divert(0)dnl m4_if(b4_defines_flag, 0, [], [@output @output_header_name@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison], - [2002, 2003, 2004, 2005])[ -/* FIXME: This is wrong, we want computed header guards. - I don't know why the macros are missing now. :( */ + [2002, 2003, 2004, 2005]) +dnl FIXME: This is wrong, we want computed header guards. +dnl FIXME: I don\'t know why the macros are missing now. :( +[ #ifndef PARSER_HEADER_H # define PARSER_HEADER_H #include #include - -/* Using locations. */ -#define YYLSP_NEEDED ]b4_locations_flag[ +#include "stack.hh" namespace yy { @@ -45,16 +45,14 @@ namespace yy class location; } -]b4_token_enums(b4_tokens)[ - -/* Copy the first part of user declarations. */ +/* First part of user declarations. */ ]b4_pre_prologue[ ]/* Line __line__ of lalr1.cc. */ b4_syncline([@oline@], [@ofile@])[ -#include "stack.hh" -#include "location.hh" +]dnl Include location.hh here: it might depend on headers included above. +[#include "location.hh" /* Enabling traces. */ #ifndef YYDEBUG @@ -74,23 +72,6 @@ b4_syncline([@oline@], [@ofile@])[ # define YYTOKEN_TABLE ]b4_token_table[ #endif -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -]m4_ifdef([b4_stype], -[b4_syncline([b4_stype_line], [b4_file_name]) -union YYSTYPE b4_stype; -/* Line __line__ of lalr1.cc. */ -b4_syncline([@oline@], [@ofile@])], -[typedef int YYSTYPE;])[ -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -/* Copy the second part of user declarations. */ -]b4_post_prologue[ - -]/* Line __line__ of lalr1.cc. */ -b4_syncline([@oline@], [@ofile@])[ /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ @@ -116,12 +97,26 @@ namespace yy /// A Bison parser. class ]b4_parser_class_name[ { + public: /// Symbol semantic values. +#if ! defined (YYSTYPE) +]m4_ifdef([b4_stype], +[b4_syncline([b4_stype_line], [b4_file_name]) + union semantic_type b4_stype; +/* Line __line__ of lalr1.cc. */ +b4_syncline([@oline@], [@ofile@])], +[ typedef int semantic_type;])[ +#else typedef YYSTYPE semantic_type; +#endif /// Symbol locations. typedef ]b4_location_type[ location_type; + /// Tokens. + struct token + { + ]b4_token_enums(b4_tokens)[ + }; - public: /// Build a parser object. ]b4_parser_class_name[ (]b4_parse_param_decl[) : yydebug_ (false), @@ -285,6 +280,14 @@ b4_error_verbose_if([, int tok])[); }; } +]m4_ifset([b4_global_tokens_and_yystype], +[b4_token_defines(b4_tokens) + +#ifndef YYSTYPE + /* Redirection for backward compatibility. */ +# define YYSTYPE yy::b4_parser_class_name::semantic_type +#endif +])[ #endif /* ! defined PARSER_HEADER_H */] ])dnl @output @output_parser_name@ @@ -298,6 +301,12 @@ m4_if(b4_defines_flag, 0, [], [ #include @output_header_name@])[ +/* User implementation prologue. */ +]b4_post_prologue[ + +]/* Line __line__ of lalr1.cc. */ +b4_syncline([@oline@], [@ofile@])[ + #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS @@ -503,7 +512,7 @@ yy::]b4_parser_class_name[::parse () /// @@$. location_type yyloc; - int yyresult_; + int yyresult; YYCDEBUG << "Starting parse" << std::endl; @@ -762,12 +771,12 @@ yyerrlab1: /* Accept. */ yyacceptlab: - yyresult_ = 0; + yyresult = 0; goto yyreturn; /* Abort. */ yyabortlab: - yyresult_ = 1; + yyresult = 1; goto yyreturn; yyreturn: @@ -783,13 +792,13 @@ yyreturn: yypop_ (); } - return yyresult_; + return yyresult; } // Generate an error message. std::string -yy::]b4_parser_class_name[:: -yysyntax_error_ (int yystate]b4_error_verbose_if([, int tok])[) +yy::]b4_parser_class_name[::yysyntax_error_ (int yystate]dnl +b4_error_verbose_if([, int tok])[) { std::string res; #if YYERROR_VERBOSE @@ -1006,7 +1015,7 @@ const yy::]b4_parser_class_name[::token_number_type yy::]b4_parser_class_name[:: ]b4_epilogue dnl -@output stack.hh +@output b4_dir_prefix[]stack.hh b4_copyright([stack handling for Bison C++ parsers], [2002, 2003, 2004, 2005])[ #ifndef BISON_STACK_HH @@ -1104,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)