annotate generator/parser/rpp/pp-scanner.h @ 1:e78566595089

initial import
author mandel
date Mon, 11 May 2009 16:01:50 +0000
parents
children 09a0f1d048f2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /****************************************************************************
e78566595089 initial import
mandel
parents:
diff changeset
2 **
e78566595089 initial import
mandel
parents:
diff changeset
3 ** Copyright (C) 1992-2008 Nokia. All rights reserved.
e78566595089 initial import
mandel
parents:
diff changeset
4 ** Copyright 2005 Roberto Raggi <roberto@kdevelop.org>
e78566595089 initial import
mandel
parents:
diff changeset
5 **
e78566595089 initial import
mandel
parents:
diff changeset
6 ** This file is part of Qt Jambi.
e78566595089 initial import
mandel
parents:
diff changeset
7 **
e78566595089 initial import
mandel
parents:
diff changeset
8 ** * Commercial Usage
e78566595089 initial import
mandel
parents:
diff changeset
9 * Licensees holding valid Qt Commercial licenses may use this file in
e78566595089 initial import
mandel
parents:
diff changeset
10 * accordance with the Qt Commercial License Agreement provided with the
e78566595089 initial import
mandel
parents:
diff changeset
11 * Software or, alternatively, in accordance with the terms contained in
e78566595089 initial import
mandel
parents:
diff changeset
12 * a written agreement between you and Nokia.
e78566595089 initial import
mandel
parents:
diff changeset
13 *
e78566595089 initial import
mandel
parents:
diff changeset
14 *
e78566595089 initial import
mandel
parents:
diff changeset
15 * GNU General Public License Usage
e78566595089 initial import
mandel
parents:
diff changeset
16 * Alternatively, this file may be used under the terms of the GNU
e78566595089 initial import
mandel
parents:
diff changeset
17 * General Public License versions 2.0 or 3.0 as published by the Free
e78566595089 initial import
mandel
parents:
diff changeset
18 * Software Foundation and appearing in the file LICENSE.GPL included in
e78566595089 initial import
mandel
parents:
diff changeset
19 * the packaging of this file. Please review the following information
e78566595089 initial import
mandel
parents:
diff changeset
20 * to ensure GNU General Public Licensing requirements will be met:
e78566595089 initial import
mandel
parents:
diff changeset
21 * http://www.fsf.org/licensing/licenses/info/GPLv2.html and
e78566595089 initial import
mandel
parents:
diff changeset
22 * http://www.gnu.org/copyleft/gpl.html. In addition, as a special
e78566595089 initial import
mandel
parents:
diff changeset
23 * exception, Nokia gives you certain additional rights. These rights
e78566595089 initial import
mandel
parents:
diff changeset
24 * are described in the Nokia Qt GPL Exception version 1.2, included in
e78566595089 initial import
mandel
parents:
diff changeset
25 * the file GPL_EXCEPTION.txt in this package.
e78566595089 initial import
mandel
parents:
diff changeset
26 *
e78566595089 initial import
mandel
parents:
diff changeset
27 * Qt for Windows(R) Licensees
e78566595089 initial import
mandel
parents:
diff changeset
28 * As a special exception, Nokia, as the sole copyright holder for Qt
e78566595089 initial import
mandel
parents:
diff changeset
29 * Designer, grants users of the Qt/Eclipse Integration plug-in the
e78566595089 initial import
mandel
parents:
diff changeset
30 * right for the Qt/Eclipse Integration to link to functionality
e78566595089 initial import
mandel
parents:
diff changeset
31 * provided by Qt Designer and its related libraries.
e78566595089 initial import
mandel
parents:
diff changeset
32 *
e78566595089 initial import
mandel
parents:
diff changeset
33 *
e78566595089 initial import
mandel
parents:
diff changeset
34 * If you are unsure which license is appropriate for your use, please
e78566595089 initial import
mandel
parents:
diff changeset
35 * contact the sales department at qt-sales@nokia.com.
e78566595089 initial import
mandel
parents:
diff changeset
36
e78566595089 initial import
mandel
parents:
diff changeset
37 **
e78566595089 initial import
mandel
parents:
diff changeset
38 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
39 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
40 **
e78566595089 initial import
mandel
parents:
diff changeset
41 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
42
e78566595089 initial import
mandel
parents:
diff changeset
43 #ifndef PP_SCANNER_H
e78566595089 initial import
mandel
parents:
diff changeset
44 #define PP_SCANNER_H
e78566595089 initial import
mandel
parents:
diff changeset
45
e78566595089 initial import
mandel
parents:
diff changeset
46 namespace rpp {
e78566595089 initial import
mandel
parents:
diff changeset
47
e78566595089 initial import
mandel
parents:
diff changeset
48 struct pp_skip_blanks
e78566595089 initial import
mandel
parents:
diff changeset
49 {
e78566595089 initial import
mandel
parents:
diff changeset
50 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
51
e78566595089 initial import
mandel
parents:
diff changeset
52 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
53 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
54 {
e78566595089 initial import
mandel
parents:
diff changeset
55 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
56
e78566595089 initial import
mandel
parents:
diff changeset
57 for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first)
e78566595089 initial import
mandel
parents:
diff changeset
58 {
e78566595089 initial import
mandel
parents:
diff changeset
59 if (*__first == '\\')
e78566595089 initial import
mandel
parents:
diff changeset
60 {
e78566595089 initial import
mandel
parents:
diff changeset
61 _InputIterator __begin = __first;
e78566595089 initial import
mandel
parents:
diff changeset
62 ++__begin;
e78566595089 initial import
mandel
parents:
diff changeset
63
e78566595089 initial import
mandel
parents:
diff changeset
64 if (__begin != __last && *__begin == '\n')
e78566595089 initial import
mandel
parents:
diff changeset
65 ++__first;
e78566595089 initial import
mandel
parents:
diff changeset
66 else
e78566595089 initial import
mandel
parents:
diff changeset
67 break;
e78566595089 initial import
mandel
parents:
diff changeset
68 }
e78566595089 initial import
mandel
parents:
diff changeset
69 else if (*__first == '\n' || !pp_isspace (*__first))
e78566595089 initial import
mandel
parents:
diff changeset
70 break;
e78566595089 initial import
mandel
parents:
diff changeset
71 }
e78566595089 initial import
mandel
parents:
diff changeset
72
e78566595089 initial import
mandel
parents:
diff changeset
73 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
74 }
e78566595089 initial import
mandel
parents:
diff changeset
75 };
e78566595089 initial import
mandel
parents:
diff changeset
76
e78566595089 initial import
mandel
parents:
diff changeset
77 struct pp_skip_whitespaces
e78566595089 initial import
mandel
parents:
diff changeset
78 {
e78566595089 initial import
mandel
parents:
diff changeset
79 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
80
e78566595089 initial import
mandel
parents:
diff changeset
81 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
82 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
83 {
e78566595089 initial import
mandel
parents:
diff changeset
84 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
85
e78566595089 initial import
mandel
parents:
diff changeset
86 for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first)
e78566595089 initial import
mandel
parents:
diff changeset
87 {
e78566595089 initial import
mandel
parents:
diff changeset
88 if (! pp_isspace (*__first))
e78566595089 initial import
mandel
parents:
diff changeset
89 break;
e78566595089 initial import
mandel
parents:
diff changeset
90 }
e78566595089 initial import
mandel
parents:
diff changeset
91
e78566595089 initial import
mandel
parents:
diff changeset
92 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
93 }
e78566595089 initial import
mandel
parents:
diff changeset
94 };
e78566595089 initial import
mandel
parents:
diff changeset
95
e78566595089 initial import
mandel
parents:
diff changeset
96 struct pp_skip_comment_or_divop
e78566595089 initial import
mandel
parents:
diff changeset
97 {
e78566595089 initial import
mandel
parents:
diff changeset
98 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
99
e78566595089 initial import
mandel
parents:
diff changeset
100 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
101 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
102 {
e78566595089 initial import
mandel
parents:
diff changeset
103 enum {
e78566595089 initial import
mandel
parents:
diff changeset
104 MAYBE_BEGIN,
e78566595089 initial import
mandel
parents:
diff changeset
105 BEGIN,
e78566595089 initial import
mandel
parents:
diff changeset
106 MAYBE_END,
e78566595089 initial import
mandel
parents:
diff changeset
107 END,
e78566595089 initial import
mandel
parents:
diff changeset
108 IN_COMMENT,
e78566595089 initial import
mandel
parents:
diff changeset
109 IN_CXX_COMMENT
e78566595089 initial import
mandel
parents:
diff changeset
110 } state (MAYBE_BEGIN);
e78566595089 initial import
mandel
parents:
diff changeset
111
e78566595089 initial import
mandel
parents:
diff changeset
112 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
113
e78566595089 initial import
mandel
parents:
diff changeset
114 for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first)
e78566595089 initial import
mandel
parents:
diff changeset
115 {
e78566595089 initial import
mandel
parents:
diff changeset
116 switch (state)
e78566595089 initial import
mandel
parents:
diff changeset
117 {
e78566595089 initial import
mandel
parents:
diff changeset
118 default:
e78566595089 initial import
mandel
parents:
diff changeset
119 assert (0);
e78566595089 initial import
mandel
parents:
diff changeset
120 break;
e78566595089 initial import
mandel
parents:
diff changeset
121
e78566595089 initial import
mandel
parents:
diff changeset
122 case MAYBE_BEGIN:
e78566595089 initial import
mandel
parents:
diff changeset
123 if (*__first != '/')
e78566595089 initial import
mandel
parents:
diff changeset
124 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
125
e78566595089 initial import
mandel
parents:
diff changeset
126 state = BEGIN;
e78566595089 initial import
mandel
parents:
diff changeset
127 break;
e78566595089 initial import
mandel
parents:
diff changeset
128
e78566595089 initial import
mandel
parents:
diff changeset
129 case BEGIN:
e78566595089 initial import
mandel
parents:
diff changeset
130 if (*__first == '*')
e78566595089 initial import
mandel
parents:
diff changeset
131 state = IN_COMMENT;
e78566595089 initial import
mandel
parents:
diff changeset
132 else if (*__first == '/')
e78566595089 initial import
mandel
parents:
diff changeset
133 state = IN_CXX_COMMENT;
e78566595089 initial import
mandel
parents:
diff changeset
134 else
e78566595089 initial import
mandel
parents:
diff changeset
135 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
136 break;
e78566595089 initial import
mandel
parents:
diff changeset
137
e78566595089 initial import
mandel
parents:
diff changeset
138 case IN_COMMENT:
e78566595089 initial import
mandel
parents:
diff changeset
139 if (*__first == '*')
e78566595089 initial import
mandel
parents:
diff changeset
140 state = MAYBE_END;
e78566595089 initial import
mandel
parents:
diff changeset
141 break;
e78566595089 initial import
mandel
parents:
diff changeset
142
e78566595089 initial import
mandel
parents:
diff changeset
143 case IN_CXX_COMMENT:
e78566595089 initial import
mandel
parents:
diff changeset
144 if (*__first == '\n')
e78566595089 initial import
mandel
parents:
diff changeset
145 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
146 break;
e78566595089 initial import
mandel
parents:
diff changeset
147
e78566595089 initial import
mandel
parents:
diff changeset
148 case MAYBE_END:
e78566595089 initial import
mandel
parents:
diff changeset
149 if (*__first == '/')
e78566595089 initial import
mandel
parents:
diff changeset
150 state = END;
e78566595089 initial import
mandel
parents:
diff changeset
151 else if (*__first != '*')
e78566595089 initial import
mandel
parents:
diff changeset
152 state = IN_COMMENT;
e78566595089 initial import
mandel
parents:
diff changeset
153 break;
e78566595089 initial import
mandel
parents:
diff changeset
154
e78566595089 initial import
mandel
parents:
diff changeset
155 case END:
e78566595089 initial import
mandel
parents:
diff changeset
156 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
157 }
e78566595089 initial import
mandel
parents:
diff changeset
158 }
e78566595089 initial import
mandel
parents:
diff changeset
159
e78566595089 initial import
mandel
parents:
diff changeset
160 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
161 }
e78566595089 initial import
mandel
parents:
diff changeset
162 };
e78566595089 initial import
mandel
parents:
diff changeset
163
e78566595089 initial import
mandel
parents:
diff changeset
164 struct pp_skip_identifier
e78566595089 initial import
mandel
parents:
diff changeset
165 {
e78566595089 initial import
mandel
parents:
diff changeset
166 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
167
e78566595089 initial import
mandel
parents:
diff changeset
168 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
169 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
170 {
e78566595089 initial import
mandel
parents:
diff changeset
171 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
172
e78566595089 initial import
mandel
parents:
diff changeset
173 for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first)
e78566595089 initial import
mandel
parents:
diff changeset
174 {
e78566595089 initial import
mandel
parents:
diff changeset
175 if (! pp_isalnum (*__first) && *__first != '_')
e78566595089 initial import
mandel
parents:
diff changeset
176 break;
e78566595089 initial import
mandel
parents:
diff changeset
177 }
e78566595089 initial import
mandel
parents:
diff changeset
178
e78566595089 initial import
mandel
parents:
diff changeset
179 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
180 }
e78566595089 initial import
mandel
parents:
diff changeset
181 };
e78566595089 initial import
mandel
parents:
diff changeset
182
e78566595089 initial import
mandel
parents:
diff changeset
183 struct pp_skip_number
e78566595089 initial import
mandel
parents:
diff changeset
184 {
e78566595089 initial import
mandel
parents:
diff changeset
185 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
186
e78566595089 initial import
mandel
parents:
diff changeset
187 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
188 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
189 {
e78566595089 initial import
mandel
parents:
diff changeset
190 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
191
e78566595089 initial import
mandel
parents:
diff changeset
192 for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first)
e78566595089 initial import
mandel
parents:
diff changeset
193 {
e78566595089 initial import
mandel
parents:
diff changeset
194 if (! pp_isalnum (*__first) && *__first != '.')
e78566595089 initial import
mandel
parents:
diff changeset
195 break;
e78566595089 initial import
mandel
parents:
diff changeset
196 }
e78566595089 initial import
mandel
parents:
diff changeset
197
e78566595089 initial import
mandel
parents:
diff changeset
198 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
199 }
e78566595089 initial import
mandel
parents:
diff changeset
200 };
e78566595089 initial import
mandel
parents:
diff changeset
201
e78566595089 initial import
mandel
parents:
diff changeset
202 struct pp_skip_string_literal
e78566595089 initial import
mandel
parents:
diff changeset
203 {
e78566595089 initial import
mandel
parents:
diff changeset
204 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
205
e78566595089 initial import
mandel
parents:
diff changeset
206 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
207 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
208 {
e78566595089 initial import
mandel
parents:
diff changeset
209 enum {
e78566595089 initial import
mandel
parents:
diff changeset
210 BEGIN,
e78566595089 initial import
mandel
parents:
diff changeset
211 IN_STRING,
e78566595089 initial import
mandel
parents:
diff changeset
212 QUOTE,
e78566595089 initial import
mandel
parents:
diff changeset
213 END
e78566595089 initial import
mandel
parents:
diff changeset
214 } state (BEGIN);
e78566595089 initial import
mandel
parents:
diff changeset
215
e78566595089 initial import
mandel
parents:
diff changeset
216 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
217
e78566595089 initial import
mandel
parents:
diff changeset
218 for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first)
e78566595089 initial import
mandel
parents:
diff changeset
219 {
e78566595089 initial import
mandel
parents:
diff changeset
220 switch (state)
e78566595089 initial import
mandel
parents:
diff changeset
221 {
e78566595089 initial import
mandel
parents:
diff changeset
222 default:
e78566595089 initial import
mandel
parents:
diff changeset
223 assert (0);
e78566595089 initial import
mandel
parents:
diff changeset
224 break;
e78566595089 initial import
mandel
parents:
diff changeset
225
e78566595089 initial import
mandel
parents:
diff changeset
226 case BEGIN:
e78566595089 initial import
mandel
parents:
diff changeset
227 if (*__first != '\"')
e78566595089 initial import
mandel
parents:
diff changeset
228 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
229 state = IN_STRING;
e78566595089 initial import
mandel
parents:
diff changeset
230 break;
e78566595089 initial import
mandel
parents:
diff changeset
231
e78566595089 initial import
mandel
parents:
diff changeset
232 case IN_STRING:
e78566595089 initial import
mandel
parents:
diff changeset
233 assert (*__first != '\n');
e78566595089 initial import
mandel
parents:
diff changeset
234
e78566595089 initial import
mandel
parents:
diff changeset
235 if (*__first == '\"')
e78566595089 initial import
mandel
parents:
diff changeset
236 state = END;
e78566595089 initial import
mandel
parents:
diff changeset
237 else if (*__first == '\\')
e78566595089 initial import
mandel
parents:
diff changeset
238 state = QUOTE;
e78566595089 initial import
mandel
parents:
diff changeset
239 break;
e78566595089 initial import
mandel
parents:
diff changeset
240
e78566595089 initial import
mandel
parents:
diff changeset
241 case QUOTE:
e78566595089 initial import
mandel
parents:
diff changeset
242 state = IN_STRING;
e78566595089 initial import
mandel
parents:
diff changeset
243 break;
e78566595089 initial import
mandel
parents:
diff changeset
244
e78566595089 initial import
mandel
parents:
diff changeset
245 case END:
e78566595089 initial import
mandel
parents:
diff changeset
246 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
247 }
e78566595089 initial import
mandel
parents:
diff changeset
248 }
e78566595089 initial import
mandel
parents:
diff changeset
249
e78566595089 initial import
mandel
parents:
diff changeset
250 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
251 }
e78566595089 initial import
mandel
parents:
diff changeset
252 };
e78566595089 initial import
mandel
parents:
diff changeset
253
e78566595089 initial import
mandel
parents:
diff changeset
254 struct pp_skip_char_literal
e78566595089 initial import
mandel
parents:
diff changeset
255 {
e78566595089 initial import
mandel
parents:
diff changeset
256 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
257
e78566595089 initial import
mandel
parents:
diff changeset
258 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
259 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
260 {
e78566595089 initial import
mandel
parents:
diff changeset
261 enum {
e78566595089 initial import
mandel
parents:
diff changeset
262 BEGIN,
e78566595089 initial import
mandel
parents:
diff changeset
263 IN_STRING,
e78566595089 initial import
mandel
parents:
diff changeset
264 QUOTE,
e78566595089 initial import
mandel
parents:
diff changeset
265 END
e78566595089 initial import
mandel
parents:
diff changeset
266 } state (BEGIN);
e78566595089 initial import
mandel
parents:
diff changeset
267
e78566595089 initial import
mandel
parents:
diff changeset
268 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
269
e78566595089 initial import
mandel
parents:
diff changeset
270 for (; state != END && __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first)
e78566595089 initial import
mandel
parents:
diff changeset
271 {
e78566595089 initial import
mandel
parents:
diff changeset
272 switch (state)
e78566595089 initial import
mandel
parents:
diff changeset
273 {
e78566595089 initial import
mandel
parents:
diff changeset
274 default:
e78566595089 initial import
mandel
parents:
diff changeset
275 assert (0);
e78566595089 initial import
mandel
parents:
diff changeset
276 break;
e78566595089 initial import
mandel
parents:
diff changeset
277
e78566595089 initial import
mandel
parents:
diff changeset
278 case BEGIN:
e78566595089 initial import
mandel
parents:
diff changeset
279 if (*__first != '\'')
e78566595089 initial import
mandel
parents:
diff changeset
280 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
281 state = IN_STRING;
e78566595089 initial import
mandel
parents:
diff changeset
282 break;
e78566595089 initial import
mandel
parents:
diff changeset
283
e78566595089 initial import
mandel
parents:
diff changeset
284 case IN_STRING:
e78566595089 initial import
mandel
parents:
diff changeset
285 assert (*__first != '\n');
e78566595089 initial import
mandel
parents:
diff changeset
286
e78566595089 initial import
mandel
parents:
diff changeset
287 if (*__first == '\'')
e78566595089 initial import
mandel
parents:
diff changeset
288 state = END;
e78566595089 initial import
mandel
parents:
diff changeset
289 else if (*__first == '\\')
e78566595089 initial import
mandel
parents:
diff changeset
290 state = QUOTE;
e78566595089 initial import
mandel
parents:
diff changeset
291 break;
e78566595089 initial import
mandel
parents:
diff changeset
292
e78566595089 initial import
mandel
parents:
diff changeset
293 case QUOTE:
e78566595089 initial import
mandel
parents:
diff changeset
294 state = IN_STRING;
e78566595089 initial import
mandel
parents:
diff changeset
295 break;
e78566595089 initial import
mandel
parents:
diff changeset
296 }
e78566595089 initial import
mandel
parents:
diff changeset
297 }
e78566595089 initial import
mandel
parents:
diff changeset
298
e78566595089 initial import
mandel
parents:
diff changeset
299 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
300 }
e78566595089 initial import
mandel
parents:
diff changeset
301 };
e78566595089 initial import
mandel
parents:
diff changeset
302
e78566595089 initial import
mandel
parents:
diff changeset
303 struct pp_skip_argument
e78566595089 initial import
mandel
parents:
diff changeset
304 {
e78566595089 initial import
mandel
parents:
diff changeset
305 pp_skip_identifier skip_number;
e78566595089 initial import
mandel
parents:
diff changeset
306 pp_skip_identifier skip_identifier;
e78566595089 initial import
mandel
parents:
diff changeset
307 pp_skip_string_literal skip_string_literal;
e78566595089 initial import
mandel
parents:
diff changeset
308 pp_skip_char_literal skip_char_literal;
e78566595089 initial import
mandel
parents:
diff changeset
309 pp_skip_comment_or_divop skip_comment_or_divop;
e78566595089 initial import
mandel
parents:
diff changeset
310 int lines;
e78566595089 initial import
mandel
parents:
diff changeset
311
e78566595089 initial import
mandel
parents:
diff changeset
312 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
313 _InputIterator operator () (_InputIterator __first, _InputIterator __last)
e78566595089 initial import
mandel
parents:
diff changeset
314 {
e78566595089 initial import
mandel
parents:
diff changeset
315 int depth = 0;
e78566595089 initial import
mandel
parents:
diff changeset
316 lines = 0;
e78566595089 initial import
mandel
parents:
diff changeset
317
e78566595089 initial import
mandel
parents:
diff changeset
318 while (__first != __last)
e78566595089 initial import
mandel
parents:
diff changeset
319 {
e78566595089 initial import
mandel
parents:
diff changeset
320 if (!depth && (*__first == ')' || *__first == ','))
e78566595089 initial import
mandel
parents:
diff changeset
321 break;
e78566595089 initial import
mandel
parents:
diff changeset
322 else if (*__first == '(')
e78566595089 initial import
mandel
parents:
diff changeset
323 ++depth, ++__first;
e78566595089 initial import
mandel
parents:
diff changeset
324 else if (*__first == ')')
e78566595089 initial import
mandel
parents:
diff changeset
325 --depth, ++__first;
e78566595089 initial import
mandel
parents:
diff changeset
326 else if (*__first == '\"')
e78566595089 initial import
mandel
parents:
diff changeset
327 {
e78566595089 initial import
mandel
parents:
diff changeset
328 __first = skip_string_literal (__first, __last);
e78566595089 initial import
mandel
parents:
diff changeset
329 lines += skip_string_literal.lines;
e78566595089 initial import
mandel
parents:
diff changeset
330 }
e78566595089 initial import
mandel
parents:
diff changeset
331 else if (*__first == '\'')
e78566595089 initial import
mandel
parents:
diff changeset
332 {
e78566595089 initial import
mandel
parents:
diff changeset
333 __first = skip_char_literal (__first, __last);
e78566595089 initial import
mandel
parents:
diff changeset
334 lines += skip_char_literal.lines;
e78566595089 initial import
mandel
parents:
diff changeset
335 }
e78566595089 initial import
mandel
parents:
diff changeset
336 else if (*__first == '/')
e78566595089 initial import
mandel
parents:
diff changeset
337 {
e78566595089 initial import
mandel
parents:
diff changeset
338 __first = skip_comment_or_divop (__first, __last);
e78566595089 initial import
mandel
parents:
diff changeset
339 lines += skip_comment_or_divop.lines;
e78566595089 initial import
mandel
parents:
diff changeset
340 }
e78566595089 initial import
mandel
parents:
diff changeset
341 else if (pp_isalpha (*__first) || *__first == '_')
e78566595089 initial import
mandel
parents:
diff changeset
342 {
e78566595089 initial import
mandel
parents:
diff changeset
343 __first = skip_identifier (__first, __last);
e78566595089 initial import
mandel
parents:
diff changeset
344 lines += skip_identifier.lines;
e78566595089 initial import
mandel
parents:
diff changeset
345 }
e78566595089 initial import
mandel
parents:
diff changeset
346 else if (pp_isdigit (*__first))
e78566595089 initial import
mandel
parents:
diff changeset
347 {
e78566595089 initial import
mandel
parents:
diff changeset
348 __first = skip_number (__first, __last);
e78566595089 initial import
mandel
parents:
diff changeset
349 lines += skip_number.lines;
e78566595089 initial import
mandel
parents:
diff changeset
350 }
e78566595089 initial import
mandel
parents:
diff changeset
351 else if (*__first == '\n')
e78566595089 initial import
mandel
parents:
diff changeset
352 {
e78566595089 initial import
mandel
parents:
diff changeset
353 ++__first;
e78566595089 initial import
mandel
parents:
diff changeset
354 ++lines;
e78566595089 initial import
mandel
parents:
diff changeset
355 }
e78566595089 initial import
mandel
parents:
diff changeset
356 else
e78566595089 initial import
mandel
parents:
diff changeset
357 ++__first;
e78566595089 initial import
mandel
parents:
diff changeset
358 }
e78566595089 initial import
mandel
parents:
diff changeset
359
e78566595089 initial import
mandel
parents:
diff changeset
360 return __first;
e78566595089 initial import
mandel
parents:
diff changeset
361 }
e78566595089 initial import
mandel
parents:
diff changeset
362 };
e78566595089 initial import
mandel
parents:
diff changeset
363
e78566595089 initial import
mandel
parents:
diff changeset
364 } // namespace rpp
e78566595089 initial import
mandel
parents:
diff changeset
365
e78566595089 initial import
mandel
parents:
diff changeset
366 #endif // PP_SCANNER_H
e78566595089 initial import
mandel
parents:
diff changeset
367
e78566595089 initial import
mandel
parents:
diff changeset
368 // kate: space-indent on; indent-width 2; replace-tabs on;