| Index: bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/position.hh
|
| ===================================================================
|
| --- bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/position.hh (revision 0)
|
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/position.hh (revision 0)
|
| @@ -0,0 +1,167 @@
|
| +
|
| +/* A Bison parser, made by GNU Bison 2.4.1. */
|
| +
|
| +/* Positions for Bison parsers in C++
|
| +
|
| + Copyright (C) 2002, 2003, 2004, 2005, 2006 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 <http://www.gnu.org/licenses/>. */
|
| +
|
| +/* As a special exception, you may create a larger work that contains
|
| + part or all of the Bison parser skeleton and distribute that work
|
| + under terms of your choice, so long as that work isn't itself a
|
| + parser generator using the skeleton or a modified version thereof
|
| + as a parser skeleton. Alternatively, if you modify or redistribute
|
| + the parser skeleton itself, you may (at your option) remove this
|
| + special exception, which will cause the skeleton and the resulting
|
| + Bison output files to be licensed under the GNU General Public
|
| + License without this special exception.
|
| +
|
| + This special exception was added by the Free Software Foundation in
|
| + version 2.2 of Bison. */
|
| +
|
| +/**
|
| + ** \file position.hh
|
| + ** Define the yy::position class.
|
| + */
|
| +
|
| +#ifndef BISON_POSITION_HH
|
| +# define BISON_POSITION_HH
|
| +
|
| +# include <iostream>
|
| +# include <string>
|
| +# include <algorithm>
|
| +
|
| +
|
| +/* Line 38 of location.cc */
|
| +#line 1 "[Bison:b4_percent_define_default]"
|
| +
|
| +namespace yy {
|
| +
|
| +/* Line 38 of location.cc */
|
| +#line 54 "./position.hh"
|
| + /// Abstract a position.
|
| + class position
|
| + {
|
| + public:
|
| +
|
| + /// Construct a position.
|
| + position ()
|
| + : filename (0), line (1), column (1)
|
| + {
|
| + }
|
| +
|
| +
|
| + /// Initialization.
|
| + inline void initialize (std::string* fn)
|
| + {
|
| + filename = fn;
|
| + line = 1;
|
| + column = 1;
|
| + }
|
| +
|
| + /** \name Line and Column related manipulators
|
| + ** \{ */
|
| + public:
|
| + /// (line related) Advance to the COUNT next lines.
|
| + inline void lines (int count = 1)
|
| + {
|
| + column = 1;
|
| + line += count;
|
| + }
|
| +
|
| + /// (column related) Advance to the COUNT next columns.
|
| + inline void columns (int count = 1)
|
| + {
|
| + column = std::max (1u, column + count);
|
| + }
|
| + /** \} */
|
| +
|
| + public:
|
| + /// File name to which this position refers.
|
| + std::string* filename;
|
| + /// Current line number.
|
| + unsigned int line;
|
| + /// Current column number.
|
| + unsigned int column;
|
| + };
|
| +
|
| + /// Add and assign a position.
|
| + inline const position&
|
| + operator+= (position& res, const int width)
|
| + {
|
| + res.columns (width);
|
| + return res;
|
| + }
|
| +
|
| + /// Add two position objects.
|
| + inline const position
|
| + operator+ (const position& begin, const int width)
|
| + {
|
| + position res = begin;
|
| + return res += width;
|
| + }
|
| +
|
| + /// Add and assign a position.
|
| + inline const position&
|
| + operator-= (position& res, const int width)
|
| + {
|
| + return res += -width;
|
| + }
|
| +
|
| + /// Add two position objects.
|
| + inline const position
|
| + operator- (const position& begin, const int width)
|
| + {
|
| + return begin + -width;
|
| + }
|
| +
|
| + /// Compare two position objects.
|
| + inline bool
|
| + operator== (const position& pos1, const position& pos2)
|
| + {
|
| + return
|
| + (pos1.filename == pos2.filename
|
| + || pos1.filename && pos2.filename && *pos1.filename == *pos2.filename)
|
| + && pos1.line == pos2.line && pos1.column == pos2.column;
|
| + }
|
| +
|
| + /// Compare two position objects.
|
| + inline bool
|
| + operator!= (const position& pos1, const position& pos2)
|
| + {
|
| + return !(pos1 == pos2);
|
| + }
|
| +
|
| + /** \brief Intercept output stream redirection.
|
| + ** \param ostr the destination output stream
|
| + ** \param pos a reference to the position to redirect
|
| + */
|
| + inline std::ostream&
|
| + operator<< (std::ostream& ostr, const position& pos)
|
| + {
|
| + if (pos.filename)
|
| + ostr << *pos.filename << ':';
|
| + return ostr << pos.line << '.' << pos.column;
|
| + }
|
| +
|
| +
|
| +/* Line 144 of location.cc */
|
| +#line 1 "[Bison:b4_percent_define_default]"
|
| +
|
| +} // yy
|
| +
|
| +/* Line 144 of location.cc */
|
| +#line 167 "./position.hh"
|
| +#endif // not BISON_POSITION_HH
|
|
|