annotate generator/parser/lexer.h @ 382:1d56b2a2e10c

Fixes to debugging stuff. Added size_t as primitive type to workaround Qwt build failure in debug
author Max Samukha <maxter@spambox.com>
date Mon, 12 Jul 2010 20:36:07 +0300
parents 09a0f1d048f2
children
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 **
52
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
3 ** Copyright (C) 1992-2009 Nokia. All rights reserved.
1
e78566595089 initial import
mandel
parents:
diff changeset
4 ** Copyright (C) 2002-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 **
52
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
8 ** Commercial Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
9 Licensees holding valid Qt Commercial licenses may use this file in
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
10 accordance with the Qt Commercial License Agreement provided with the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
11 Software or, alternatively, in accordance with the terms contained in
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
12 a written agreement between you and Nokia.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
13
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
14 GNU Lesser General Public License Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
15 Alternatively, this file may be used under the terms of the GNU Lesser
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
16 General Public License version 2.1 as published by the Free Software
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
17 Foundation and appearing in the file LICENSE.LGPL included in the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
18 packaging of this file. Please review the following information to
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
19 ensure the GNU Lesser General Public License version 2.1 requirements
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
20 will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
21
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
22 In addition, as a special exception, Nokia gives you certain
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
23 additional rights. These rights are described in the Nokia Qt LGPL
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
24 Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
25 package.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
26
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
27 GNU General Public License Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
28 Alternatively, this file may be used under the terms of the GNU
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
29 General Public License version 3.0 as published by the Free Software
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
30 Foundation and appearing in the file LICENSE.GPL included in the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
31 packaging of this file. Please review the following information to
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
32 ensure the GNU General Public License version 3.0 requirements will be
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
33 met: http://www.gnu.org/copyleft/gpl.html.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
34
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
35 If you are unsure which license is appropriate for your use, please
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
36 contact the sales department at qt-sales@nokia.com.
1
e78566595089 initial import
mandel
parents:
diff changeset
37
e78566595089 initial import
mandel
parents:
diff changeset
38 **
e78566595089 initial import
mandel
parents:
diff changeset
39 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
40 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
41 **
e78566595089 initial import
mandel
parents:
diff changeset
42 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
43
e78566595089 initial import
mandel
parents:
diff changeset
44
e78566595089 initial import
mandel
parents:
diff changeset
45 #ifndef LEXER_H
e78566595089 initial import
mandel
parents:
diff changeset
46 #define LEXER_H
e78566595089 initial import
mandel
parents:
diff changeset
47
e78566595089 initial import
mandel
parents:
diff changeset
48 #include "symbol.h"
e78566595089 initial import
mandel
parents:
diff changeset
49
e78566595089 initial import
mandel
parents:
diff changeset
50 #include <QtCore/QString>
e78566595089 initial import
mandel
parents:
diff changeset
51 #include <cstdlib>
e78566595089 initial import
mandel
parents:
diff changeset
52 #include <cassert>
e78566595089 initial import
mandel
parents:
diff changeset
53
e78566595089 initial import
mandel
parents:
diff changeset
54 struct NameSymbol;
e78566595089 initial import
mandel
parents:
diff changeset
55 class Lexer;
e78566595089 initial import
mandel
parents:
diff changeset
56 class Control;
e78566595089 initial import
mandel
parents:
diff changeset
57
e78566595089 initial import
mandel
parents:
diff changeset
58 typedef void (Lexer::*scan_fun_ptr)();
e78566595089 initial import
mandel
parents:
diff changeset
59
e78566595089 initial import
mandel
parents:
diff changeset
60 class Token
e78566595089 initial import
mandel
parents:
diff changeset
61 {
e78566595089 initial import
mandel
parents:
diff changeset
62 public:
e78566595089 initial import
mandel
parents:
diff changeset
63 int kind;
e78566595089 initial import
mandel
parents:
diff changeset
64 std::size_t position;
e78566595089 initial import
mandel
parents:
diff changeset
65 std::size_t size;
e78566595089 initial import
mandel
parents:
diff changeset
66 char const *text;
e78566595089 initial import
mandel
parents:
diff changeset
67
e78566595089 initial import
mandel
parents:
diff changeset
68 union
e78566595089 initial import
mandel
parents:
diff changeset
69 {
e78566595089 initial import
mandel
parents:
diff changeset
70 const NameSymbol *symbol;
e78566595089 initial import
mandel
parents:
diff changeset
71 std::size_t right_brace;
e78566595089 initial import
mandel
parents:
diff changeset
72 } extra;
e78566595089 initial import
mandel
parents:
diff changeset
73 };
e78566595089 initial import
mandel
parents:
diff changeset
74
e78566595089 initial import
mandel
parents:
diff changeset
75 class LocationTable
e78566595089 initial import
mandel
parents:
diff changeset
76 {
e78566595089 initial import
mandel
parents:
diff changeset
77 private:
e78566595089 initial import
mandel
parents:
diff changeset
78 LocationTable(const LocationTable &source);
e78566595089 initial import
mandel
parents:
diff changeset
79 void operator = (const LocationTable &source);
e78566595089 initial import
mandel
parents:
diff changeset
80
e78566595089 initial import
mandel
parents:
diff changeset
81 public:
e78566595089 initial import
mandel
parents:
diff changeset
82 inline LocationTable(std::size_t size = 1024)
e78566595089 initial import
mandel
parents:
diff changeset
83 : lines(0),
e78566595089 initial import
mandel
parents:
diff changeset
84 line_count(0),
e78566595089 initial import
mandel
parents:
diff changeset
85 current_line(0)
e78566595089 initial import
mandel
parents:
diff changeset
86 {
e78566595089 initial import
mandel
parents:
diff changeset
87 resize(size);
e78566595089 initial import
mandel
parents:
diff changeset
88 }
e78566595089 initial import
mandel
parents:
diff changeset
89
e78566595089 initial import
mandel
parents:
diff changeset
90 inline ~LocationTable()
e78566595089 initial import
mandel
parents:
diff changeset
91 {
e78566595089 initial import
mandel
parents:
diff changeset
92 free(lines);
e78566595089 initial import
mandel
parents:
diff changeset
93 }
e78566595089 initial import
mandel
parents:
diff changeset
94
e78566595089 initial import
mandel
parents:
diff changeset
95 inline std::size_t size() const
e78566595089 initial import
mandel
parents:
diff changeset
96 { return line_count; }
e78566595089 initial import
mandel
parents:
diff changeset
97
e78566595089 initial import
mandel
parents:
diff changeset
98 void resize(std::size_t size)
e78566595089 initial import
mandel
parents:
diff changeset
99 {
e78566595089 initial import
mandel
parents:
diff changeset
100 Q_ASSERT(size > 0);
e78566595089 initial import
mandel
parents:
diff changeset
101 lines = (std::size_t*) ::realloc(lines, sizeof(std::size_t) * size);
e78566595089 initial import
mandel
parents:
diff changeset
102 line_count = size;
e78566595089 initial import
mandel
parents:
diff changeset
103 }
e78566595089 initial import
mandel
parents:
diff changeset
104
e78566595089 initial import
mandel
parents:
diff changeset
105 void positionAt(std::size_t offset, int *line, int *column) const
e78566595089 initial import
mandel
parents:
diff changeset
106 { positionAt(offset, (int) current_line, line, column); }
e78566595089 initial import
mandel
parents:
diff changeset
107
e78566595089 initial import
mandel
parents:
diff changeset
108 void positionAt(std::size_t offset, int max_line, int *line, int *column) const;
e78566595089 initial import
mandel
parents:
diff changeset
109
e78566595089 initial import
mandel
parents:
diff changeset
110 inline std::size_t &operator[](int index)
e78566595089 initial import
mandel
parents:
diff changeset
111 { return lines[index]; }
e78566595089 initial import
mandel
parents:
diff changeset
112
e78566595089 initial import
mandel
parents:
diff changeset
113 private:
e78566595089 initial import
mandel
parents:
diff changeset
114 std::size_t *lines;
e78566595089 initial import
mandel
parents:
diff changeset
115 std::size_t line_count;
e78566595089 initial import
mandel
parents:
diff changeset
116 std::size_t current_line;
e78566595089 initial import
mandel
parents:
diff changeset
117
e78566595089 initial import
mandel
parents:
diff changeset
118 friend class Lexer;
e78566595089 initial import
mandel
parents:
diff changeset
119 };
e78566595089 initial import
mandel
parents:
diff changeset
120
e78566595089 initial import
mandel
parents:
diff changeset
121 class TokenStream
e78566595089 initial import
mandel
parents:
diff changeset
122 {
e78566595089 initial import
mandel
parents:
diff changeset
123 private:
e78566595089 initial import
mandel
parents:
diff changeset
124 TokenStream(const TokenStream &);
e78566595089 initial import
mandel
parents:
diff changeset
125 void operator = (const TokenStream &);
e78566595089 initial import
mandel
parents:
diff changeset
126
e78566595089 initial import
mandel
parents:
diff changeset
127 public:
e78566595089 initial import
mandel
parents:
diff changeset
128 inline TokenStream(std::size_t size = 1024)
e78566595089 initial import
mandel
parents:
diff changeset
129 : tokens(0),
e78566595089 initial import
mandel
parents:
diff changeset
130 index(0),
e78566595089 initial import
mandel
parents:
diff changeset
131 token_count(0)
e78566595089 initial import
mandel
parents:
diff changeset
132 {
e78566595089 initial import
mandel
parents:
diff changeset
133 resize(size);
e78566595089 initial import
mandel
parents:
diff changeset
134 }
e78566595089 initial import
mandel
parents:
diff changeset
135
e78566595089 initial import
mandel
parents:
diff changeset
136 inline ~TokenStream()
e78566595089 initial import
mandel
parents:
diff changeset
137 { ::free(tokens); }
e78566595089 initial import
mandel
parents:
diff changeset
138
e78566595089 initial import
mandel
parents:
diff changeset
139 inline std::size_t size() const
e78566595089 initial import
mandel
parents:
diff changeset
140 { return token_count; }
e78566595089 initial import
mandel
parents:
diff changeset
141
e78566595089 initial import
mandel
parents:
diff changeset
142 inline std::size_t cursor() const
e78566595089 initial import
mandel
parents:
diff changeset
143 { return index; }
e78566595089 initial import
mandel
parents:
diff changeset
144
e78566595089 initial import
mandel
parents:
diff changeset
145 inline void rewind(int i)
e78566595089 initial import
mandel
parents:
diff changeset
146 { index = i; }
e78566595089 initial import
mandel
parents:
diff changeset
147
e78566595089 initial import
mandel
parents:
diff changeset
148 void resize(std::size_t size)
e78566595089 initial import
mandel
parents:
diff changeset
149 {
e78566595089 initial import
mandel
parents:
diff changeset
150 Q_ASSERT(size > 0);
e78566595089 initial import
mandel
parents:
diff changeset
151 tokens = (Token*) ::realloc(tokens, sizeof(Token) * size);
e78566595089 initial import
mandel
parents:
diff changeset
152 token_count = size;
e78566595089 initial import
mandel
parents:
diff changeset
153 }
e78566595089 initial import
mandel
parents:
diff changeset
154
e78566595089 initial import
mandel
parents:
diff changeset
155 inline std::size_t nextToken()
e78566595089 initial import
mandel
parents:
diff changeset
156 { return index++; }
e78566595089 initial import
mandel
parents:
diff changeset
157
e78566595089 initial import
mandel
parents:
diff changeset
158 inline int lookAhead(std::size_t i = 0) const
e78566595089 initial import
mandel
parents:
diff changeset
159 { return tokens[index + i].kind; }
e78566595089 initial import
mandel
parents:
diff changeset
160
e78566595089 initial import
mandel
parents:
diff changeset
161 inline int kind(std::size_t i) const
e78566595089 initial import
mandel
parents:
diff changeset
162 { return tokens[i].kind; }
e78566595089 initial import
mandel
parents:
diff changeset
163
e78566595089 initial import
mandel
parents:
diff changeset
164 inline std::size_t position(std::size_t i) const
e78566595089 initial import
mandel
parents:
diff changeset
165 { return tokens[i].position; }
e78566595089 initial import
mandel
parents:
diff changeset
166
e78566595089 initial import
mandel
parents:
diff changeset
167 inline const NameSymbol *symbol(std::size_t i) const
e78566595089 initial import
mandel
parents:
diff changeset
168 { return tokens[i].extra.symbol; }
e78566595089 initial import
mandel
parents:
diff changeset
169
e78566595089 initial import
mandel
parents:
diff changeset
170 inline std::size_t matchingBrace(std::size_t i) const
e78566595089 initial import
mandel
parents:
diff changeset
171 { return tokens[i].extra.right_brace; }
e78566595089 initial import
mandel
parents:
diff changeset
172
e78566595089 initial import
mandel
parents:
diff changeset
173 inline Token &operator[](int index)
e78566595089 initial import
mandel
parents:
diff changeset
174 { return tokens[index]; }
e78566595089 initial import
mandel
parents:
diff changeset
175
e78566595089 initial import
mandel
parents:
diff changeset
176 inline const Token &token(int index) const
e78566595089 initial import
mandel
parents:
diff changeset
177 { return tokens[index]; }
e78566595089 initial import
mandel
parents:
diff changeset
178
e78566595089 initial import
mandel
parents:
diff changeset
179 private:
e78566595089 initial import
mandel
parents:
diff changeset
180 Token *tokens;
e78566595089 initial import
mandel
parents:
diff changeset
181 std::size_t index;
e78566595089 initial import
mandel
parents:
diff changeset
182 std::size_t token_count;
e78566595089 initial import
mandel
parents:
diff changeset
183
e78566595089 initial import
mandel
parents:
diff changeset
184 private:
e78566595089 initial import
mandel
parents:
diff changeset
185 friend class Lexer;
e78566595089 initial import
mandel
parents:
diff changeset
186 };
e78566595089 initial import
mandel
parents:
diff changeset
187
e78566595089 initial import
mandel
parents:
diff changeset
188 class LocationManager
e78566595089 initial import
mandel
parents:
diff changeset
189 {
e78566595089 initial import
mandel
parents:
diff changeset
190 LocationManager(LocationManager const &__other);
e78566595089 initial import
mandel
parents:
diff changeset
191 void operator = (LocationManager const &__other);
e78566595089 initial import
mandel
parents:
diff changeset
192
e78566595089 initial import
mandel
parents:
diff changeset
193 public:
e78566595089 initial import
mandel
parents:
diff changeset
194 LocationManager (TokenStream &__token_stream,
e78566595089 initial import
mandel
parents:
diff changeset
195 LocationTable &__location_table,
e78566595089 initial import
mandel
parents:
diff changeset
196 LocationTable &__line_table):
e78566595089 initial import
mandel
parents:
diff changeset
197 token_stream (__token_stream),
e78566595089 initial import
mandel
parents:
diff changeset
198 location_table (__location_table),
e78566595089 initial import
mandel
parents:
diff changeset
199 line_table (__line_table) {}
e78566595089 initial import
mandel
parents:
diff changeset
200
e78566595089 initial import
mandel
parents:
diff changeset
201 void positionAt(std::size_t offset, int *line, int *column,
e78566595089 initial import
mandel
parents:
diff changeset
202 QString *filename) const;
e78566595089 initial import
mandel
parents:
diff changeset
203
e78566595089 initial import
mandel
parents:
diff changeset
204 void extract_line(int offset, int *line, QString *filename) const;
e78566595089 initial import
mandel
parents:
diff changeset
205
e78566595089 initial import
mandel
parents:
diff changeset
206 TokenStream &token_stream;
e78566595089 initial import
mandel
parents:
diff changeset
207 LocationTable &location_table;
e78566595089 initial import
mandel
parents:
diff changeset
208 LocationTable &line_table;
e78566595089 initial import
mandel
parents:
diff changeset
209 };
e78566595089 initial import
mandel
parents:
diff changeset
210
e78566595089 initial import
mandel
parents:
diff changeset
211 class Lexer
e78566595089 initial import
mandel
parents:
diff changeset
212 {
e78566595089 initial import
mandel
parents:
diff changeset
213 public:
e78566595089 initial import
mandel
parents:
diff changeset
214 Lexer(LocationManager &__location, Control *__control):
e78566595089 initial import
mandel
parents:
diff changeset
215 _M_location(__location),
e78566595089 initial import
mandel
parents:
diff changeset
216 token_stream(_M_location.token_stream),
e78566595089 initial import
mandel
parents:
diff changeset
217 location_table(_M_location.location_table),
e78566595089 initial import
mandel
parents:
diff changeset
218 line_table(_M_location.line_table),
e78566595089 initial import
mandel
parents:
diff changeset
219 control(__control) {}
e78566595089 initial import
mandel
parents:
diff changeset
220
e78566595089 initial import
mandel
parents:
diff changeset
221 void tokenize(const char *contents, std::size_t size);
e78566595089 initial import
mandel
parents:
diff changeset
222
e78566595089 initial import
mandel
parents:
diff changeset
223 LocationManager &_M_location;
e78566595089 initial import
mandel
parents:
diff changeset
224 TokenStream &token_stream;
e78566595089 initial import
mandel
parents:
diff changeset
225 LocationTable &location_table;
e78566595089 initial import
mandel
parents:
diff changeset
226 LocationTable &line_table;
e78566595089 initial import
mandel
parents:
diff changeset
227
e78566595089 initial import
mandel
parents:
diff changeset
228 private:
e78566595089 initial import
mandel
parents:
diff changeset
229 void reportError(const QString& msg);
e78566595089 initial import
mandel
parents:
diff changeset
230
e78566595089 initial import
mandel
parents:
diff changeset
231 void initialize_scan_table();
e78566595089 initial import
mandel
parents:
diff changeset
232 void scan_newline();
e78566595089 initial import
mandel
parents:
diff changeset
233 void scan_white_spaces();
e78566595089 initial import
mandel
parents:
diff changeset
234 void scan_identifier_or_keyword();
e78566595089 initial import
mandel
parents:
diff changeset
235 void scan_identifier_or_literal();
e78566595089 initial import
mandel
parents:
diff changeset
236 void scan_int_constant();
e78566595089 initial import
mandel
parents:
diff changeset
237 void scan_char_constant();
e78566595089 initial import
mandel
parents:
diff changeset
238 void scan_string_constant();
e78566595089 initial import
mandel
parents:
diff changeset
239 void scan_invalid_input();
e78566595089 initial import
mandel
parents:
diff changeset
240 void scan_preprocessor();
e78566595089 initial import
mandel
parents:
diff changeset
241
e78566595089 initial import
mandel
parents:
diff changeset
242 // keywords
e78566595089 initial import
mandel
parents:
diff changeset
243 void scanKeyword0();
e78566595089 initial import
mandel
parents:
diff changeset
244 void scanKeyword2();
e78566595089 initial import
mandel
parents:
diff changeset
245 void scanKeyword3();
e78566595089 initial import
mandel
parents:
diff changeset
246 void scanKeyword4();
e78566595089 initial import
mandel
parents:
diff changeset
247 void scanKeyword5();
e78566595089 initial import
mandel
parents:
diff changeset
248 void scanKeyword6();
e78566595089 initial import
mandel
parents:
diff changeset
249 void scanKeyword7();
e78566595089 initial import
mandel
parents:
diff changeset
250 void scanKeyword8();
e78566595089 initial import
mandel
parents:
diff changeset
251 void scanKeyword9();
e78566595089 initial import
mandel
parents:
diff changeset
252 void scanKeyword10();
e78566595089 initial import
mandel
parents:
diff changeset
253 void scanKeyword11();
e78566595089 initial import
mandel
parents:
diff changeset
254 void scanKeyword12();
e78566595089 initial import
mandel
parents:
diff changeset
255 void scanKeyword13();
e78566595089 initial import
mandel
parents:
diff changeset
256 void scanKeyword14();
e78566595089 initial import
mandel
parents:
diff changeset
257 void scanKeyword16();
e78566595089 initial import
mandel
parents:
diff changeset
258
e78566595089 initial import
mandel
parents:
diff changeset
259 // operators
e78566595089 initial import
mandel
parents:
diff changeset
260 void scan_not();
e78566595089 initial import
mandel
parents:
diff changeset
261 void scan_remainder();
e78566595089 initial import
mandel
parents:
diff changeset
262 void scan_and();
e78566595089 initial import
mandel
parents:
diff changeset
263 void scan_left_paren();
e78566595089 initial import
mandel
parents:
diff changeset
264 void scan_right_paren();
e78566595089 initial import
mandel
parents:
diff changeset
265 void scan_star();
e78566595089 initial import
mandel
parents:
diff changeset
266 void scan_plus();
e78566595089 initial import
mandel
parents:
diff changeset
267 void scan_comma();
e78566595089 initial import
mandel
parents:
diff changeset
268 void scan_minus();
e78566595089 initial import
mandel
parents:
diff changeset
269 void scan_dot();
e78566595089 initial import
mandel
parents:
diff changeset
270 void scan_divide();
e78566595089 initial import
mandel
parents:
diff changeset
271 void scan_colon();
e78566595089 initial import
mandel
parents:
diff changeset
272 void scan_semicolon();
e78566595089 initial import
mandel
parents:
diff changeset
273 void scan_less();
e78566595089 initial import
mandel
parents:
diff changeset
274 void scan_equal();
e78566595089 initial import
mandel
parents:
diff changeset
275 void scan_greater();
e78566595089 initial import
mandel
parents:
diff changeset
276 void scan_question();
e78566595089 initial import
mandel
parents:
diff changeset
277 void scan_left_bracket();
e78566595089 initial import
mandel
parents:
diff changeset
278 void scan_right_bracket();
e78566595089 initial import
mandel
parents:
diff changeset
279 void scan_xor();
e78566595089 initial import
mandel
parents:
diff changeset
280 void scan_left_brace();
e78566595089 initial import
mandel
parents:
diff changeset
281 void scan_or();
e78566595089 initial import
mandel
parents:
diff changeset
282 void scan_right_brace();
e78566595089 initial import
mandel
parents:
diff changeset
283 void scan_tilde();
e78566595089 initial import
mandel
parents:
diff changeset
284 void scan_EOF();
e78566595089 initial import
mandel
parents:
diff changeset
285
e78566595089 initial import
mandel
parents:
diff changeset
286 private:
e78566595089 initial import
mandel
parents:
diff changeset
287 Control *control;
e78566595089 initial import
mandel
parents:
diff changeset
288 const unsigned char *cursor;
e78566595089 initial import
mandel
parents:
diff changeset
289 const unsigned char *begin_buffer;
e78566595089 initial import
mandel
parents:
diff changeset
290 const unsigned char *end_buffer;
e78566595089 initial import
mandel
parents:
diff changeset
291 std::size_t index;
e78566595089 initial import
mandel
parents:
diff changeset
292
e78566595089 initial import
mandel
parents:
diff changeset
293 static scan_fun_ptr s_scan_table[];
e78566595089 initial import
mandel
parents:
diff changeset
294 static scan_fun_ptr s_scan_keyword_table[];
e78566595089 initial import
mandel
parents:
diff changeset
295 static bool s_initialized;
e78566595089 initial import
mandel
parents:
diff changeset
296 };
e78566595089 initial import
mandel
parents:
diff changeset
297
e78566595089 initial import
mandel
parents:
diff changeset
298 #endif // LEXER_H
e78566595089 initial import
mandel
parents:
diff changeset
299
e78566595089 initial import
mandel
parents:
diff changeset
300 // kate: space-indent on; indent-width 2; replace-tabs on;