mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* data/bison.c++: Adjust the parser code. Fix some muscles that were
not expanded by m4.
This commit is contained in:
@@ -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>
|
||||
|
||||
* data/bison.c++: Adjust to the M4 back end.
|
||||
|
||||
162
data/bison.c++
162
data/bison.c++
@@ -1,11 +1,11 @@
|
||||
#output "b4_output_prefix[]b4_output_infix[].hh"
|
||||
#output "b4_output_prefix[]b4_output_infix[]-class.hh"
|
||||
/* -*- C++ -*- */
|
||||
|
||||
/* A Bison parser, made from %%filename,
|
||||
by GNU bison %%version. */
|
||||
|
||||
/* 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
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -28,9 +28,13 @@
|
||||
in version 1.24 of Bison. */
|
||||
|
||||
#include "stack.hh"
|
||||
/* #include "parser.hh" */
|
||||
#include "location.hh"
|
||||
|
||||
b4_prologue
|
||||
|
||||
// FIXME: This should be defined in traits, not here.
|
||||
typedef b4_stype yystype;
|
||||
|
||||
namespace yy
|
||||
{
|
||||
class b4_name;
|
||||
@@ -44,13 +48,11 @@ namespace yy
|
||||
struct Traits< b4_name >
|
||||
{
|
||||
typedef int StateType;
|
||||
typedef b4_stype SemanticType;
|
||||
typedef Location LocationType;
|
||||
typedef yystype SemanticType;
|
||||
typedef b4_ltype LocationType;
|
||||
};
|
||||
}
|
||||
|
||||
b4_prologue
|
||||
|
||||
namespace yy
|
||||
{
|
||||
class b4_name
|
||||
@@ -65,9 +67,13 @@ namespace yy
|
||||
typedef Stack< SemanticType > SemanticStack;
|
||||
typedef Stack< LocationType > LocationStack;
|
||||
|
||||
b4_name () : debug (1)
|
||||
b4_name (bool debug) : debug_ (debug)
|
||||
{
|
||||
looka = empty_;
|
||||
}
|
||||
|
||||
virtual ~b4_name ()
|
||||
{
|
||||
looka = empty;
|
||||
}
|
||||
|
||||
virtual int parse ();
|
||||
@@ -79,7 +85,7 @@ namespace yy
|
||||
void
|
||||
lex ()
|
||||
{
|
||||
looka = yylex (&value);
|
||||
looka = yylex (&value, &location);
|
||||
}
|
||||
|
||||
/* Stacks. */
|
||||
@@ -94,7 +100,6 @@ namespace yy
|
||||
static const short defgoto_[[]];
|
||||
static const short table_[[]];
|
||||
static const short check_[[]];
|
||||
static const short line_[[]];
|
||||
static const short r1_[[]];
|
||||
static const short r2_[[]];
|
||||
static const char* const name_[[]];
|
||||
@@ -110,13 +115,14 @@ namespace yy
|
||||
static inline char translate (int token);
|
||||
|
||||
/* Eof and empty. */
|
||||
static const int eof;
|
||||
static const int empty;
|
||||
static const int eof_;
|
||||
static const int empty_;
|
||||
static const int ntokens_;
|
||||
|
||||
/* State. */
|
||||
int n;
|
||||
int len;
|
||||
int debug;
|
||||
int debug_;
|
||||
int state;
|
||||
|
||||
/* Lookahead. */
|
||||
@@ -130,21 +136,28 @@ namespace yy
|
||||
}
|
||||
|
||||
#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. */
|
||||
#if b4_debug
|
||||
#if YYDEBUG
|
||||
|
||||
# include <cstdio>
|
||||
# define YYFPRINTF std::fprintf
|
||||
|
||||
# define YYDPRINTF(Args) \
|
||||
do { \
|
||||
if (debug) \
|
||||
if (debug_) \
|
||||
YYFPRINTF Args; \
|
||||
} while (0)
|
||||
/* Nonzero means print parse trace. Since this is uninitialized, it
|
||||
does not stop multiple parsers from coexisting. */
|
||||
/* 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 */
|
||||
# define YYDPRINTF(Args)
|
||||
@@ -175,6 +188,7 @@ yy::b4_name::parse ()
|
||||
yynewstate:
|
||||
state_stack.push (state);
|
||||
YYDPRINTF ((stderr, "Entering state %d\n", state));
|
||||
goto yybackup;
|
||||
|
||||
/* Backup. */
|
||||
yybackup:
|
||||
@@ -185,7 +199,7 @@ yy::b4_name::parse ()
|
||||
goto yydefault;
|
||||
|
||||
/* Read a lookahead token. */
|
||||
if (looka == empty)
|
||||
if (looka == empty_)
|
||||
{
|
||||
YYDPRINTF ((stderr, "Reading a token: "));
|
||||
lex ();
|
||||
@@ -194,16 +208,19 @@ yy::b4_name::parse ()
|
||||
/* Convert token to internal form. */
|
||||
if (looka <= 0)
|
||||
{
|
||||
looka = eof;
|
||||
looka = eof_;
|
||||
ilooka = 0;
|
||||
YYDPRINTF ((stderr, "Now at end of input.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
ilooka = translate (looka);
|
||||
#if b4_debug
|
||||
#if YYDEBUG
|
||||
if (debug_)
|
||||
{
|
||||
YYFPRINTF (stderr, "Next token is %d (%s", looka, name_[[ilooka]]);
|
||||
YYFPRINTF (stderr, ")\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -234,8 +251,8 @@ yy::b4_name::parse ()
|
||||
YYDPRINTF ((stderr, "Shifting token %d (%s), ", looka, name_[[ilooka]]));
|
||||
|
||||
/* Discard the token being shifted unless it is eof. */
|
||||
if (looka != eof)
|
||||
looka = empty;
|
||||
if (looka != eof_)
|
||||
looka = empty_;
|
||||
|
||||
semantic_stack.push (value);
|
||||
location_stack.push (location);
|
||||
@@ -247,15 +264,25 @@ yy::b4_name::parse ()
|
||||
n = defact_[[state]];
|
||||
if (n == 0)
|
||||
goto yyerrlab;
|
||||
goto yyreduce;
|
||||
|
||||
/* Reduce. */
|
||||
yyreduce:
|
||||
len = r2_[[n]];
|
||||
if (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 (debug)
|
||||
#if YYDEBUG
|
||||
if (debug_)
|
||||
{
|
||||
YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", n - 1, rline_[[n]]);
|
||||
for (unsigned i = prhs_[[n]];
|
||||
@@ -267,7 +294,9 @@ yy::b4_name::parse ()
|
||||
|
||||
{
|
||||
SemanticType& yyval (value);
|
||||
LocationType& yyloc (location);
|
||||
SemanticStack& yyvsp (semantic_stack);
|
||||
LocationStack& yylsp (location_stack);
|
||||
|
||||
switch (n)
|
||||
{
|
||||
@@ -279,8 +308,8 @@ yy::b4_name::parse ()
|
||||
semantic_stack.pop (len);
|
||||
location_stack.pop (len);
|
||||
|
||||
#if b4_debug
|
||||
if (debug)
|
||||
#if YYDEBUG
|
||||
if (debug_)
|
||||
{
|
||||
YYFPRINTF (stderr, "state stack now");
|
||||
for (StateStack::ConstIterator i = state_stack.begin ();
|
||||
@@ -295,17 +324,16 @@ yy::b4_name::parse ()
|
||||
|
||||
/* Shift the result of the reduction. */
|
||||
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]])
|
||||
state = table_[[state]];
|
||||
else
|
||||
state = defgoto_[[n - b4_ntokens]];
|
||||
state = defgoto_[[n - ntokens_]];
|
||||
goto yynewstate;
|
||||
|
||||
/* Report and recover from errors. This is very incomplete. */
|
||||
yyerrlab:
|
||||
// FIXME: Need something like yyerror?
|
||||
std::cerr << "Parse error." << std::endl;
|
||||
std::cerr << "Parse error." << std::endl; // FIXME: Need something like yyerror?
|
||||
return 1;
|
||||
|
||||
/* Accept. */
|
||||
@@ -313,7 +341,7 @@ yy::b4_name::parse ()
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* YYPACT[[STATE-NUM]] -- Index in YYTABLE of the portion describing
|
||||
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
|
||||
STATE-NUM. */
|
||||
const short
|
||||
yy::b4_name::pact_[[]] =
|
||||
@@ -321,7 +349,7 @@ yy::b4_name::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
|
||||
error. */
|
||||
const short
|
||||
@@ -330,21 +358,21 @@ yy::b4_name::defact_[[]] =
|
||||
b4_defact
|
||||
};
|
||||
|
||||
/* YYPGOTO[[NTERM-NUM]]. */
|
||||
/* YYPGOTO[NTERM-NUM]. */
|
||||
const short
|
||||
yy::b4_name::pgoto_[[]] =
|
||||
{
|
||||
b4_pgoto
|
||||
};
|
||||
|
||||
/* YYDEFGOTO[[NTERM-NUM]]. */
|
||||
/* YYDEFGOTO[NTERM-NUM]. */
|
||||
const short
|
||||
yy::b4_name::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
|
||||
number is the opposite. If zero, do what YYDEFACT says. */
|
||||
const short
|
||||
@@ -360,28 +388,28 @@ yy::b4_name::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
|
||||
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
|
||||
yy::b4_name::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
|
||||
yy::b4_name::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. */
|
||||
const char*
|
||||
const yy::b4_name::name_[[]] =
|
||||
@@ -396,7 +424,7 @@ yy::b4_name::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. */
|
||||
const short
|
||||
yy::b4_name::prhs_[[]] =
|
||||
@@ -404,13 +432,6 @@ yy::b4_name::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. */
|
||||
char
|
||||
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);
|
||||
}
|
||||
|
||||
const int yy::b4_name::eof = 0;
|
||||
const int yy::b4_name::empty = -2;
|
||||
const int yy::b4_name::eof_ = 0;
|
||||
const int yy::b4_name::empty_ = -2;
|
||||
const int yy::b4_name::ntokens_ = b4_ntokens;
|
||||
|
||||
b4_epilogue
|
||||
|
||||
@@ -520,3 +542,37 @@ namespace yy
|
||||
}
|
||||
|
||||
#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 */
|
||||
])
|
||||
|
||||
Reference in New Issue
Block a user