]> git.saurik.com Git - bison.git/blob - data/lalr1.cc
gnulib: update.
[bison.git] / data / lalr1.cc
1 # C++ skeleton for Bison
2
3 # Copyright (C) 2002-2012 Free Software Foundation, Inc.
4
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 m4_include(b4_pkgdatadir/[c++.m4])
19
20 m4_define([b4_parser_class_name],
21 [b4_percent_define_get([[parser_class_name]])])
22
23 # The header is mandatory.
24 b4_defines_if([],
25 [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
26
27 b4_percent_define_ifdef([[location_type]], [],
28 [# Backward compatibility.
29 m4_define([b4_location_constructors])
30 m4_include(b4_pkgdatadir/[location.cc])])
31
32 # We do want M4 expansion after # for CPP macros.
33 m4_changecom()
34 m4_divert_push(0)dnl
35 b4_defines_if(
36 [@output(b4_spec_defines_file@)@
37 b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++],
38 [2002-2011])
39 dnl FIXME: This is wrong, we want computed header guards.
40 [
41 /* C++ LALR(1) parser skeleton written by Akim Demaille. */
42
43 #ifndef PARSER_HEADER_H
44 # define PARSER_HEADER_H
45
46 ]b4_percent_code_get([[requires]])[
47
48 #include <string>
49 #include <iostream>
50 #include "stack.hh"
51 ]b4_percent_define_ifdef([[location_type]], [],
52 [[#include "location.hh"]])[
53
54 /* Enabling traces. */
55 #ifndef YYDEBUG
56 # define YYDEBUG ]b4_debug_flag[
57 #endif
58
59 /* Enabling verbose error messages. */
60 #ifdef YYERROR_VERBOSE
61 # undef YYERROR_VERBOSE
62 # define YYERROR_VERBOSE 1
63 #else
64 # define YYERROR_VERBOSE ]b4_error_verbose_flag[
65 #endif
66
67 /* Enabling the token table. */
68 #ifndef YYTOKEN_TABLE
69 # define YYTOKEN_TABLE ]b4_token_table[
70 #endif
71
72 ]b4_namespace_open[
73
74 /// A Bison parser.
75 class ]b4_parser_class_name[
76 {
77 public:
78 /// Symbol semantic values.
79 #ifndef YYSTYPE
80 ]m4_ifdef([b4_stype],
81 [ union semantic_type
82 {
83 b4_user_stype
84 };],
85 [m4_if(b4_tag_seen_flag, 0,
86 [[ typedef int semantic_type;]],
87 [[ typedef YYSTYPE semantic_type;]])])[
88 #else
89 typedef YYSTYPE semantic_type;
90 #endif
91 /// Symbol locations.
92 typedef ]b4_percent_define_get([[location_type]],
93 [[location]])[ location_type;
94 /// Tokens.
95 struct token
96 {
97 ]b4_token_enums(b4_tokens)[
98 };
99 /// Token type.
100 typedef token::yytokentype token_type;
101
102 /// Build a parser object.
103 ]b4_parser_class_name[ (]b4_parse_param_decl[);
104 virtual ~]b4_parser_class_name[ ();
105
106 /// Parse.
107 /// \returns 0 iff parsing succeeded.
108 virtual int parse ();
109
110 #if YYDEBUG
111 /// The current debugging stream.
112 std::ostream& debug_stream () const;
113 /// Set the current debugging stream.
114 void set_debug_stream (std::ostream &);
115
116 /// Type for debugging levels.
117 typedef int debug_level_type;
118 /// The current debugging level.
119 debug_level_type debug_level () const;
120 /// Set the current debugging level.
121 void set_debug_level (debug_level_type l);
122 #endif
123
124 private:
125 /// Report a syntax error.
126 /// \param loc where the syntax error is found.
127 /// \param msg a description of the syntax error.
128 virtual void error (const location_type& loc, const std::string& msg);
129
130 /// Generate an error message.
131 /// \param state the state where the error occurred.
132 /// \param tok the lookahead token.
133 virtual std::string yysyntax_error_ (int yystate, int tok);
134
135 #if YYDEBUG
136 /// \brief Report a symbol value on the debug stream.
137 /// \param yytype The token type.
138 /// \param yyvaluep Its semantic value.
139 /// \param yylocationp Its location.
140 virtual void yy_symbol_value_print_ (int yytype,
141 const semantic_type* yyvaluep,
142 const location_type* yylocationp);
143 /// \brief Report a symbol on the debug stream.
144 /// \param yytype The token type.
145 /// \param yyvaluep Its semantic value.
146 /// \param yylocationp Its location.
147 virtual void yy_symbol_print_ (int yytype,
148 const semantic_type* yyvaluep,
149 const location_type* yylocationp);
150 #endif
151
152
153 /// State numbers.
154 typedef int state_type;
155 /// State stack type.
156 typedef stack<state_type> state_stack_type;
157 /// Semantic value stack type.
158 typedef stack<semantic_type> semantic_stack_type;
159 /// location stack type.
160 typedef stack<location_type> location_stack_type;
161
162 /// The state stack.
163 state_stack_type yystate_stack_;
164 /// The semantic value stack.
165 semantic_stack_type yysemantic_stack_;
166 /// The location stack.
167 location_stack_type yylocation_stack_;
168
169 /// Whether the given \c yypact_ value indicates a defaulted state.
170 /// \param yyvalue the value to check
171 static bool yy_pact_value_is_default_ (int yyvalue);
172
173 /// Whether the given \c yytable_ value indicates a syntax error.
174 /// \param yyvalue the value to check
175 static bool yy_table_value_is_error_ (int yyvalue);
176
177 /// Internal symbol numbers.
178 typedef ]b4_int_type_for([b4_translate])[ token_number_type;
179 /* Tables. */
180 /// For a state, the index in \a yytable_ of its portion.
181 static const ]b4_int_type_for([b4_pact])[ yypact_[];
182 static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
183
184 /// For a state, default reduction number.
185 /// Unless\a yytable_ specifies something else to do.
186 /// Zero means the default is an error.
187 static const ]b4_int_type_for([b4_defact])[ yydefact_[];
188
189 static const ]b4_int_type_for([b4_pgoto])[ yypgoto_[];
190 static const ]b4_int_type_for([b4_defgoto])[ yydefgoto_[];
191
192 /// What to do in a state.
193 /// \a yytable_[yypact_[s]]: what to do in state \a s.
194 /// - if positive, shift that token.
195 /// - if negative, reduce the rule which number is the opposite.
196 /// - if zero, do what YYDEFACT says.
197 static const ]b4_int_type_for([b4_table])[ yytable_[];
198 static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
199
200 static const ]b4_int_type_for([b4_check])[ yycheck_[];
201
202 /// For a state, its accessing symbol.
203 static const ]b4_int_type_for([b4_stos])[ yystos_[];
204
205 /// For a rule, its LHS.
206 static const ]b4_int_type_for([b4_r1])[ yyr1_[];
207 /// For a rule, its RHS length.
208 static const ]b4_int_type_for([b4_r2])[ yyr2_[];
209
210 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
211 /// For a symbol, its name in clear.
212 static const char* const yytname_[];
213 #endif]b4_error_verbose_if([
214
215 /// Convert the symbol name \a n to a form suitable for a diagnostic.
216 static std::string yytnamerr_ (const char *n);])[
217
218 #if YYDEBUG
219 /// A type to store symbol numbers and -1.
220 typedef ]b4_int_type_for([b4_rhs])[ rhs_number_type;
221 /// A `-1'-separated list of the rules' RHS.
222 static const rhs_number_type yyrhs_[];
223 /// For each rule, the index of the first RHS symbol in \a yyrhs_.
224 static const ]b4_int_type_for([b4_prhs])[ yyprhs_[];
225 /// For each rule, its source line number.
226 static const ]b4_int_type_for([b4_rline])[ yyrline_[];
227 /// For each scanner token number, its symbol number.
228 static const ]b4_int_type_for([b4_toknum])[ yytoken_number_[];
229 /// Report on the debug stream that the rule \a r is going to be reduced.
230 virtual void yy_reduce_print_ (int r);
231 /// Print the state stack on the debug stream.
232 virtual void yystack_print_ ();
233
234 /* Debugging. */
235 int yydebug_;
236 std::ostream* yycdebug_;
237 #endif
238
239 /// Convert a scanner token number \a t to a symbol number.
240 token_number_type yytranslate_ (int t);
241
242 /// \brief Reclaim the memory associated to a symbol.
243 /// \param yymsg Why this token is reclaimed.
244 /// \param yytype The symbol type.
245 /// \param yyvaluep Its semantic value.
246 /// \param yylocationp Its location.
247 inline void yydestruct_ (const char* yymsg,
248 int yytype,
249 semantic_type* yyvaluep,
250 location_type* yylocationp);
251
252 /// Pop \a n symbols the three stacks.
253 inline void yypop_ (unsigned int n = 1);
254
255 /* Constants. */
256 static const int yyeof_;
257 /* LAST_ -- Last index in TABLE_. */
258 static const int yylast_;
259 static const int yynnts_;
260 static const int yyempty_;
261 static const int yyfinal_;
262 static const int yyterror_;
263 static const int yyerrcode_;
264 static const int yyntokens_;
265 static const unsigned int yyuser_token_number_max_;
266 static const token_number_type yyundef_token_;
267 ]b4_parse_param_vars[
268 };
269 ]b4_namespace_close[
270
271 ]b4_percent_define_flag_if([[global_tokens_and_yystype]],
272 [b4_token_defines(b4_tokens)
273
274 #ifndef YYSTYPE
275 /* Redirection for backward compatibility. */
276 # define YYSTYPE b4_namespace_ref::b4_parser_class_name::semantic_type
277 #endif
278 ])
279 b4_percent_code_get([[provides]])[]dnl
280
281 [#endif /* ! defined PARSER_HEADER_H */]
282 ])dnl
283 @output(b4_parser_file_name@)@
284 b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++],
285 [2002-2011])
286 b4_percent_code_get([[top]])[]dnl
287 m4_if(b4_prefix, [yy], [],
288 [
289 // Take the name prefix into account.
290 #define yylex b4_prefix[]lex])[
291
292 /* First part of user declarations. */
293 ]b4_user_pre_prologue
294
295 b4_defines_if([[
296 #include "@basename(]b4_spec_defines_file[@)"]])[
297
298 /* User implementation prologue. */
299 ]b4_user_post_prologue
300 b4_percent_code_get[]dnl
301
302 [#ifndef YY_
303 # if defined YYENABLE_NLS && YYENABLE_NLS
304 # if ENABLE_NLS
305 # include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
306 # define YY_(msgid) dgettext ("bison-runtime", msgid)
307 # endif
308 # endif
309 # ifndef YY_
310 # define YY_(msgid) msgid
311 # endif
312 #endif
313
314 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
315 If N is 0, then set CURRENT to the empty location which ends
316 the previous symbol: RHS[0] (always defined). */
317
318 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
319 #ifndef YYLLOC_DEFAULT
320 # define YYLLOC_DEFAULT(Current, Rhs, N) \
321 do \
322 if (N) \
323 { \
324 (Current).begin = YYRHSLOC (Rhs, 1).begin; \
325 (Current).end = YYRHSLOC (Rhs, N).end; \
326 } \
327 else \
328 { \
329 (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
330 } \
331 while (false)
332 #endif
333
334 /* Suppress unused-variable warnings by "using" E. */
335 #define YYUSE(e) ((void) (e))
336
337 /* Enable debugging if requested. */
338 #if YYDEBUG
339
340 /* A pseudo ostream that takes yydebug_ into account. */
341 # define YYCDEBUG if (yydebug_) (*yycdebug_)
342
343 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
344 do { \
345 if (yydebug_) \
346 { \
347 *yycdebug_ << Title << ' '; \
348 yy_symbol_print_ ((Type), (Value), (Location)); \
349 *yycdebug_ << std::endl; \
350 } \
351 } while (false)
352
353 # define YY_REDUCE_PRINT(Rule) \
354 do { \
355 if (yydebug_) \
356 yy_reduce_print_ (Rule); \
357 } while (false)
358
359 # define YY_STACK_PRINT() \
360 do { \
361 if (yydebug_) \
362 yystack_print_ (); \
363 } while (false)
364
365 #else /* !YYDEBUG */
366
367 # define YYCDEBUG if (false) std::cerr
368 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
369 # define YY_REDUCE_PRINT(Rule)
370 # define YY_STACK_PRINT()
371
372 #endif /* !YYDEBUG */
373
374 #define yyerrok (yyerrstatus_ = 0)
375 #define yyclearin (yychar = yyempty_)
376
377 #define YYACCEPT goto yyacceptlab
378 #define YYABORT goto yyabortlab
379 #define YYERROR goto yyerrorlab
380 #define YYRECOVERING() (!!yyerrstatus_)
381
382 ]b4_namespace_open[]b4_error_verbose_if([[
383
384 /* Return YYSTR after stripping away unnecessary quotes and
385 backslashes, so that it's suitable for yyerror. The heuristic is
386 that double-quoting is unnecessary unless the string contains an
387 apostrophe, a comma, or backslash (other than backslash-backslash).
388 YYSTR is taken from yytname. */
389 std::string
390 ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
391 {
392 if (*yystr == '"')
393 {
394 std::string yyr = "";
395 char const *yyp = yystr;
396
397 for (;;)
398 switch (*++yyp)
399 {
400 case '\'':
401 case ',':
402 goto do_not_strip_quotes;
403
404 case '\\':
405 if (*++yyp != '\\')
406 goto do_not_strip_quotes;
407 /* Fall through. */
408 default:
409 yyr += *yyp;
410 break;
411
412 case '"':
413 return yyr;
414 }
415 do_not_strip_quotes: ;
416 }
417
418 return yystr;
419 }
420 ]])[
421
422 /// Build a parser object.
423 ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
424 :])[
425 #if YYDEBUG
426 ]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
427 yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
428 #endif]b4_parse_param_cons[
429 {
430 }
431
432 ]b4_parser_class_name::~b4_parser_class_name[ ()
433 {
434 }
435
436 #if YYDEBUG
437 /*--------------------------------.
438 | Print this symbol on YYOUTPUT. |
439 `--------------------------------*/
440
441 inline void
442 ]b4_parser_class_name[::yy_symbol_value_print_ (int yytype,
443 const semantic_type* yyvaluep, const location_type* yylocationp)
444 {
445 YYUSE (yylocationp);
446 YYUSE (yyvaluep);
447 switch (yytype)
448 {
449 ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
450 [ default:
451 break;
452 }
453 }
454
455
456 void
457 ]b4_parser_class_name[::yy_symbol_print_ (int yytype,
458 const semantic_type* yyvaluep, const location_type* yylocationp)
459 {
460 *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm")
461 << ' ' << yytname_[yytype] << " ("
462 << *yylocationp << ": ";
463 yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
464 *yycdebug_ << ')';
465 }
466 #endif
467
468 void
469 ]b4_parser_class_name[::yydestruct_ (const char* yymsg,
470 int yytype, semantic_type* yyvaluep, location_type* yylocationp)
471 {
472 YYUSE (yylocationp);
473 YYUSE (yymsg);
474 YYUSE (yyvaluep);
475
476 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
477
478 switch (yytype)
479 {
480 ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
481 default:
482 break;
483 }
484 }
485
486 void
487 ]b4_parser_class_name[::yypop_ (unsigned int n)
488 {
489 yystate_stack_.pop (n);
490 yysemantic_stack_.pop (n);
491 yylocation_stack_.pop (n);
492 }
493
494 #if YYDEBUG
495 std::ostream&
496 ]b4_parser_class_name[::debug_stream () const
497 {
498 return *yycdebug_;
499 }
500
501 void
502 ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
503 {
504 yycdebug_ = &o;
505 }
506
507
508 ]b4_parser_class_name[::debug_level_type
509 ]b4_parser_class_name[::debug_level () const
510 {
511 return yydebug_;
512 }
513
514 void
515 ]b4_parser_class_name[::set_debug_level (debug_level_type l)
516 {
517 yydebug_ = l;
518 }
519 #endif
520
521 inline bool
522 ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
523 {
524 return yyvalue == yypact_ninf_;
525 }
526
527 inline bool
528 ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
529 {
530 return yyvalue == yytable_ninf_;
531 }
532
533 int
534 ]b4_parser_class_name[::parse ()
535 {
536 /// Lookahead and lookahead in internal form.
537 int yychar = yyempty_;
538 int yytoken = 0;
539
540 /* State. */
541 int yyn;
542 int yylen = 0;
543 int yystate = 0;
544
545 /* Error handling. */
546 int yynerrs_ = 0;
547 int yyerrstatus_ = 0;
548
549 /// Semantic value of the lookahead.
550 semantic_type yylval;
551 /// Location of the lookahead.
552 location_type yylloc;
553 /// The locations where the error started and ended.
554 location_type yyerror_range[3];
555
556 /// $$.
557 semantic_type yyval;
558 /// @@$.
559 location_type yyloc;
560
561 int yyresult;
562
563 YYCDEBUG << "Starting parse" << std::endl;
564
565 ]m4_ifdef([b4_initial_action], [
566 m4_pushdef([b4_at_dollar], [yylloc])dnl
567 m4_pushdef([b4_dollar_dollar], [yylval])dnl
568 /* User initialization code. */
569 b4_user_initial_action
570 m4_popdef([b4_dollar_dollar])dnl
571 m4_popdef([b4_at_dollar])])dnl
572
573 [ /* Initialize the stacks. The initial state will be pushed in
574 yynewstate, since the latter expects the semantical and the
575 location values to have been already stored, initialize these
576 stacks with a primary value. */
577 yystate_stack_ = state_stack_type (0);
578 yysemantic_stack_ = semantic_stack_type (0);
579 yylocation_stack_ = location_stack_type (0);
580 yysemantic_stack_.push (yylval);
581 yylocation_stack_.push (yylloc);
582
583 /* New state. */
584 yynewstate:
585 yystate_stack_.push (yystate);
586 YYCDEBUG << "Entering state " << yystate << std::endl;
587
588 /* Accept? */
589 if (yystate == yyfinal_)
590 goto yyacceptlab;
591
592 goto yybackup;
593
594 /* Backup. */
595 yybackup:
596
597 /* Try to take a decision without lookahead. */
598 yyn = yypact_[yystate];
599 if (yy_pact_value_is_default_ (yyn))
600 goto yydefault;
601
602 /* Read a lookahead token. */
603 if (yychar == yyempty_)
604 {
605 YYCDEBUG << "Reading a token: ";
606 yychar = ]b4_c_function_call([yylex], [int],
607 [[YYSTYPE*], [&yylval]][]dnl
608 b4_locations_if([, [[location*], [&yylloc]]])dnl
609 m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
610 }
611
612
613 /* Convert token to internal form. */
614 if (yychar <= yyeof_)
615 {
616 yychar = yytoken = yyeof_;
617 YYCDEBUG << "Now at end of input." << std::endl;
618 }
619 else
620 {
621 yytoken = yytranslate_ (yychar);
622 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
623 }
624
625 /* If the proper action on seeing token YYTOKEN is to reduce or to
626 detect an error, take that action. */
627 yyn += yytoken;
628 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
629 goto yydefault;
630
631 /* Reduce or error. */
632 yyn = yytable_[yyn];
633 if (yyn <= 0)
634 {
635 if (yy_table_value_is_error_ (yyn))
636 goto yyerrlab;
637 yyn = -yyn;
638 goto yyreduce;
639 }
640
641 /* Shift the lookahead token. */
642 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
643
644 /* Discard the token being shifted. */
645 yychar = yyempty_;
646
647 yysemantic_stack_.push (yylval);
648 yylocation_stack_.push (yylloc);
649
650 /* Count tokens shifted since error; after three, turn off error
651 status. */
652 if (yyerrstatus_)
653 --yyerrstatus_;
654
655 yystate = yyn;
656 goto yynewstate;
657
658 /*-----------------------------------------------------------.
659 | yydefault -- do the default action for the current state. |
660 `-----------------------------------------------------------*/
661 yydefault:
662 yyn = yydefact_[yystate];
663 if (yyn == 0)
664 goto yyerrlab;
665 goto yyreduce;
666
667 /*-----------------------------.
668 | yyreduce -- Do a reduction. |
669 `-----------------------------*/
670 yyreduce:
671 yylen = yyr2_[yyn];
672 /* If YYLEN is nonzero, implement the default value of the action:
673 `$$ = $1'. Otherwise, use the top of the stack.
674
675 Otherwise, the following line sets YYVAL to garbage.
676 This behavior is undocumented and Bison
677 users should not rely upon it. */
678 if (yylen)
679 yyval = yysemantic_stack_[yylen - 1];
680 else
681 yyval = yysemantic_stack_[0];
682
683 {
684 slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
685 YYLLOC_DEFAULT (yyloc, slice, yylen);
686 }
687 YY_REDUCE_PRINT (yyn);
688 switch (yyn)
689 {
690 ]b4_user_actions[
691 default:
692 break;
693 }
694 /* User semantic actions sometimes alter yychar, and that requires
695 that yytoken be updated with the new translation. We take the
696 approach of translating immediately before every use of yytoken.
697 One alternative is translating here after every semantic action,
698 but that translation would be missed if the semantic action
699 invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
700 yychar. In the case of YYABORT or YYACCEPT, an incorrect
701 destructor might then be invoked immediately. In the case of
702 YYERROR, subsequent parser actions might lead to an incorrect
703 destructor call or verbose syntax error message before the
704 lookahead is translated. */
705 YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
706
707 yypop_ (yylen);
708 yylen = 0;
709 YY_STACK_PRINT ();
710
711 yysemantic_stack_.push (yyval);
712 yylocation_stack_.push (yyloc);
713
714 /* Shift the result of the reduction. */
715 yyn = yyr1_[yyn];
716 yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
717 if (0 <= yystate && yystate <= yylast_
718 && yycheck_[yystate] == yystate_stack_[0])
719 yystate = yytable_[yystate];
720 else
721 yystate = yydefgoto_[yyn - yyntokens_];
722 goto yynewstate;
723
724 /*------------------------------------.
725 | yyerrlab -- here on detecting error |
726 `------------------------------------*/
727 yyerrlab:
728 /* Make sure we have latest lookahead translation. See comments at
729 user semantic actions for why this is necessary. */
730 yytoken = yytranslate_ (yychar);
731
732 /* If not already recovering from an error, report this error. */
733 if (!yyerrstatus_)
734 {
735 ++yynerrs_;
736 if (yychar == yyempty_)
737 yytoken = yyempty_;
738 error (yylloc, yysyntax_error_ (yystate, yytoken));
739 }
740
741 yyerror_range[1] = yylloc;
742 if (yyerrstatus_ == 3)
743 {
744 /* If just tried and failed to reuse lookahead token after an
745 error, discard it. */
746
747 if (yychar <= yyeof_)
748 {
749 /* Return failure if at end of input. */
750 if (yychar == yyeof_)
751 YYABORT;
752 }
753 else
754 {
755 yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
756 yychar = yyempty_;
757 }
758 }
759
760 /* Else will try to reuse lookahead token after shifting the error
761 token. */
762 goto yyerrlab1;
763
764
765 /*---------------------------------------------------.
766 | yyerrorlab -- error raised explicitly by YYERROR. |
767 `---------------------------------------------------*/
768 yyerrorlab:
769
770 /* Pacify compilers like GCC when the user code never invokes
771 YYERROR and the label yyerrorlab therefore never appears in user
772 code. */
773 if (false)
774 goto yyerrorlab;
775
776 yyerror_range[1] = yylocation_stack_[yylen - 1];
777 /* Do not reclaim the symbols of the rule which action triggered
778 this YYERROR. */
779 yypop_ (yylen);
780 yylen = 0;
781 yystate = yystate_stack_[0];
782 goto yyerrlab1;
783
784 /*-------------------------------------------------------------.
785 | yyerrlab1 -- common code for both syntax error and YYERROR. |
786 `-------------------------------------------------------------*/
787 yyerrlab1:
788 yyerrstatus_ = 3; /* Each real token shifted decrements this. */
789
790 for (;;)
791 {
792 yyn = yypact_[yystate];
793 if (!yy_pact_value_is_default_ (yyn))
794 {
795 yyn += yyterror_;
796 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
797 {
798 yyn = yytable_[yyn];
799 if (0 < yyn)
800 break;
801 }
802 }
803
804 /* Pop the current state because it cannot handle the error token. */
805 if (yystate_stack_.height () == 1)
806 YYABORT;
807
808 yyerror_range[1] = yylocation_stack_[0];
809 yydestruct_ ("Error: popping",
810 yystos_[yystate],
811 &yysemantic_stack_[0], &yylocation_stack_[0]);
812 yypop_ ();
813 yystate = yystate_stack_[0];
814 YY_STACK_PRINT ();
815 }
816
817 yyerror_range[2] = yylloc;
818 // Using YYLLOC is tempting, but would change the location of
819 // the lookahead. YYLOC is available though.
820 YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
821 yysemantic_stack_.push (yylval);
822 yylocation_stack_.push (yyloc);
823
824 /* Shift the error token. */
825 YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
826 &yysemantic_stack_[0], &yylocation_stack_[0]);
827
828 yystate = yyn;
829 goto yynewstate;
830
831 /* Accept. */
832 yyacceptlab:
833 yyresult = 0;
834 goto yyreturn;
835
836 /* Abort. */
837 yyabortlab:
838 yyresult = 1;
839 goto yyreturn;
840
841 yyreturn:
842 if (yychar != yyempty_)
843 {
844 /* Make sure we have latest lookahead translation. See comments
845 at user semantic actions for why this is necessary. */
846 yytoken = yytranslate_ (yychar);
847 yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval,
848 &yylloc);
849 }
850
851 /* Do not reclaim the symbols of the rule which action triggered
852 this YYABORT or YYACCEPT. */
853 yypop_ (yylen);
854 while (yystate_stack_.height () != 1)
855 {
856 yydestruct_ ("Cleanup: popping",
857 yystos_[yystate_stack_[0]],
858 &yysemantic_stack_[0],
859 &yylocation_stack_[0]);
860 yypop_ ();
861 }
862
863 return yyresult;
864 }
865
866 // Generate an error message.
867 std::string
868 ]b4_parser_class_name[::yysyntax_error_ (]dnl
869 b4_error_verbose_if([int yystate, int yytoken],
870 [int, int])[)
871 {]b4_error_verbose_if([[
872 std::string yyres;
873 // Number of reported tokens (one for the "unexpected", one per
874 // "expected").
875 size_t yycount = 0;
876 // Its maximum.
877 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
878 // Arguments of yyformat.
879 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
880
881 /* There are many possibilities here to consider:
882 - If this state is a consistent state with a default action, then
883 the only way this function was invoked is if the default action
884 is an error action. In that case, don't check for expected
885 tokens because there are none.
886 - The only way there can be no lookahead present (in yytoken) is
887 if this state is a consistent state with a default action.
888 Thus, detecting the absence of a lookahead is sufficient to
889 determine that there is no unexpected or expected token to
890 report. In that case, just report a simple "syntax error".
891 - Don't assume there isn't a lookahead just because this state is
892 a consistent state with a default action. There might have
893 been a previous inconsistent state, consistent state with a
894 non-default action, or user semantic action that manipulated
895 yychar.
896 - Of course, the expected token list depends on states to have
897 correct lookahead information, and it depends on the parser not
898 to perform extra reductions after fetching a lookahead from the
899 scanner and before detecting a syntax error. Thus, state
900 merging (from LALR or IELR) and default reductions corrupt the
901 expected token list. However, the list is correct for
902 canonical LR with one exception: it will still contain any
903 token that will not be accepted due to an error action in a
904 later state.
905 */
906 if (yytoken != yyempty_)
907 {
908 yyarg[yycount++] = yytname_[yytoken];
909 int yyn = yypact_[yystate];
910 if (!yy_pact_value_is_default_ (yyn))
911 {
912 /* Start YYX at -YYN if negative to avoid negative indexes in
913 YYCHECK. In other words, skip the first -YYN actions for
914 this state because they are default actions. */
915 int yyxbegin = yyn < 0 ? -yyn : 0;
916 /* Stay within bounds of both yycheck and yytname. */
917 int yychecklim = yylast_ - yyn + 1;
918 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
919 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
920 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
921 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
922 {
923 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
924 {
925 yycount = 1;
926 break;
927 }
928 else
929 yyarg[yycount++] = yytname_[yyx];
930 }
931 }
932 }
933
934 char const* yyformat = 0;
935 switch (yycount)
936 {
937 #define YYCASE_(N, S) \
938 case N: \
939 yyformat = S; \
940 break
941 YYCASE_(0, YY_("syntax error"));
942 YYCASE_(1, YY_("syntax error, unexpected %s"));
943 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
944 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
945 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
946 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
947 #undef YYCASE_
948 }
949
950 // Argument number.
951 size_t yyi = 0;
952 for (char const* yyp = yyformat; *yyp; ++yyp)
953 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
954 {
955 yyres += yytnamerr_ (yyarg[yyi++]);
956 ++yyp;
957 }
958 else
959 yyres += *yyp;
960 return yyres;]], [[
961 return YY_("syntax error");]])[
962 }
963
964
965 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
966 STATE-NUM. */
967 const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
968 const ]b4_int_type_for([b4_pact])[
969 ]b4_parser_class_name[::yypact_[] =
970 {
971 ]b4_pact[
972 };
973
974 /* YYDEFACT[S] -- default reduction number in state S. Performed when
975 YYTABLE doesn't specify something else to do. Zero means the
976 default is an error. */
977 const ]b4_int_type_for([b4_defact])[
978 ]b4_parser_class_name[::yydefact_[] =
979 {
980 ]b4_defact[
981 };
982
983 /* YYPGOTO[NTERM-NUM]. */
984 const ]b4_int_type_for([b4_pgoto])[
985 ]b4_parser_class_name[::yypgoto_[] =
986 {
987 ]b4_pgoto[
988 };
989
990 /* YYDEFGOTO[NTERM-NUM]. */
991 const ]b4_int_type_for([b4_defgoto])[
992 ]b4_parser_class_name[::yydefgoto_[] =
993 {
994 ]b4_defgoto[
995 };
996
997 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
998 positive, shift that token. If negative, reduce the rule which
999 number is the opposite. If YYTABLE_NINF_, syntax error. */
1000 const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
1001 const ]b4_int_type_for([b4_table])[
1002 ]b4_parser_class_name[::yytable_[] =
1003 {
1004 ]b4_table[
1005 };
1006
1007 /* YYCHECK. */
1008 const ]b4_int_type_for([b4_check])[
1009 ]b4_parser_class_name[::yycheck_[] =
1010 {
1011 ]b4_check[
1012 };
1013
1014 /* STOS_[STATE-NUM] -- The (internal number of the) accessing
1015 symbol of state STATE-NUM. */
1016 const ]b4_int_type_for([b4_stos])[
1017 ]b4_parser_class_name[::yystos_[] =
1018 {
1019 ]b4_stos[
1020 };
1021
1022 #if YYDEBUG
1023 /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
1024 to YYLEX-NUM. */
1025 const ]b4_int_type_for([b4_toknum])[
1026 ]b4_parser_class_name[::yytoken_number_[] =
1027 {
1028 ]b4_toknum[
1029 };
1030 #endif
1031
1032 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1033 const ]b4_int_type_for([b4_r1])[
1034 ]b4_parser_class_name[::yyr1_[] =
1035 {
1036 ]b4_r1[
1037 };
1038
1039 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1040 const ]b4_int_type_for([b4_r2])[
1041 ]b4_parser_class_name[::yyr2_[] =
1042 {
1043 ]b4_r2[
1044 };
1045
1046 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1047 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1048 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
1049 const char*
1050 const ]b4_parser_class_name[::yytname_[] =
1051 {
1052 ]b4_tname[
1053 };
1054 #endif
1055
1056 #if YYDEBUG
1057 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1058 const ]b4_parser_class_name[::rhs_number_type
1059 ]b4_parser_class_name[::yyrhs_[] =
1060 {
1061 ]b4_rhs[
1062 };
1063
1064 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1065 YYRHS. */
1066 const ]b4_int_type_for([b4_prhs])[
1067 ]b4_parser_class_name[::yyprhs_[] =
1068 {
1069 ]b4_prhs[
1070 };
1071
1072 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
1073 const ]b4_int_type_for([b4_rline])[
1074 ]b4_parser_class_name[::yyrline_[] =
1075 {
1076 ]b4_rline[
1077 };
1078
1079 // Print the state stack on the debug stream.
1080 void
1081 ]b4_parser_class_name[::yystack_print_ ()
1082 {
1083 *yycdebug_ << "Stack now";
1084 for (state_stack_type::const_iterator i = yystate_stack_.begin ();
1085 i != yystate_stack_.end (); ++i)
1086 *yycdebug_ << ' ' << *i;
1087 *yycdebug_ << std::endl;
1088 }
1089
1090 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1091 void
1092 ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
1093 {
1094 unsigned int yylno = yyrline_[yyrule];
1095 int yynrhs = yyr2_[yyrule];
1096 /* Print the symbols being reduced, and their result. */
1097 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
1098 << " (line " << yylno << "):" << std::endl;
1099 /* The symbols being reduced. */
1100 for (int yyi = 0; yyi < yynrhs; yyi++)
1101 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
1102 yyrhs_[yyprhs_[yyrule] + yyi],
1103 &]b4_rhs_value(yynrhs, yyi + 1)[,
1104 &]b4_rhs_location(yynrhs, yyi + 1)[);
1105 }
1106 #endif // YYDEBUG
1107
1108 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1109 ]b4_parser_class_name[::token_number_type
1110 ]b4_parser_class_name[::yytranslate_ (int t)
1111 {
1112 static
1113 const token_number_type
1114 translate_table[] =
1115 {
1116 ]b4_translate[
1117 };
1118 if ((unsigned int) t <= yyuser_token_number_max_)
1119 return translate_table[t];
1120 else
1121 return yyundef_token_;
1122 }
1123
1124 const int ]b4_parser_class_name[::yyeof_ = 0;
1125 const int ]b4_parser_class_name[::yylast_ = ]b4_last[;
1126 const int ]b4_parser_class_name[::yynnts_ = ]b4_nterms_number[;
1127 const int ]b4_parser_class_name[::yyempty_ = -2;
1128 const int ]b4_parser_class_name[::yyfinal_ = ]b4_final_state_number[;
1129 const int ]b4_parser_class_name[::yyterror_ = 1;
1130 const int ]b4_parser_class_name[::yyerrcode_ = 256;
1131 const int ]b4_parser_class_name[::yyntokens_ = ]b4_tokens_number[;
1132
1133 const unsigned int ]b4_parser_class_name[::yyuser_token_number_max_ = ]b4_user_token_number_max[;
1134 const ]b4_parser_class_name[::token_number_type ]b4_parser_class_name[::yyundef_token_ = ]b4_undef_token_number[;
1135
1136 ]b4_namespace_close[
1137
1138 ]b4_epilogue
1139 dnl
1140 @output(b4_dir_prefix[]stack.hh@)@
1141 b4_copyright([Stack handling for Bison parsers in C++],
1142 [2002-2011])[
1143
1144 #ifndef BISON_STACK_HH
1145 # define BISON_STACK_HH
1146
1147 #include <deque>
1148
1149 ]b4_namespace_open[
1150 template <class T, class S = std::deque<T> >
1151 class stack
1152 {
1153 public:
1154
1155 // Hide our reversed order.
1156 typedef typename S::reverse_iterator iterator;
1157 typedef typename S::const_reverse_iterator const_iterator;
1158
1159 stack () : seq_ ()
1160 {
1161 }
1162
1163 stack (unsigned int n) : seq_ (n)
1164 {
1165 }
1166
1167 inline
1168 T&
1169 operator [] (unsigned int i)
1170 {
1171 return seq_[i];
1172 }
1173
1174 inline
1175 const T&
1176 operator [] (unsigned int i) const
1177 {
1178 return seq_[i];
1179 }
1180
1181 inline
1182 void
1183 push (const T& t)
1184 {
1185 seq_.push_front (t);
1186 }
1187
1188 inline
1189 void
1190 pop (unsigned int n = 1)
1191 {
1192 for (; n; --n)
1193 seq_.pop_front ();
1194 }
1195
1196 inline
1197 unsigned int
1198 height () const
1199 {
1200 return seq_.size ();
1201 }
1202
1203 inline const_iterator begin () const { return seq_.rbegin (); }
1204 inline const_iterator end () const { return seq_.rend (); }
1205
1206 private:
1207
1208 S seq_;
1209 };
1210
1211 /// Present a slice of the top of a stack.
1212 template <class T, class S = stack<T> >
1213 class slice
1214 {
1215 public:
1216
1217 slice (const S& stack,
1218 unsigned int range) : stack_ (stack),
1219 range_ (range)
1220 {
1221 }
1222
1223 inline
1224 const T&
1225 operator [] (unsigned int i) const
1226 {
1227 return stack_[range_ - i];
1228 }
1229
1230 private:
1231
1232 const S& stack_;
1233 unsigned int range_;
1234 };
1235 ]b4_namespace_close[
1236
1237 #endif // not BISON_STACK_HH[]dnl
1238 ]
1239 m4_divert_pop(0)