X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/aef3da86899c5f2cd4eed728b63bd82413106a43..cbd50549099fd3c84814e608025dcd2c3ccf0aaa:/data/lalr1.cc diff --git a/data/lalr1.cc b/data/lalr1.cc index 73734281..63712265 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -1,8 +1,7 @@ -m4_divert(-1) - # C++ skeleton for Bison -# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, +# Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,9 +20,14 @@ m4_divert(-1) m4_include(b4_pkgdatadir/[c++.m4]) +m4_define([b4_parser_class_name], + [b4_percent_define_get([[parser_class_name]])]) +m4_define([b4_namespace], + [b4_percent_define_get([[namespace]])]) + # The header is mandatory. b4_defines_if([], - [m4_fatal(b4_skeleton[: using %defines is mandatory])]) + [b4_fatal([b4_skeleton[: using %%defines is mandatory]])]) # Backward compatibility. m4_define([b4_location_constructors]) @@ -31,9 +35,9 @@ m4_include(b4_pkgdatadir/[location.cc]) # We do want M4 expansion after # for CPP macros. m4_changecom() -m4_divert(0)dnl +m4_divert_push(0)dnl b4_defines_if( -[@output @output_header_name@ +[@output(b4_spec_defines_file@) b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++], [2002, 2003, 2004, 2005, 2006]) dnl FIXME: This is wrong, we want computed header guards. @@ -43,9 +47,7 @@ dnl FIXME: This is wrong, we want computed header guards. #ifndef PARSER_HEADER_H # define PARSER_HEADER_H -]m4_ifdef([b4_start_header], -[[/* Copy the %start-header blocks. */ -]b4_user_start_header])[ +]b4_percent_code_get([[requires]])[ #include #include @@ -107,8 +109,9 @@ namespace ]b4_namespace[ #ifndef YYSTYPE ]m4_ifdef([b4_stype], [ union semantic_type + { b4_user_stype - ;], + };], [m4_if(b4_tag_seen_flag, 0, [[ typedef int semantic_type;]], [[ typedef YYSTYPE semantic_type;]])])[ @@ -116,7 +119,7 @@ b4_user_stype typedef YYSTYPE semantic_type; #endif /// Symbol locations. - typedef ]b4_location_type[ location_type; + typedef ]b4_percent_define_get([[location_type]])[ location_type; /// Tokens. struct token { @@ -172,7 +175,7 @@ b4_error_verbose_if([, int tok])[); virtual void yy_symbol_print_ (int yytype, const semantic_type* yyvaluep, const location_type* yylocationp); -#endif /* ! YYDEBUG */ +#endif /// State numbers. @@ -249,6 +252,10 @@ b4_error_verbose_if([, int tok])[); virtual void yy_reduce_print_ (int r); /// Print the state stack on the debug stream. virtual void yystack_print_ (); + + /* Debugging. */ + int yydebug_; + std::ostream* yycdebug_; #endif /// Convert a scanner token number \a t to a symbol number. @@ -279,16 +286,11 @@ b4_error_verbose_if([, int tok])[); static const int yyntokens_; static const unsigned int yyuser_token_number_max_; static const token_number_type yyundef_token_; - - /* Debugging. */ - int yydebug_; - std::ostream* yycdebug_; - ]b4_parse_param_vars[ }; } -]m4_ifset([b4_global_tokens_and_yystype], +]b4_percent_define_flag_if([[global_tokens_and_yystype]], [b4_token_defines(b4_tokens) #ifndef YYSTYPE @@ -296,30 +298,30 @@ b4_error_verbose_if([, int tok])[); # define YYSTYPE b4_namespace::b4_parser_class_name::semantic_type #endif ]) -m4_ifdef([b4_end_header], -[[/* Copy the %end-header blocks. */ -]b4_end_header])[]dnl +b4_percent_code_get([[provides]])[]dnl [#endif /* ! defined PARSER_HEADER_H */] ])dnl -@output @output_parser_name@ +@output(b4_parser_file_name@) b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++], [2002, 2003, 2004, 2005, 2006]) +b4_percent_code_get([[top]])[]dnl m4_if(b4_prefix, [yy], [], [ // Take the name prefix into account. #define yylex b4_prefix[]lex])[ /* First part of user declarations. */ -]b4_pre_prologue +]b4_user_pre_prologue -b4_defines_if([ -#include @output_header_name@])[ +b4_defines_if([[ +#include "@basename(]b4_spec_defines_file[@)"]])[ /* User implementation prologue. */ -]b4_user_post_prologue[ +]b4_user_post_prologue +b4_percent_code_get[]dnl -#ifndef YY_ +[#ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* FIXME: INFRINGES ON USER NAME SPACE */ @@ -334,12 +336,12 @@ b4_defines_if([ /* Suppress unused-variable warnings by "using" E. */ #define YYUSE(e) ((void) (e)) -/* A pseudo ostream that takes yydebug_ into account. */ -# define YYCDEBUG if (yydebug_) (*yycdebug_) - /* Enable debugging if requested. */ #if YYDEBUG +/* A pseudo ostream that takes yydebug_ into account. */ +# define YYCDEBUG if (yydebug_) (*yycdebug_) + # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug_) \ @@ -364,6 +366,7 @@ do { \ #else /* !YYDEBUG */ +# define YYCDEBUG if (false) std::cerr # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_REDUCE_PRINT(Rule) # define YY_STACK_PRINT() @@ -418,9 +421,12 @@ namespace ]b4_namespace[ #endif /// Build a parser object. - ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[) - : yydebug_ (false), - yycdebug_ (&std::cerr)]b4_parse_param_cons[ + ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [ + :])[ +#if YYDEBUG + ]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false), + yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[ +#endif]b4_parse_param_cons[ { } @@ -458,7 +464,7 @@ namespace ]b4_namespace[ yy_symbol_value_print_ (yytype, yyvaluep, yylocationp); *yycdebug_ << ')'; } -#endif /* ! YYDEBUG */ +#endif void ]b4_parser_class_name[::yydestruct_ (const char* yymsg, @@ -486,6 +492,7 @@ namespace ]b4_namespace[ yylocation_stack_.pop (n); } +#if YYDEBUG std::ostream& ]b4_parser_class_name[::debug_stream () const { @@ -510,7 +517,7 @@ namespace ]b4_namespace[ { yydebug_ = l; } - +#endif int ]b4_parser_class_name[::parse () @@ -1006,7 +1013,7 @@ b4_error_verbose_if([, int tok])[) int yynrhs = yyr2_[yyrule]; /* Print the symbols being reduced, and their result. */ *yycdebug_ << "Reducing stack by rule " << yyrule - 1 - << " (line " << yylno << "), "; + << " (line " << yylno << "):" << std::endl; /* The symbols being reduced. */ for (int yyi = 0; yyi < yynrhs; yyi++) YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", @@ -1048,7 +1055,7 @@ b4_error_verbose_if([, int tok])[) ]b4_epilogue dnl -@output b4_dir_prefix[]stack.hh +@output(b4_dir_prefix[]stack.hh@) b4_copyright([Stack handling for Bison parsers in C++], [2002, 2003, 2004, 2005, 2006])[ @@ -1147,4 +1154,4 @@ namespace ]b4_namespace[ } #endif // not BISON_STACK_HH] -m4_divert(-1) +m4_divert_pop(0)