src/location.hh

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.3.  */
00002 
00003 /* Locations for Bison parsers in C++
00004 
00005    Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
00006 
00007    This program is free software; you can redistribute it and/or modify
00008    it under the terms of the GNU General Public License as published by
00009    the Free Software Foundation; either version 2, or (at your option)
00010    any later version.
00011 
00012    This program is distributed in the hope that it will be useful,
00013    but WITHOUT ANY WARRANTY; without even the implied warranty of
00014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015    GNU General Public License for more details.
00016 
00017    You should have received a copy of the GNU General Public License
00018    along with this program; if not, write to the Free Software
00019    Foundation, Inc., 51 Franklin Street, Fifth Floor,
00020    Boston, MA 02110-1301, USA.  */
00021 
00022 /* As a special exception, you may create a larger work that contains
00023    part or all of the Bison parser skeleton and distribute that work
00024    under terms of your choice, so long as that work isn't itself a
00025    parser generator using the skeleton or a modified version thereof
00026    as a parser skeleton.  Alternatively, if you modify or redistribute
00027    the parser skeleton itself, you may (at your option) remove this
00028    special exception, which will cause the skeleton and the resulting
00029    Bison output files to be licensed under the GNU General Public
00030    License without this special exception.
00031 
00032    This special exception was added by the Free Software Foundation in
00033    version 2.2 of Bison.  */
00034 
00040 #ifndef BISON_LOCATION_HH
00041 # define BISON_LOCATION_HH
00042 
00043 # include <iostream>
00044 # include <string>
00045 # include "position.hh"
00046 
00047 namespace example {
00048 
00050 class location
00051 {
00052 public:
00053 
00055     location ()
00056         : begin (), end ()
00057     {
00058     }
00059 
00061     inline void initialize (std::string* fn)
00062     {
00063         begin.initialize (fn);
00064         end = begin;
00065     }
00066 
00069 public:
00071     inline void step ()
00072     {
00073         begin = end;
00074     }
00075 
00077     inline void columns (unsigned int count = 1)
00078     {
00079         end += count;
00080     }
00081 
00083     inline void lines (unsigned int count = 1)
00084     {
00085         end.lines (count);
00086     }
00090 public:
00092     position begin;
00094     position end;
00095 };
00096 
00098 inline const location operator+ (const location& begin, const location& end)
00099 {
00100     location res = begin;
00101     res.end = end.end;
00102     return res;
00103 }
00104 
00106 inline const location operator+ (const location& begin, unsigned int width)
00107 {
00108     location res = begin;
00109     res.columns (width);
00110     return res;
00111 }
00112 
00114 inline location& operator+= (location& res, unsigned int width)
00115 {
00116     res.columns (width);
00117     return res;
00118 }
00119 
00126 inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
00127 {
00128     position last = loc.end - 1;
00129     ostr << loc.begin;
00130     if (last.filename
00131         && (!loc.begin.filename
00132             || *loc.begin.filename != *last.filename))
00133         ostr << '-' << last;
00134     else if (loc.begin.line != last.line)
00135         ostr << '-' << last.line  << '.' << last.column;
00136     else if (loc.begin.column != last.column)
00137         ostr << '-' << last.column;
00138     return ostr;
00139 }
00140 
00141 }
00142 
00143 #endif // not BISON_LOCATION_HH

Generated on Mon Aug 20 13:34:21 2007 for Flex Bison C++ Example by  doxygen 1.5.2