]> git.saurik.com Git - bison.git/blob - data/lalr1.cc
c3ea4e2679f75c32934914d686e855ae9e206a5a
[bison.git] / data / lalr1.cc
1 # C++ skeleton for Bison
2
3 # Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 # Free Software Foundation, Inc.
5
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
19 m4_include(b4_pkgdatadir/[c++.m4])
20
21
22 # b4_integral_parser_table_declare(TABLE-NAME, CONTENT, COMMENT)
23 # --------------------------------------------------------------
24 # Declare "parser::yy<TABLE-NAME>_" which contents is CONTENT.
25 m4_define([b4_integral_parser_table_declare],
26 [m4_ifval([$3], [b4_c_comment([$3], [ ])
27 ])dnl
28 static const b4_int_type_for([$2]) yy$1_[[]];dnl
29 ])
30
31 # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
32 # ---------------------------------------------
33 # Define "parser::yy<TABLE-NAME>_" which contents is CONTENT.
34 m4_define([b4_integral_parser_table_define],
35 [ const b4_int_type_for([$2])
36 b4_parser_class_name::yy$1_[[]] =
37 {
38 $2
39 };dnl
40 ])
41
42
43 # b4_symbol_value_template(VAL, [TYPE])
44 # -------------------------------------
45 # Same as b4_symbol_value, but used in a template method.
46 m4_copy([b4_symbol_value], [b4_symbol_value_template])
47
48 # How the semantic value is extracted when using variants.
49 b4_variant_if([
50 # b4_symbol_value(VAL, [TYPE])
51 # ----------------------------
52 m4_define([b4_symbol_value],
53 [m4_ifval([$2],
54 [$1.as< $2 >()],
55 [$1])])
56
57 # b4_symbol_value_template(VAL, [TYPE])
58 # -------------------------------------
59 # Same as b4_symbol_value, but used in a template method.
60 m4_define([b4_symbol_value_template],
61 [m4_ifval([$2],
62 [$1.template as< $2 >()],
63 [$1])])
64 ]) # b4_variant_if
65
66
67 # b4_lex_symbol_if([IF-YYLEX-RETURNS-A-COMPLETE-SYMBOL], [IF-NOT])
68 # ----------------------------------------------------------------
69 m4_define([b4_lex_symbol_if],
70 [b4_percent_define_ifdef([[lex_symbol]], [$1], [$2])])
71
72
73 # b4_assert_if([IF-ASSERTIONS-ARE-USED], [IF-NOT])
74 # ------------------------------------------------
75 m4_define([b4_assert_if],
76 [b4_percent_define_ifdef([[assert]], [$1], [$2])])
77
78
79 # b4_lhs_value([TYPE])
80 # --------------------
81 # Expansion of $<TYPE>$.
82 m4_define([b4_lhs_value],
83 [b4_symbol_value([yylhs.value], [$1])])
84
85
86 # b4_lhs_location()
87 # -----------------
88 # Expansion of @$.
89 m4_define([b4_lhs_location],
90 [yylhs.location])
91
92
93 # b4_rhs_data(RULE-LENGTH, NUM)
94 # -----------------------------
95 # Return the data corresponding to the symbol #NUM, where the current
96 # rule has RULE-LENGTH symbols on RHS.
97 m4_define([b4_rhs_data],
98 [yystack_@{b4_subtract($@)@}])
99
100
101 # b4_rhs_state(RULE-LENGTH, NUM)
102 # ------------------------------
103 # The state corresponding to the symbol #NUM, where the current
104 # rule has RULE-LENGTH symbols on RHS.
105 m4_define([b4_rhs_state],
106 [b4_rhs_data([$1], [$2]).state])
107
108
109 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
110 # --------------------------------------
111 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
112 # symbols on RHS.
113 m4_define([b4_rhs_value],
114 [b4_symbol_value([b4_rhs_data([$1], [$2]).value], [$3])])
115
116
117 # b4_rhs_location(RULE-LENGTH, NUM)
118 # ---------------------------------
119 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
120 # on RHS.
121 m4_define([b4_rhs_location],
122 [b4_rhs_data([$1], [$2]).location])
123
124 # b4_symbol_action(SYMBOL-NUM, KIND)
125 # ----------------------------------
126 # Run the action KIND (destructor or printer) for SYMBOL-NUM.
127 # Same as in C, but using references instead of pointers.
128 m4_define([b4_symbol_action],
129 [b4_symbol_if([$1], [has_$2],
130 [m4_pushdef([b4_dollar_dollar],
131 [b4_symbol_value_template([yysym.value],
132 b4_symbol_if([$1], [has_type],
133 [b4_symbol([$1], [type])]))])dnl
134 m4_pushdef([b4_at_dollar], [yysym.location])dnl
135 b4_symbol_case_([$1])
136 b4_syncline([b4_symbol([$1], [$2_line])], ["b4_symbol([$1], [$2_file])"])
137 b4_symbol([$1], [$2])
138 b4_syncline([@oline@], [@ofile@])
139 break;
140
141 m4_popdef([b4_at_dollar])dnl
142 m4_popdef([b4_dollar_dollar])dnl
143 ])])
144
145 # b4_symbol_constructor_declaration_(SYMBOL-NUMBER)
146 # -------------------------------------------------
147 # Declare the overloaded version of make_symbol for the (common) type of
148 # these SYMBOL-NUMBERS. Use at class-level.
149 m4_define([b4_symbol_constructor_declaration_],
150 [b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id],
151 [ static inline
152 symbol_type
153 make_[]b4_symbol_([$1], [id]) (dnl
154 b4_args(b4_symbol_if([$1], [has_type],
155 [const b4_symbol([$1], [type])& v]),
156 b4_locations_if([const location_type& l])));
157
158 ])])])
159
160
161 # b4_symbol_constructor_declarations
162 # ----------------------------------
163 # Declare symbol constructors for all the value types.
164 # Use at class-level.
165 m4_define([b4_symbol_constructor_declarations],
166 [b4_variant_if([
167 // Symbol constructors declarations.
168 b4_symbol_foreach([b4_symbol_constructor_declaration_])])])
169
170
171
172 # b4_symbol_constructor_definition_(SYMBOL-NUMBER)
173 # ------------------------------------------------
174 # Define symbol constructor for this SYMBOL-NUMBER.
175 m4_define([b4_symbol_constructor_definition_],
176 [b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id],
177 [ b4_parser_class_name::symbol_type
178 b4_parser_class_name::make_[]b4_symbol_([$1], [id]) (dnl
179 b4_args(b4_symbol_if([$1], [has_type],
180 [const b4_symbol([$1], [type])& v]),
181 b4_locations_if([const location_type& l])))
182 {
183 return symbol_type (b4_args([yytranslate_ (token::b4_symbol([$1], [id]))],
184 b4_symbol_if([$1], [has_type], [v]),
185 b4_locations_if([l])));
186 }
187
188 ])])])
189
190
191 # b4_symbol_constructor_definitions
192 # ----------------------------------
193 # Define the overloaded versions of make_symbol for all the value types.
194 m4_define([b4_symbol_constructor_definitions],
195 [[ // symbol_base_type.
196 template <typename Exact>
197 ]b4_parser_class_name[::symbol_base_type<Exact>::symbol_base_type ()
198 : value()]b4_locations_if([
199 , location()])[
200 {
201 }]b4_locations_if([[
202
203 template <typename Exact>
204 ]b4_parser_class_name[::symbol_base_type<Exact>::symbol_base_type (const location_type& l)
205 : value()
206 , location(l)
207 {
208 }]])[
209
210 template <typename Exact>
211 ]b4_parser_class_name[::symbol_base_type<Exact>::symbol_base_type (]b4_args(
212 [const semantic_type& v],
213 b4_locations_if([const location_type& l]))[)
214 : value(v)]b4_locations_if([
215 , location(l)])[
216 {
217 }
218
219 template <typename Exact>
220 const Exact&
221 ]b4_parser_class_name[::symbol_base_type<Exact>::self () const
222 {
223 return static_cast<const Exact&>(*this);
224 }
225
226 template <typename Exact>
227 Exact&
228 ]b4_parser_class_name[::symbol_base_type<Exact>::self ()
229 {
230 return static_cast<Exact&>(*this);
231 }
232
233 template <typename Exact>
234 int
235 ]b4_parser_class_name[::symbol_base_type<Exact>::type_get () const
236 {
237 return self ().type_get_ ();
238 }
239
240 // symbol_type.
241 ]b4_parser_class_name[::symbol_type::symbol_type ()
242 : super_type ()
243 , type ()
244 {
245 }
246
247 ]b4_parser_class_name[::symbol_type::symbol_type (]b4_args(
248 [int t],
249 b4_locations_if([const location_type& l]))[)
250 : super_type (]b4_locations_if([l])[)
251 , type (t)
252 {
253 }
254
255 ]b4_parser_class_name[::symbol_type::symbol_type (]b4_args(
256 [int t],
257 [const semantic_type& v],
258 b4_locations_if([const location_type& l]))[)
259 : super_type (v]b4_locations_if([, l])[)
260 , type (t)
261 {
262 }
263
264 int
265 ]b4_parser_class_name[::symbol_type::type_get_ () const
266 {
267 return type;
268 }
269 ]b4_lex_symbol_if([[
270 ]b4_parser_class_name[::token_type
271 ]b4_parser_class_name[::symbol_type::token () const
272 {
273 // YYTOKNUM[NUM] -- (External) token number corresponding to the
274 // (internal) symbol number NUM (which must be that of a token). */
275 static
276 const ]b4_int_type_for([b4_toknum])[
277 yytoken_number_[] =
278 {
279 ]b4_toknum[
280 };
281 return static_cast<token_type> (yytoken_number_[type]);
282 }
283 ]])[
284
285 ]b4_variant_if(
286 [ // Implementation of make_symbol for each symbol type.
287 b4_symbol_foreach([b4_symbol_constructor_definition_])])])
288
289
290 # b4_symbol_variant(YYTYPE, YYVAL, ACTION, [ARGS])
291 # ------------------------------------------------
292 # Run some ACTION ("build", or "destroy") on YYVAL of symbol type
293 # YYTYPE.
294 m4_define([b4_symbol_variant],
295 [m4_pushdef([b4_dollar_dollar],
296 [$2.$3< $][3 >(m4_shift3($@))])dnl
297 switch ($1)
298 {
299 b4_type_foreach([b4_type_action_])[]dnl
300 default:
301 break;
302 }
303 m4_popdef([b4_dollar_dollar])dnl
304 ])
305
306
307 # _b4_char_sizeof_counter
308 # -----------------------
309 # A counter used by _b4_char_sizeof_dummy to create fresh symbols.
310 m4_define([_b4_char_sizeof_counter],
311 [0])
312
313 # _b4_char_sizeof_dummy
314 # ---------------------
315 # At each call return a new C++ identifier.
316 m4_define([_b4_char_sizeof_dummy],
317 [m4_define([_b4_char_sizeof_counter], m4_incr(_b4_char_sizeof_counter))dnl
318 dummy[]_b4_char_sizeof_counter])
319
320
321 # b4_char_sizeof_(SYMBOL-NUM)
322 # ---------------------------
323 # A comment describing this symbol.
324 m4_define([b4_char_sizeof_],
325 [ // b4_symbol([$1], [tag])
326 ])
327
328 # b4_char_sizeof(SYMBOL-NUMS)
329 # --------------------------
330 # To be mapped on the list of type names to produce:
331 #
332 # char dummy1[sizeof(type_name_1)];
333 # char dummy2[sizeof(type_name_2)];
334 #
335 # for defined type names.
336 m4_define([b4_char_sizeof],
337 [b4_symbol_if([$1], [has_type],
338 [
339 m4_map([b4_char_sizeof_], [$@])dnl
340 char _b4_char_sizeof_dummy@{sizeof([b4_symbol([$1], [type])])@};
341 ])])
342
343
344 # b4_yytranslate_definition
345 # -------------------------
346 # Define yytranslate_. Sometimes we want it in the header file,
347 # sometimes the cc file suffices.
348 m4_define([b4_yytranslate_definition],
349 [[ // Symbol number corresponding to token number t.
350 ]b4_parser_class_name[::token_number_type
351 ]b4_parser_class_name[::yytranslate_ (]b4_lex_symbol_if([token_type],
352 [int])[ t)
353 {
354 static
355 const token_number_type
356 translate_table[] =
357 {
358 ]b4_translate[
359 };
360 const unsigned int user_token_number_max_ = ]b4_user_token_number_max[;
361 const token_number_type undef_token_ = ]b4_undef_token_number[;
362
363 if (static_cast<int>(t) <= yyeof_)
364 return yyeof_;
365 else if (static_cast<unsigned int> (t) <= user_token_number_max_)
366 return translate_table[t];
367 else
368 return undef_token_;
369 }
370 ]])
371
372
373 m4_pushdef([b4_copyright_years],
374 [2002, 2003, 2004, 2005, 2006, 2007, 2008])
375
376 m4_define([b4_parser_class_name],
377 [b4_percent_define_get([[parser_class_name]])])
378
379 # The header is mandatory.
380 b4_defines_if([],
381 [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
382
383 b4_locations_if(
384 [# Backward compatibility.
385 m4_define([b4_location_constructors])
386 m4_include(b4_pkgdatadir/[location.cc])])
387 m4_include(b4_pkgdatadir/[stack.hh])
388
389 # We do want M4 expansion after # for CPP macros.
390 m4_changecom()
391 m4_divert_push(0)dnl
392 @output(b4_spec_defines_file@)@
393 b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])
394 dnl FIXME: This is wrong, we want computed header guards.
395 [
396 /* C++ LALR(1) parser skeleton written by Akim Demaille. */
397
398 #ifndef PARSER_HEADER_H
399 # define PARSER_HEADER_H
400
401 ]b4_percent_code_get([[requires]])[
402
403 ]b4_assert_if([#include <cassert>])[
404 #include <string>
405 #include <iostream>
406 #include "stack.hh"
407
408 ]b4_namespace_open[
409 ]b4_locations_if([ class position;
410 class location;])[
411 ]b4_variant_if(
412 [[
413 /// A char[S] buffer to store and retrieve objects.
414 ///
415 /// Sort of a variant, but does not keep track of the nature
416 /// of the stored data, since that knowledge is available
417 /// via the current state.
418 template <size_t S>
419 struct variant
420 {]b4_assert_if([
421 /// Whether something is contained.
422 bool built;
423 ])[
424 /// Empty construction.
425 inline
426 variant ()]b4_assert_if([
427 : built(false)])[
428 {}
429
430 /// Instantiate a \a T in here.
431 template <typename T>
432 inline T&
433 build()
434 {]b4_assert_if([
435 assert(!built);
436 built = true;])[
437 return *new (buffer.raw) T;
438 }
439
440 /// Instantiate a \a T in here from \a t.
441 template <typename T>
442 inline T&
443 build(const T& t)
444 {]b4_assert_if([
445 assert(!built);
446 built = true;])[
447 return *new (buffer.raw) T(t);
448 }
449
450 /// Construct and fill.
451 template <typename T>
452 inline
453 variant (const T& t)]b4_assert_if([
454 : built(true)])[
455 {
456 new (buffer.raw) T(t);
457 }
458
459 /// Accessor to a built \a T.
460 template <typename T>
461 inline T&
462 as()
463 {]b4_assert_if([
464 assert(built);])[
465 return reinterpret_cast<T&>(buffer.raw);
466 }
467
468 /// Const accessor to a built \a T (for %printer).
469 template <typename T>
470 inline const T&
471 as() const
472 {]b4_assert_if([
473 assert(built);])[
474 return reinterpret_cast<const T&>(buffer.raw);
475 }
476
477 /// Swap the content with \a other.
478 template <typename T>
479 inline void
480 swap(variant<S>& other)
481 {
482 std::swap(as<T>(), other.as<T>());
483 }
484
485 /// Assign the content of \a other to this.
486 /// Destroys \a other.
487 template <typename T>
488 inline void
489 build(variant<S>& other)
490 {
491 build<T>();
492 swap<T>(other);
493 other.destroy<T>();
494 }
495
496 /// Destroy the stored \a T.
497 template <typename T>
498 inline void
499 destroy()
500 {
501 as<T>().~T();]b4_assert_if([
502 built = false;])[
503 }
504
505 /// A buffer large enough to store any of the semantic values.
506 /// Long double is chosen as it has the strongest alignment
507 /// constraints.
508 union {
509 long double align_me;
510 char raw[S];
511 } buffer;
512 };
513 ]])[
514 ]b4_namespace_close[
515
516 ]b4_locations_if([#include "location.hh"])[
517
518 /* Enabling traces. */
519 #ifndef YYDEBUG
520 # define YYDEBUG ]b4_debug_flag[
521 #endif
522
523 /* Enabling verbose error messages. */
524 #ifdef YYERROR_VERBOSE
525 # undef YYERROR_VERBOSE
526 # define YYERROR_VERBOSE 1
527 #else
528 # define YYERROR_VERBOSE ]b4_error_verbose_flag[
529 #endif
530
531 /* Enabling the token table. */
532 #ifndef YYTOKEN_TABLE
533 # define YYTOKEN_TABLE ]b4_token_table[
534 #endif
535
536 ]b4_locations_if([dnl
537 [/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
538 If N is 0, then set CURRENT to the empty location which ends
539 the previous symbol: RHS[0] (always defined). */
540
541 #ifndef YYLLOC_DEFAULT
542 # define YYLLOC_DEFAULT(Current, Rhs, N) \
543 do { \
544 if (N) \
545 { \
546 (Current).begin = (Rhs)[1].location.begin; \
547 (Current).end = (Rhs)[N].location.end; \
548 } \
549 else \
550 { \
551 (Current).begin = (Current).end = (Rhs)[0].location.end; \
552 } \
553 } while (false)
554 #endif]])[
555
556 ]b4_namespace_open[
557
558 /// A Bison parser.
559 class ]b4_parser_class_name[
560 {
561 public:
562 #ifndef YYSTYPE
563 ]b4_variant_if(
564 [ /// An auxiliary type to compute the largest semantic type.
565 union union_type
566 {]b4_type_foreach([b4_char_sizeof])[};
567
568 /// Symbol semantic values.
569 typedef variant<sizeof(union_type)> semantic_type;],
570 [ /// Symbol semantic values.
571 m4_ifdef([b4_stype],
572 [ union semantic_type
573 {b4_user_stype
574 };],
575 [m4_if(b4_tag_seen_flag, 0,
576 [[ typedef int semantic_type;]],
577 [[ typedef YYSTYPE semantic_type;]])])])[
578 #else
579 typedef YYSTYPE semantic_type;
580 #endif]b4_locations_if([
581 /// Symbol locations.
582 typedef b4_percent_define_get([[location_type]]) location_type;])[
583 /// Tokens.
584 struct token
585 {
586 ]b4_token_enums(b4_tokens)[
587 };
588 /// Token type.
589 typedef token::yytokentype token_type;
590
591 /// Build a parser object.
592 ]b4_parser_class_name[ (]b4_parse_param_decl[);
593 virtual ~]b4_parser_class_name[ ();
594
595 /// Parse.
596 /// \returns 0 iff parsing succeeded.
597 virtual int parse ();
598
599 #if YYDEBUG
600 /// The current debugging stream.
601 std::ostream& debug_stream () const;
602 /// Set the current debugging stream.
603 void set_debug_stream (std::ostream &);
604
605 /// Type for debugging levels.
606 typedef int debug_level_type;
607 /// The current debugging level.
608 debug_level_type debug_level () const;
609 /// Set the current debugging level.
610 void set_debug_level (debug_level_type l);
611 #endif
612
613 private:
614 /// Report a syntax error.]b4_locations_if([
615 /// \param loc where the syntax error is found.])[
616 /// \param msg a description of the syntax error.
617 virtual void error (]b4_locations_if([const location_type& loc, ])[const std::string& msg);
618
619 /// Generate an error message.
620 /// \param state the state where the error occurred.
621 /// \param tok the lookahead token.
622 virtual std::string yysyntax_error_ (int yystate, int tok);
623
624 /// State numbers.
625 typedef int state_type;
626
627 /// Internal symbol numbers.
628 typedef ]b4_int_type_for([b4_translate])[ token_number_type;
629 static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
630 static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
631
632 /* Tables. */
633 ]b4_parser_tables_declare[
634
635 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
636 /// For a symbol, its name in clear.
637 static const char* const yytname_[];
638 #endif]b4_error_verbose_if([
639
640 /// Convert the symbol name \a n to a form suitable for a diagnostic.
641 static std::string yytnamerr_ (const char *n);])[
642
643 #if YYDEBUG
644 ]b4_integral_parser_table_declare([rline], [b4_rline],
645 [YYRLINE[YYN] -- Source line where rule number YYN was defined.])[
646 /// Report on the debug stream that the rule \a r is going to be reduced.
647 virtual void yy_reduce_print_ (int r);
648 /// Print the state stack on the debug stream.
649 virtual void yystack_print_ ();
650
651 /* Debugging. */
652 int yydebug_;
653 std::ostream* yycdebug_;
654 #endif
655
656 /// Convert a scanner token number \a t to a symbol number.
657 static inline token_number_type yytranslate_ (]b4_lex_symbol_if([token_type], [int])[ t);
658
659 /// A complete symbol, with its type.
660 template <typename Exact>
661 struct symbol_base_type
662 {
663 /// Default constructor.
664 inline symbol_base_type ();
665
666 /// Constructor.]b4_locations_if([
667 inline symbol_base_type (const location_type& l)])[;
668 inline symbol_base_type (]b4_args(
669 [const semantic_type& v],
670 b4_locations_if([const location_type& l]))[);
671
672 /// Return this with its exact type.
673 const Exact& self () const;
674 Exact& self ();
675
676 /// Return the type of this symbol.
677 int type_get () const;
678
679 /// The semantic value.
680 semantic_type value;]b4_locations_if([
681
682 /// The location.
683 location_type location;])[
684 };
685
686 #if YYDEBUG
687 /// \brief Display a symbol type, value and location.
688 /// \param yyo The output stream.
689 /// \param yysym The symbol.
690 template <typename Exact>
691 void yy_print_ (std::ostream& yyo,
692 const symbol_base_type<Exact>& yysym) const;
693 #endif
694
695 /// \brief Reclaim the memory associated to a symbol.
696 /// \param yymsg Why this token is reclaimed.
697 /// If null, print nothing.
698 /// \param s The symbol.
699 template <typename Exact>
700 inline void yy_destroy_ (const char* yymsg,
701 symbol_base_type<Exact>& yysym) const;
702
703 public:
704 /// Element of the stack: a state and its attributes.
705 struct symbol_type : symbol_base_type<symbol_type>
706 {
707 /// The parent class.
708 typedef symbol_base_type<symbol_type> super_type;
709
710 /// Default constructor.
711 inline symbol_type ();
712
713 /// Constructor.
714 inline symbol_type (]b4_args([int t],
715 [const semantic_type& v],
716 b4_locations_if([const location_type& l]))[);
717
718 inline symbol_type (]b4_args([int t],
719 b4_locations_if([const location_type& l]))[);
720
721 /// The symbol type.
722 int type;
723
724 /// Return the type corresponding to this state.
725 inline int type_get_ () const;
726
727 /// Its token.
728 inline token_type token () const;
729 };
730
731 ]b4_symbol_constructor_declarations[
732
733 private:
734 /// Element of the stack: a state and its attributes.
735 struct stack_symbol_type : symbol_base_type<stack_symbol_type>
736 {
737 /// The parent class.
738 typedef symbol_base_type<stack_symbol_type> super_type;
739
740 /// Default constructor.
741 inline stack_symbol_type ();
742
743 /// Constructor.
744 inline stack_symbol_type (]b4_args([state_type s],
745 [const semantic_type& v],
746 b4_locations_if([const location_type& l]))[);
747
748 /// The state.
749 state_type state;
750
751 /// Return the type corresponding to this state.
752 inline int type_get_ () const;
753 };
754
755 /// Stack type.
756 typedef stack<stack_symbol_type> stack_type;
757
758 /// The stack.
759 stack_type yystack_;
760
761 /// Push a new state on the stack.
762 /// \param m a debug message to display
763 /// if null, no trace is output.
764 /// \param s the symbol
765 /// \warning the contents of \a s.value is stolen.
766 inline void yypush_ (const char* m, stack_symbol_type& s);
767
768 /// Push a new look ahead token on the state on the stack.
769 /// \param m a debug message to display
770 /// if null, no trace is output.
771 /// \param s the state
772 /// \param sym the symbol (for its value and location).
773 /// \warning the contents of \a s.value is stolen.
774 inline void yypush_ (const char* m, state_type s, symbol_type& sym);
775
776 /// Pop \a n symbols the three stacks.
777 inline void yypop_ (unsigned int n = 1);
778
779 /* Constants. */
780 enum
781 {
782 yyeof_ = 0,
783 yylast_ = ]b4_last[, //< Last index in yytable_.
784 yynnts_ = ]b4_nterms_number[, //< Number of nonterminal symbols.
785 yyempty_ = -2,
786 yyfinal_ = ]b4_final_state_number[, //< Termination state number.
787 yyterror_ = 1,
788 yyerrcode_ = 256,
789 yyntokens_ = ]b4_tokens_number[, //< Number of tokens.
790 };
791
792 ]b4_parse_param_vars[
793 };
794
795 ]b4_lex_symbol_if([b4_yytranslate_definition])[
796 ]b4_lex_symbol_if([b4_symbol_constructor_definitions])[
797 ]b4_namespace_close[
798
799 ]b4_percent_define_flag_if([[global_tokens_and_yystype]],
800 [b4_token_defines(b4_tokens)
801
802 #ifndef YYSTYPE
803 /* Redirection for backward compatibility. */
804 # define YYSTYPE b4_namespace_ref::b4_parser_class_name::semantic_type
805 #endif
806 ])
807 b4_percent_code_get([[provides]])[]dnl
808
809 [#endif /* ! defined PARSER_HEADER_H */]
810 @output(b4_parser_file_name@)@
811 b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])
812 b4_percent_code_get([[top]])[]dnl
813 m4_if(b4_prefix, [yy], [],
814 [
815 // Take the name prefix into account.
816 #define yylex b4_prefix[]lex])[
817
818 /* First part of user declarations. */
819 ]b4_user_pre_prologue[
820
821 #include "@basename(]b4_spec_defines_file[@)"
822
823 /* User implementation prologue. */
824 ]b4_user_post_prologue
825 b4_percent_code_get[]dnl
826
827 [#ifndef YY_
828 # if YYENABLE_NLS
829 # if ENABLE_NLS
830 # include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
831 # define YY_(msgid) dgettext ("bison-runtime", msgid)
832 # endif
833 # endif
834 # ifndef YY_
835 # define YY_(msgid) msgid
836 # endif
837 #endif
838
839 /* Suppress unused-variable warnings by "using" E. */
840 #define YYUSE(e) ((void) (e))
841
842 /* Enable debugging if requested. */
843 #if YYDEBUG
844
845 /* A pseudo ostream that takes yydebug_ into account. */
846 # define YYCDEBUG if (yydebug_) (*yycdebug_)
847
848 # define YY_SYMBOL_PRINT(Title, Symbol) \
849 do { \
850 if (yydebug_) \
851 { \
852 *yycdebug_ << Title << ' '; \
853 yy_print_ (*yycdebug_, Symbol); \
854 *yycdebug_ << std::endl; \
855 } \
856 } while (false)
857
858 # define YY_REDUCE_PRINT(Rule) \
859 do { \
860 if (yydebug_) \
861 yy_reduce_print_ (Rule); \
862 } while (false)
863
864 # define YY_STACK_PRINT() \
865 do { \
866 if (yydebug_) \
867 yystack_print_ (); \
868 } while (false)
869
870 #else /* !YYDEBUG */
871
872 # define YYCDEBUG if (false) std::cerr
873 # define YY_SYMBOL_PRINT(Title, Symbol) static_cast<void>(0)
874 # define YY_REDUCE_PRINT(Rule) static_cast<void>(0)
875 # define YY_STACK_PRINT() static_cast<void>(0)
876
877 #endif /* !YYDEBUG */
878
879 #define yyerrok (yyerrstatus_ = 0)
880 #define yyclearin (yyempty = true)
881
882 #define YYACCEPT goto yyacceptlab
883 #define YYABORT goto yyabortlab
884 #define YYERROR goto yyerrorlab
885 #define YYRECOVERING() (!!yyerrstatus_)
886
887 ]b4_namespace_open[]b4_error_verbose_if([[
888
889 /* Return YYSTR after stripping away unnecessary quotes and
890 backslashes, so that it's suitable for yyerror. The heuristic is
891 that double-quoting is unnecessary unless the string contains an
892 apostrophe, a comma, or backslash (other than backslash-backslash).
893 YYSTR is taken from yytname. */
894 std::string
895 ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
896 {
897 if (*yystr == '"')
898 {
899 std::string yyr = "";
900 char const *yyp = yystr;
901
902 for (;;)
903 switch (*++yyp)
904 {
905 case '\'':
906 case ',':
907 goto do_not_strip_quotes;
908
909 case '\\':
910 if (*++yyp != '\\')
911 goto do_not_strip_quotes;
912 /* Fall through. */
913 default:
914 yyr += *yyp;
915 break;
916
917 case '"':
918 return yyr;
919 }
920 do_not_strip_quotes: ;
921 }
922
923 return yystr;
924 }
925 ]])[
926
927 /// Build a parser object.
928 ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
929 :])[
930 #if YYDEBUG
931 ]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
932 yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
933 #endif]b4_parse_param_cons[
934 {
935 }
936
937 ]b4_parser_class_name::~b4_parser_class_name[ ()
938 {
939 }
940
941
942 /*---------------.
943 | Symbol types. |
944 `---------------*/
945
946 ]b4_lex_symbol_if([], [b4_symbol_constructor_definitions])[
947
948 // stack_symbol_type.
949 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type ()
950 : super_type ()
951 , state ()
952 {
953 }
954
955 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (]b4_args(
956 [state_type s],
957 [const semantic_type& v],
958 b4_locations_if([const location_type& l]))[)
959 : super_type (v]b4_locations_if([, l])[)
960 , state (s)
961 {
962 }
963
964 int
965 ]b4_parser_class_name[::stack_symbol_type::type_get_ () const
966 {
967 return yystos_[state];
968 }
969
970
971 template <typename Exact>
972 void
973 ]b4_parser_class_name[::yy_destroy_ (const char* yymsg,
974 symbol_base_type<Exact>& yysym) const
975 {
976 int yytype = yysym.type_get ();
977 YYUSE (yymsg);
978 if (yymsg)
979 YY_SYMBOL_PRINT (yymsg, yysym);
980
981 // User destructor.
982 switch (yytype)
983 {
984 ]b4_symbol_foreach([b4_symbol_destructor])dnl
985 [ default:
986 break;
987 }]b4_variant_if([
988
989 // Type destructor.
990 b4_symbol_variant([[yytype]], [[yysym.value]], [[template destroy]])])[
991 }
992
993 #if YYDEBUG
994 template <typename Exact>
995 void
996 ]b4_parser_class_name[::yy_print_ (std::ostream& yyo,
997 const symbol_base_type<Exact>& yysym) const
998 {
999 int yytype = yysym.type_get ();
1000 yyo << (yytype < yyntokens_ ? "token" : "nterm")
1001 << ' ' << yytname_[yytype] << " ("]b4_locations_if([
1002 << yysym.location << ": "])[;
1003 switch (yytype)
1004 {
1005 ]b4_symbol_foreach([b4_symbol_printer])dnl
1006 [ default:
1007 break;
1008 }
1009 yyo << ')';
1010 }
1011 #endif
1012
1013 void
1014 ]b4_parser_class_name[::yypush_ (const char* m, state_type s,
1015 symbol_type& sym)
1016 {
1017 if (m)
1018 YY_SYMBOL_PRINT (m, sym);
1019 ]b4_variant_if(
1020 [[ yystack_.push (stack_symbol_type (]b4_args(
1021 [s],
1022 [semantic_type()],
1023 b4_locations_if([sym.location]))[));
1024 ]b4_symbol_variant([[yystos_[s]]], [[yystack_[0].value]],
1025 [build], [sym.value])],
1026 [[ yystack_.push (stack_symbol_type (]b4_args(
1027 [s],
1028 [sym.value],
1029 b4_locations_if([sym.location]))[));]])[
1030 }
1031
1032 void
1033 ]b4_parser_class_name[::yypush_ (const char* m, stack_symbol_type& s)
1034 {
1035 if (m)
1036 YY_SYMBOL_PRINT (m, s);
1037 ]b4_variant_if(
1038 [[ yystack_.push (stack_symbol_type (]b4_args(
1039 [s.state],
1040 [semantic_type()],
1041 b4_locations_if([s.location]))[));
1042 ]b4_symbol_variant([[yystos_[s.state]]], [[yystack_[0].value]],
1043 [build], [s.value])],
1044 [ yystack_.push (s);])[
1045 }
1046
1047 void
1048 ]b4_parser_class_name[::yypop_ (unsigned int n)
1049 {
1050 yystack_.pop (n);
1051 }
1052
1053 #if YYDEBUG
1054 std::ostream&
1055 ]b4_parser_class_name[::debug_stream () const
1056 {
1057 return *yycdebug_;
1058 }
1059
1060 void
1061 ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
1062 {
1063 yycdebug_ = &o;
1064 }
1065
1066
1067 ]b4_parser_class_name[::debug_level_type
1068 ]b4_parser_class_name[::debug_level () const
1069 {
1070 return yydebug_;
1071 }
1072
1073 void
1074 ]b4_parser_class_name[::set_debug_level (debug_level_type l)
1075 {
1076 yydebug_ = l;
1077 }
1078 #endif
1079
1080 int
1081 ]b4_parser_class_name[::parse ()
1082 {
1083 /// Whether yyla contains a lookahead.
1084 bool yyempty = true;
1085
1086 /* State. */
1087 int yyn;
1088 int yylen = 0;
1089 int yystate = 0;
1090
1091 /* Error handling. */
1092 int yynerrs_ = 0;
1093 int yyerrstatus_ = 0;
1094
1095 /// The lookahead symbol.
1096 symbol_type yyla;]b4_locations_if([[
1097
1098 /// The locations where the error started and ended.
1099 stack_symbol_type yyerror_range[2];]])[
1100
1101 /// $$ and @@$.
1102 stack_symbol_type yylhs;
1103
1104 /// The return value of parse().
1105 int yyresult;
1106
1107 YYCDEBUG << "Starting parse" << std::endl;
1108
1109 ]m4_ifdef([b4_initial_action], [
1110 m4_pushdef([b4_at_dollar], [yyla.location])dnl
1111 m4_pushdef([b4_dollar_dollar], [yyla.value])dnl
1112 /* User initialization code. */
1113 b4_user_initial_action
1114 m4_popdef([b4_dollar_dollar])dnl
1115 m4_popdef([b4_at_dollar])])dnl
1116
1117 [ /* Initialize the stack. The initial state will be set in
1118 yynewstate, since the latter expects the semantical and the
1119 location values to have been already stored, initialize these
1120 stacks with a primary value. */
1121 yystack_ = stack_type (0);
1122 yypush_ (0, 0, yyla);
1123
1124 // A new state was pushed on the stack.
1125 // Invariant: yystate == yystack_[0].state, i.e.,
1126 // yystate was just pushed onto the state stack.
1127 yynewstate:
1128 YYCDEBUG << "Entering state " << yystate << std::endl;
1129
1130 /* Accept? */
1131 if (yystate == yyfinal_)
1132 goto yyacceptlab;
1133
1134 goto yybackup;
1135
1136 /* Backup. */
1137 yybackup:
1138
1139 /* Try to take a decision without lookahead. */
1140 yyn = yypact_[yystate];
1141 if (yyn == yypact_ninf_)
1142 goto yydefault;
1143
1144 /* Read a lookahead token. */
1145 if (yyempty)
1146 {
1147 YYCDEBUG << "Reading a token: ";
1148 ]b4_lex_symbol_if(
1149 [ yyla = b4_c_function_call([yylex], [symbol_type],
1150 m4_ifdef([b4_lex_param], b4_lex_param));],
1151 [ yyla.type = yytranslate_ (b4_c_function_call([yylex], [int],
1152 [[YYSTYPE*], [&yyla.value]][]dnl
1153 b4_locations_if([, [[location*], [&yyla.location]]])dnl
1154 m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
1155 yyempty = false;
1156 }
1157 YY_SYMBOL_PRINT ("Next token is", yyla);
1158
1159 /* If the proper action on seeing token YYLA.TYPE is to reduce or
1160 to detect an error, take that action. */
1161 yyn += yyla.type;
1162 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type)
1163 goto yydefault;
1164
1165 /* Reduce or error. */
1166 yyn = yytable_[yyn];
1167 if (yyn <= 0)
1168 {
1169 if (yyn == 0 || yyn == yytable_ninf_)
1170 goto yyerrlab;
1171 yyn = -yyn;
1172 goto yyreduce;
1173 }
1174
1175 /* Discard the token being shifted. */
1176 yyempty = true;
1177
1178 /* Count tokens shifted since error; after three, turn off error
1179 status. */
1180 if (yyerrstatus_)
1181 --yyerrstatus_;
1182
1183 /* Shift the lookahead token. */
1184 yystate = yyn;
1185 yypush_ ("Shifting", yystate, yyla);
1186 goto yynewstate;
1187
1188 /*-----------------------------------------------------------.
1189 | yydefault -- do the default action for the current state. |
1190 `-----------------------------------------------------------*/
1191 yydefault:
1192 yyn = yydefact_[yystate];
1193 if (yyn == 0)
1194 goto yyerrlab;
1195 goto yyreduce;
1196
1197 /*-----------------------------.
1198 | yyreduce -- Do a reduction. |
1199 `-----------------------------*/
1200 yyreduce:
1201 yylen = yyr2_[yyn];]b4_variant_if([
1202 /* Variants are always initialized to an empty instance of the
1203 correct type. The default $$=$1 rule is NOT applied when using
1204 variants */
1205 ]b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [build])[],[
1206 /* If YYLEN is nonzero, implement the default value of the action:
1207 `$$ = $1'. Otherwise, use the top of the stack.
1208
1209 Otherwise, the following line sets YYLHS.VALUE to garbage.
1210 This behavior is undocumented and Bison
1211 users should not rely upon it. */
1212 if (yylen)
1213 yylhs.value = yystack_@{yylen - 1@}.value;
1214 else
1215 yylhs.value = yystack_@{0@}.value;])[
1216 ]b4_locations_if([dnl
1217 [
1218 // Compute the default @@$.
1219 {
1220 slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
1221 YYLLOC_DEFAULT (yylhs.location, slice, yylen);
1222 }]])[
1223
1224 // Perform the reduction.
1225 YY_REDUCE_PRINT (yyn);
1226 switch (yyn)
1227 {
1228 ]b4_user_actions[
1229 default:
1230 break;
1231 }
1232 // Compute post-reduction state.
1233 yyn = yyr1_[yyn];
1234 yystate = yypgoto_[yyn - yyntokens_] + yystack_[yylen].state;
1235 if (0 <= yystate && yystate <= yylast_
1236 && yycheck_[yystate] == yystack_[yylen].state)
1237 yystate = yytable_[yystate];
1238 else
1239 yystate = yydefgoto_[yyn - yyntokens_];
1240 yylhs.state = yystate;
1241 YY_SYMBOL_PRINT ("-> $$ =", yylhs);
1242 ]b4_variant_if([[
1243 // Destroy the lhs symbols.
1244 for (int i = 0; i < yylen; ++i)
1245 // Destroy a variant which value may have be swapped with
1246 // yylhs.value. The value of yylhs.value (hence maybe one of
1247 // these lhs symbols) depends on what does the default
1248 // contruction for this type. In the case of pointers for
1249 // instance, nothing is done, so the value is junk. Therefore
1250 // do not try to report the content in the debug trace, it's
1251 // junk. Hence yymsg = 0. Besides, that keeps exactly the same
1252 // traces as with the other Bison skeletons.
1253 yy_destroy_ (0, yystack_[i]);]])[
1254
1255 yypop_ (yylen);
1256 yylen = 0;
1257 YY_STACK_PRINT ();
1258
1259 /* Shift the result of the reduction. */
1260 yypush_ (0, yylhs);
1261 goto yynewstate;
1262
1263 /*------------------------------------.
1264 | yyerrlab -- here on detecting error |
1265 `------------------------------------*/
1266 yyerrlab:
1267 /* If not already recovering from an error, report this error. */
1268 if (!yyerrstatus_)
1269 {
1270 ++yynerrs_;
1271 error (]b4_args(b4_locations_if([yyla.location]),
1272 [yysyntax_error_ (yystate, yyla.type)])[);
1273 }
1274
1275 ]b4_locations_if([[
1276 yyerror_range[0].location = yyla.location;]])[
1277 if (yyerrstatus_ == 3)
1278 {
1279 /* If just tried and failed to reuse lookahead token after an
1280 error, discard it. */
1281
1282 /* Return failure if at end of input. */
1283 if (yyla.type == yyeof_)
1284 YYABORT;
1285 else
1286 {
1287 yy_destroy_ ("Error: discarding", yyla);
1288 yyempty = true;
1289 }
1290 }
1291
1292 /* Else will try to reuse lookahead token after shifting the error
1293 token. */
1294 goto yyerrlab1;
1295
1296
1297 /*---------------------------------------------------.
1298 | yyerrorlab -- error raised explicitly by YYERROR. |
1299 `---------------------------------------------------*/
1300 yyerrorlab:
1301
1302 /* Pacify compilers like GCC when the user code never invokes
1303 YYERROR and the label yyerrorlab therefore never appears in user
1304 code. */
1305 if (false)
1306 goto yyerrorlab;
1307
1308 ]b4_locations_if([[
1309 yyerror_range[0].location = yystack_[yylen - 1].location;]])[
1310 /* Do not reclaim the symbols of the rule which action triggered
1311 this YYERROR. */
1312 yypop_ (yylen);
1313 yylen = 0;
1314 yystate = yystack_[0].state;
1315 goto yyerrlab1;
1316
1317 /*-------------------------------------------------------------.
1318 | yyerrlab1 -- common code for both syntax error and YYERROR. |
1319 `-------------------------------------------------------------*/
1320 yyerrlab1:
1321 yyerrstatus_ = 3; /* Each real token shifted decrements this. */
1322 {
1323 stack_symbol_type error_token;
1324 for (;;)
1325 {
1326 yyn = yypact_[yystate];
1327 if (yyn != yypact_ninf_)
1328 {
1329 yyn += yyterror_;
1330 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
1331 {
1332 yyn = yytable_[yyn];
1333 if (0 < yyn)
1334 break;
1335 }
1336 }
1337
1338 // Pop the current state because it cannot handle the error token.
1339 if (yystack_.size () == 1)
1340 YYABORT;
1341 ]b4_locations_if([[
1342 yyerror_range[0].location = yystack_[0].location;]])[
1343 yy_destroy_ ("Error: popping", yystack_[0]);
1344 yypop_ ();
1345 yystate = yystack_[0].state;
1346 YY_STACK_PRINT ();
1347 }
1348 ]b4_locations_if([[
1349 yyerror_range[1].location = yyla.location;
1350 YYLLOC_DEFAULT (error_token.location, (yyerror_range - 1), 2);]])[
1351
1352 /* Shift the error token. */
1353 error_token.state = yystate = yyn;
1354 yypush_ ("Shifting", error_token);
1355 }
1356 goto yynewstate;
1357
1358 /* Accept. */
1359 yyacceptlab:
1360 yyresult = 0;
1361 goto yyreturn;
1362
1363 /* Abort. */
1364 yyabortlab:
1365 yyresult = 1;
1366 goto yyreturn;
1367
1368 yyreturn:
1369 if (!yyempty)
1370 yy_destroy_ ("Cleanup: discarding lookahead", yyla);
1371
1372 /* Do not reclaim the symbols of the rule which action triggered
1373 this YYABORT or YYACCEPT. */
1374 yypop_ (yylen);
1375 while (yystack_.size () != 1)
1376 {
1377 yy_destroy_ ("Cleanup: popping", yystack_[0]);
1378 yypop_ ();
1379 }
1380
1381 return yyresult;
1382 }
1383
1384 // Generate an error message.
1385 std::string
1386 ]b4_parser_class_name[::yysyntax_error_ (]dnl
1387 b4_error_verbose_if([int yystate, int yytoken],
1388 [int, int])[)
1389 {
1390 std::string yyres;]b4_error_verbose_if([[
1391 int yyn = yypact_[yystate];
1392 if (yypact_ninf_ < yyn && yyn <= yylast_)
1393 {
1394 /* Start YYX at -YYN if negative to avoid negative indexes in
1395 YYCHECK. */
1396 int yyxbegin = yyn < 0 ? -yyn : 0;
1397
1398 /* Stay within bounds of both yycheck and yytname. */
1399 int yychecklim = yylast_ - yyn + 1;
1400 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
1401
1402 // Number of reported tokens (one for the "unexpected", one per
1403 // "expected").
1404 size_t yycount = 0;
1405 // Its maximum.
1406 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1407 // Arguments of yyformat.
1408 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1409 yyarg[yycount++] = yytname_[yytoken];
1410 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
1411 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_)
1412 {
1413 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1414 {
1415 yycount = 1;
1416 break;
1417 }
1418 else
1419 yyarg[yycount++] = yytname_[yyx];
1420 }
1421
1422 char const* yyformat = 0;
1423 switch (yycount)
1424 {
1425 #define YYCASE_(N, S) \
1426 case N: \
1427 yyformat = S; \
1428 break
1429 YYCASE_(1, YY_("syntax error, unexpected %s"));
1430 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1431 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1432 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1433 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1434 #undef YYCASE_
1435 }
1436 // Argument number.
1437 size_t yyi = 0;
1438 for (char const* yyp = yyformat; *yyp; ++yyp)
1439 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
1440 {
1441 yyres += yytnamerr_ (yyarg[yyi++]);
1442 ++yyp;
1443 }
1444 else
1445 yyres += *yyp;
1446 }
1447 else
1448 ]])dnl
1449 [ yyres = YY_("syntax error");
1450 return yyres;
1451 }
1452
1453
1454 const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
1455
1456 const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
1457
1458 ]b4_parser_tables_define[
1459
1460 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1461 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1462 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
1463 const char*
1464 const ]b4_parser_class_name[::yytname_[] =
1465 {
1466 ]b4_tname[
1467 };
1468 #endif
1469
1470 #if YYDEBUG
1471 ]b4_integral_parser_table_define([rline], [b4_rline])[
1472
1473 // Print the state stack on the debug stream.
1474 void
1475 ]b4_parser_class_name[::yystack_print_ ()
1476 {
1477 *yycdebug_ << "Stack now";
1478 for (stack_type::const_iterator
1479 i = yystack_.begin (),
1480 i_end = yystack_.end ();
1481 i != i_end; ++i)
1482 *yycdebug_ << ' ' << i->state;
1483 *yycdebug_ << std::endl;
1484 }
1485
1486 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1487 void
1488 ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
1489 {
1490 unsigned int yylno = yyrline_[yyrule];
1491 int yynrhs = yyr2_[yyrule];
1492 /* Print the symbols being reduced, and their result. */
1493 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
1494 << " (line " << yylno << "):" << std::endl;
1495 /* The symbols being reduced. */
1496 for (int yyi = 0; yyi < yynrhs; yyi++)
1497 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
1498 ]b4_rhs_data(yynrhs, yyi + 1)[);
1499 }
1500 #endif // YYDEBUG
1501
1502 ]b4_lex_symbol_if([], [b4_yytranslate_definition])[
1503 ]b4_namespace_close[
1504 ]b4_epilogue[]dnl
1505 m4_divert_pop(0)
1506 m4_popdef([b4_copyright_years])dnl