* data/lalr1.cc (parser::token_number_type, parser::rhs_number_type)

(parser::state_type, parser::semantic_type, parser::location_type):
Private, not public.
(parser::parse): Return ints, not bool.
Returning a bool introduces a problem: 0 corresponds to false, and
it seems weird to return false on success.  Returning true changes
the conventions for yyparse.
Alternatively we could return void and send an exception.
There is no clear consensus (yet?).
(state_stack, semantic_stack, location_stack): Rename as...
(state_stack_type, semantic_stack_type, location_stack_type): these.
Private, not public.
* tests/c++.at: New.
* tests/testsuite.at, tests/Makefile.am: Adjust.
This commit is contained in:
Akim Demaille
2004-12-22 10:06:15 +00:00
parent 72731bb70b
commit e019c24779
5 changed files with 157 additions and 32 deletions

View File

@@ -213,25 +213,12 @@ namespace yy
/// A Bison parser.
class ]b4_parser_class_name[
{
public:
/// Internal symbol numbers.
typedef traits<]b4_parser_class_name[>::token_number_type token_number_type;
/// A type to store symbol numbers and -1.
typedef traits<]b4_parser_class_name[>::rhs_number_type rhs_number_type;
/// State numbers.
typedef traits<]b4_parser_class_name[>::state_type state_type;
/// Symbol semantic values.
typedef traits<]b4_parser_class_name[>::semantic_type semantic_type;
typedef traits<]b4_parser_class_name[>::semantic_type semantic_type;
/// Symbol locations.
typedef traits<]b4_parser_class_name[>::location_type location_type;
/// State stack type.
typedef stack<state_type> state_stack;
/// Semantic value stack type.
typedef stack<semantic_type> semantic_stack;
/// location stack type.
typedef stack<location_type> location_stack;
typedef traits<]b4_parser_class_name[>::location_type location_type;
public:
/// Build a parser object.
]b4_parser_class_name[ (]b4_parse_param_decl[) :
yydebug_ (false),
@@ -245,7 +232,7 @@ namespace yy
/// Parse.
/// \returns 0 iff parsing succeeded.
virtual bool parse ();
virtual int parse ();
/// The current debugging stream.
std::ostream& debug_stream () const;
@@ -283,13 +270,24 @@ namespace yy
#endif /* ! YYDEBUG */
/// The state stack.
state_stack yystate_stack_;
/// The semantic value stack.
semantic_stack yysemantic_stack_;
/// The location stack.
location_stack yylocation_stack_;
/// State numbers.
typedef traits<]b4_parser_class_name[>::state_type state_type;
/// State stack type.
typedef stack<state_type> state_stack_type;
/// Semantic value stack type.
typedef stack<semantic_type> semantic_stack_type;
/// location stack type.
typedef stack<location_type> location_stack_type;
/// The state stack.
state_stack_type yystate_stack_;
/// The semantic value stack.
semantic_stack_type yysemantic_stack_;
/// The location stack.
location_stack_type yylocation_stack_;
/// Internal symbol numbers.
typedef traits<]b4_parser_class_name[>::token_number_type token_number_type;
/* Tables. */
/// For a state, the index in \a yytable_ of its portion.
static const ]b4_int_type_for([b4_pact])[ yypact_[];
@@ -327,6 +325,8 @@ namespace yy
#endif
#if YYDEBUG
/// A type to store symbol numbers and -1.
typedef traits<]b4_parser_class_name[>::rhs_number_type rhs_number_type;
/// A `-1'-separated list of the rules' RHS.
static const rhs_number_type yyrhs_[];
/// For each rule, the index of the first RHS symbol in \a yyrhs_.
@@ -538,7 +538,7 @@ yy::]b4_parser_class_name[::set_debug_level (debug_level_type l)
}
bool
int
yy::]b4_parser_class_name[::parse ()
{
YYCDEBUG << "Starting parse" << std::endl;
@@ -564,9 +564,9 @@ b4_syncline([@oline@], [@ofile@])])dnl
yynewstate, since the latter expects the semantical and the
location values to have been already stored, initialize these
stacks with a primary value. */
yystate_stack_ = state_stack (0);
yysemantic_stack_ = semantic_stack (0);
yylocation_stack_ = location_stack (0);
yystate_stack_ = state_stack_type (0);
yysemantic_stack_ = semantic_stack_type (0);
yylocation_stack_ = location_stack_type (0);
yysemantic_stack_.push (yylval);
yylocation_stack_.push (yylloc);
@@ -669,7 +669,7 @@ yyreduce:
yyval = yysemantic_stack_[0];
{
slice<location_type, location_stack> slice (yylocation_stack_, yylen_);
slice<location_type, location_stack_type> slice (yylocation_stack_, yylen_);
YYLLOC_DEFAULT (yyloc, slice, yylen_);
}
YY_REDUCE_PRINT (yyn_);
@@ -996,7 +996,7 @@ void
yy::]b4_parser_class_name[::yystack_print_ ()
{
*yycdebug_ << "Stack now";
for (state_stack::const_iterator i = yystate_stack_.begin ();
for (state_stack_type::const_iterator i = yystate_stack_.begin ();
i != yystate_stack_.end (); ++i)
*yycdebug_ << ' ' << *i;
*yycdebug_ << std::endl;
@@ -1118,6 +1118,7 @@ namespace yy
S seq_;
};
/// Present a slice of the top of a stack.
template <class T, class S = stack<T> >
class slice
{
@@ -1283,7 +1284,7 @@ namespace yy
** \{ */
public:
/// Construct a location.
location (void) :
location () :
begin (),
end ()
{
@@ -1295,7 +1296,7 @@ namespace yy
** \{ */
public:
/// Reset initial location to final location.
inline void step (void)
inline void step ()
{
begin = end;
}