mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* 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:
17
ChangeLog
17
ChangeLog
@@ -1,3 +1,20 @@
|
||||
2004-12-22 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* 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.
|
||||
|
||||
2004-12-21 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* data/lalr1.cc (parser::parse): Return a bool instead of an int.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ TESTSUITE_AT = \
|
||||
synclines.at headers.at actions.at conflicts.at \
|
||||
calc.at \
|
||||
torture.at existing.at regression.at \
|
||||
c++.at \
|
||||
cxx-type.at glr-regression.at
|
||||
|
||||
TESTSUITE = $(srcdir)/testsuite
|
||||
|
||||
103
tests/c++.at
Normal file
103
tests/c++.at
Normal file
@@ -0,0 +1,103 @@
|
||||
# Checking the output filenames. -*- Autotest -*-
|
||||
# Copyright 2004 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
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
AT_BANNER([[C++ Features.]])
|
||||
|
||||
|
||||
## ----------------------- ##
|
||||
## Doxygen Documentation. ##
|
||||
## ----------------------- ##
|
||||
|
||||
m4_define([AT_CHECK_DOXYGEN],
|
||||
[m4_case([$1],
|
||||
[Public], [m4_pushdef([AT_DOXYGEN_PRIVATE], [NO])],
|
||||
[Private], [m4_pushdef([AT_DOXYGEN_PRIVATE], [YES])],
|
||||
[m4_fatal([invalid argument: $1])])
|
||||
AT_SETUP([Doxygen $1 Documentation])
|
||||
|
||||
AT_DATA([input.yy],
|
||||
[[%skeleton "lalr1.cc"
|
||||
%locations
|
||||
%debug
|
||||
%defines
|
||||
%%
|
||||
exp:;
|
||||
%%
|
||||
yy::parser::error (const location& l, const std::string& m)
|
||||
{
|
||||
std::cerr << l << s << std::endl;
|
||||
}
|
||||
]])
|
||||
|
||||
AT_CHECK([bison input.yy -o input.cc], 0)
|
||||
|
||||
AT_DATA([Doxyfile],
|
||||
[# The PROJECT_NAME tag is a single word (or a sequence of words
|
||||
# surrounded by quotes) that should identify the project.
|
||||
PROJECT_NAME = "Bison C++ Parser"
|
||||
|
||||
# The QUIET tag can be used to turn on/off the messages that are
|
||||
# generated by doxygen. Possible values are YES and NO. If left blank
|
||||
# NO is used.
|
||||
QUIET = YES
|
||||
|
||||
# The WARNINGS tag can be used to turn on/off the warning messages
|
||||
# that are generated by doxygen. Possible values are YES and NO. If
|
||||
# left blank NO is used.
|
||||
WARNINGS = YES
|
||||
# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate
|
||||
# warnings for undocumented members. If EXTRACT_ALL is set to YES then
|
||||
# this flag will automatically be disabled.
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings
|
||||
# for potential errors in the documentation, such as not documenting
|
||||
# some parameters in a documented function, or documenting parameters
|
||||
# that don't exist or using markup commands wrongly.
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
# The WARN_FORMAT tag determines the format of the warning messages
|
||||
# that doxygen can produce. The string should contain the $file,
|
||||
# $line, and $text tags, which will be replaced by the file and line
|
||||
# number from which the warning originated and the warning text.
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
|
||||
# If the EXTRACT_ALL tag is set to YES doxygen will assume all
|
||||
# entities in documentation are documented, even if no documentation
|
||||
# was available. Private class members and static file members will
|
||||
# be hidden unless the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set
|
||||
# to YES
|
||||
EXTRACT_ALL = YES
|
||||
|
||||
# If the EXTRACT_PRIVATE tag is set to YES all private members of a
|
||||
# class will be included in the documentation.
|
||||
EXTRACT_PRIVATE = AT_DOXYGEN_PRIVATE
|
||||
|
||||
# If the EXTRACT_STATIC tag is set to YES all static members of a file
|
||||
# will be included in the documentation.
|
||||
EXTRACT_STATIC = AT_DOXYGEN_PRIVATE
|
||||
])
|
||||
|
||||
AT_CHECK([doxygen --version || exit 77], 0, ignore)
|
||||
AT_CHECK([doxygen], 0, [], [ignore])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
m4_popdef([AT_DOXYGEN_PRIVATE])
|
||||
])# AT_CHECK_DOXYGEN
|
||||
|
||||
AT_CHECK_DOXYGEN([Public])
|
||||
AT_CHECK_DOXYGEN([Private])
|
||||
@@ -1,7 +1,7 @@
|
||||
# Process this file with autom4te to create testsuite. -*- Autotest -*-
|
||||
|
||||
# Test suite for GNU Bison.
|
||||
# Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2000, 2001, 2002, 2003, 2004 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
|
||||
@@ -56,6 +56,9 @@ m4_include([existing.at])
|
||||
# Some old bugs.
|
||||
m4_include([regression.at])
|
||||
|
||||
# Some C++ specific tests.
|
||||
m4_include([c++.at])
|
||||
|
||||
# GLR tests:
|
||||
# C++ types, simplified
|
||||
m4_include([cxx-type.at])
|
||||
|
||||
Reference in New Issue
Block a user