m4_changecom()
m4_divert(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.
#ifndef PARSER_HEADER_H
# define PARSER_HEADER_H
+]m4_ifdef([b4_requires],
+[[/* Copy the %requires blocks. */
+]b4_user_requires])[
+
#include <string>
#include <iostream>
#include "stack.hh"
class location;
}
-]m4_ifdef([b4_start_header],
-[[/* Copy the %start-header blocks. */
-]b4_user_start_header])[
-
-]dnl Include location.hh here: it might depend on headers included above.
-[#include "location.hh"
+#include "location.hh"
/* Enabling traces. */
#ifndef YYDEBUG
virtual void yy_symbol_print_ (int yytype,
const semantic_type* yyvaluep,
const location_type* yylocationp);
-#endif /* ! YYDEBUG */
+#endif
/// State numbers.
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.
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[
};
}
# 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
+m4_ifdef([b4_provides],
+[[/* Copy the %provides blocks. */
+]b4_user_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])
m4_if(b4_prefix, [yy], [],
#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[
/* 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_) \
#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()
#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[
{
}
yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
*yycdebug_ << ')';
}
-#endif /* ! YYDEBUG */
+#endif
void
]b4_parser_class_name[::yydestruct_ (const char* yymsg,
yylocation_stack_.pop (n);
}
+#if YYDEBUG
std::ostream&
]b4_parser_class_name[::debug_stream () const
{
{
yydebug_ = l;
}
-
+#endif
int
]b4_parser_class_name[::parse ()
/* If the proper action on seeing token YYTOKEN is to reduce or to
detect an error, take that action. */
yyn += yytoken;
- if (yyn < 0 || yylast_ < yyn
- || (]b4_safest_int_type[)yycheck_[yyn] != yytoken)
+ if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
goto yydefault;
/* Reduce or error. */
yyn = yyr1_[yyn];
yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
if (0 <= yystate && yystate <= yylast_
- && (]b4_safest_int_type[)yycheck_[yystate] == yystate_stack_[0])
+ && yycheck_[yystate] == yystate_stack_[0])
yystate = yytable_[yystate];
else
yystate = yydefgoto_[yyn - yyntokens_];
if (yyn != yypact_ninf_)
{
yyn += yyterror_;
- if (0 <= yyn && yyn <= yylast_
- && (]b4_safest_int_type[)yycheck_[yyn] == yyterror_)
+ if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
{
yyn = yytable_[yyn];
if (0 < yyn)
int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
int count = 0;
for (int x = yyxbegin; x < yyxend; ++x)
- if ((]b4_safest_int_type[)yycheck_[x + yyn] == x && x != yyterror_)
+ if (yycheck_[x + yyn] == x && x != yyterror_)
++count;
// FIXME: This method of building the message is not compatible
{
count = 0;
for (int x = yyxbegin; x < yyxend; ++x)
- if ((]b4_safest_int_type[)yycheck_[x + yyn] == x
- && x != yyterror_)
+ if (yycheck_[x + yyn] == x && x != yyterror_)
{
res += (!count++) ? ", expecting " : " or ";
res += yytnamerr_ (yytname_[x]);