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