]> git.saurik.com Git - bison.git/blame - data/bison.c++
* src/reader.c (copy_at, copy_dollarm parse_braces, parse_action)
[bison.git] / data / bison.c++
CommitLineData
a75c057f
AD
1m4_divert(-1)
2
680e8701
AD
3# b4_sint_type(MAX)
4# -----------------
5# Return the smallest signed int type able to handle the number MAX.
6m4_define([b4_sint_type],
7[m4_if(m4_eval([$1 <= 127]), [1], [signed char],
8 m4_eval([$1 <= 32767]), [1], [signed short],
9 m4_eval([$1 <= 2147483647]), [1], [signed int],
10 [m4_fatal([no signed int type for $1])])])
11
12
13# b4_uint_type(MAX)
14# -----------------
15# Return the smallest unsigned int type able to handle the number MAX.
16m4_define([b4_uint_type],
17[m4_if(m4_eval([$1 <= 255]), [1], [unsigned char],
18 m4_eval([$1 <= 65535]), [1], [unsigned short],
19 m4_eval([$1 <= 4294967295]), [1], [unsigned int],
20 [m4_fatal([no unsigned int type for $1])])])
21
22
82b6cb3f
AD
23# b4_lhs_value([TYPE])
24# --------------------
25# Expansion of $<TYPE>$.
26m4_define([b4_lhs_value],
27[yyval[]m4_ifval([$1], [.$1])])
28
29
30# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
31# --------------------------------------
32# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
33# symbols on RHS.
34m4_define([b4_rhs_value],
35[yyvsp@<:@m4_eval([$2 - $1])@:>@m4_ifval([$3], [.$3])])
36
37
38# b4_lhs_location()
39# -----------------
40# Expansion of @$.
41m4_define([b4_lhs_location],
42[yyloc])
43
44
45# b4_rhs_location(RULE-LENGTH, NUM)
46# ---------------------------------
47# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
48# on RHS.
49m4_define([b4_rhs_location],
50[yylsp@<:@m4_eval([$2 - $1])@:>@])
51
52
0d8bed56
AD
53# b4_token_defines(TOKEN-NAME, TOKEN-NUMBER)
54# ------------------------------------------
55# Output the definition of this token as #define.
56m4_define([b4_token_define],
57[#define $1 $2
58])
59
60
61# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
62# -------------------------------------------------------
63# Output the definition of the tokens as #define.
64m4_define([b4_token_defines],
65[m4_map([b4_token_define], [$@])])
a75c057f
AD
66
67m4_define_default([b4_input_suffix], [.y])
68
69m4_define_default([b4_output_parser_suffix],
70[m4_translit(b4_input_suffix, [yY], [cC])])
71
72m4_define_default([b4_output_parser_name],
73[b4_output_prefix[]b4_output_infix[]b4_output_parser_suffix[]])
74
75
76m4_define_default([b4_output_header_suffix],
77[m4_translit(b4_input_suffix, [yY], [hH])])
78
79m4_define_default([b4_output_header_name],
80[b4_output_prefix[]b4_output_infix[]b4_output_header_suffix[]])
81
82m4_define_default([b4_header_guard],
83 [m4_bpatsubst(m4_toupper([BISON_]b4_output_header_name),
84 [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]], [_])])
85
af27eacb 86m4_define([b4_inherit],
0d8bed56 87 [m4_ifdef([b4_root],
af27eacb
RA
88 [: public b4_root
89],
90 [])])
91
92m4_define([b4_param],
93 [m4_ifdef([b4_root],
94 [,
95 const Param& param],
96 [])])
97
98m4_define([b4_constructor],
99 [m4_ifdef([b4_root],
100 [b4_root (param),
101 ],
102 [])])
103
98254360
RA
104m4_define([b4_copyright],
105 [/* -*- C++ -*- */
69e2658b
RA
106/* A Bison parser, made from b4_filename,
107 by GNU bison b4_version. */
2b548aa6
RA
108
109/* Skeleton output parser for bison,
98254360 110 Copyright 2002 Free Software Foundation, Inc.
2b548aa6
RA
111
112 This program is free software; you can redistribute it and/or modify
113 it under the terms of the GNU General Public License as published by
114 the Free Software Foundation; either version 2, or (at your option)
115 any later version.
116
117 This program is distributed in the hope that it will be useful,
118 but WITHOUT ANY WARRANTY; without even the implied warranty of
119 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
120 GNU General Public License for more details.
121
122 You should have received a copy of the GNU General Public License
123 along with this program; if not, write to the Free Software
124 Foundation, Inc., 59 Temple Place - Suite 330,
125 Boston, MA 02111-1307, USA. */
126
127/* As a special exception, when this file is copied by Bison into a
128 Bison output file, you may use that output file without restriction.
129 This special exception was added by the Free Software Foundation
98254360
RA
130 in version 1.24 of Bison. */])
131
132m4_divert(0)dnl
133#output "b4_output_header_name"
134b4_copyright
135#ifndef b4_header_guard
136# define b4_header_guard
2b548aa6
RA
137
138#include "stack.hh"
2b548aa6
RA
139#include "location.hh"
140
8d69a1a3 141#include <string>
50997c6e 142
4162fa07
RA
143/* Using locations. */
144#define YYLSP_NEEDED b4_locations_flag
145
0dd1580a
RA
146/* Copy the first part of user declarations. */
147b4_pre_prologue
4162fa07 148
98254360 149/* Tokens. */
e53c6322 150b4_token_defines(b4_tokens)
98254360 151
69e2658b
RA
152/* Enabling traces. */
153#ifndef YYDEBUG
154# define YYDEBUG b4_debug
155#endif
156
157/* Enabling verbose error message. */
158#ifndef YYERROR_VERBOSE
159# define YYERROR_VERBOSE b4_error_verbose
160#endif
161
98254360 162#ifndef YYSTYPE
642cb8f8
AD
163m4_ifdef([b4_stype_line],
164[#line b4_stype_line "b4_filename"
165])dnl
98254360
RA
166typedef b4_stype
167yystype;
168# define YYSTYPE yystype
169#endif
170
0dd1580a
RA
171/* Copy the second part of user declarations. */
172b4_post_prologue
173
06446ccf 174#line __oline__ "__ofile__"
374f5a14
RA
175#ifndef YYLLOC_DEFAULT
176# define YYLLOC_DEFAULT(Current, Rhs, N) \
177 Current.last_line = Rhs[[N]].last_line; \
178 Current.last_column = Rhs[[N]].last_column;
179#endif
180
98254360
RA
181m4_if(b4_locations_flag, [0], [],
182[#ifndef YYLTYPE
183typedef struct yyltype
184{
185 int first_line;
186 int first_column;
187 int last_line;
188 int last_column;
189} yyltype;
190# define YYLTYPE yyltype
191#endif])
50997c6e 192
2b548aa6
RA
193namespace yy
194{
3f3eed27
AD
195 class b4_name;
196
2b548aa6
RA
197 template < typename P >
198 struct Traits
199 {
200 };
201
202 template < >
3f3eed27 203 struct Traits< b4_name >
2b548aa6 204 {
06446ccf
AD
205 typedef b4_uint_type(b4_token_number_max) TokenNumberType;
206 typedef b4_sint_type(b4_rhs_number_max) RhsNumberType;
50997c6e
RA
207 typedef int StateType;
208 typedef yystype SemanticType;
209 typedef b4_ltype LocationType;
2b548aa6
RA
210 };
211}
212
2b548aa6
RA
213namespace yy
214{
af27eacb 215 class b4_name b4_inherit
2b548aa6
RA
216 {
217 public:
3f3eed27 218
680e8701 219 typedef Traits< b4_name >::TokenNumberType TokenNumberType;
06446ccf 220 typedef Traits< b4_name >::RhsNumberType RhsNumberType;
680e8701 221 typedef Traits< b4_name >::StateType StateType;
62a3e4f0 222 typedef Traits< b4_name >::SemanticType SemanticType;
680e8701 223 typedef Traits< b4_name >::LocationType LocationType;
2b548aa6
RA
224
225 typedef Stack< StateType > StateStack;
226 typedef Stack< SemanticType > SemanticStack;
227 typedef Stack< LocationType > LocationStack;
228
8d69a1a3
RA
229#if YYLSP_NEEDED
230 b4_name (bool debug,
0d8bed56 231 LocationType initlocation[]b4_param) :
af27eacb
RA
232 b4_constructor[]debug_ (debug),
233 initlocation_ (initlocation)
8d69a1a3 234#else
af27eacb
RA
235 b4_name (bool debug[]b4_param) :
236 b4_constructor[]debug_ (debug)
8d69a1a3 237#endif
50997c6e 238 {
50997c6e
RA
239 }
240
241 virtual ~b4_name ()
2b548aa6 242 {
2b548aa6
RA
243 }
244
245 virtual int parse ();
246
247 private:
3f3eed27 248
69e2658b 249 virtual void lex_ ();
4bb2bc3f 250 virtual void error_ ();
4aacc3a7 251 virtual void print_ ();
4bb2bc3f 252
2b548aa6 253 /* Stacks. */
69e2658b
RA
254 StateStack state_stack_;
255 SemanticStack semantic_stack_;
256 LocationStack location_stack_;
2b548aa6
RA
257
258 /* Tables. */
3f3eed27
AD
259 static const short pact_[[]];
260 static const short defact_[[]];
261 static const short pgoto_[[]];
262 static const short defgoto_[[]];
263 static const short table_[[]];
264 static const short check_[[]];
9515e8a7 265 static const TokenNumberType r1_[[]];
3f3eed27 266 static const short r2_[[]];
69e2658b
RA
267
268#if YYDEBUG || YYERROR_VERBOSE
3f3eed27 269 static const char* const name_[[]];
69e2658b 270#endif
2b548aa6
RA
271
272 /* More tables, for debugging. */
69e2658b 273#if YYDEBUG
06446ccf 274 static const RhsNumberType rhs_[[]];
3f3eed27
AD
275 static const short prhs_[[]];
276 static const short rline_[[]];
69e2658b 277#endif
2b548aa6
RA
278
279 /* Even more tables. */
680e8701 280 static inline TokenNumberType translate_ (int token);
2b548aa6 281
762a801e 282 /* Constants. */
50997c6e 283 static const int eof_;
69e2658b
RA
284 static const int last_;
285 static const int flag_;
286 static const int nnts_;
287 static const int nsym_;
50997c6e 288 static const int empty_;
69e2658b 289 static const int final_;
762a801e
RA
290 static const int terror_;
291 static const int errcode_;
50997c6e 292 static const int ntokens_;
69e2658b 293 static const int initdepth_;
007a50a4
AD
294 static const unsigned user_token_number_max_;
295 static const TokenNumberType undef_token_;
2b548aa6
RA
296
297 /* State. */
69e2658b
RA
298 int n_;
299 int len_;
50997c6e 300 int debug_;
69e2658b 301 int state_;
4bb2bc3f 302
69e2658b
RA
303 /* Lookahead and lookahead in internal form. */
304 int looka_;
305 int ilooka_;
4bb2bc3f
RA
306
307 /* Message. */
308 std::string message;
309
374f5a14 310 /* Semantic value and location of lookahead token. */
2b548aa6
RA
311 SemanticType value;
312 LocationType location;
8d69a1a3 313
374f5a14
RA
314 /* @$ and $$. */
315 SemanticType yyval;
316 LocationType yyloc;
317
8d69a1a3
RA
318 /* Initial location. */
319 LocationType initlocation_;
2b548aa6
RA
320 };
321}
322
98254360
RA
323#endif /* not b4_header_guard */
324
3f3eed27 325#output "b4_output_prefix[]b4_output_infix[].cc"
98254360
RA
326b4_copyright
327
328#include "b4_output_header_name"
50997c6e 329
2b548aa6 330/* Enable debugging if requested. */
50997c6e 331#if YYDEBUG
2b548aa6
RA
332# include <cstdio>
333# define YYFPRINTF std::fprintf
2b548aa6
RA
334# define YYDPRINTF(Args) \
335do { \
50997c6e 336 if (debug_) \
2b548aa6
RA
337 YYFPRINTF Args; \
338} while (0)
2b548aa6
RA
339#else /* !YYDEBUG */
340# define YYDPRINTF(Args)
341#endif /* !YYDEBUG */
342
2b548aa6 343int
3f3eed27 344yy::b4_name::parse ()
2b548aa6 345{
4bb2bc3f
RA
346 int nerrs = 0;
347 int errstatus = 0;
348
2b548aa6 349 /* Initialize stack. */
69e2658b
RA
350 state_stack_ = StateStack (0);
351 semantic_stack_ = SemanticStack (1);
352 location_stack_ = LocationStack (1);
2b548aa6
RA
353
354 /* Reserve initial space. The C parser needed that, but is it really
355 useful here? */
69e2658b
RA
356 state_stack_.reserve (initdepth_);
357 semantic_stack_.reserve (initdepth_);
358 location_stack_.reserve (initdepth_);
2b548aa6
RA
359
360 /* Start. */
69e2658b
RA
361 state_ = 0;
362 looka_ = empty_;
8d69a1a3
RA
363#if YYLSP_NEEDED
364 location = initlocation_;
365#endif
2b548aa6
RA
366 YYDPRINTF ((stderr, "Starting parse\n"));
367
368 /* New state. */
369 yynewstate:
69e2658b
RA
370 state_stack_.push (state_);
371 YYDPRINTF ((stderr, "Entering state %d\n", state_));
50997c6e 372 goto yybackup;
2b548aa6
RA
373
374 /* Backup. */
375 yybackup:
376
377 /* Try to take a decision without lookahead. */
69e2658b
RA
378 n_ = pact_[[state_]];
379 if (n_ == flag_)
2b548aa6
RA
380 goto yydefault;
381
382 /* Read a lookahead token. */
69e2658b 383 if (looka_ == empty_)
2b548aa6
RA
384 {
385 YYDPRINTF ((stderr, "Reading a token: "));
69e2658b 386 lex_ ();
2b548aa6
RA
387 }
388
389 /* Convert token to internal form. */
69e2658b 390 if (looka_ <= 0)
2b548aa6 391 {
69e2658b
RA
392 looka_ = eof_;
393 ilooka_ = 0;
2b548aa6
RA
394 YYDPRINTF ((stderr, "Now at end of input.\n"));
395 }
396 else
397 {
69e2658b 398 ilooka_ = translate_ (looka_);
50997c6e
RA
399#if YYDEBUG
400 if (debug_)
401 {
69e2658b 402 YYFPRINTF (stderr, "Next token is %d (%s", looka_, name_[[ilooka_]]);
4aacc3a7 403 print_ ();
50997c6e
RA
404 YYFPRINTF (stderr, ")\n");
405 }
2b548aa6
RA
406#endif
407 }
408
69e2658b
RA
409 n_ += ilooka_;
410 if (n_ < 0 || n_ > last_ || check_[[n_]] != ilooka_)
2b548aa6
RA
411 goto yydefault;
412
413 /* Reduce or error. */
69e2658b
RA
414 n_ = table_[[n_]];
415 if (n_ < 0)
2b548aa6 416 {
69e2658b 417 if (n_ == flag_)
2b548aa6
RA
418 goto yyerrlab;
419 else
420 {
69e2658b 421 n_ = -n_;
2b548aa6
RA
422 goto yyreduce;
423 }
424 }
69e2658b 425 else if (n_ == 0)
2b548aa6 426 goto yyerrlab;
a75c057f 427
2b548aa6 428 /* Accept? */
69e2658b 429 if (n_ == final_)
2b548aa6
RA
430 goto yyacceptlab;
431
432 /* Shift the lookahead token. */
69e2658b 433 YYDPRINTF ((stderr, "Shifting token %d (%s), ", looka_, name_[[ilooka_]]));
2b548aa6
RA
434
435 /* Discard the token being shifted unless it is eof. */
69e2658b
RA
436 if (looka_ != eof_)
437 looka_ = empty_;
2b548aa6 438
69e2658b
RA
439 semantic_stack_.push (value);
440 location_stack_.push (location);
8d69a1a3
RA
441
442 /* Count tokens shifted since error; after three, turn off error
443 status. */
444 if (errstatus)
445 --errstatus;
446
69e2658b 447 state_ = n_;
2b548aa6
RA
448 goto yynewstate;
449
450 /* Default action. */
451 yydefault:
69e2658b
RA
452 n_ = defact_[[state_]];
453 if (n_ == 0)
2b548aa6 454 goto yyerrlab;
50997c6e 455 goto yyreduce;
2b548aa6
RA
456
457 /* Reduce. */
458 yyreduce:
69e2658b
RA
459 len_ = r2_[[n_]];
460 if (len_)
50997c6e 461 {
374f5a14
RA
462 yyval = semantic_stack_[[1 - len_]];
463 yyloc = location_stack_[[1 - len_]];
50997c6e
RA
464 }
465 else
69e2658b 466 {
374f5a14
RA
467 yyval = semantic_stack_[[0]];
468 yyloc = location_stack_[[0]];
50997c6e 469 }
2b548aa6 470
50997c6e
RA
471#if YYDEBUG
472 if (debug_)
2b548aa6 473 {
69e2658b
RA
474 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n_ - 1, rline_[[n_]]);
475 for (unsigned i = prhs_[[n_]];
3f3eed27
AD
476 rhs_[[i]] >= 0; ++i)
477 YYFPRINTF (stderr, "%s ", name_[[rhs_[i]]]);
69e2658b 478 YYFPRINTF (stderr, "-> %s\n", name_[[r1_[n_]]]);
2b548aa6
RA
479 }
480#endif
a75c057f 481
374f5a14
RA
482 if (len_)
483 {
484 Slice< LocationType, LocationStack > slice (location_stack_, len_);
485 YYLLOC_DEFAULT (yyloc, slice, len_);
486 }
487
2b548aa6 488 {
69e2658b
RA
489 SemanticStack& yyvsp (semantic_stack_);
490 LocationStack& yylsp (location_stack_);
2b548aa6 491
69e2658b 492 switch (n_)
2b548aa6 493 {
3f3eed27 494 b4_actions
2b548aa6
RA
495 }
496 }
a75c057f 497
06446ccf
AD
498/* Line __line__ of __file__. */
499#line __oline__ "__ofile__"
500
69e2658b
RA
501 state_stack_.pop (len_);
502 semantic_stack_.pop (len_);
503 location_stack_.pop (len_);
2b548aa6 504
50997c6e
RA
505#if YYDEBUG
506 if (debug_)
2b548aa6
RA
507 {
508 YYFPRINTF (stderr, "state stack now");
a75c057f 509 for (StateStack::ConstIterator i = state_stack_.begin ();
69e2658b 510 i != state_stack_.end (); ++i)
2b548aa6
RA
511 YYFPRINTF (stderr, " %d", *i);
512 YYFPRINTF (stderr, "\n");
513 }
514#endif
a75c057f 515
374f5a14
RA
516 semantic_stack_.push (yyval);
517 location_stack_.push (yyloc);
2b548aa6
RA
518
519 /* Shift the result of the reduction. */
69e2658b
RA
520 n_ = r1_[[n_]];
521 state_ = pgoto_[[n_ - ntokens_]] + state_stack_[[0]];
522 if (state_ >= 0 && state_ <= last_ && check_[[state_]] == state_stack_[[0]])
523 state_ = table_[[state_]];
2b548aa6 524 else
69e2658b 525 state_ = defgoto_[[n_ - ntokens_]];
2b548aa6
RA
526 goto yynewstate;
527
528 /* Report and recover from errors. This is very incomplete. */
529 yyerrlab:
4bb2bc3f
RA
530 /* If not already recovering from an error, report this error. */
531 if (!errstatus)
532 {
533 ++nerrs;
a75c057f 534
69e2658b
RA
535#if YYERROR_VERBOSE
536 n_ = pact_[[state_]];
537 if (n_ > flag_ && n_ < last_)
4bb2bc3f
RA
538 {
539 message = "parse error, unexpected ";
69e2658b 540 message += name_[[ilooka_]];
4bb2bc3f
RA
541 {
542 int count = 0;
69e2658b
RA
543 for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
544 if (check_[[x + n_]] == x)
4bb2bc3f
RA
545 ++count;
546 if (count < 5)
547 {
548 count = 0;
69e2658b
RA
549 for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
550 if (check_[[x + n_]] == x)
4bb2bc3f 551 {
a75c057f 552 message += (!count++) ? ", expecting " : " or ";
4bb2bc3f
RA
553 message += name_[[x]];
554 }
555 }
556 }
557 }
558 else
69e2658b 559#endif
4bb2bc3f 560 message = "parse error";
8d69a1a3 561 error_ ();
4bb2bc3f 562 }
762a801e 563 goto yyerrlab1;
a75c057f 564
762a801e
RA
565 /* Error raised explicitly by an action. */
566 yyerrlab1:
567 if (errstatus == 3)
568 {
569 /* If just tried and failed to reuse lookahead token after an
570 error, discard it. */
571
572 /* Return failure if at end of input. */
69e2658b 573 if (looka_ == eof_)
762a801e 574 goto yyabortlab;
69e2658b
RA
575 YYDPRINTF ((stderr, "Discarding token %d (%s).\n", looka_, name_[[ilooka_]]));
576 looka_ = empty_;
762a801e
RA
577 }
578
579 /* Else will try to reuse lookahead token after shifting the error
580 token. */
581
582 errstatus = 3;
583 goto yyerrhandle;
584
585 /* Pop the current state because it cannot handle the error token. */
586 yyerrdefault:
587 yyerrpop:
69e2658b 588 if (!state_stack_.height ())
762a801e 589 goto yyabortlab;
69e2658b
RA
590 state_ = (state_stack_.pop (), state_stack_[[0]]);
591 semantic_stack_.pop ();
592 location_stack_.pop ();;
762a801e
RA
593
594#if YYDEBUG
595 if (debug_)
596 {
597 YYFPRINTF (stderr, "Error: state stack now");
a75c057f 598 for (StateStack::ConstIterator i = state_stack_.begin ();
69e2658b 599 i != state_stack_.end (); ++i)
762a801e 600 YYFPRINTF (stderr, " %d", *i);
a75c057f 601 YYFPRINTF (stderr, "\n");
762a801e
RA
602 }
603#endif
604
605 yyerrhandle:
69e2658b
RA
606 n_ = pact_[[state_]];
607 if (n_ == flag_)
762a801e
RA
608 goto yyerrdefault;
609
69e2658b
RA
610 n_ += terror_;
611 if (n_ < 0 || n_ > last_ || check_[[n_]] != terror_)
762a801e
RA
612 goto yyerrdefault;
613
69e2658b
RA
614 n_ = table_[[n_]];
615 if (n_ < 0)
762a801e 616 {
69e2658b 617 if (n_ == flag_)
762a801e 618 goto yyerrpop;
69e2658b 619 n_ = -n_;
762a801e
RA
620 goto yyreduce;
621 }
69e2658b 622 else if (!n_)
762a801e
RA
623 goto yyerrpop;
624
69e2658b 625 if (n_ == final_)
762a801e
RA
626 goto yyacceptlab;
627
628 YYDPRINTF ((stderr, "Shifting error token, "));
629
69e2658b
RA
630 semantic_stack_.push (value);
631 location_stack_.push (location);
762a801e 632
69e2658b 633 state_ = n_;
762a801e
RA
634 goto yynewstate;
635
2b548aa6
RA
636 /* Accept. */
637 yyacceptlab:
638 return 0;
762a801e
RA
639
640 /* Abort. */
641 yyabortlab:
642 return 1;
2b548aa6
RA
643}
644
69e2658b
RA
645void
646yy::b4_name::lex_ ()
647{
648#if YYLSP_NEEDED
649 looka_ = yylex (&value, &location);
650#else
651 looka_ = yylex (&value);
652#endif
653}
654
6b45a3ca 655/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
2b548aa6 656 STATE-NUM. */
69e2658b 657const short
3f3eed27 658yy::b4_name::pact_[[]] =
2b548aa6 659{
3f3eed27 660 b4_pact
2b548aa6
RA
661};
662
6b45a3ca 663/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE
2b548aa6
RA
664 doesn't specify something else to do. Zero means the default is an
665 error. */
69e2658b 666const short
3f3eed27 667yy::b4_name::defact_[[]] =
2b548aa6 668{
3f3eed27 669 b4_defact
2b548aa6
RA
670};
671
6b45a3ca 672/* YYPGOTO[[NTERM-NUM]]. */
69e2658b 673const short
3f3eed27 674yy::b4_name::pgoto_[[]] =
2b548aa6 675{
3f3eed27 676 b4_pgoto
2b548aa6
RA
677};
678
6b45a3ca 679/* YYDEFGOTO[[NTERM-NUM]]. */
69e2658b 680const short
3f3eed27 681yy::b4_name::defgoto_[[]] =
2b548aa6 682{
3f3eed27 683 b4_defgoto
2b548aa6
RA
684};
685
6b45a3ca 686/* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If
2b548aa6
RA
687 positive, shift that token. If negative, reduce the rule which
688 number is the opposite. If zero, do what YYDEFACT says. */
69e2658b 689const short
3f3eed27 690yy::b4_name::table_[[]] =
2b548aa6 691{
3f3eed27 692 b4_table
2b548aa6
RA
693};
694
695/* YYCHECK. */
69e2658b 696const short
3f3eed27 697yy::b4_name::check_[[]] =
2b548aa6 698{
3f3eed27 699 b4_check
2b548aa6
RA
700};
701
6b45a3ca 702/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */
9515e8a7 703const yy::b4_name::TokenNumberType
3f3eed27 704yy::b4_name::r1_[[]] =
2b548aa6 705{
3f3eed27 706 b4_r1
2b548aa6
RA
707};
708
6b45a3ca 709/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */
a75c057f 710const short
3f3eed27 711yy::b4_name::r2_[[]] =
2b548aa6 712{
3f3eed27 713 b4_r2
2b548aa6
RA
714};
715
69e2658b 716#if YYDEBUG || YYERROR_VERBOSE
6b45a3ca 717/* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
2b548aa6
RA
718 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
719const char*
3f3eed27 720const yy::b4_name::name_[[]] =
2b548aa6 721{
3f3eed27 722 b4_tname
2b548aa6 723};
69e2658b 724#endif
2b548aa6 725
69e2658b 726#if YYDEBUG
2b548aa6 727/* YYRHS -- A `-1'-separated list of the rules' RHS. */
06446ccf 728const yy::b4_name::RhsNumberType
3f3eed27 729yy::b4_name::rhs_[[]] =
2b548aa6 730{
3f3eed27 731 b4_rhs
2b548aa6
RA
732};
733
6b45a3ca 734/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
2b548aa6 735 YYRHS. */
69e2658b 736const short
3f3eed27 737yy::b4_name::prhs_[[]] =
2b548aa6 738{
3f3eed27 739 b4_prhs
2b548aa6
RA
740};
741
69e2658b
RA
742/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */
743const short
744yy::b4_name::rline_[[]] =
745{
746 b4_rline
747};
748#endif
749
2b548aa6 750/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
06446ccf 751yy::b4_name::TokenNumberType
69e2658b 752yy::b4_name::translate_ (int token)
2b548aa6 753{
a75c057f 754 static
680e8701 755 const TokenNumberType
3f3eed27 756 translate_[[]] =
2b548aa6 757 {
3f3eed27 758 b4_translate
2b548aa6 759 };
007a50a4
AD
760 if ((unsigned) token <= user_token_number_max_)
761 return translate_[[token]];
762 else
763 return undef_token_;
2b548aa6
RA
764}
765
50997c6e 766const int yy::b4_name::eof_ = 0;
69e2658b
RA
767const int yy::b4_name::last_ = b4_last;
768const int yy::b4_name::flag_ = b4_flag;
769const int yy::b4_name::nnts_ = b4_nnts;
770const int yy::b4_name::nsym_ = b4_nsym;
50997c6e 771const int yy::b4_name::empty_ = -2;
69e2658b 772const int yy::b4_name::final_ = b4_final;
762a801e
RA
773const int yy::b4_name::terror_ = 1;
774const int yy::b4_name::errcode_ = 256;
50997c6e 775const int yy::b4_name::ntokens_ = b4_ntokens;
69e2658b
RA
776const int yy::b4_name::initdepth_ = b4_initdepth;
777
007a50a4
AD
778const unsigned yy::b4_name::user_token_number_max_ = b4_user_token_number_max;
779const yy::b4_name::TokenNumberType yy::b4_name::undef_token_ = b4_undef_token_number;
2b548aa6 780
3f3eed27 781b4_epilogue
2b548aa6 782
3f3eed27 783#output "stack.hh"
98254360
RA
784b4_copyright
785
2b548aa6
RA
786#ifndef BISON_STACK_HH
787# define BISON_STACK_HH
788
789#include <vector>
790
791namespace yy
792{
793 template < class T, class S = std::vector< T > >
794 class Stack
795 {
796 public:
797
798 typedef typename S::iterator Iterator;
799 typedef typename S::const_iterator ConstIterator;
800
801 Stack () : seq_ ()
802 {
803 }
804
805 Stack (unsigned n) : seq_ (n)
806 {
807 }
808
809 inline
810 T&
3f3eed27 811 operator [[]] (int index)
2b548aa6 812 {
374f5a14 813 return seq_[[height () - 1 + index]];
2b548aa6
RA
814 }
815
816 inline
817 const T&
3f3eed27 818 operator [[]] (int index) const
2b548aa6 819 {
374f5a14 820 return seq_[[height () - 1 + index]];
2b548aa6
RA
821 }
822
823 inline
824 void
825 push (const T& t)
826 {
827 seq_.push_back (t);
828 }
829
830 inline
831 void
832 pop (unsigned n = 1)
833 {
834 for (; n; --n)
835 seq_.pop_back ();
836 }
a75c057f 837
2b548aa6
RA
838 inline
839 void
840 reserve (unsigned n)
841 {
842 seq_.reserve (n);
843 }
844
762a801e
RA
845 inline
846 unsigned
847 height () const
848 {
849 return seq_.size ();
850 }
851
2b548aa6
RA
852 inline ConstIterator begin () const { return seq_.begin (); }
853 inline ConstIterator end () const { return seq_.end (); }
854
855 private:
856
857 S seq_;
858 };
374f5a14
RA
859
860 template < class T, class S = Stack< T > >
861 class Slice
862 {
863 public:
864
865 Slice (const S& stack,
866 unsigned range) : stack_ (stack),
867 range_ (range)
868 {
869 }
870
871 inline
872 const T&
873 operator [[]] (unsigned index) const
874 {
875 return stack_[[index - range_]];
876 }
877
878 private:
879
880 const S& stack_;
881 unsigned range_;
882 };
2b548aa6
RA
883}
884
885#endif // not BISON_STACK_HH
886
3f3eed27 887#output "location.hh"
98254360
RA
888b4_copyright
889
2b548aa6
RA
890#ifndef BISON_LOCATION_HH
891# define BISON_LOCATION_HH
892
893namespace yy
894{
895 struct Position
896 {
897 int line;
898 int column;
899 };
900
901 struct Location
902 {
903 Position first;
904 Position last;
905 };
906}
907
908#endif // not BISON_LOCATION_HH