From: Akim Demaille Date: Wed, 22 Dec 2004 10:06:15 +0000 (+0000) Subject: * data/lalr1.cc (parser::token_number_type, parser::rhs_number_type) X-Git-Tag: BISON-2_0~12 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/e019c2477959aac474358ae74502fd96a60dfb89 * 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. --- diff --git a/ChangeLog b/ChangeLog index 27448385..d4c8ef07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2004-12-22 Akim Demaille + + * 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 * data/lalr1.cc (parser::parse): Return a bool instead of an int. diff --git a/data/lalr1.cc b/data/lalr1.cc index bf71ade5..b2f24a0b 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -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_stack; - /// Semantic value stack type. - typedef stack semantic_stack; - /// location stack type. - typedef stack 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 */ + /// State numbers. + typedef traits<]b4_parser_class_name[>::state_type state_type; + /// State stack type. + typedef stack state_stack_type; + /// Semantic value stack type. + typedef stack semantic_stack_type; + /// location stack type. + typedef stack 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_[]; @@ -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 slice (yylocation_stack_, yylen_); + slice 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 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; } diff --git a/tests/Makefile.am b/tests/Makefile.am index ae8c3279..09d7d0a3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 diff --git a/tests/c++.at b/tests/c++.at new file mode 100644 index 00000000..0e1e8e5d --- /dev/null +++ b/tests/c++.at @@ -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]) diff --git a/tests/testsuite.at b/tests/testsuite.at index d54975d7..5fff9e65 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -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])