From 51bacae6b58fd5c6cce861f00440dc917384625e Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 23 Dec 2008 08:06:13 +0100 Subject: [PATCH] Extract stack.hh from lalr1.cc. * data/stack.hh: New. * data/lalr1.cc: Extract from here. * data/local.mk: Adjust. --- ChangeLog | 7 +++ data/lalr1.cc | 102 +------------------------------------- data/local.mk | 1 + data/stack.hh | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 145 insertions(+), 100 deletions(-) create mode 100644 data/stack.hh diff --git a/ChangeLog b/ChangeLog index 5eb84a02..20135167 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-02-19 Akim Demaille + + Extract stack.hh from lalr1.cc. + * data/stack.hh: New. + * data/lalr1.cc: Extract from here. + * data/local.mk: Adjust. + 2009-02-03 Joel E. Denny Add reminder about uploading public key to keys.gnupg.net. diff --git a/data/lalr1.cc b/data/lalr1.cc index 54b7038b..c3ea4e26 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -99,7 +99,7 @@ m4_define([b4_rhs_data], # b4_rhs_state(RULE-LENGTH, NUM) -# ----------------------------- +# ------------------------------ # The state corresponding to the symbol #NUM, where the current # rule has RULE-LENGTH symbols on RHS. m4_define([b4_rhs_state], @@ -384,6 +384,7 @@ b4_locations_if( [# Backward compatibility. m4_define([b4_location_constructors]) m4_include(b4_pkgdatadir/[location.cc])]) +m4_include(b4_pkgdatadir/[stack.hh]) # We do want M4 expansion after # for CPP macros. m4_changecom() @@ -1500,105 +1501,6 @@ b4_error_verbose_if([int yystate, int yytoken], ]b4_lex_symbol_if([], [b4_yytranslate_definition])[ ]b4_namespace_close[ - ]b4_epilogue[]dnl -@output(b4_dir_prefix[]stack.hh@)@ -b4_copyright([Stack handling for Bison parsers in C++])[ - -#ifndef BISON_STACK_HH -# define BISON_STACK_HH - -#include - -]b4_namespace_open[ - template > - class stack - { - public: - - // Hide our reversed order. - typedef typename S::reverse_iterator iterator; - typedef typename S::const_reverse_iterator const_iterator; - - stack () : seq_ () - { - } - - stack (unsigned int n) : seq_ (n) - { - } - - inline - T& - operator [] (unsigned int i) - { - return seq_[i]; - } - - inline - const T& - operator [] (unsigned int i) const - { - return seq_[i]; - } - - inline - void - push (const T& t) - { - seq_.push_front (t); - } - - inline - void - pop (unsigned int n = 1) - { - for (; n; --n) - seq_.pop_front (); - } - - inline - typename S::size_type - size () const - { - return seq_.size (); - } - - inline const_iterator begin () const { return seq_.rbegin (); } - inline const_iterator end () const { return seq_.rend (); } - - private: - /// The wrapped container. - S seq_; - }; - - /// Present a slice of the top of a stack. - template > - class slice - { - public: - - slice (const S& stack, - unsigned int range) : stack_ (stack), - range_ (range) - { - } - - inline - const T& - operator [] (unsigned int i) const - { - return stack_[range_ - i]; - } - - private: - - const S& stack_; - unsigned int range_; - }; -]b4_namespace_close[ - -#endif // not BISON_STACK_HH[]dnl -] m4_divert_pop(0) m4_popdef([b4_copyright_years])dnl diff --git a/data/local.mk b/data/local.mk index 9e0d521d..55802158 100644 --- a/data/local.mk +++ b/data/local.mk @@ -27,6 +27,7 @@ dist_pkgdata_DATA = \ data/lalr1.cc \ data/lalr1.java \ data/location.cc \ + data/stack.hh \ data/yacc.c m4sugardir = $(pkgdatadir)/m4sugar diff --git a/data/stack.hh b/data/stack.hh new file mode 100644 index 00000000..cb8e6964 --- /dev/null +++ b/data/stack.hh @@ -0,0 +1,135 @@ +# C++ skeleton for Bison + +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# 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 3 of the License, 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, see . + +m4_pushdef([b4_copyright_years], + [2002, 2003, 2004, 2005, 2006, 2007, 2008]) + +# We do want M4 expansion after # for CPP macros. +m4_changecom() +m4_divert_push(0)dnl +@output(b4_dir_prefix[]stack.hh@)@ +b4_copyright([Stack handling for Bison parsers in C++])[ + +#ifndef BISON_STACK_HH +# define BISON_STACK_HH + +#include + +]b4_namespace_open[ + template > + class stack + { + public: + // Hide our reversed order. + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; + + stack () + : seq_ () + { + } + + stack (unsigned int n) + : seq_ (n) + { + } + + inline + T& + operator [] (unsigned int i) + { + return seq_[i]; + } + + inline + const T& + operator [] (unsigned int i) const + { + return seq_[i]; + } + + inline + void + push (const T& t) + { + seq_.push_front (t); + } + + inline + void + pop (unsigned int n = 1) + { + for (; n; --n) + seq_.pop_front (); + } + + inline + typename S::size_type + size () const + { + return seq_.size (); + } + + inline + const_iterator + begin () const + { + return seq_.rbegin (); + } + + inline + const_iterator + end () const + { + return seq_.rend (); + } + + private: + /// The wrapped container. + S seq_; + }; + + /// Present a slice of the top of a stack. + template > + class slice + { + public: + slice (const S& stack, unsigned int range) + : stack_ (stack), + range_ (range) + { + } + + inline + const T& + operator [] (unsigned int i) const + { + return stack_[range_ - i]; + } + + private: + const S& stack_; + unsigned int range_; + }; +]b4_namespace_close[ + +#endif // not BISON_STACK_HH[]dnl +] +m4_divert_pop(0) +m4_popdef([b4_copyright_years])dnl +m4_changecom([#]) -- 2.45.2