5 # Return the smallest signed int type able to handle the number MAX.
6 m4_define([b4_sint_type
],
7 [m4_if(m4_eval([$
1 <= 127]), [1], [signed char],
8 m4_eval([$
1 <= 32767]), [1], [signed short],
14 # Return the smallest unsigned int type able to handle the number MAX.
15 m4_define([b4_uint_type
],
16 [m4_if(m4_eval([$
1 <= 255]), [1], [unsigned char],
17 m4_eval([$
1 <= 65535]), [1], [unsigned short],
21 # b4_lhs_value([TYPE])
22 # --------------------
23 # Expansion of $<TYPE>$.
24 m4_define([b4_lhs_value
],
25 [yyval
[]m4_ifval([$
1], [.$
1])])
28 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
29 # --------------------------------------
30 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
32 m4_define([b4_rhs_value
],
33 [semantic_stack_@
<:@
m4_eval([$
1 - $
2])@
:>@
m4_ifval([$
3], [.$
3])])
39 m4_define([b4_lhs_location
],
43 # b4_rhs_location(RULE-LENGTH, NUM)
44 # ---------------------------------
45 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
47 m4_define([b4_rhs_location
],
48 [location_stack_@
<:@
m4_eval([$
1 - $
2])@
:>@
])
51 # b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
52 # -----------------------------------------
53 # Output the definition of this token as #define.
54 m4_define([b4_token_define
],
59 # b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
60 # -------------------------------------------------------
61 # Output the definition of the tokens as #define.
62 m4_define([b4_token_defines
],
63 [m4_map([b4_token_define
], [$@
])])
65 m4_define_default([b4_input_suffix
], [.y
])
67 m4_define_default([b4_output_parser_suffix
],
68 [m4_translit(b4_input_suffix
, [yY
], [cC
])])
70 m4_define_default([b4_output_parser_name
],
71 [b4_output_prefix
[]b4_output_infix
[]b4_output_parser_suffix
[]])
74 m4_define_default([b4_output_header_suffix
],
75 [m4_translit(b4_input_suffix
, [yY
], [hH
])])
77 m4_define_default([b4_output_header_name
],
78 [b4_output_prefix
[]b4_output_infix
[]b4_output_header_suffix
[]])
80 m4_define_default([b4_header_guard
],
81 [m4_bpatsubst(m4_toupper([BISON_
]b4_output_header_name
),
82 [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ
]], [_
])])
84 m4_define([b4_inherit
],
96 m4_define([b4_constructor
],
102 m4_define([b4_copyright
],
104 /* A Bison parser, made from b4_filename,
105 by GNU bison b4_version. */
107 /* Skeleton output parser for bison,
108 Copyright 2002 Free Software Foundation, Inc.
110 This program is free software; you can redistribute it and/or modify
111 it under the terms of the GNU General Public License as published by
112 the Free Software Foundation; either version 2, or (at your option)
115 This program is distributed in the hope that it will be useful,
116 but WITHOUT ANY WARRANTY; without even the implied warranty of
117 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
118 GNU General Public License for more details.
120 You should have received a copy of the GNU General Public License
121 along with this program; if not, write to the Free Software
122 Foundation, Inc., 59 Temple Place - Suite 330,
123 Boston, MA 02111-1307, USA. */
125 /* As a special exception, when this file is copied by Bison into a
126 Bison output file, you may use that output file without restriction.
127 This special exception was added by the Free Software Foundation
128 in version 1.24 of Bison. */])
131 #output "b4_output_header_name"
133 #ifndef b4_header_guard
134 # define b4_header_guard
137 #include "location.hh"
141 /* Using locations. */
142 #define YYLSP_NEEDED b4_locations_flag
144 /* Copy the first part of user declarations. */
148 b4_token_defines(b4_tokens
)
150 /* Enabling traces. */
152 # define YYDEBUG b4_debug
155 /* Enabling verbose error message. */
156 #ifndef YYERROR_VERBOSE
157 # define YYERROR_VERBOSE b4_error_verbose
161 m4_ifdef([b4_stype_line
],
162 [#line b4_stype_line "b4_filename"
166 # define YYSTYPE yystype
169 /* Copy the second part of user declarations. */
172 #line __oline__ "__ofile__"
173 #ifndef YYLLOC_DEFAULT
174 # define YYLLOC_DEFAULT(Current, Rhs, N) \
175 Current.last_line = Rhs[[N]].last_line; \
176 Current.last_column = Rhs[[N]].last_column;
179 m4_if(b4_locations_flag
, [0], [],
181 typedef struct yyltype
188 # define YYLTYPE yyltype
195 template < typename P
>
201 struct Traits
< b4_name
>
203 typedef b4_uint_type(b4_translate_max
) TokenNumberType
;
204 typedef b4_sint_type(b4_rhs_max
) RhsNumberType
;
205 typedef int StateType
;
206 typedef yystype SemanticType
;
207 typedef b4_ltype LocationType
;
213 class b4_name b4_inherit
217 typedef Traits
< b4_name
>::TokenNumberType TokenNumberType
;
218 typedef Traits
< b4_name
>::RhsNumberType RhsNumberType
;
219 typedef Traits
< b4_name
>::StateType StateType
;
220 typedef Traits
< b4_name
>::SemanticType SemanticType
;
221 typedef Traits
< b4_name
>::LocationType LocationType
;
223 typedef Stack
< StateType
> StateStack
;
224 typedef Stack
< SemanticType
> SemanticStack
;
225 typedef Stack
< LocationType
> LocationStack
;
229 LocationType initlocation
[]b4_param
) :
230 b4_constructor
[]debug_ (debug
),
231 initlocation_ (initlocation
)
233 b4_name (bool debug
[]b4_param
) :
234 b4_constructor
[]debug_ (debug
)
243 virtual int parse ();
247 virtual void lex_ ();
248 virtual void error_ ();
249 virtual void print_ ();
252 StateStack state_stack_
;
253 SemanticStack semantic_stack_
;
254 LocationStack location_stack_
;
257 static const short pact_
[[]];
258 static const short defact_
[[]];
259 static const short pgoto_
[[]];
260 static const short defgoto_
[[]];
261 static const short table_
[[]];
262 static const short check_
[[]];
263 static const b4_uint_type(b4_r1_max
) r1_
[[]];
264 static const b4_uint_type(b4_r2_max
) r2_
[[]];
266 #if YYDEBUG || YYERROR_VERBOSE
267 static const char* const name_
[[]];
270 /* More tables, for debugging. */
272 static const RhsNumberType rhs_
[[]];
273 static const b4_uint_type(b4_prhs_max
) prhs_
[[]];
274 static const b4_uint_type(b4_rline_max
) rline_
[[]];
275 static const b4_uint_type(b4_stos_max
) stos_
[[]];
276 static const short token_number_
[[]];
279 /* Even more tables. */
280 static inline TokenNumberType
translate_ (int token
);
283 static const int eof_
;
284 static const int last_
;
285 static const int flag_
;
286 static const int nnts_
;
287 static const int nsym_
;
288 static const int empty_
;
289 static const int final_
;
290 static const int terror_
;
291 static const int errcode_
;
292 static const int ntokens_
;
293 static const int initdepth_
;
294 static const unsigned user_token_number_max_
;
295 static const TokenNumberType undef_token_
;
303 /* Lookahead and lookahead in internal form. */
310 /* Semantic value and location of lookahead token. */
312 LocationType location
;
318 /* Initial location. */
319 LocationType initlocation_
;
323 #endif /* not b4_header_guard */
325 #output "b4_output_prefix[]b4_output_infix[].cc"
328 #include "b4_output_header_name"
330 /* Enable debugging if requested. */
333 # define YYFPRINTF std::fprintf
334 # define YYDPRINTF(Args) \
340 # define YYDPRINTF(Args)
341 #endif /* !YYDEBUG */
344 yy::b4_name::parse ()
349 /* Initialize stack. */
350 state_stack_
= StateStack (0);
351 semantic_stack_
= SemanticStack (1);
352 location_stack_
= LocationStack (1);
358 location
= initlocation_
;
360 YYDPRINTF ((stderr
, "Starting parse\n"));
364 state_stack_
.push (state_
);
365 YYDPRINTF ((stderr
, "Entering state %d\n", state_
));
371 /* Try to take a decision without lookahead. */
372 n_
= pact_
[[state_]];
376 /* Read a lookahead token. */
377 if (looka_
== empty_
)
379 YYDPRINTF ((stderr
, "Reading a token: "));
383 /* Convert token to internal form. */
388 YYDPRINTF ((stderr
, "Now at end of input.\n"));
392 ilooka_
= translate_ (looka_
);
396 YYFPRINTF (stderr
, "Next token is %d (%s", looka_
, name_
[[ilooka_]]);
398 YYFPRINTF (stderr
, ")\n");
404 if (n_
< 0 || n_
> last_
|| check_
[[n_]] != ilooka_
)
407 /* Reduce or error. */
426 /* Shift the lookahead token. */
427 YYDPRINTF ((stderr
, "Shifting token %d (%s), ", looka_
, name_
[[ilooka_]]));
429 /* Discard the token being shifted unless it is eof. */
433 semantic_stack_
.push (value
);
434 location_stack_
.push (location
);
436 /* Count tokens shifted since error; after three, turn off error
444 /* Default action. */
446 n_
= defact_
[[state_]];
456 yyval
= semantic_stack_
[[len_
- 1]];
457 yyloc
= location_stack_
[[len_
- 1]];
461 yyval
= semantic_stack_
[[0]];
462 yyloc
= location_stack_
[[0]];
468 YYFPRINTF (stderr
, "Reducing via rule %d (line %d), ", n_
- 1, rline_
[[n_]]);
469 for (b4_uint_type(b4_prhs_max
) i
= prhs_
[[n_]];
471 YYFPRINTF (stderr
, "%s ", name_
[[rhs_
[i
]]]);
472 YYFPRINTF (stderr
, "-> %s\n", name_
[[r1_
[n_
]]]);
478 Slice
< LocationType
, LocationStack
> slice (location_stack_
, len_
);
479 YYLLOC_DEFAULT (yyloc
, slice
, len_
);
487 /* Line __line__ of __file__. */
488 #line __oline__ "__ofile__"
490 state_stack_
.pop (len_
);
491 semantic_stack_
.pop (len_
);
492 location_stack_
.pop (len_
);
497 YYFPRINTF (stderr
, "state stack now");
498 for (StateStack::ConstIterator i
= state_stack_
.begin ();
499 i
!= state_stack_
.end (); ++i
)
500 YYFPRINTF (stderr
, " %d", *i
);
501 YYFPRINTF (stderr
, "\n");
505 semantic_stack_
.push (yyval
);
506 location_stack_
.push (yyloc
);
508 /* Shift the result of the reduction. */
510 state_
= pgoto_
[[n_
- ntokens_
]] + state_stack_
[[0]];
511 if (state_
>= 0 && state_
<= last_
&& check_
[[state_]] == state_stack_
[[0]])
512 state_
= table_
[[state_]];
514 state_
= defgoto_
[[n_
- ntokens_
]];
517 /* Report and recover from errors. This is very incomplete. */
519 /* If not already recovering from an error, report this error. */
525 n_
= pact_
[[state_]];
526 if (n_
> flag_
&& n_
< last_
)
528 message
= "parse error, unexpected ";
529 message
+= name_
[[ilooka_]];
532 for (int x
= (n_
< 0 ? -n_
: 0); x
< ntokens_
+ nnts_
; ++x
)
533 if (check_
[[x
+ n_
]] == x
)
538 for (int x
= (n_
< 0 ? -n_
: 0); x
< ntokens_
+ nnts_
; ++x
)
539 if (check_
[[x
+ n_
]] == x
)
541 message
+= (!count
++) ? ", expecting " : " or ";
542 message
+= name_
[[x]];
549 message
= "parse error";
554 /* Error raised explicitly by an action. */
558 /* If just tried and failed to reuse lookahead token after an
559 error, discard it. */
561 /* Return failure if at end of input. */
564 YYDPRINTF ((stderr
, "Discarding token %d (%s).\n", looka_
, name_
[[ilooka_]]));
568 /* Else will try to reuse lookahead token after shifting the error
575 n_
= pact_
[[state_]];
579 if (0 <= n_
&& n_
<= last_
&& check_
[[n_]] == terror_
)
587 /* Pop the current state because it cannot handle the error token. */
588 if (!state_stack_
.height ())
594 if (stos_
[[state_]] < ntokens_
)
596 YYFPRINTF (stderr
, "Error: popping token %d (%s",
597 token_number_
[[stos_
[state_
]]],
598 name_
[[stos_
[state_
]]]);
600 YYPRINT (stderr
, token_number_
[[stos_
[state_
]]],
601 semantic_stack_
.top ());
603 YYFPRINTF (stderr
, ")\n");
607 YYFPRINTF (stderr
, "Error: popping nonterminal (%s)\n",
608 name_
[[stos_
[state_
]]]);
613 state_
= (state_stack_
.pop (), state_stack_
[[0]]);
614 semantic_stack_
.pop ();
615 location_stack_
.pop ();;
620 YYFPRINTF (stderr
, "Error: state stack now");
621 for (StateStack::ConstIterator i
= state_stack_
.begin ();
622 i
!= state_stack_
.end (); ++i
)
623 YYFPRINTF (stderr
, " %d", *i
);
624 YYFPRINTF (stderr
, "\n");
632 YYDPRINTF ((stderr
, "Shifting error token, "));
634 semantic_stack_
.push (value
);
635 location_stack_
.push (location
);
653 looka_
= yylex (&value
, &location
);
655 looka_
= yylex (&value
);
659 /* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
662 yy::b4_name::pact_
[[]] =
667 /* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE
668 doesn't specify something else to do. Zero means the default is an
671 yy::b4_name::defact_
[[]] =
676 /* YYPGOTO[[NTERM-NUM]]. */
678 yy::b4_name::pgoto_
[[]] =
683 /* YYDEFGOTO[[NTERM-NUM]]. */
685 yy::b4_name::defgoto_
[[]] =
690 /* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If
691 positive, shift that token. If negative, reduce the rule which
692 number is the opposite. If zero, do what YYDEFACT says. */
694 yy::b4_name::table_
[[]] =
701 yy::b4_name::check_
[[]] =
707 /* STOS_[[STATE-NUM]] -- The (internal number of the) accessing
708 symbol of state STATE-NUM. */
709 const b4_uint_type(b4_stos_max
)
710 yy::b4_name::stos_
[[]] =
715 /* TOKEN_NUMBER_[[YYLEX-NUM]] -- Internal token number corresponding
718 yy::b4_name::token_number_
[[]] =
724 /* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */
725 const b4_uint_type(b4_r1_max
)
726 yy::b4_name::r1_
[[]] =
731 /* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */
732 const b4_uint_type(b4_r2_max
)
733 yy::b4_name::r2_
[[]] =
738 #if YYDEBUG || YYERROR_VERBOSE
739 /* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
740 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
742 const yy::b4_name::name_
[[]] =
749 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
750 const yy::b4_name::RhsNumberType
751 yy::b4_name::rhs_
[[]] =
756 /* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
758 const b4_uint_type(b4_prhs_max
)
759 yy::b4_name::prhs_
[[]] =
764 /* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */
765 const b4_uint_type(b4_rline_max
)
766 yy::b4_name::rline_
[[]] =
772 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
773 yy::b4_name::TokenNumberType
774 yy::b4_name::translate_ (int token
)
777 const TokenNumberType
782 if ((unsigned) token
<= user_token_number_max_
)
783 return translate_
[[token]];
788 const int yy::b4_name::eof_
= 0;
789 const int yy::b4_name::last_
= b4_last
;
790 const int yy::b4_name::flag_
= b4_flag
;
791 const int yy::b4_name::nnts_
= b4_nnts
;
792 const int yy::b4_name::nsym_
= b4_nsym
;
793 const int yy::b4_name::empty_
= -2;
794 const int yy::b4_name::final_
= b4_final
;
795 const int yy::b4_name::terror_
= 1;
796 const int yy::b4_name::errcode_
= 256;
797 const int yy::b4_name::ntokens_
= b4_ntokens
;
798 const int yy::b4_name::initdepth_
= b4_initdepth
;
800 const unsigned yy::b4_name::user_token_number_max_
= b4_user_token_number_max
;
801 const yy::b4_name::TokenNumberType
yy::b4_name::undef_token_
= b4_undef_token_number
;
808 #ifndef BISON_STACK_HH
809 # define BISON_STACK_HH
815 template < class T
, class S
= std::deque
< T
> >
820 typedef typename
S::iterator Iterator
;
821 typedef typename
S::const_iterator ConstIterator
;
827 Stack (unsigned n
) : seq_ (n
)
833 operator [[]] (unsigned index
)
835 return seq_
[[index]];
840 operator [[]] (unsigned index
) const
842 return seq_
[[index]];
867 inline ConstIterator
begin () const { return seq_
.begin (); }
868 inline ConstIterator
end () const { return seq_
.end (); }
875 template < class T
, class S
= Stack
< T
> >
880 Slice (const S
& stack
,
881 unsigned range
) : stack_ (stack
),
888 operator [[]] (unsigned index
) const
890 return stack_
[[range_
- index
]];
900 #endif // not BISON_STACK_HH
902 #output "location.hh"
905 #ifndef BISON_LOCATION_HH
906 # define BISON_LOCATION_HH
923 #endif // not BISON_LOCATION_HH