m4_define([b4_parser_class_name],
[b4_percent_define_get([[parser_class_name]])])
-# The header is mandatory.
-b4_defines_if([],
- [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
-
b4_locations_if([b4_percent_define_ifdef([[location_type]], [],
[# Backward compatibility.
m4_define([b4_location_constructors])
m4_define([b4_shared_declarations],
[b4_percent_code_get([[requires]])[
]b4_parse_assert_if([# include <cassert>])[
-# include <stdexcept>
-# include <string>
+# include <deque>
# include <iostream>
+# include <stdexcept>
+# include <string>]b4_defines_if([[
# include "stack.hh"
]b4_locations_if([b4_percent_define_ifdef([[location_type]], [],
- [[# include "location.hh"]])])[
-
-]b4_variant_if([b4_namespace_open
-b4_variant_define
-b4_namespace_close])[
+ [[# include "location.hh"]])])])[
]b4_YYDEBUG_define[
]b4_namespace_open[
+]b4_defines_if([],
+[b4_stack_define
+b4_locations_if([b4_percent_define_ifdef([[location_type]], [],
+ [b4_position_define
+b4_location_define])])])[
+
+]b4_variant_if([b4_variant_define])[
+
/// A Bison parser.
class ]b4_parser_class_name[
{
inline stack_symbol_type ();
/// Constructor.
- inline stack_symbol_type (]b4_args([state_type s],
+ inline stack_symbol_type (]b4_join([state_type s],
[const semantic_type& v],
b4_locations_if([const location_type& l]))[);
# We do want M4 expansion after # for CPP macros.
m4_changecom()
-m4_divert_push(0)dnl
+b4_defines_if(
+[m4_divert_push(0)dnl
@output(b4_spec_defines_file@)@
b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])
[
]b4_cpp_guard_open([b4_spec_defines_file])[
]b4_shared_declarations[
]b4_cpp_guard_close([b4_spec_defines_file])
+m4_divert_pop(0)dnl
+])
+
+
+m4_divert_push(0)dnl
@output(b4_parser_file_name@)@
b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])
b4_percent_code_get([[top]])[]dnl
]b4_null_define[
-#include "@basename(]b4_spec_defines_file[@)"
+]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
+ [b4_shared_declarations])[
/* User implementation prologue. */
]b4_user_post_prologue[
{
}
- ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (]b4_args(
+ ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (]b4_join(
[state_type s],
[const semantic_type& v],
b4_locations_if([const location_type& l]))[)
if (m)
YY_SYMBOL_PRINT (m, sym);
]b4_variant_if(
-[[ yystack_.push (stack_symbol_type (]b4_args(
+[[ yystack_.push (stack_symbol_type (]b4_join(
[s],
[semantic_type()],
b4_locations_if([sym.location]))[));
]b4_symbol_variant([[yystos_[s]]], [[yystack_[0].value]],
[build], [sym.value])],
-[[ yystack_.push (stack_symbol_type (]b4_args(
+[[ yystack_.push (stack_symbol_type (]b4_join(
[s],
[sym.value],
b4_locations_if([sym.location]))[));]])[
if (m)
YY_SYMBOL_PRINT (m, s);
]b4_variant_if(
-[[ yystack_.push (stack_symbol_type (]b4_args(
+[[ yystack_.push (stack_symbol_type (]b4_join(
[s.state],
[semantic_type()],
b4_locations_if([s.location]))[));
if (!yyerrstatus_)
{
++yynerrs_;
- error (]b4_args(b4_locations_if([yyla.location]),
+ error (]b4_join(b4_locations_if([yyla.location]),
[[yysyntax_error_ (yystack_[0].state,
yyempty ? yyempty_ : yyla.type)]])[);
}
void
]b4_parser_class_name[::error (const syntax_error& yyexc)
{
- error (]b4_args(b4_locations_if([yyexc.location]),
+ error (]b4_join(b4_locations_if([yyexc.location]),
[[yyexc.what()]])[);
}