📄 location.hh
字号:
/* A Bison parser, made by GNU Bison 2.1. *//* Location 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 location.hh ** Define the location class. */#ifndef BISON_LOCATION_HH# define BISON_LOCATION_HH# include <iostream># include <string># include "position.hh"namespace yy{ /// Abstract a location. class location { /** \name Ctor & dtor. ** \{ */ public: /// Construct a location. location () : begin (), end () { } /** \} */ /** \name Line and Column related manipulators ** \{ */ public: /// Reset initial location to final location. inline void step () { begin = end; } /// Extend the current location to the COUNT next columns. inline void columns (unsigned int count = 1) { end += count; } /// Extend the current location to the COUNT next lines. inline void lines (unsigned int count = 1) { end.lines (count); } /** \} */ public: /// Beginning of the located region. position begin; /// End of the located region. position end; }; /// Join two location objects to create a location. inline const location operator+ (const location& begin, const location& end) { location res = begin; res.end = end.end; return res; } /// Add two location objects. inline const location operator+ (const location& begin, unsigned int width) { location res = begin; res.columns (width); return res; } /// Add and assign a location. inline location& operator+= (location& res, unsigned int width) { res.columns (width); return res; } /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param loc a reference to the location to redirect ** ** Avoid duplicate information. */ inline std::ostream& operator<< (std::ostream& ostr, const location& loc) { position last = loc.end - 1; ostr << loc.begin; if (last.filename && (!loc.begin.filename || *loc.begin.filename != *last.filename)) ostr << '-' << last; else if (loc.begin.line != last.line) ostr << '-' << last.line << '.' << last.column; else if (loc.begin.column != last.column) ostr << '-' << last.column; return ostr; }}#endif // not BISON_LOCATION_HH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -