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