* data/bison.c++: Adjust the parser code. Fix some muscles that were

not expanded by m4.
This commit is contained in:
Robert Anisko
2002-02-06 14:22:44 +00:00
parent 0d76958cf7
commit 50997c6eeb
2 changed files with 146 additions and 85 deletions

View File

@@ -1,3 +1,8 @@
2002-02-06 Robert Anisko <robert@lrde.epita.fr>
* data/bison.c++: Adjust the parser code. Fix some muscles that were
not expanded by m4.
2002-02-05 Akim Demaille <akim@epita.fr> 2002-02-05 Akim Demaille <akim@epita.fr>
* data/bison.c++: Adjust to the M4 back end. * data/bison.c++: Adjust to the M4 back end.

View File

@@ -1,11 +1,11 @@
#output "b4_output_prefix[]b4_output_infix[].hh" #output "b4_output_prefix[]b4_output_infix[]-class.hh"
/* -*- C++ -*- */ /* -*- C++ -*- */
/* A Bison parser, made from %%filename, /* A Bison parser, made from %%filename,
by GNU bison %%version. */ by GNU bison %%version. */
/* Skeleton output parser for bison, /* Skeleton output parser for bison,
Copyright (C) 2002 Free Software Foundation, Inc. Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -28,9 +28,13 @@
in version 1.24 of Bison. */ in version 1.24 of Bison. */
#include "stack.hh" #include "stack.hh"
/* #include "parser.hh" */
#include "location.hh" #include "location.hh"
b4_prologue
// FIXME: This should be defined in traits, not here.
typedef b4_stype yystype;
namespace yy namespace yy
{ {
class b4_name; class b4_name;
@@ -43,21 +47,19 @@ namespace yy
template < > template < >
struct Traits< b4_name > struct Traits< b4_name >
{ {
typedef int StateType; typedef int StateType;
typedef b4_stype SemanticType; typedef yystype SemanticType;
typedef Location LocationType; typedef b4_ltype LocationType;
}; };
} }
b4_prologue
namespace yy namespace yy
{ {
class b4_name class b4_name
{ {
public: public:
typedef Traits< b4_name >::StateType StateType; typedef Traits< b4_name >::StateType StateType;
typedef Traits< b4_name >::SemanticType SemanticType; typedef Traits< b4_name >::SemanticType SemanticType;
typedef Traits< b4_name >::LocationType LocationType; typedef Traits< b4_name >::LocationType LocationType;
@@ -65,9 +67,13 @@ namespace yy
typedef Stack< SemanticType > SemanticStack; typedef Stack< SemanticType > SemanticStack;
typedef Stack< LocationType > LocationStack; typedef Stack< LocationType > LocationStack;
b4_name () : debug (1) b4_name (bool debug) : debug_ (debug)
{
looka = empty_;
}
virtual ~b4_name ()
{ {
looka = empty;
} }
virtual int parse (); virtual int parse ();
@@ -79,7 +85,7 @@ namespace yy
void void
lex () lex ()
{ {
looka = yylex (&value); looka = yylex (&value, &location);
} }
/* Stacks. */ /* Stacks. */
@@ -94,7 +100,6 @@ namespace yy
static const short defgoto_[[]]; static const short defgoto_[[]];
static const short table_[[]]; static const short table_[[]];
static const short check_[[]]; static const short check_[[]];
static const short line_[[]];
static const short r1_[[]]; static const short r1_[[]];
static const short r2_[[]]; static const short r2_[[]];
static const char* const name_[[]]; static const char* const name_[[]];
@@ -110,13 +115,14 @@ namespace yy
static inline char translate (int token); static inline char translate (int token);
/* Eof and empty. */ /* Eof and empty. */
static const int eof; static const int eof_;
static const int empty; static const int empty_;
static const int ntokens_;
/* State. */ /* State. */
int n; int n;
int len; int len;
int debug; int debug_;
int state; int state;
/* Lookahead. */ /* Lookahead. */
@@ -130,21 +136,28 @@ 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.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 b4_debug #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. Since this is uninitialized, it /* Nonzero means print parse trace. [The following comment makes no
does not stop multiple parsers from coexisting. */ sense to me. Could someone clarify it? --akim] Since this is
uninitialized, it does not stop multiple parsers from coexisting.
*/
int yydebug; int yydebug;
#else /* !YYDEBUG */ #else /* !YYDEBUG */
# define YYDPRINTF(Args) # define YYDPRINTF(Args)
@@ -175,6 +188,7 @@ yy::b4_name::parse ()
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;
/* Backup. */ /* Backup. */
yybackup: yybackup:
@@ -185,7 +199,7 @@ yy::b4_name::parse ()
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 ();
@@ -194,16 +208,19 @@ yy::b4_name::parse ()
/* 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 b4_debug #if YYDEBUG
YYFPRINTF (stderr, "Next token is %d (%s", looka, name_[[ilooka]]); if (debug_)
YYFPRINTF (stderr, ")\n"); {
YYFPRINTF (stderr, "Next token is %d (%s", looka, name_[[ilooka]]);
YYFPRINTF (stderr, ")\n");
}
#endif #endif
} }
@@ -234,8 +251,8 @@ yy::b4_name::parse ()
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);
@@ -247,15 +264,25 @@ yy::b4_name::parse ()
n = defact_[[state]]; n = defact_[[state]];
if (n == 0) if (n == 0)
goto yyerrlab; goto yyerrlab;
goto yyreduce;
/* Reduce. */ /* Reduce. */
yyreduce: yyreduce:
len = r2_[[n]]; len = r2_[[n]];
value = semantic_stack[[1 - len]]; if (len)
location = location_stack[[1 - len]]; {
value = semantic_stack[[1 - len]];
location = location_stack[[1 - len]];
}
else
{
// FIXME: This is truly ugly.
value = semantic_stack[[0]];
location = location_stack[[0]];
}
#if b4_debug #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]];
@@ -267,7 +294,9 @@ yy::b4_name::parse ()
{ {
SemanticType& yyval (value); SemanticType& yyval (value);
LocationType& yyloc (location);
SemanticStack& yyvsp (semantic_stack); SemanticStack& yyvsp (semantic_stack);
LocationStack& yylsp (location_stack);
switch (n) switch (n)
{ {
@@ -279,8 +308,8 @@ yy::b4_name::parse ()
semantic_stack.pop (len); semantic_stack.pop (len);
location_stack.pop (len); location_stack.pop (len);
#if b4_debug #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 ();
@@ -295,17 +324,16 @@ yy::b4_name::parse ()
/* Shift the result of the reduction. */ /* Shift the result of the reduction. */
n = r1_[[n]]; n = r1_[[n]];
state = pgoto_[[n - b4_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 <= b4_last && check_[[state]] == state_stack[[0]])
state = table_[[state]]; state = table_[[state]];
else else
state = defgoto_[[n - b4_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. */
yyerrlab: yyerrlab:
// FIXME: Need something like yyerror? std::cerr << "Parse error." << std::endl; // FIXME: Need something like yyerror?
std::cerr << "Parse error." << std::endl;
return 1; return 1;
/* Accept. */ /* Accept. */
@@ -313,7 +341,7 @@ yy::b4_name::parse ()
return 0; return 0;
} }
/* 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_[[]] =
@@ -321,7 +349,7 @@ yy::b4_name::pact_[[]] =
b4_pact b4_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
@@ -330,21 +358,21 @@ 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
}; };
/* 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
@@ -360,28 +388,28 @@ yy::b4_name::check_[[]] =
b4_check b4_check
}; };
/* YYRLINE[[YYN]] -- source line where rule number YYN was defined. */ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
const short const short
yy::b4_name::line_[[]] = yy::b4_name::rline_[[]] =
{ {
b4_line 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_[[]] =
{ {
b4_r1 b4_r1
}; };
/* YYR2[[YYN]] -- Number of symbols composing right hand side of rule YYN. */ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
const short const short
yy::b4_name::r2_[[]] = yy::b4_name::r2_[[]] =
{ {
b4_r2 b4_r2
}; };
/* 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*
const yy::b4_name::name_[[]] = const yy::b4_name::name_[[]] =
@@ -396,7 +424,7 @@ yy::b4_name::rhs_[[]] =
b4_rhs b4_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_[[]] =
@@ -404,13 +432,6 @@ 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
};
/* 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)
@@ -424,8 +445,9 @@ yy::b4_name::translate (int token)
return ((unsigned)(token) <= b4_maxtok ? translate_[[token]] : b4_nsym); return ((unsigned)(token) <= b4_maxtok ? translate_[[token]] : b4_nsym);
} }
const int yy::b4_name::eof = 0; const int yy::b4_name::eof_ = 0;
const int yy::b4_name::empty = -2; const int yy::b4_name::empty_ = -2;
const int yy::b4_name::ntokens_ = b4_ntokens;
b4_epilogue b4_epilogue
@@ -520,3 +542,37 @@ namespace yy
} }
#endif // not BISON_LOCATION_HH #endif // not BISON_LOCATION_HH
m4_if(b4_defines_flag, 0, [],
[#output "b4_output_header_name"
#ifndef b4_header_guard
# define b4_header_guard
b4_tokendef
#ifndef YYSTYPE
typedef b4_stype
yystype;
# define YYSTYPE yystype
#endif
m4_if(b4_pure, [0],
[extern YYSTYPE b4_prefix[]lval;])
m4_if(b4_locations_flag, [0], [],
[#ifndef YYLTYPE
typedef struct yyltype
{
int first_line;
int first_column;
int last_line;
int last_column;
} yyltype;
# define YYLTYPE yyltype
#endif
m4_if(b4_pure, [0],
[extern YYLTYPE b4_prefix[]lloc;])
])
#endif /* not b4_header_guard */
])