From a9b67b5b1e99b3ec3849c45fe42e5ecb382a314d Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 21 May 2012 11:53:03 +0200 Subject: [PATCH] lalr1.cc: extract stack.hh. See commit 51bacae6b58fd5c6cce861f00440dc917384625e. * data/stack.hh: New, extracted from... * data/lalr1.cc: here. * data/Makefile.am: Adjust. --- data/Makefile.am | 2 +- data/lalr1.cc | 102 +-------------------------------------- data/stack.hh | 121 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 102 deletions(-) create mode 100644 data/stack.hh diff --git a/data/Makefile.am b/data/Makefile.am index 5c2955af..c2231886 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -15,7 +15,7 @@ dist_pkgdata_DATA = README bison.m4 \ c-skel.m4 c.m4 yacc.c glr.c \ - c++-skel.m4 c++.m4 location.cc lalr1.cc glr.cc \ + c++-skel.m4 c++.m4 location.cc lalr1.cc glr.cc stack.hh \ java-skel.m4 java.m4 lalr1.java m4sugardir = $(pkgdatadir)/m4sugar diff --git a/data/lalr1.cc b/data/lalr1.cc index 76a83504..c63e66de 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -28,6 +28,7 @@ b4_percent_define_ifdef([[location_type]], [], [# 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() @@ -1139,106 +1140,5 @@ b4_error_verbose_if([int yystate, int yytoken], const ]b4_parser_class_name[::token_number_type ]b4_parser_class_name[::yyundef_token_ = ]b4_undef_token_number[; ]b4_namespace_close[ - ]b4_epilogue -dnl -@output(b4_dir_prefix[]stack.hh@)@ -b4_copyright([Stack handling for Bison parsers in C++], - [2002-2012])[ - -#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 - unsigned int - height () const - { - return seq_.size (); - } - - inline const_iterator begin () const { return seq_.rbegin (); } - inline const_iterator end () const { return seq_.rend (); } - - private: - - 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) diff --git a/data/stack.hh b/data/stack.hh new file mode 100644 index 00000000..e785e808 --- /dev/null +++ b/data/stack.hh @@ -0,0 +1,121 @@ +# C++ skeleton for Bison + +# Copyright (C) 2002-2012 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-2012]) + +# 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++], + [2002-2012])[ + +#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 + unsigned int + height () const + { + return seq_.size (); + } + + inline const_iterator begin () const { return seq_.rbegin (); } + inline const_iterator end () const { return seq_.rend (); } + + private: + 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.47.2