+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.
/// 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),
/// Parse.
/// \returns 0 iff parsing succeeded.
- virtual bool parse ();
+ virtual int parse ();
/// The current debugging stream.
std::ostream& debug_stream () const;
#endif /* ! YYDEBUG */
+ /// 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 yystate_stack_;
+ state_stack_type yystate_stack_;
/// The semantic value stack.
- semantic_stack yysemantic_stack_;
+ semantic_stack_type yysemantic_stack_;
/// The location stack.
- location_stack yylocation_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_[];
#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_.
}
-bool
+int
yy::]b4_parser_class_name[::parse ()
{
YYCDEBUG << "Starting parse" << std::endl;
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);
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_);
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;
S seq_;
};
+ /// Present a slice of the top of a stack.
template <class T, class S = stack<T> >
class slice
{
** \{ */
public:
/// Construct a location.
- location (void) :
+ location () :
begin (),
end ()
{
** \{ */
public:
/// Reset initial location to final location.
- inline void step (void)
+ inline void step ()
{
begin = end;
}
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
--- /dev/null
+# 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])
# 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
# 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])