Mercurial > hg > Members > nobuyasu > SampleSource
comparison Bison-Flex/Compiler-StackBase/EUC/location.hh @ 0:db40c85cad7a default tip
upload sample source
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 09 May 2011 03:11:59 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:db40c85cad7a |
---|---|
1 /* A Bison parser, made by GNU Bison 2.3. */ | |
2 | |
3 /* Locations for Bison parsers in C++ | |
4 | |
5 Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. | |
6 | |
7 This program is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
9 the Free Software Foundation; either version 2, or (at your option) | |
10 any later version. | |
11 | |
12 This program is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with this program; if not, write to the Free Software | |
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
20 Boston, MA 02110-1301, USA. */ | |
21 | |
22 /* As a special exception, you may create a larger work that contains | |
23 part or all of the Bison parser skeleton and distribute that work | |
24 under terms of your choice, so long as that work isn't itself a | |
25 parser generator using the skeleton or a modified version thereof | |
26 as a parser skeleton. Alternatively, if you modify or redistribute | |
27 the parser skeleton itself, you may (at your option) remove this | |
28 special exception, which will cause the skeleton and the resulting | |
29 Bison output files to be licensed under the GNU General Public | |
30 License without this special exception. | |
31 | |
32 This special exception was added by the Free Software Foundation in | |
33 version 2.2 of Bison. */ | |
34 | |
35 /** | |
36 ** \file location.hh | |
37 ** Define the yy::location class. | |
38 */ | |
39 | |
40 #ifndef BISON_LOCATION_HH | |
41 # define BISON_LOCATION_HH | |
42 | |
43 # include <iostream> | |
44 # include <string> | |
45 # include "position.hh" | |
46 | |
47 namespace yy | |
48 { | |
49 | |
50 /// Abstract a location. | |
51 class location | |
52 { | |
53 public: | |
54 | |
55 /// Construct a location. | |
56 location () | |
57 : begin (), end () | |
58 { | |
59 } | |
60 | |
61 | |
62 /// Initialization. | |
63 inline void initialize (std::string* fn) | |
64 { | |
65 begin.initialize (fn); | |
66 end = begin; | |
67 } | |
68 | |
69 /** \name Line and Column related manipulators | |
70 ** \{ */ | |
71 public: | |
72 /// Reset initial location to final location. | |
73 inline void step () | |
74 { | |
75 begin = end; | |
76 } | |
77 | |
78 /// Extend the current location to the COUNT next columns. | |
79 inline void columns (unsigned int count = 1) | |
80 { | |
81 end += count; | |
82 } | |
83 | |
84 /// Extend the current location to the COUNT next lines. | |
85 inline void lines (unsigned int count = 1) | |
86 { | |
87 end.lines (count); | |
88 } | |
89 /** \} */ | |
90 | |
91 | |
92 public: | |
93 /// Beginning of the located region. | |
94 position begin; | |
95 /// End of the located region. | |
96 position end; | |
97 }; | |
98 | |
99 /// Join two location objects to create a location. | |
100 inline const location operator+ (const location& begin, const location& end) | |
101 { | |
102 location res = begin; | |
103 res.end = end.end; | |
104 return res; | |
105 } | |
106 | |
107 /// Add two location objects. | |
108 inline const location operator+ (const location& begin, unsigned int width) | |
109 { | |
110 location res = begin; | |
111 res.columns (width); | |
112 return res; | |
113 } | |
114 | |
115 /// Add and assign a location. | |
116 inline location& operator+= (location& res, unsigned int width) | |
117 { | |
118 res.columns (width); | |
119 return res; | |
120 } | |
121 | |
122 /** \brief Intercept output stream redirection. | |
123 ** \param ostr the destination output stream | |
124 ** \param loc a reference to the location to redirect | |
125 ** | |
126 ** Avoid duplicate information. | |
127 */ | |
128 inline std::ostream& operator<< (std::ostream& ostr, const location& loc) | |
129 { | |
130 position last = loc.end - 1; | |
131 ostr << loc.begin; | |
132 if (last.filename | |
133 && (!loc.begin.filename | |
134 || *loc.begin.filename != *last.filename)) | |
135 ostr << '-' << last; | |
136 else if (loc.begin.line != last.line) | |
137 ostr << '-' << last.line << '.' << last.column; | |
138 else if (loc.begin.column != last.column) | |
139 ostr << '-' << last.column; | |
140 return ostr; | |
141 } | |
142 | |
143 } | |
144 | |
145 #endif // not BISON_LOCATION_HH |