3 # C++ skeleton for Bison
5 # Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 m4_include(b4_pkgdatadir
/[c
++.m4
])
23 b4_check_percent_code_qualifiers([[requires]], [[provides]], [[top]])
25 # The header is mandatory.
27 [m4_fatal(b4_skeleton
[: using %defines is mandatory
])])
29 # Backward compatibility.
30 m4_define([b4_location_constructors
])
31 m4_include(b4_pkgdatadir
/[location
.cc
])
33 # We do want M4 expansion after # for CPP macros.
37 [@output b4_spec_defines_file
38 b4_copyright([Skeleton interface
for Bison
LALR(1) parsers in C
++],
39 [2002, 2003, 2004, 2005, 2006])
40 dnl FIXME
: This is wrong
, we want computed header guards
.
42 /* C++ LALR(1) parser skeleton written by Akim Demaille. */
44 #ifndef PARSER_HEADER_H
45 # define PARSER_HEADER_H
47 ]m4_ifdef([b4_percent_code_requires
],
48 [[/* Copy the %code "requires" blocks. */
49 ]b4_user_code([b4_percent_code_requires
])])[
55 namespace ]b4_namespace
[
61 #include "location.hh"
63 /* Enabling traces. */
65 # define YYDEBUG ]b4_debug_flag[
68 /* Enabling verbose error messages. */
69 #ifdef YYERROR_VERBOSE
70 # undef YYERROR_VERBOSE
71 # define YYERROR_VERBOSE 1
73 # define YYERROR_VERBOSE ]b4_error_verbose_flag[
76 /* Enabling the token table. */
78 # define YYTOKEN_TABLE ]b4_token_table[
81 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
82 If N is 0, then set CURRENT to the empty location which ends
83 the previous symbol: RHS[0] (always defined). */
85 #ifndef YYLLOC_DEFAULT
86 # define YYLLOC_DEFAULT(Current, Rhs, N) \
90 (Current).begin = (Rhs)[1].begin; \
91 (Current).end = (Rhs)[N].end; \
95 (Current).begin = (Current).end = (Rhs)[0].end; \
100 namespace ]b4_namespace
[
104 class ]b4_parser_class_name
[
107 /// Symbol semantic values.
109 ]m4_ifdef([b4_stype
],
110 [ union semantic_type
113 [m4_if(b4_tag_seen_flag
, 0,
114 [[ typedef int semantic_type
;]],
115 [[ typedef YYSTYPE semantic_type
;]])])[
117 typedef YYSTYPE semantic_type
;
119 /// Symbol locations.
120 typedef ]b4_location_type
[ location_type
;
124 ]b4_token_enums(b4_tokens
)[
127 typedef token::yytokentype token_type
;
129 /// Build a parser object.
130 ]b4_parser_class_name
[ (]b4_parse_param_decl
[);
131 virtual ~]b4_parser_class_name
[ ();
134 /// \returns 0 iff parsing succeeded.
135 virtual int parse ();
137 /// The current debugging stream.
138 std::ostream
& debug_stream () const;
139 /// Set the current debugging stream.
140 void set_debug_stream (std::ostream
&);
142 /// Type for debugging levels.
143 typedef int debug_level_type
;
144 /// The current debugging level.
145 debug_level_type
debug_level () const;
146 /// Set the current debugging level.
147 void set_debug_level (debug_level_type l
);
150 /// Report a syntax error.
151 /// \param loc where the syntax error is found.
152 /// \param msg a description of the syntax error.
153 virtual void error (const location_type
& loc
, const std::string
& msg
);
155 /// Generate an error message.
156 /// \param state the state where the error occurred.
157 /// \param tok the lookahead token.
158 virtual std::string
yysyntax_error_ (int yystate
]dnl
159 b4_error_verbose_if([, int tok
])[);
162 /// \brief Report a symbol value on the debug stream.
163 /// \param yytype The token type.
164 /// \param yyvaluep Its semantic value.
165 /// \param yylocationp Its location.
166 virtual void yy_symbol_value_print_ (int yytype
,
167 const semantic_type
* yyvaluep
,
168 const location_type
* yylocationp
);
169 /// \brief Report a symbol on the debug stream.
170 /// \param yytype The token type.
171 /// \param yyvaluep Its semantic value.
172 /// \param yylocationp Its location.
173 virtual void yy_symbol_print_ (int yytype
,
174 const semantic_type
* yyvaluep
,
175 const location_type
* yylocationp
);
180 typedef int state_type
;
181 /// State stack type.
182 typedef stack
<state_type
> state_stack_type
;
183 /// Semantic value stack type.
184 typedef stack
<semantic_type
> semantic_stack_type
;
185 /// location stack type.
186 typedef stack
<location_type
> location_stack_type
;
189 state_stack_type yystate_stack_
;
190 /// The semantic value stack.
191 semantic_stack_type yysemantic_stack_
;
192 /// The location stack.
193 location_stack_type yylocation_stack_
;
195 /// Internal symbol numbers.
196 typedef ]b4_int_type_for([b4_translate
])[ token_number_type
;
198 /// For a state, the index in \a yytable_ of its portion.
199 static const ]b4_int_type_for([b4_pact
])[ yypact_
[];
200 static const ]b4_int_type(b4_pact_ninf
, b4_pact_ninf
)[ yypact_ninf_
;
202 /// For a state, default rule to reduce.
203 /// Unless\a yytable_ specifies something else to do.
204 /// Zero means the default is an error.
205 static const ]b4_int_type_for([b4_defact
])[ yydefact_
[];
207 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto_
[];
208 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto_
[];
210 /// What to do in a state.
211 /// \a yytable_[yypact_[s]]: what to do in state \a s.
212 /// - if positive, shift that token.
213 /// - if negative, reduce the rule which number is the opposite.
214 /// - if zero, do what YYDEFACT says.
215 static const ]b4_int_type_for([b4_table
])[ yytable_
[];
216 static const ]b4_int_type(b4_table_ninf
, b4_table_ninf
)[ yytable_ninf_
;
218 static const ]b4_int_type_for([b4_check
])[ yycheck_
[];
220 /// For a state, its accessing symbol.
221 static const ]b4_int_type_for([b4_stos
])[ yystos_
[];
223 /// For a rule, its LHS.
224 static const ]b4_int_type_for([b4_r1
])[ yyr1_
[];
225 /// For a rule, its RHS length.
226 static const ]b4_int_type_for([b4_r2
])[ yyr2_
[];
228 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
229 /// For a symbol, its name in clear.
230 static const char* const yytname_
[];
234 /// Convert the symbol name \a n to a form suitable for a diagnostic.
235 virtual std::string
yytnamerr_ (const char *n
);
239 /// A type to store symbol numbers and -1.
240 typedef ]b4_int_type_for([b4_rhs
])[ rhs_number_type
;
241 /// A `-1'-separated list of the rules' RHS.
242 static const rhs_number_type yyrhs_
[];
243 /// For each rule, the index of the first RHS symbol in \a yyrhs_.
244 static const ]b4_int_type_for([b4_prhs
])[ yyprhs_
[];
245 /// For each rule, its source line number.
246 static const ]b4_int_type_for([b4_rline
])[ yyrline_
[];
247 /// For each scanner token number, its symbol number.
248 static const ]b4_int_type_for([b4_toknum
])[ yytoken_number_
[];
249 /// Report on the debug stream that the rule \a r is going to be reduced.
250 virtual void yy_reduce_print_ (int r
);
251 /// Print the state stack on the debug stream.
252 virtual void yystack_print_ ();
256 std::ostream
* yycdebug_
;
259 /// Convert a scanner token number \a t to a symbol number.
260 token_number_type
yytranslate_ (int t
);
262 /// \brief Reclaim the memory associated to a symbol.
263 /// \param yymsg Why this token is reclaimed.
264 /// \param yytype The symbol type.
265 /// \param yyvaluep Its semantic value.
266 /// \param yylocationp Its location.
267 inline void yydestruct_ (const char* yymsg
,
269 semantic_type
* yyvaluep
,
270 location_type
* yylocationp
);
272 /// Pop \a n symbols the three stacks.
273 inline void yypop_ (unsigned int n
= 1);
276 static const int yyeof_
;
277 /* LAST_ -- Last index in TABLE_. */
278 static const int yylast_
;
279 static const int yynnts_
;
280 static const int yyempty_
;
281 static const int yyfinal_
;
282 static const int yyterror_
;
283 static const int yyerrcode_
;
284 static const int yyntokens_
;
285 static const unsigned int yyuser_token_number_max_
;
286 static const token_number_type yyundef_token_
;
287 ]b4_parse_param_vars
[
291 ]m4_ifset([b4_global_tokens_and_yystype
],
292 [b4_token_defines(b4_tokens
)
295 /* Redirection for backward compatibility. */
296 # define YYSTYPE b4_namespace::b4_parser_class_name::semantic_type
299 m4_ifdef([b4_percent_code_provides
],
300 [[/* Copy the %code "provides" blocks. */
301 ]b4_user_code([b4_percent_code_provides
])])[]dnl
303 [#endif /* ! defined PARSER_HEADER_H */]
305 @output b4_parser_file_name
306 b4_copyright([Skeleton implementation
for Bison
LALR(1) parsers in C
++],
307 [2002, 2003, 2004, 2005, 2006])
308 m4_ifdef([b4_percent_code_top
],
309 [[/* Copy the %code "top" blocks. */
310 ]b4_user_code([b4_percent_code_top
])])[]dnl
311 m4_if(b4_prefix
, [yy
], [],
313 // Take the name prefix into account.
314 #define yylex b4_prefix[]lex])[
316 /* First part of user declarations. */
317 ]b4_user_pre_prologue
320 #include "@basename(]b4_spec_defines_file[@)"]])[
322 /* User implementation prologue. */
323 ]b4_user_post_prologue
324 m4_ifdef([b4_percent_code
],
325 [[/* Copy the unqualified %code blocks. */
326 ]b4_user_code([b4_percent_code
])
332 # include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
333 # define YY_(msgid) dgettext ("bison-runtime", msgid)
337 # define YY_(msgid) msgid
341 /* Suppress unused-variable warnings by "using" E. */
342 #define YYUSE(e) ((void) (e))
344 /* Enable debugging if requested. */
347 /* A pseudo ostream that takes yydebug_ into account. */
348 # define YYCDEBUG if (yydebug_) (*yycdebug_)
350 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
354 *yycdebug_ << Title << ' '; \
355 yy_symbol_print_ ((Type), (Value), (Location)); \
356 *yycdebug_ << std::endl; \
360 # define YY_REDUCE_PRINT(Rule) \
363 yy_reduce_print_ (Rule); \
366 # define YY_STACK_PRINT() \
374 # define YYCDEBUG if (false) std::cerr
375 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
376 # define YY_REDUCE_PRINT(Rule)
377 # define YY_STACK_PRINT()
379 #endif /* !YYDEBUG */
381 #define YYACCEPT goto yyacceptlab
382 #define YYABORT goto yyabortlab
383 #define YYERROR goto yyerrorlab
385 namespace ]b4_namespace
[
389 /* Return YYSTR after stripping away unnecessary quotes and
390 backslashes, so that it's suitable for yyerror. The heuristic is
391 that double-quoting is unnecessary unless the string contains an
392 apostrophe, a comma, or backslash (other than backslash-backslash).
393 YYSTR is taken from yytname. */
395 ]b4_parser_class_name
[::yytnamerr_ (const char *yystr
)
399 std::string yyr
= "";
400 char const *yyp
= yystr
;
407 goto do_not_strip_quotes
;
411 goto do_not_strip_quotes
;
420 do_not_strip_quotes
: ;
428 /// Build a parser object.
429 ]b4_parser_class_name::b4_parser_class_name
[ (]b4_parse_param_decl
[)]m4_ifset([b4_parse_param
], [
432 ]m4_ifset([b4_parse_param
], [ ], [ :])[yydebug_ (false),
433 yycdebug_ (&std::cerr
)]m4_ifset([b4_parse_param
], [,])[
434 #endif]b4_parse_param_cons[
438 ]b4_parser_class_name::~b4_parser_class_name
[ ()
443 /*--------------------------------.
444 | Print this symbol on YYOUTPUT. |
445 `--------------------------------*/
448 ]b4_parser_class_name
[::yy_symbol_value_print_ (int yytype
,
449 const semantic_type
* yyvaluep
, const location_type
* yylocationp
)
455 ]m4_map([b4_symbol_actions
], m4_defn([b4_symbol_printers
]))dnl
463 ]b4_parser_class_name
[::yy_symbol_print_ (int yytype
,
464 const semantic_type
* yyvaluep
, const location_type
* yylocationp
)
466 *yycdebug_
<< (yytype
< yyntokens_
? "token" : "nterm")
467 << ' ' << yytname_
[yytype
] << " ("
468 << *yylocationp
<< ": ";
469 yy_symbol_value_print_ (yytype
, yyvaluep
, yylocationp
);
475 ]b4_parser_class_name
[::yydestruct_ (const char* yymsg
,
476 int yytype
, semantic_type
* yyvaluep
, location_type
* yylocationp
)
482 YY_SYMBOL_PRINT (yymsg
, yytype
, yyvaluep
, yylocationp
);
486 ]m4_map([b4_symbol_actions
], m4_defn([b4_symbol_destructors
]))[
493 ]b4_parser_class_name
[::yypop_ (unsigned int n
)
495 yystate_stack_
.pop (n
);
496 yysemantic_stack_
.pop (n
);
497 yylocation_stack_
.pop (n
);
502 ]b4_parser_class_name
[::debug_stream () const
508 ]b4_parser_class_name
[::set_debug_stream (std::ostream
& o
)
514 ]b4_parser_class_name
[::debug_level_type
515 ]b4_parser_class_name
[::debug_level () const
521 ]b4_parser_class_name
[::set_debug_level (debug_level_type l
)
528 ]b4_parser_class_name
[::parse ()
530 /// Lookahead and lookahead in internal form.
531 int yychar
= yyempty_
;
539 /* Error handling. */
541 int yyerrstatus_
= 0;
543 /// Semantic value of the lookahead.
544 semantic_type yylval
;
545 /// Location of the lookahead.
546 location_type yylloc
;
547 /// The locations where the error started and ended.
548 location yyerror_range
[2];
557 YYCDEBUG
<< "Starting parse" << std::endl
;
559 ]m4_ifdef([b4_initial_action
], [
560 m4_pushdef([b4_at_dollar
], [yylloc
])dnl
561 m4_pushdef([b4_dollar_dollar
], [yylval
])dnl
562 /* User initialization code. */
563 b4_user_initial_action
564 m4_popdef([b4_dollar_dollar
])dnl
565 m4_popdef([b4_at_dollar
])])dnl
567 [ /* Initialize the stacks. The initial state will be pushed in
568 yynewstate, since the latter expects the semantical and the
569 location values to have been already stored, initialize these
570 stacks with a primary value. */
571 yystate_stack_
= state_stack_type (0);
572 yysemantic_stack_
= semantic_stack_type (0);
573 yylocation_stack_
= location_stack_type (0);
574 yysemantic_stack_
.push (yylval
);
575 yylocation_stack_
.push (yylloc
);
579 yystate_stack_
.push (yystate
);
580 YYCDEBUG
<< "Entering state " << yystate
<< std::endl
;
583 if (yystate
== yyfinal_
)
591 /* Try to take a decision without lookahead. */
592 yyn
= yypact_
[yystate
];
593 if (yyn
== yypact_ninf_
)
596 /* Read a lookahead token. */
597 if (yychar
== yyempty_
)
599 YYCDEBUG
<< "Reading a token: ";
600 yychar
= ]b4_c_function_call([yylex
], [int],
601 [[YYSTYPE
*], [&yylval
]][]dnl
602 b4_locations_if([, [[location
*], [&yylloc
]]])dnl
603 m4_ifdef([b4_lex_param
], [, ]b4_lex_param
))[;
607 /* Convert token to internal form. */
608 if (yychar
<= yyeof_
)
610 yychar
= yytoken
= yyeof_
;
611 YYCDEBUG
<< "Now at end of input." << std::endl
;
615 yytoken
= yytranslate_ (yychar
);
616 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
619 /* If the proper action on seeing token YYTOKEN is to reduce or to
620 detect an error, take that action. */
622 if (yyn
< 0 || yylast_
< yyn
|| yycheck_
[yyn
] != yytoken
)
625 /* Reduce or error. */
629 if (yyn
== 0 || yyn
== yytable_ninf_
)
635 /* Shift the lookahead token. */
636 YY_SYMBOL_PRINT ("Shifting", yytoken
, &yylval
, &yylloc
);
638 /* Discard the token being shifted. */
641 yysemantic_stack_
.push (yylval
);
642 yylocation_stack_
.push (yylloc
);
644 /* Count tokens shifted since error; after three, turn off error
652 /*-----------------------------------------------------------.
653 | yydefault -- do the default action for the current state. |
654 `-----------------------------------------------------------*/
656 yyn
= yydefact_
[yystate
];
661 /*-----------------------------.
662 | yyreduce -- Do a reduction. |
663 `-----------------------------*/
666 /* If YYLEN is nonzero, implement the default value of the action:
667 `$$ = $1'. Otherwise, use the top of the stack.
669 Otherwise, the following line sets YYVAL to garbage.
670 This behavior is undocumented and Bison
671 users should not rely upon it. */
673 yyval
= yysemantic_stack_
[yylen
- 1];
675 yyval
= yysemantic_stack_
[0];
678 slice
<location_type
, location_stack_type
> slice (yylocation_stack_
, yylen
);
679 YYLLOC_DEFAULT (yyloc
, slice
, yylen
);
681 YY_REDUCE_PRINT (yyn
);
687 YY_SYMBOL_PRINT ("-> $$ =", yyr1_
[yyn
], &yyval
, &yyloc
);
693 yysemantic_stack_
.push (yyval
);
694 yylocation_stack_
.push (yyloc
);
696 /* Shift the result of the reduction. */
698 yystate
= yypgoto_
[yyn
- yyntokens_
] + yystate_stack_
[0];
699 if (0 <= yystate
&& yystate
<= yylast_
700 && yycheck_
[yystate
] == yystate_stack_
[0])
701 yystate
= yytable_
[yystate
];
703 yystate
= yydefgoto_
[yyn
- yyntokens_
];
706 /*------------------------------------.
707 | yyerrlab -- here on detecting error |
708 `------------------------------------*/
710 /* If not already recovering from an error, report this error. */
714 error (yylloc
, yysyntax_error_ (yystate
]dnl
715 b4_error_verbose_if([, yytoken
])[));
718 yyerror_range
[0] = yylloc
;
719 if (yyerrstatus_
== 3)
721 /* If just tried and failed to reuse lookahead token after an
722 error, discard it. */
724 if (yychar
<= yyeof_
)
726 /* Return failure if at end of input. */
727 if (yychar
== yyeof_
)
732 yydestruct_ ("Error: discarding", yytoken
, &yylval
, &yylloc
);
737 /* Else will try to reuse lookahead token after shifting the error
742 /*---------------------------------------------------.
743 | yyerrorlab -- error raised explicitly by YYERROR. |
744 `---------------------------------------------------*/
747 /* Pacify compilers like GCC when the user code never invokes
748 YYERROR and the label yyerrorlab therefore never appears in user
753 yyerror_range
[0] = yylocation_stack_
[yylen
- 1];
754 /* Do not reclaim the symbols of the rule which action triggered
758 yystate
= yystate_stack_
[0];
761 /*-------------------------------------------------------------.
762 | yyerrlab1 -- common code for both syntax error and YYERROR. |
763 `-------------------------------------------------------------*/
765 yyerrstatus_
= 3; /* Each real token shifted decrements this. */
769 yyn
= yypact_
[yystate
];
770 if (yyn
!= yypact_ninf_
)
773 if (0 <= yyn
&& yyn
<= yylast_
&& yycheck_
[yyn
] == yyterror_
)
781 /* Pop the current state because it cannot handle the error token. */
782 if (yystate_stack_
.height () == 1)
785 yyerror_range
[0] = yylocation_stack_
[0];
786 yydestruct_ ("Error: popping",
788 &yysemantic_stack_
[0], &yylocation_stack_
[0]);
790 yystate
= yystate_stack_
[0];
794 yyerror_range
[1] = yylloc
;
795 // Using YYLLOC is tempting, but would change the location of
796 // the lookahead. YYLOC is available though.
797 YYLLOC_DEFAULT (yyloc
, (yyerror_range
- 1), 2);
798 yysemantic_stack_
.push (yylval
);
799 yylocation_stack_
.push (yyloc
);
801 /* Shift the error token. */
802 YY_SYMBOL_PRINT ("Shifting", yystos_
[yyn
],
803 &yysemantic_stack_
[0], &yylocation_stack_
[0]);
819 if (yychar
!= yyempty_
)
820 yydestruct_ ("Cleanup: discarding lookahead", yytoken
, &yylval
, &yylloc
);
822 /* Do not reclaim the symbols of the rule which action triggered
823 this YYABORT or YYACCEPT. */
825 while (yystate_stack_
.height () != 1)
827 yydestruct_ ("Cleanup: popping",
828 yystos_
[yystate_stack_
[0]],
829 &yysemantic_stack_
[0],
830 &yylocation_stack_
[0]);
837 // Generate an error message.
839 ]b4_parser_class_name
[::yysyntax_error_ (int yystate
]dnl
840 b4_error_verbose_if([, int tok
])[)
845 int yyn
= yypact_
[yystate
];
846 if (yypact_ninf_
< yyn
&& yyn
<= yylast_
)
848 /* Start YYX at -YYN if negative to avoid negative indexes in
850 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
852 /* Stay within bounds of both yycheck and yytname. */
853 int yychecklim
= yylast_
- yyn
+ 1;
854 int yyxend
= yychecklim
< yyntokens_
? yychecklim
: yyntokens_
;
856 for (int x
= yyxbegin
; x
< yyxend
; ++x
)
857 if (yycheck_
[x
+ yyn
] == x
&& x
!= yyterror_
)
860 // FIXME: This method of building the message is not compatible
861 // with internationalization. It should work like yacc.c does it.
862 // That is, first build a string that looks like this:
863 // "syntax error, unexpected %s or %s or %s"
864 // Then, invoke YY_ on this string.
865 // Finally, use the string as a format to output
866 // yytname_[tok], etc.
867 // Until this gets fixed, this message appears in English only.
868 res
= "syntax error, unexpected ";
869 res
+= yytnamerr_ (yytname_
[tok
]);
873 for (int x
= yyxbegin
; x
< yyxend
; ++x
)
874 if (yycheck_
[x
+ yyn
] == x
&& x
!= yyterror_
)
876 res
+= (!count
++) ? ", expecting " : " or ";
877 res
+= yytnamerr_ (yytname_
[x
]);
883 res
= YY_("syntax error");
888 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
890 const ]b4_int_type(b4_pact_ninf
, b4_pact_ninf
) b4_parser_class_name::yypact_ninf_
= b4_pact_ninf
[;
891 const ]b4_int_type_for([b4_pact
])[
892 ]b4_parser_class_name
[::yypact_
[] =
897 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
898 doesn't specify something else to do. Zero means the default is an
900 const ]b4_int_type_for([b4_defact
])[
901 ]b4_parser_class_name
[::yydefact_
[] =
906 /* YYPGOTO[NTERM-NUM]. */
907 const ]b4_int_type_for([b4_pgoto
])[
908 ]b4_parser_class_name
[::yypgoto_
[] =
913 /* YYDEFGOTO[NTERM-NUM]. */
914 const ]b4_int_type_for([b4_defgoto
])[
915 ]b4_parser_class_name
[::yydefgoto_
[] =
920 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
921 positive, shift that token. If negative, reduce the rule which
922 number is the opposite. If zero, do what YYDEFACT says. */
923 const ]b4_int_type(b4_table_ninf
, b4_table_ninf
) b4_parser_class_name::yytable_ninf_
= b4_table_ninf
[;
924 const ]b4_int_type_for([b4_table
])[
925 ]b4_parser_class_name
[::yytable_
[] =
931 const ]b4_int_type_for([b4_check
])[
932 ]b4_parser_class_name
[::yycheck_
[] =
937 /* STOS_[STATE-NUM] -- The (internal number of the) accessing
938 symbol of state STATE-NUM. */
939 const ]b4_int_type_for([b4_stos
])[
940 ]b4_parser_class_name
[::yystos_
[] =
946 /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
948 const ]b4_int_type_for([b4_toknum
])[
949 ]b4_parser_class_name
[::yytoken_number_
[] =
955 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
956 const ]b4_int_type_for([b4_r1
])[
957 ]b4_parser_class_name
[::yyr1_
[] =
962 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
963 const ]b4_int_type_for([b4_r2
])[
964 ]b4_parser_class_name
[::yyr2_
[] =
969 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
970 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
971 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
973 const ]b4_parser_class_name
[::yytname_
[] =
980 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
981 const ]b4_parser_class_name
[::rhs_number_type
982 ]b4_parser_class_name
[::yyrhs_
[] =
987 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
989 const ]b4_int_type_for([b4_prhs
])[
990 ]b4_parser_class_name
[::yyprhs_
[] =
995 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
996 const ]b4_int_type_for([b4_rline
])[
997 ]b4_parser_class_name
[::yyrline_
[] =
1002 // Print the state stack on the debug stream.
1004 ]b4_parser_class_name
[::yystack_print_ ()
1006 *yycdebug_
<< "Stack now";
1007 for (state_stack_type::const_iterator i
= yystate_stack_
.begin ();
1008 i
!= yystate_stack_
.end (); ++i
)
1009 *yycdebug_
<< ' ' << *i
;
1010 *yycdebug_
<< std::endl
;
1013 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1015 ]b4_parser_class_name
[::yy_reduce_print_ (int yyrule
)
1017 unsigned int yylno
= yyrline_
[yyrule
];
1018 int yynrhs
= yyr2_
[yyrule
];
1019 /* Print the symbols being reduced, and their result. */
1020 *yycdebug_
<< "Reducing stack by rule " << yyrule
- 1
1021 << " (line " << yylno
<< "), ";
1022 /* The symbols being reduced. */
1023 for (int yyi
= 0; yyi
< yynrhs
; yyi
++)
1024 YY_SYMBOL_PRINT (" $" << yyi
+ 1 << " =",
1025 yyrhs_
[yyprhs_
[yyrule
] + yyi
],
1026 &]b4_rhs_value(yynrhs
, yyi
+ 1)[,
1027 &]b4_rhs_location(yynrhs
, yyi
+ 1)[);
1031 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1032 ]b4_parser_class_name
[::token_number_type
1033 ]b4_parser_class_name
[::yytranslate_ (int t
)
1036 const token_number_type
1041 if ((unsigned int) t
<= yyuser_token_number_max_
)
1042 return translate_table
[t
];
1044 return yyundef_token_
;
1047 const int ]b4_parser_class_name
[::yyeof_
= 0;
1048 const int ]b4_parser_class_name
[::yylast_
= ]b4_last
[;
1049 const int ]b4_parser_class_name
[::yynnts_
= ]b4_nterms_number
[;
1050 const int ]b4_parser_class_name
[::yyempty_
= -2;
1051 const int ]b4_parser_class_name
[::yyfinal_
= ]b4_final_state_number
[;
1052 const int ]b4_parser_class_name
[::yyterror_
= 1;
1053 const int ]b4_parser_class_name
[::yyerrcode_
= 256;
1054 const int ]b4_parser_class_name
[::yyntokens_
= ]b4_tokens_number
[;
1056 const unsigned int ]b4_parser_class_name
[::yyuser_token_number_max_
= ]b4_user_token_number_max
[;
1057 const ]b4_parser_class_name
[::token_number_type
]b4_parser_class_name
[::yyundef_token_
= ]b4_undef_token_number
[;
1059 } // namespace ]b4_namespace[
1063 @output b4_dir_prefix
[]stack
.hh
1064 b4_copyright([Stack handling
for Bison parsers in C
++],
1065 [2002, 2003, 2004, 2005, 2006])[
1067 #ifndef BISON_STACK_HH
1068 # define BISON_STACK_HH
1072 namespace ]b4_namespace
[
1074 template <class T
, class S
= std::deque
<T
> >
1079 // Hide our reversed order.
1080 typedef typename
S::reverse_iterator iterator
;
1081 typedef typename
S::const_reverse_iterator const_iterator
;
1087 stack (unsigned int n
) : seq_ (n
)
1093 operator [] (unsigned int i
)
1100 operator [] (unsigned int i
) const
1109 seq_
.push_front (t
);
1114 pop (unsigned int n
= 1)
1124 return seq_
.size ();
1127 inline const_iterator
begin () const { return seq_
.rbegin (); }
1128 inline const_iterator
end () const { return seq_
.rend (); }
1135 /// Present a slice of the top of a stack.
1136 template <class T
, class S
= stack
<T
> >
1141 slice (const S
& stack
,
1142 unsigned int range
) : stack_ (stack
),
1149 operator [] (unsigned int i
) const
1151 return stack_
[range_
- i
];
1157 unsigned int range_
;
1161 #endif // not BISON_STACK_HH]