* data/bison.c++: Replace some direct m4 expansions by constants. Be

more consistent when naming methods and variables.  Put preprocessor
directives around tables only needed for debugging.
This commit is contained in:
Robert Anisko
2002-02-07 16:41:23 +00:00
parent 4aacc3a71d
commit 69e2658bf6
2 changed files with 173 additions and 142 deletions

View File

@@ -1,3 +1,9 @@
2002-02-07 Robert Anisko <robert@lrde.epita.fr>
* data/bison.c++: Replace some direct m4 expansions by constants. Be
more consistent when naming methods and variables. Put preprocessor
directives around tables only needed for debugging.
2002-02-07 Robert Anisko <robert@lrde.epita.fr> 2002-02-07 Robert Anisko <robert@lrde.epita.fr>
* data/bison.c++ (yy::b4_name::print_): New method, replaces yyprint in * data/bison.c++ (yy::b4_name::print_): New method, replaces yyprint in

View File

@@ -1,8 +1,8 @@
#output "b4_output_prefix[]b4_output_infix[]-class.hh" #output "b4_output_prefix[]b4_output_infix[]-class.hh"
/* -*- C++ -*- */ /* -*- C++ -*- */
/* A Bison parser, made from %%filename, /* A Bison parser, made from b4_filename,
by GNU bison %%version. */ by GNU bison b4_version. */
/* Skeleton output parser for bison, /* Skeleton output parser for bison,
Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc. Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
@@ -32,6 +32,19 @@
b4_prologue b4_prologue
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG b4_debug
#endif
/* Enabling verbose error message. */
#ifndef YYERROR_VERBOSE
# define YYERROR_VERBOSE b4_error_verbose
#endif
/* Using locations. */
#define YYLSP_NEEDED b4_locations_flag
// FIXME: This should be defined in traits, not here. // FIXME: This should be defined in traits, not here.
typedef b4_stype yystype; typedef b4_stype yystype;
@@ -69,7 +82,6 @@ namespace yy
b4_name (bool debug) : debug_ (debug) b4_name (bool debug) : debug_ (debug)
{ {
looka = empty_;
} }
virtual ~b4_name () virtual ~b4_name ()
@@ -80,21 +92,14 @@ namespace yy
private: private:
virtual void lex_ ();
virtual void error_ (); virtual void error_ ();
virtual void print_ (); virtual void print_ ();
/* Call to lexical analyser. */
virtual
void
lex ()
{
looka = yylex (&value, &location);
}
/* Stacks. */ /* Stacks. */
StateStack state_stack; StateStack state_stack_;
SemanticStack semantic_stack; SemanticStack semantic_stack_;
LocationStack location_stack; LocationStack location_stack_;
/* Tables. */ /* Tables. */
static const short pact_[[]]; static const short pact_[[]];
@@ -105,34 +110,44 @@ namespace yy
static const short check_[[]]; static const short check_[[]];
static const short r1_[[]]; static const short r1_[[]];
static const short r2_[[]]; static const short r2_[[]];
#if YYDEBUG || YYERROR_VERBOSE
static const char* const name_[[]]; static const char* const name_[[]];
#endif
/* More tables, for debugging. */ /* More tables, for debugging. */
/* FIXME: These tables should not be printed when not in debug #if YYDEBUG
mode. %%ifdef? */
static const short rhs_[[]]; static const short rhs_[[]];
static const short prhs_[[]]; static const short prhs_[[]];
static const short rline_[[]]; static const short rline_[[]];
#endif
/* Even more tables. */ /* Even more tables. */
static inline char translate (int token); static inline char translate_ (int token);
/* Constants. */ /* Constants. */
static const int eof_; static const int eof_;
static const int last_;
static const int flag_;
static const int nnts_;
static const int nsym_;
static const int empty_; static const int empty_;
static const int final_;
static const int terror_; static const int terror_;
static const int errcode_; static const int errcode_;
static const int ntokens_; static const int ntokens_;
static const int initdepth_;
static const unsigned maxtok_;
/* State. */ /* State. */
int n; int n_;
int len; int len_;
int debug_; int debug_;
int state; int state_;
/* Lookahead. */ /* Lookahead and lookahead in internal form. */
int looka; int looka_;
int ilooka; int ilooka_;
/* Message. */ /* Message. */
std::string message; std::string message;
@@ -146,27 +161,15 @@ namespace yy
#output "b4_output_prefix[]b4_output_infix[].cc" #output "b4_output_prefix[]b4_output_infix[].cc"
#include "b4_output_prefix[]b4_output_infix-class.hh" #include "b4_output_prefix[]b4_output_infix-class.hh"
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG b4_debug
#endif
/* Enable debugging if requested. */ /* Enable debugging if requested. */
#if YYDEBUG #if YYDEBUG
# include <cstdio> # include <cstdio>
# define YYFPRINTF std::fprintf # define YYFPRINTF std::fprintf
# define YYDPRINTF(Args) \ # define YYDPRINTF(Args) \
do { \ do { \
if (debug_) \ if (debug_) \
YYFPRINTF Args; \ YYFPRINTF Args; \
} while (0) } while (0)
/* Nonzero means print parse trace. [The following comment makes no
sense to me. Could someone clarify it? --akim] Since this is
uninitialized, it does not stop multiple parsers from coexisting.
*/
int yydebug;
#else /* !YYDEBUG */ #else /* !YYDEBUG */
# define YYDPRINTF(Args) # define YYDPRINTF(Args)
#endif /* !YYDEBUG */ #endif /* !YYDEBUG */
@@ -181,166 +184,166 @@ yy::b4_name::parse ()
int errstatus = 0; int errstatus = 0;
/* Initialize stack. */ /* Initialize stack. */
state_stack = StateStack (0); state_stack_ = StateStack (0);
semantic_stack = SemanticStack (1); semantic_stack_ = SemanticStack (1);
location_stack = LocationStack (1); location_stack_ = LocationStack (1);
/* Reserve initial space. The C parser needed that, but is it really /* Reserve initial space. The C parser needed that, but is it really
useful here? */ useful here? */
state_stack.reserve (b4_initdepth); state_stack_.reserve (initdepth_);
semantic_stack.reserve (b4_initdepth); semantic_stack_.reserve (initdepth_);
location_stack.reserve (b4_initdepth); location_stack_.reserve (initdepth_);
/* Start. */ /* Start. */
state = 0; state_ = 0;
looka_ = empty_;
YYDPRINTF ((stderr, "Starting parse\n")); YYDPRINTF ((stderr, "Starting parse\n"));
/* New state. */ /* New state. */
yynewstate: yynewstate:
state_stack.push (state); state_stack_.push (state_);
YYDPRINTF ((stderr, "Entering state %d\n", state)); YYDPRINTF ((stderr, "Entering state %d\n", state_));
goto yybackup; goto yybackup;
/* Backup. */ /* Backup. */
yybackup: yybackup:
/* Try to take a decision without lookahead. */ /* Try to take a decision without lookahead. */
n = pact_[[state]]; n_ = pact_[[state_]];
if (n == b4_flag) if (n_ == flag_)
goto yydefault; goto yydefault;
/* Read a lookahead token. */ /* Read a lookahead token. */
if (looka == empty_) if (looka_ == empty_)
{ {
YYDPRINTF ((stderr, "Reading a token: ")); YYDPRINTF ((stderr, "Reading a token: "));
lex (); lex_ ();
} }
/* Convert token to internal form. */ /* Convert token to internal form. */
if (looka <= 0) if (looka_ <= 0)
{ {
looka = eof_; looka_ = eof_;
ilooka = 0; ilooka_ = 0;
YYDPRINTF ((stderr, "Now at end of input.\n")); YYDPRINTF ((stderr, "Now at end of input.\n"));
} }
else else
{ {
ilooka = translate (looka); ilooka_ = translate_ (looka_);
#if YYDEBUG #if YYDEBUG
if (debug_) if (debug_)
{ {
YYFPRINTF (stderr, "Next token is %d (%s", looka, name_[[ilooka]]); YYFPRINTF (stderr, "Next token is %d (%s", looka_, name_[[ilooka_]]);
print_ (); print_ ();
YYFPRINTF (stderr, ")\n"); YYFPRINTF (stderr, ")\n");
} }
#endif #endif
} }
n += ilooka; n_ += ilooka_;
if (n < 0 || n > b4_last || check_[[n]] != ilooka) if (n_ < 0 || n_ > last_ || check_[[n_]] != ilooka_)
goto yydefault; goto yydefault;
/* Reduce or error. */ /* Reduce or error. */
n = table_[[n]]; n_ = table_[[n_]];
if (n < 0) if (n_ < 0)
{ {
if (n == b4_flag) if (n_ == flag_)
goto yyerrlab; goto yyerrlab;
else else
{ {
n = -n; n_ = -n_;
goto yyreduce; goto yyreduce;
} }
} }
else if (n == 0) else if (n_ == 0)
goto yyerrlab; goto yyerrlab;
/* Accept? */ /* Accept? */
if (n == b4_final) if (n_ == final_)
goto yyacceptlab; goto yyacceptlab;
/* Shift the lookahead token. */ /* Shift the lookahead token. */
YYDPRINTF ((stderr, "Shifting token %d (%s), ", looka, name_[[ilooka]])); YYDPRINTF ((stderr, "Shifting token %d (%s), ", looka_, name_[[ilooka_]]));
/* Discard the token being shifted unless it is eof. */ /* Discard the token being shifted unless it is eof. */
if (looka != eof_) if (looka_ != eof_)
looka = empty_; looka_ = empty_;
semantic_stack.push (value); semantic_stack_.push (value);
location_stack.push (location); location_stack_.push (location);
state = n; state_ = n_;
goto yynewstate; goto yynewstate;
/* Default action. */ /* Default action. */
yydefault: yydefault:
n = defact_[[state]]; n_ = defact_[[state_]];
if (n == 0) if (n_ == 0)
goto yyerrlab; goto yyerrlab;
goto yyreduce; goto yyreduce;
/* Reduce. */ /* Reduce. */
yyreduce: yyreduce:
len = r2_[[n]]; len_ = r2_[[n_]];
if (len) if (len_)
{ {
value = semantic_stack[[1 - len]]; value = semantic_stack_[[1 - len_]];
location = location_stack[[1 - len]]; location = location_stack_[[1 - len_]];
} }
else else
{ {
// FIXME: This is truly ugly. value = semantic_stack_[[0]];
value = semantic_stack[[0]]; location = location_stack_[[0]];
location = location_stack[[0]];
} }
#if YYDEBUG #if YYDEBUG
if (debug_) if (debug_)
{ {
YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n - 1, rline_[[n]]); YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n_ - 1, rline_[[n_]]);
for (unsigned i = prhs_[[n]]; for (unsigned i = prhs_[[n_]];
rhs_[[i]] >= 0; ++i) rhs_[[i]] >= 0; ++i)
YYFPRINTF (stderr, "%s ", name_[[rhs_[i]]]); YYFPRINTF (stderr, "%s ", name_[[rhs_[i]]]);
YYFPRINTF (stderr, "-> %s\n", name_[[r1_[n]]]); YYFPRINTF (stderr, "-> %s\n", name_[[r1_[n_]]]);
} }
#endif #endif
{ {
SemanticType& yyval (value); SemanticType& yyval (value);
LocationType& yyloc (location); LocationType& yyloc (location);
SemanticStack& yyvsp (semantic_stack); SemanticStack& yyvsp (semantic_stack_);
LocationStack& yylsp (location_stack); LocationStack& yylsp (location_stack_);
switch (n) switch (n_)
{ {
b4_actions b4_actions
} }
} }
state_stack.pop (len); state_stack_.pop (len_);
semantic_stack.pop (len); semantic_stack_.pop (len_);
location_stack.pop (len); location_stack_.pop (len_);
#if YYDEBUG #if YYDEBUG
if (debug_) if (debug_)
{ {
YYFPRINTF (stderr, "state stack now"); YYFPRINTF (stderr, "state stack now");
for (StateStack::ConstIterator i = state_stack.begin (); for (StateStack::ConstIterator i = state_stack_.begin ();
i != state_stack.end (); ++i) i != state_stack_.end (); ++i)
YYFPRINTF (stderr, " %d", *i); YYFPRINTF (stderr, " %d", *i);
YYFPRINTF (stderr, "\n"); YYFPRINTF (stderr, "\n");
} }
#endif #endif
semantic_stack.push (value); semantic_stack_.push (value);
location_stack.push (location); location_stack_.push (location);
/* Shift the result of the reduction. */ /* Shift the result of the reduction. */
n = r1_[[n]]; n_ = r1_[[n_]];
state = pgoto_[[n - ntokens_]] + state_stack[[0]]; state_ = pgoto_[[n_ - ntokens_]] + state_stack_[[0]];
if (state >= 0 && state <= b4_last && check_[[state]] == state_stack[[0]]) if (state_ >= 0 && state_ <= last_ && check_[[state_]] == state_stack_[[0]])
state = table_[[state]]; state_ = table_[[state_]];
else else
state = defgoto_[[n - ntokens_]]; state_ = defgoto_[[n_ - ntokens_]];
goto yynewstate; goto yynewstate;
/* Report and recover from errors. This is very incomplete. */ /* Report and recover from errors. This is very incomplete. */
@@ -350,22 +353,22 @@ yy::b4_name::parse ()
{ {
++nerrs; ++nerrs;
// FIXME: Should be #if YYERROR_VERBOSE from here... #if YYERROR_VERBOSE
n = pact_[[state]]; n_ = pact_[[state_]];
if (n > b4_flag && n < b4_last) if (n_ > flag_ && n_ < last_)
{ {
message = "parse error, unexpected "; message = "parse error, unexpected ";
message += name_[[ilooka]]; message += name_[[ilooka_]];
{ {
int count = 0; int count = 0;
for (int x = (n < 0 ? -n : 0); x < b4_ntokens + b4_nnts; ++x) for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
if (check_[[x + n]] == x) if (check_[[x + n_]] == x)
++count; ++count;
if (count < 5) if (count < 5)
{ {
count = 0; count = 0;
for (int x = (n < 0 ? -n : 0); x < b4_ntokens + b4_nnts; ++x) for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
if (check_[[x + n]] == x) if (check_[[x + n_]] == x)
{ {
message += (!count++) ? ", expecting " : " or "; message += (!count++) ? ", expecting " : " or ";
message += name_[[x]]; message += name_[[x]];
@@ -374,7 +377,7 @@ yy::b4_name::parse ()
} }
} }
else else
// FIXME: to there... #endif
message = "parse error"; message = "parse error";
} }
error_ (); error_ ();
@@ -388,10 +391,10 @@ yy::b4_name::parse ()
error, discard it. */ error, discard it. */
/* Return failure if at end of input. */ /* Return failure if at end of input. */
if (looka == eof_) if (looka_ == eof_)
goto yyabortlab; goto yyabortlab;
YYDPRINTF ((stderr, "Discarding token %d (%s).\n", looka, name_[[ilooka]])); YYDPRINTF ((stderr, "Discarding token %d (%s).\n", looka_, name_[[ilooka_]]));
looka = empty_; looka_ = empty_;
} }
/* Else will try to reuse lookahead token after shifting the error /* Else will try to reuse lookahead token after shifting the error
@@ -403,52 +406,52 @@ yy::b4_name::parse ()
/* Pop the current state because it cannot handle the error token. */ /* Pop the current state because it cannot handle the error token. */
yyerrdefault: yyerrdefault:
yyerrpop: yyerrpop:
if (!state_stack.height ()) if (!state_stack_.height ())
goto yyabortlab; goto yyabortlab;
state = (state_stack.pop (), state_stack[[0]]); state_ = (state_stack_.pop (), state_stack_[[0]]);
semantic_stack.pop (); semantic_stack_.pop ();
location_stack.pop ();; location_stack_.pop ();;
#if YYDEBUG #if YYDEBUG
if (debug_) if (debug_)
{ {
YYFPRINTF (stderr, "Error: state stack now"); YYFPRINTF (stderr, "Error: state stack now");
for (StateStack::ConstIterator i = state_stack.begin (); for (StateStack::ConstIterator i = state_stack_.begin ();
i != state_stack.end (); ++i) i != state_stack_.end (); ++i)
YYFPRINTF (stderr, " %d", *i); YYFPRINTF (stderr, " %d", *i);
YYFPRINTF (stderr, "\n"); YYFPRINTF (stderr, "\n");
} }
#endif #endif
yyerrhandle: yyerrhandle:
n = pact_[[state]]; n_ = pact_[[state_]];
if (n == b4_flag) if (n_ == flag_)
goto yyerrdefault; goto yyerrdefault;
n += terror_; n_ += terror_;
if (n < 0 || n > b4_last || check_[[n]] != terror_) if (n_ < 0 || n_ > last_ || check_[[n_]] != terror_)
goto yyerrdefault; goto yyerrdefault;
n = table_[[n]]; n_ = table_[[n_]];
if (n < 0) if (n_ < 0)
{ {
if (n == b4_flag) if (n_ == flag_)
goto yyerrpop; goto yyerrpop;
n = -n; n_ = -n_;
goto yyreduce; goto yyreduce;
} }
else if (!n) else if (!n_)
goto yyerrpop; goto yyerrpop;
if (n == b4_final) if (n_ == final_)
goto yyacceptlab; goto yyacceptlab;
YYDPRINTF ((stderr, "Shifting error token, ")); YYDPRINTF ((stderr, "Shifting error token, "));
semantic_stack.push (value); semantic_stack_.push (value);
location_stack.push (location); location_stack_.push (location);
state = n; state_ = n_;
goto yynewstate; goto yynewstate;
/* Accept. */ /* Accept. */
@@ -460,9 +463,19 @@ yy::b4_name::parse ()
return 1; return 1;
} }
void
yy::b4_name::lex_ ()
{
#if YYLSP_NEEDED
looka_ = yylex (&value, &location);
#else
looka_ = yylex (&value);
#endif
}
/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing /* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
STATE-NUM. */ STATE-NUM. */
const short const short
yy::b4_name::pact_[[]] = yy::b4_name::pact_[[]] =
{ {
b4_pact b4_pact
@@ -471,21 +484,21 @@ yy::b4_name::pact_[[]] =
/* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE /* YYDEFACT[[S]] -- default rule to reduce with in state S when YYTABLE
doesn't specify something else to do. Zero means the default is an doesn't specify something else to do. Zero means the default is an
error. */ error. */
const short const short
yy::b4_name::defact_[[]] = yy::b4_name::defact_[[]] =
{ {
b4_defact b4_defact
}; };
/* YYPGOTO[[NTERM-NUM]]. */ /* YYPGOTO[[NTERM-NUM]]. */
const short const short
yy::b4_name::pgoto_[[]] = yy::b4_name::pgoto_[[]] =
{ {
b4_pgoto b4_pgoto
}; };
/* YYDEFGOTO[[NTERM-NUM]]. */ /* YYDEFGOTO[[NTERM-NUM]]. */
const short const short
yy::b4_name::defgoto_[[]] = yy::b4_name::defgoto_[[]] =
{ {
b4_defgoto b4_defgoto
@@ -494,26 +507,19 @@ yy::b4_name::defgoto_[[]] =
/* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If /* YYTABLE[[YYPACT[STATE-NUM]]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says. */ number is the opposite. If zero, do what YYDEFACT says. */
const short const short
yy::b4_name::table_[[]] = yy::b4_name::table_[[]] =
{ {
b4_table b4_table
}; };
/* YYCHECK. */ /* YYCHECK. */
const short const short
yy::b4_name::check_[[]] = yy::b4_name::check_[[]] =
{ {
b4_check b4_check
}; };
/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */
const short
yy::b4_name::rline_[[]] =
{
b4_rline
};
/* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */ /* YYR1[[YYN]] -- Symbol number of symbol that rule YYN derives. */
const short const short
yy::b4_name::r1_[[]] = yy::b4_name::r1_[[]] =
@@ -528,6 +534,7 @@ yy::b4_name::r2_[[]] =
b4_r2 b4_r2
}; };
#if YYDEBUG || YYERROR_VERBOSE
/* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM. /* YYTNAME[[SYMBOL-NUM]] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
const char* const char*
@@ -535,7 +542,9 @@ const yy::b4_name::name_[[]] =
{ {
b4_tname b4_tname
}; };
#endif
#if YYDEBUG
/* YYRHS -- A `-1'-separated list of the rules' RHS. */ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
const short const short
yy::b4_name::rhs_[[]] = yy::b4_name::rhs_[[]] =
@@ -545,15 +554,23 @@ yy::b4_name::rhs_[[]] =
/* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in /* YYPRHS[[YYN]] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */ YYRHS. */
const short const short
yy::b4_name::prhs_[[]] = yy::b4_name::prhs_[[]] =
{ {
b4_prhs b4_prhs
}; };
/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */
const short
yy::b4_name::rline_[[]] =
{
b4_rline
};
#endif
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
char char
yy::b4_name::translate (int token) yy::b4_name::translate_ (int token)
{ {
static static
const char const char
@@ -561,14 +578,22 @@ yy::b4_name::translate (int token)
{ {
b4_translate b4_translate
}; };
return ((unsigned)(token) <= b4_maxtok ? translate_[[token]] : b4_nsym); return ((unsigned)(token) <= maxtok_ ? translate_[[token]] : nsym_);
} }
const int yy::b4_name::eof_ = 0; const int yy::b4_name::eof_ = 0;
const int yy::b4_name::last_ = b4_last;
const int yy::b4_name::flag_ = b4_flag;
const int yy::b4_name::nnts_ = b4_nnts;
const int yy::b4_name::nsym_ = b4_nsym;
const int yy::b4_name::empty_ = -2; const int yy::b4_name::empty_ = -2;
const int yy::b4_name::final_ = b4_final;
const int yy::b4_name::terror_ = 1; const int yy::b4_name::terror_ = 1;
const int yy::b4_name::errcode_ = 256; const int yy::b4_name::errcode_ = 256;
const int yy::b4_name::ntokens_ = b4_ntokens; const int yy::b4_name::ntokens_ = b4_ntokens;
const int yy::b4_name::initdepth_ = b4_initdepth;
const unsigned yy::b4_name::maxtok_ = b4_maxtok;
b4_epilogue b4_epilogue