bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: lalr1.cc: Private/public


From: Akim Demaille
Subject: FYI: lalr1.cc: Private/public
Date: Wed, 22 Dec 2004 11:05:55 +0100
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.3 (gnu/linux)

This is the last adjustment.  I'm ready for a final beta.  I'll work
on the doc now.

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        * 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.

Index: data/lalr1.cc
===================================================================
RCS file: /cvsroot/bison/bison/data/lalr1.cc,v
retrieving revision 1.78
diff -u -u -r1.78 lalr1.cc
--- data/lalr1.cc 21 Dec 2004 12:49:39 -0000 1.78
+++ data/lalr1.cc 22 Dec 2004 10:04:20 -0000
@@ -213,25 +213,12 @@
   /// 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 @@
 
     /// 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 @@
 #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_[];
@@ -327,6 +325,8 @@
 #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 @@
 }
 
 
-bool
+int
 yy::]b4_parser_class_name[::parse ()
 {
   YYCDEBUG << "Starting parse" << std::endl;
@@ -564,9 +564,9 @@
      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 @@
     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 @@
 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 @@
     S seq_;
   };
 
+  /// Present a slice of the top of a stack.
   template <class T, class S = stack<T> >
   class slice
   {
@@ -1283,7 +1284,7 @@
      ** \{ */
   public:
     /// Construct a location.
-    location (void) :
+    location () :
       begin (),
       end ()
     {
@@ -1295,7 +1296,7 @@
      ** \{ */
   public:
     /// Reset initial location to final location.
-    inline void step (void)
+    inline void step ()
     {
       begin = end;
     }
Index: tests/Makefile.am
===================================================================
RCS file: /cvsroot/bison/bison/tests/Makefile.am,v
retrieving revision 1.35
diff -u -u -r1.35 Makefile.am
--- tests/Makefile.am 21 Dec 2004 12:26:55 -0000 1.35
+++ tests/Makefile.am 22 Dec 2004 10:04:20 -0000
@@ -49,6 +49,7 @@
        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
Index: tests/c++.at
===================================================================
RCS file: tests/c++.at
diff -N tests/c++.at
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ tests/c++.at 22 Dec 2004 10:04:20 -0000
@@ -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])
Index: tests/testsuite.at
===================================================================
RCS file: /cvsroot/bison/bison/tests/testsuite.at,v
retrieving revision 1.26
diff -u -u -r1.26 testsuite.at
--- tests/testsuite.at 24 Dec 2003 08:26:02 -0000 1.26
+++ tests/testsuite.at 22 Dec 2004 10:04:20 -0000
@@ -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 @@
 # 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])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]