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