📄 position.hh
字号:
/* A Bison parser, made by GNU Bison 2.1. *//* Position class for Bison C++ parsers, Copyright (C) 2002, 2003, 2004, 2005 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *//** ** \file position.hh ** Define the position class. */#ifndef BISON_POSITION_HH# define BISON_POSITION_HH# include <iostream># include <string>namespace yy{ /// Abstract a position. class position { public: /// Initial column number. static const unsigned int initial_column = 0; /// Initial line number. static const unsigned int initial_line = 1; /** \name Ctor & dtor. ** \{ */ public: /// Construct a position. position () : filename (0), line (initial_line), column (initial_column) { } /** \} */ /** \name Line and Column related manipulators ** \{ */ public: /// (line related) Advance to the COUNT next lines. inline void lines (int count = 1) { column = initial_column; line += count; } /// (column related) Advance to the COUNT next columns. inline void columns (int count = 1) { int leftmost = initial_column; int current = column; if (leftmost <= current + count) column += count; else column = initial_column; } /** \} */ 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; } /** \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; }}#endif // not BISON_POSITION_HH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -