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