]> git.saurik.com Git - bison.git/blame - data/bison.c++
(b4_token_defines): Also define YYTOKENTYPE for K&R C.
[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],
45119f04 35[semantic_stack_@<:@m4_eval([$1 - $2])@:>@m4_ifval([$3], [.$3])])
82b6cb3f
AD
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],
45119f04 50[location_stack_@<:@m4_eval([$1 - $2])@:>@])
82b6cb3f
AD
51
52
83ccf991
AD
53# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
54# -----------------------------------------
0d8bed56
AD
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 353
2b548aa6 354 /* Start. */
69e2658b
RA
355 state_ = 0;
356 looka_ = empty_;
8d69a1a3
RA
357#if YYLSP_NEEDED
358 location = initlocation_;
359#endif
2b548aa6
RA
360 YYDPRINTF ((stderr, "Starting parse\n"));
361
362 /* New state. */
363 yynewstate:
69e2658b
RA
364 state_stack_.push (state_);
365 YYDPRINTF ((stderr, "Entering state %d\n", state_));
50997c6e 366 goto yybackup;
2b548aa6
RA
367
368 /* Backup. */
369 yybackup:
370
371 /* Try to take a decision without lookahead. */
69e2658b
RA
372 n_ = pact_[[state_]];
373 if (n_ == flag_)
2b548aa6
RA
374 goto yydefault;
375
376 /* Read a lookahead token. */
69e2658b 377 if (looka_ == empty_)
2b548aa6
RA
378 {
379 YYDPRINTF ((stderr, "Reading a token: "));
69e2658b 380 lex_ ();
2b548aa6
RA
381 }
382
383 /* Convert token to internal form. */
69e2658b 384 if (looka_ <= 0)
2b548aa6 385 {
69e2658b
RA
386 looka_ = eof_;
387 ilooka_ = 0;
2b548aa6
RA
388 YYDPRINTF ((stderr, "Now at end of input.\n"));
389 }
390 else
391 {
69e2658b 392 ilooka_ = translate_ (looka_);
50997c6e
RA
393#if YYDEBUG
394 if (debug_)
395 {
69e2658b 396 YYFPRINTF (stderr, "Next token is %d (%s", looka_, name_[[ilooka_]]);
4aacc3a7 397 print_ ();
50997c6e
RA
398 YYFPRINTF (stderr, ")\n");
399 }
2b548aa6
RA
400#endif
401 }
402
69e2658b
RA
403 n_ += ilooka_;
404 if (n_ < 0 || n_ > last_ || check_[[n_]] != ilooka_)
2b548aa6
RA
405 goto yydefault;
406
407 /* Reduce or error. */
69e2658b
RA
408 n_ = table_[[n_]];
409 if (n_ < 0)
2b548aa6 410 {
69e2658b 411 if (n_ == flag_)
2b548aa6
RA
412 goto yyerrlab;
413 else
414 {
69e2658b 415 n_ = -n_;
2b548aa6
RA
416 goto yyreduce;
417 }
418 }
69e2658b 419 else if (n_ == 0)
2b548aa6 420 goto yyerrlab;
a75c057f 421
2b548aa6 422 /* Accept? */
69e2658b 423 if (n_ == final_)
2b548aa6
RA
424 goto yyacceptlab;
425
426 /* Shift the lookahead token. */
69e2658b 427 YYDPRINTF ((stderr, "Shifting token %d (%s), ", looka_, name_[[ilooka_]]));
2b548aa6
RA
428
429 /* Discard the token being shifted unless it is eof. */
69e2658b
RA
430 if (looka_ != eof_)
431 looka_ = empty_;
2b548aa6 432
69e2658b
RA
433 semantic_stack_.push (value);
434 location_stack_.push (location);
8d69a1a3
RA
435
436 /* Count tokens shifted since error; after three, turn off error
437 status. */
438 if (errstatus)
439 --errstatus;
440
69e2658b 441 state_ = n_;
2b548aa6
RA
442 goto yynewstate;
443
444 /* Default action. */
445 yydefault:
69e2658b
RA
446 n_ = defact_[[state_]];
447 if (n_ == 0)
2b548aa6 448 goto yyerrlab;
50997c6e 449 goto yyreduce;
2b548aa6
RA
450
451 /* Reduce. */
452 yyreduce:
69e2658b
RA
453 len_ = r2_[[n_]];
454 if (len_)
50997c6e 455 {
45119f04
RA
456 yyval = semantic_stack_[[len_ - 1]];
457 yyloc = location_stack_[[len_ - 1]];
50997c6e
RA
458 }
459 else
69e2658b 460 {
374f5a14
RA
461 yyval = semantic_stack_[[0]];
462 yyloc = location_stack_[[0]];
50997c6e 463 }
2b548aa6 464
50997c6e
RA
465#if YYDEBUG
466 if (debug_)
2b548aa6 467 {
69e2658b
RA
468 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n_ - 1, rline_[[n_]]);
469 for (unsigned i = prhs_[[n_]];
3f3eed27
AD
470 rhs_[[i]] >= 0; ++i)
471 YYFPRINTF (stderr, "%s ", name_[[rhs_[i]]]);
69e2658b 472 YYFPRINTF (stderr, "-> %s\n", name_[[r1_[n_]]]);
2b548aa6
RA
473 }
474#endif
a75c057f 475
374f5a14
RA
476 if (len_)
477 {
478 Slice< LocationType, LocationStack > slice (location_stack_, len_);
479 YYLLOC_DEFAULT (yyloc, slice, len_);
480 }
481
45119f04
RA
482 switch (n_)
483 {
484 b4_actions
485 }
a75c057f 486
06446ccf
AD
487/* Line __line__ of __file__. */
488#line __oline__ "__ofile__"
489
69e2658b
RA
490 state_stack_.pop (len_);
491 semantic_stack_.pop (len_);
492 location_stack_.pop (len_);
2b548aa6 493
50997c6e
RA
494#if YYDEBUG
495 if (debug_)
2b548aa6
RA
496 {
497 YYFPRINTF (stderr, "state stack now");
a75c057f 498 for (StateStack::ConstIterator i = state_stack_.begin ();
69e2658b 499 i != state_stack_.end (); ++i)
2b548aa6
RA
500 YYFPRINTF (stderr, " %d", *i);
501 YYFPRINTF (stderr, "\n");
502 }
503#endif
a75c057f 504
374f5a14
RA
505 semantic_stack_.push (yyval);
506 location_stack_.push (yyloc);
2b548aa6
RA
507
508 /* Shift the result of the reduction. */
69e2658b
RA
509 n_ = r1_[[n_]];
510 state_ = pgoto_[[n_ - ntokens_]] + state_stack_[[0]];
511 if (state_ >= 0 && state_ <= last_ && check_[[state_]] == state_stack_[[0]])
512 state_ = table_[[state_]];
2b548aa6 513 else
69e2658b 514 state_ = defgoto_[[n_ - ntokens_]];
2b548aa6
RA
515 goto yynewstate;
516
517 /* Report and recover from errors. This is very incomplete. */
518 yyerrlab:
4bb2bc3f
RA
519 /* If not already recovering from an error, report this error. */
520 if (!errstatus)
521 {
522 ++nerrs;
a75c057f 523
69e2658b
RA
524#if YYERROR_VERBOSE
525 n_ = pact_[[state_]];
526 if (n_ > flag_ && n_ < last_)
4bb2bc3f
RA
527 {
528 message = "parse error, unexpected ";
69e2658b 529 message += name_[[ilooka_]];
4bb2bc3f
RA
530 {
531 int count = 0;
69e2658b
RA
532 for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
533 if (check_[[x + n_]] == x)
4bb2bc3f
RA
534 ++count;
535 if (count < 5)
536 {
537 count = 0;
69e2658b
RA
538 for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
539 if (check_[[x + n_]] == x)
4bb2bc3f 540 {
a75c057f 541 message += (!count++) ? ", expecting " : " or ";
4bb2bc3f
RA
542 message += name_[[x]];
543 }
544 }
545 }
546 }
547 else
69e2658b 548#endif
4bb2bc3f 549 message = "parse error";
8d69a1a3 550 error_ ();
4bb2bc3f 551 }
762a801e 552 goto yyerrlab1;
a75c057f 553
762a801e
RA
554 /* Error raised explicitly by an action. */
555 yyerrlab1:
556 if (errstatus == 3)
557 {
558 /* If just tried and failed to reuse lookahead token after an
559 error, discard it. */
560
561 /* Return failure if at end of input. */
69e2658b 562 if (looka_ == eof_)
762a801e 563 goto yyabortlab;
69e2658b
RA
564 YYDPRINTF ((stderr, "Discarding token %d (%s).\n", looka_, name_[[ilooka_]]));
565 looka_ = empty_;
762a801e
RA
566 }
567
568 /* Else will try to reuse lookahead token after shifting the error
569 token. */
570
571 errstatus = 3;
572 goto yyerrhandle;
573
574 /* Pop the current state because it cannot handle the error token. */
575 yyerrdefault:
576 yyerrpop:
69e2658b 577 if (!state_stack_.height ())
762a801e 578 goto yyabortlab;
69e2658b
RA
579 state_ = (state_stack_.pop (), state_stack_[[0]]);
580 semantic_stack_.pop ();
581 location_stack_.pop ();;
762a801e
RA
582
583#if YYDEBUG
584 if (debug_)
585 {
586 YYFPRINTF (stderr, "Error: state stack now");
a75c057f 587 for (StateStack::ConstIterator i = state_stack_.begin ();
69e2658b 588 i != state_stack_.end (); ++i)
762a801e 589 YYFPRINTF (stderr, " %d", *i);
a75c057f 590 YYFPRINTF (stderr, "\n");
762a801e
RA
591 }
592#endif
593
594 yyerrhandle:
69e2658b
RA
595 n_ = pact_[[state_]];
596 if (n_ == flag_)
762a801e
RA
597 goto yyerrdefault;
598
69e2658b
RA
599 n_ += terror_;
600 if (n_ < 0 || n_ > last_ || check_[[n_]] != terror_)
762a801e
RA
601 goto yyerrdefault;
602
69e2658b
RA
603 n_ = table_[[n_]];
604 if (n_ < 0)
762a801e 605 {
69e2658b 606 if (n_ == flag_)
762a801e 607 goto yyerrpop;
69e2658b 608 n_ = -n_;
762a801e
RA
609 goto yyreduce;
610 }
69e2658b 611 else if (!n_)
762a801e
RA
612 goto yyerrpop;
613
69e2658b 614 if (n_ == final_)
762a801e
RA
615 goto yyacceptlab;
616
617 YYDPRINTF ((stderr, "Shifting error token, "));
618
69e2658b
RA
619 semantic_stack_.push (value);
620 location_stack_.push (location);
762a801e 621
69e2658b 622 state_ = n_;
762a801e
RA
623 goto yynewstate;
624
2b548aa6
RA
625 /* Accept. */
626 yyacceptlab:
627 return 0;
762a801e
RA
628
629 /* Abort. */
630 yyabortlab:
631 return 1;
2b548aa6
RA
632}
633
69e2658b
RA
634void
635yy::b4_name::lex_ ()
636{
637#if YYLSP_NEEDED
638 looka_ = yylex (&value, &location);
639#else
640 looka_ = yylex (&value);
641#endif
642}
643
6b45a3ca 644/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
2b548aa6 645 STATE-NUM. */
69e2658b 646const short
3f3eed27 647yy::b4_name::pact_[[]] =
2b548aa6 648{
3f3eed27 649 b4_pact
2b548aa6
RA
650};
651
6b45a3ca 652/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE
2b548aa6
RA
653 doesn't specify something else to do. Zero means the default is an
654 error. */
69e2658b 655const short
3f3eed27 656yy::b4_name::defact_[[]] =
2b548aa6 657{
3f3eed27 658 b4_defact
2b548aa6
RA
659};
660
6b45a3ca 661/* YYPGOTO[[NTERM-NUM]]. */
69e2658b 662const short
3f3eed27 663yy::b4_name::pgoto_[[]] =
2b548aa6 664{
3f3eed27 665 b4_pgoto
2b548aa6
RA
666};
667
6b45a3ca 668/* YYDEFGOTO[[NTERM-NUM]]. */
69e2658b 669const short
3f3eed27 670yy::b4_name::defgoto_[[]] =
2b548aa6 671{
3f3eed27 672 b4_defgoto
2b548aa6
RA
673};
674
6b45a3ca 675/* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If
2b548aa6
RA
676 positive, shift that token. If negative, reduce the rule which
677 number is the opposite. If zero, do what YYDEFACT says. */
69e2658b 678const short
3f3eed27 679yy::b4_name::table_[[]] =
2b548aa6 680{
3f3eed27 681 b4_table
2b548aa6
RA
682};
683
684/* YYCHECK. */
69e2658b 685const short
3f3eed27 686yy::b4_name::check_[[]] =
2b548aa6 687{
3f3eed27 688 b4_check
2b548aa6
RA
689};
690
6b45a3ca 691/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */
9515e8a7 692const yy::b4_name::TokenNumberType
3f3eed27 693yy::b4_name::r1_[[]] =
2b548aa6 694{
3f3eed27 695 b4_r1
2b548aa6
RA
696};
697
6b45a3ca 698/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */
a75c057f 699const short
3f3eed27 700yy::b4_name::r2_[[]] =
2b548aa6 701{
3f3eed27 702 b4_r2
2b548aa6
RA
703};
704
69e2658b 705#if YYDEBUG || YYERROR_VERBOSE
6b45a3ca 706/* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
2b548aa6
RA
707 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
708const char*
3f3eed27 709const yy::b4_name::name_[[]] =
2b548aa6 710{
3f3eed27 711 b4_tname
2b548aa6 712};
69e2658b 713#endif
2b548aa6 714
69e2658b 715#if YYDEBUG
2b548aa6 716/* YYRHS -- A `-1'-separated list of the rules' RHS. */
06446ccf 717const yy::b4_name::RhsNumberType
3f3eed27 718yy::b4_name::rhs_[[]] =
2b548aa6 719{
3f3eed27 720 b4_rhs
2b548aa6
RA
721};
722
6b45a3ca 723/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
2b548aa6 724 YYRHS. */
69e2658b 725const short
3f3eed27 726yy::b4_name::prhs_[[]] =
2b548aa6 727{
3f3eed27 728 b4_prhs
2b548aa6
RA
729};
730
69e2658b
RA
731/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */
732const short
733yy::b4_name::rline_[[]] =
734{
735 b4_rline
736};
737#endif
738
2b548aa6 739/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
06446ccf 740yy::b4_name::TokenNumberType
69e2658b 741yy::b4_name::translate_ (int token)
2b548aa6 742{
a75c057f 743 static
680e8701 744 const TokenNumberType
3f3eed27 745 translate_[[]] =
2b548aa6 746 {
3f3eed27 747 b4_translate
2b548aa6 748 };
007a50a4
AD
749 if ((unsigned) token <= user_token_number_max_)
750 return translate_[[token]];
751 else
752 return undef_token_;
2b548aa6
RA
753}
754
50997c6e 755const int yy::b4_name::eof_ = 0;
69e2658b
RA
756const int yy::b4_name::last_ = b4_last;
757const int yy::b4_name::flag_ = b4_flag;
758const int yy::b4_name::nnts_ = b4_nnts;
759const int yy::b4_name::nsym_ = b4_nsym;
50997c6e 760const int yy::b4_name::empty_ = -2;
69e2658b 761const int yy::b4_name::final_ = b4_final;
762a801e
RA
762const int yy::b4_name::terror_ = 1;
763const int yy::b4_name::errcode_ = 256;
50997c6e 764const int yy::b4_name::ntokens_ = b4_ntokens;
69e2658b
RA
765const int yy::b4_name::initdepth_ = b4_initdepth;
766
007a50a4
AD
767const unsigned yy::b4_name::user_token_number_max_ = b4_user_token_number_max;
768const yy::b4_name::TokenNumberType yy::b4_name::undef_token_ = b4_undef_token_number;
2b548aa6 769
3f3eed27 770b4_epilogue
2b548aa6 771
3f3eed27 772#output "stack.hh"
98254360
RA
773b4_copyright
774
2b548aa6
RA
775#ifndef BISON_STACK_HH
776# define BISON_STACK_HH
777
45119f04 778#include <deque>
2b548aa6
RA
779
780namespace yy
781{
45119f04 782 template < class T, class S = std::deque< T > >
2b548aa6
RA
783 class Stack
784 {
785 public:
786
787 typedef typename S::iterator Iterator;
788 typedef typename S::const_iterator ConstIterator;
789
790 Stack () : seq_ ()
791 {
792 }
793
794 Stack (unsigned n) : seq_ (n)
795 {
796 }
797
798 inline
799 T&
45119f04 800 operator [[]] (unsigned index)
2b548aa6 801 {
45119f04 802 return seq_[[index]];
2b548aa6
RA
803 }
804
805 inline
806 const T&
45119f04 807 operator [[]] (unsigned index) const
2b548aa6 808 {
45119f04 809 return seq_[[index]];
2b548aa6
RA
810 }
811
812 inline
813 void
814 push (const T& t)
815 {
45119f04 816 seq_.push_front (t);
2b548aa6
RA
817 }
818
819 inline
820 void
821 pop (unsigned n = 1)
822 {
823 for (; n; --n)
45119f04 824 seq_.pop_front ();
2b548aa6
RA
825 }
826
762a801e
RA
827 inline
828 unsigned
829 height () const
830 {
831 return seq_.size ();
832 }
833
2b548aa6
RA
834 inline ConstIterator begin () const { return seq_.begin (); }
835 inline ConstIterator end () const { return seq_.end (); }
836
837 private:
838
839 S seq_;
840 };
374f5a14
RA
841
842 template < class T, class S = Stack< T > >
843 class Slice
844 {
845 public:
846
847 Slice (const S& stack,
848 unsigned range) : stack_ (stack),
849 range_ (range)
850 {
851 }
852
853 inline
854 const T&
855 operator [[]] (unsigned index) const
856 {
45119f04 857 return stack_[[range_ - index]];
374f5a14
RA
858 }
859
860 private:
861
862 const S& stack_;
863 unsigned range_;
864 };
2b548aa6
RA
865}
866
867#endif // not BISON_STACK_HH
868
3f3eed27 869#output "location.hh"
98254360
RA
870b4_copyright
871
2b548aa6
RA
872#ifndef BISON_LOCATION_HH
873# define BISON_LOCATION_HH
874
875namespace yy
876{
877 struct Position
878 {
879 int line;
880 int column;
881 };
882
883 struct Location
884 {
885 Position first;
886 Position last;
887 };
888}
889
890#endif // not BISON_LOCATION_HH