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