topazc
token.hpp
Go to the documentation of this file.
1
6
7
#pragma once
8
#include <cstdint>
9
#include <sstream>
10
14
typedef
enum : uint8_t {
15
TOK_BOOL
,
16
TOK_CHAR
,
17
TOK_SHORT
,
18
TOK_INT
,
19
TOK_LONG
,
20
TOK_FLOAT
,
21
TOK_DOUBLE
,
22
TOK_NOTH
,
23
24
TOK_LET
,
25
TOK_FUN
,
26
TOK_IF
,
27
TOK_ELSE
,
28
TOK_FOR
,
29
TOK_DO
,
30
TOK_WHILE
,
31
TOK_CONTINUE
,
32
TOK_BREAK
,
33
TOK_MODULE
,
34
TOK_PUB
,
35
TOK_PRIV
,
36
TOK_USE
,
37
TOK_CONST
,
38
TOK_RETURN
,
39
TOK_UNSAFE
,
40
TOK_EXTERN
,
41
42
TOK_ID
,
43
TOK_CHARACTER_LIT
,
44
TOK_SHORT_LIT
,
45
TOK_INT_LIT
,
46
TOK_LONG_LIT
,
47
TOK_FLOAT_LIT
,
48
TOK_DOUBLE_LIT
,
49
TOK_BOOLEAN_LIT
,
50
TOK_STRING_LIT
,
51
52
TOK_OP_PLUS
,
53
TOK_OP_PLUS_EQ
,
54
TOK_OP_INC
,
55
TOK_OP_MINUS
,
56
TOK_OP_MINUS_EQ
,
57
TOK_OP_DEC
,
58
TOK_OP_MULT
,
59
TOK_OP_MULT_EQ
,
60
TOK_OP_DIV
,
61
TOK_OP_DIV_EQ
,
62
TOK_OP_MODULO
,
63
TOK_OP_MODULO_EQ
,
64
TOK_OP_EQ
,
65
TOK_OP_EQ_EQ
,
66
TOK_OP_NOT_EQ_EQ
,
67
TOK_OP_GT
,
68
TOK_OP_GT_EQ
,
69
TOK_OP_LS
,
70
TOK_OP_LS_EQ
,
71
TOK_OP_L_NOT
,
72
TOK_OP_L_AND
,
73
TOK_OP_L_OR
,
74
TOK_OP_REF
,
75
TOK_OP_COMMA
,
76
TOK_OP_DOT
,
77
TOK_OP_COLON
,
78
TOK_OP_SEMICOLON
,
79
TOK_OP_LPAREN
,
80
TOK_OP_RPAREN
,
81
TOK_OP_LBRACE
,
82
TOK_OP_RBRACE
,
83
TOK_OP_LBRACKET
,
84
TOK_OP_RBRACKET
,
85
TOK_OP_QUESTION
,
86
TOK_OP_NEXT
87
}
TokenType
;
88
92
struct
Token
{
93
TokenType
type
;
94
std::string
value
;
95
96
uint32_t
line
;
97
uint32_t
column
;
98
std::string
file_name
;
99
100
Token
(
TokenType
t, std::string v, uint32_t l, uint32_t c, std::string fn) :
type
(t),
value
(v),
line
(l),
column
(c),
file_name
(fn) {}
101
109
std::string
to_str
() {
110
std::stringstream ss;
111
switch
(
type
) {
112
case
TOK_CHAR
:
113
ss <<
"char"
;
114
break
;
115
case
TOK_SHORT
:
116
ss <<
"short"
;
117
break
;
118
case
TOK_INT
:
119
ss <<
"int"
;
120
break
;
121
case
TOK_LONG
:
122
ss <<
"long"
;
123
break
;
124
case
TOK_FLOAT
:
125
ss <<
"float"
;
126
break
;
127
case
TOK_DOUBLE
:
128
ss <<
"double"
;
129
break
;
130
case
TOK_BOOL
:
131
ss <<
"bool"
;
132
break
;
133
case
TOK_NOTH
:
134
ss <<
"noth"
;
135
break
;
136
case
TOK_LET
:
137
ss <<
"let"
;
138
break
;
139
case
TOK_FUN
:
140
ss <<
"fun"
;
141
break
;
142
case
TOK_IF
:
143
ss <<
"if"
;
144
break
;
145
case
TOK_ELSE
:
146
ss <<
"else"
;
147
break
;
148
case
TOK_FOR
:
149
ss <<
"for"
;
150
break
;
151
case
TOK_WHILE
:
152
ss <<
"while"
;
153
break
;
154
case
TOK_CONST
:
155
ss <<
"const"
;
156
break
;
157
case
TOK_RETURN
:
158
ss <<
"return"
;
159
break
;
160
case
TOK_ID
:
161
ss <<
"id"
;
162
break
;
163
case
TOK_CHARACTER_LIT
:
164
ss <<
"char_lit"
;
165
break
;
166
case
TOK_SHORT_LIT
:
167
ss <<
"short_lit"
;
168
break
;
169
case
TOK_INT_LIT
:
170
ss <<
"int_lit"
;
171
break
;
172
case
TOK_LONG_LIT
:
173
ss <<
"long_lit"
;
174
break
;
175
case
TOK_FLOAT_LIT
:
176
ss <<
"float_lit"
;
177
break
;
178
case
TOK_DOUBLE_LIT
:
179
ss <<
"double_lit"
;
180
break
;
181
case
TOK_BOOLEAN_LIT
:
182
ss <<
"bool_lit"
;
183
break
;
184
case
TOK_STRING_LIT
:
185
ss <<
"string_lit"
;
186
break
;
187
case
TOK_OP_PLUS
:
188
ss <<
"plus_op"
;
189
break
;
190
case
TOK_OP_PLUS_EQ
:
191
ss <<
"plus_eq_op"
;
192
break
;
193
case
TOK_OP_MINUS
:
194
ss <<
"minus_op"
;
195
break
;
196
case
TOK_OP_MINUS_EQ
:
197
ss <<
"minus_eq_op"
;
198
break
;
199
case
TOK_OP_MULT
:
200
ss <<
"mult_op"
;
201
break
;
202
case
TOK_OP_MULT_EQ
:
203
ss <<
"mult_eq_op"
;
204
break
;
205
case
TOK_OP_DIV
:
206
ss <<
"div_op"
;
207
break
;
208
case
TOK_OP_DIV_EQ
:
209
ss <<
"div_eq_op"
;
210
break
;
211
case
TOK_OP_MODULO
:
212
ss <<
"mod_op"
;
213
break
;
214
case
TOK_OP_MODULO_EQ
:
215
ss <<
"mod_eq_op"
;
216
break
;
217
case
TOK_OP_EQ
:
218
ss <<
"eq_op"
;
219
break
;
220
case
TOK_OP_EQ_EQ
:
221
ss <<
"eq_eq_op"
;
222
break
;
223
case
TOK_OP_NOT_EQ_EQ
:
224
ss <<
"not_eq_eq_op"
;
225
break
;
226
case
TOK_OP_GT
:
227
ss <<
"gt_op"
;
228
break
;
229
case
TOK_OP_GT_EQ
:
230
ss <<
"gt_eq_op"
;
231
break
;
232
case
TOK_OP_LS
:
233
ss <<
"ls_op"
;
234
case
TOK_OP_LS_EQ
:
235
ss <<
"ls_eq_op"
;
236
break
;
237
case
TOK_OP_L_NOT
:
238
ss <<
"l_not_op"
;
239
break
;
240
case
TOK_OP_L_AND
:
241
ss <<
"l_and_op"
;
242
break
;
243
case
TOK_OP_L_OR
:
244
ss <<
"l_or_op"
;
245
break
;
246
case
TOK_OP_COMMA
:
247
ss <<
"comma"
;
248
break
;
249
case
TOK_OP_DOT
:
250
ss <<
"dot"
;
251
break
;
252
case
TOK_OP_COLON
:
253
ss <<
"colon"
;
254
break
;
255
case
TOK_OP_SEMICOLON
:
256
ss <<
"semicolon"
;
257
break
;
258
case
TOK_OP_LPAREN
:
259
ss <<
"l_paren"
;
260
break
;
261
case
TOK_OP_RPAREN
:
262
ss <<
"r_paren"
;
263
break
;
264
case
TOK_OP_LBRACE
:
265
ss <<
"l_brace"
;
266
break
;
267
case
TOK_OP_RBRACE
:
268
ss <<
"r_brace"
;
269
break
;
270
case
TOK_OP_LBRACKET
:
271
ss <<
"l_bracket"
;
272
break
;
273
case
TOK_OP_RBRACKET
:
274
ss <<
"r_bracket"
;
275
break
;
276
case
TOK_OP_QUESTION
:
277
ss <<
"question"
;
278
break
;
279
case
TOK_OP_NEXT
:
280
ss <<
"next"
;
281
break
;
282
default
:
283
ss <<
"<unknown>"
;
284
break
;
285
}
286
ss <<
" : '"
<<
value
<<
"' ("
<<
column
<<
':'
<<
line
<<
')'
;
287
return
ss.str();
288
}
289
};
Token::to_str
std::string to_str()
Method for converting token to string.
Definition
token.hpp:109
Token::value
std::string value
Definition
token.hpp:94
Token::type
TokenType type
Definition
token.hpp:93
Token::Token
Token(TokenType t, std::string v, uint32_t l, uint32_t c, std::string fn)
Definition
token.hpp:100
Token::line
uint32_t line
Definition
token.hpp:96
Token::file_name
std::string file_name
Definition
token.hpp:98
Token::column
uint32_t column
Definition
token.hpp:97
TokenType
TokenType
All tokens types.
Definition
token.hpp:14
TOK_OP_DEC
@ TOK_OP_DEC
Definition
token.hpp:57
TOK_OP_RBRACKET
@ TOK_OP_RBRACKET
Definition
token.hpp:84
TOK_OP_DIV_EQ
@ TOK_OP_DIV_EQ
Definition
token.hpp:61
TOK_OP_COMMA
@ TOK_OP_COMMA
Definition
token.hpp:75
TOK_BREAK
@ TOK_BREAK
Definition
token.hpp:32
TOK_OP_DIV
@ TOK_OP_DIV
Definition
token.hpp:60
TOK_OP_NEXT
@ TOK_OP_NEXT
Definition
token.hpp:86
TOK_OP_LBRACKET
@ TOK_OP_LBRACKET
Definition
token.hpp:83
TOK_OP_EQ_EQ
@ TOK_OP_EQ_EQ
Definition
token.hpp:65
TOK_USE
@ TOK_USE
Definition
token.hpp:36
TOK_LET
@ TOK_LET
Definition
token.hpp:24
TOK_IF
@ TOK_IF
Definition
token.hpp:26
TOK_OP_LS
@ TOK_OP_LS
Definition
token.hpp:69
TOK_OP_GT_EQ
@ TOK_OP_GT_EQ
Definition
token.hpp:68
TOK_CHARACTER_LIT
@ TOK_CHARACTER_LIT
Definition
token.hpp:43
TOK_OP_MINUS_EQ
@ TOK_OP_MINUS_EQ
Definition
token.hpp:56
TOK_OP_LBRACE
@ TOK_OP_LBRACE
Definition
token.hpp:81
TOK_STRING_LIT
@ TOK_STRING_LIT
Definition
token.hpp:50
TOK_PRIV
@ TOK_PRIV
Definition
token.hpp:35
TOK_OP_RBRACE
@ TOK_OP_RBRACE
Definition
token.hpp:82
TOK_SHORT_LIT
@ TOK_SHORT_LIT
Definition
token.hpp:44
TOK_INT_LIT
@ TOK_INT_LIT
Definition
token.hpp:45
TOK_UNSAFE
@ TOK_UNSAFE
Definition
token.hpp:39
TOK_FOR
@ TOK_FOR
Definition
token.hpp:28
TOK_OP_LPAREN
@ TOK_OP_LPAREN
Definition
token.hpp:79
TOK_OP_NOT_EQ_EQ
@ TOK_OP_NOT_EQ_EQ
Definition
token.hpp:66
TOK_OP_PLUS_EQ
@ TOK_OP_PLUS_EQ
Definition
token.hpp:53
TOK_ID
@ TOK_ID
Definition
token.hpp:42
TOK_OP_L_OR
@ TOK_OP_L_OR
Definition
token.hpp:73
TOK_OP_SEMICOLON
@ TOK_OP_SEMICOLON
Definition
token.hpp:78
TOK_BOOL
@ TOK_BOOL
Definition
token.hpp:15
TOK_DOUBLE
@ TOK_DOUBLE
Definition
token.hpp:21
TOK_DO
@ TOK_DO
Definition
token.hpp:29
TOK_OP_MULT_EQ
@ TOK_OP_MULT_EQ
Definition
token.hpp:59
TOK_OP_RPAREN
@ TOK_OP_RPAREN
Definition
token.hpp:80
TOK_MODULE
@ TOK_MODULE
Definition
token.hpp:33
TOK_OP_INC
@ TOK_OP_INC
Definition
token.hpp:54
TOK_OP_QUESTION
@ TOK_OP_QUESTION
Definition
token.hpp:85
TOK_OP_PLUS
@ TOK_OP_PLUS
Definition
token.hpp:52
TOK_WHILE
@ TOK_WHILE
Definition
token.hpp:30
TOK_NOTH
@ TOK_NOTH
Definition
token.hpp:22
TOK_OP_COLON
@ TOK_OP_COLON
Definition
token.hpp:77
TOK_LONG
@ TOK_LONG
Definition
token.hpp:19
TOK_OP_L_NOT
@ TOK_OP_L_NOT
Definition
token.hpp:71
TOK_CHAR
@ TOK_CHAR
Definition
token.hpp:16
TOK_OP_DOT
@ TOK_OP_DOT
Definition
token.hpp:76
TOK_OP_EQ
@ TOK_OP_EQ
Definition
token.hpp:64
TOK_OP_MODULO_EQ
@ TOK_OP_MODULO_EQ
Definition
token.hpp:63
TOK_FLOAT_LIT
@ TOK_FLOAT_LIT
Definition
token.hpp:47
TOK_OP_L_AND
@ TOK_OP_L_AND
Definition
token.hpp:72
TOK_DOUBLE_LIT
@ TOK_DOUBLE_LIT
Definition
token.hpp:48
TOK_OP_MODULO
@ TOK_OP_MODULO
Definition
token.hpp:62
TOK_CONST
@ TOK_CONST
Definition
token.hpp:37
TOK_SHORT
@ TOK_SHORT
Definition
token.hpp:17
TOK_FUN
@ TOK_FUN
Definition
token.hpp:25
TOK_OP_MULT
@ TOK_OP_MULT
Definition
token.hpp:58
TOK_ELSE
@ TOK_ELSE
Definition
token.hpp:27
TOK_OP_REF
@ TOK_OP_REF
Definition
token.hpp:74
TOK_LONG_LIT
@ TOK_LONG_LIT
Definition
token.hpp:46
TOK_FLOAT
@ TOK_FLOAT
Definition
token.hpp:20
TOK_INT
@ TOK_INT
Definition
token.hpp:18
TOK_OP_GT
@ TOK_OP_GT
Definition
token.hpp:67
TOK_OP_MINUS
@ TOK_OP_MINUS
Definition
token.hpp:55
TOK_PUB
@ TOK_PUB
Definition
token.hpp:34
TOK_OP_LS_EQ
@ TOK_OP_LS_EQ
Definition
token.hpp:70
TOK_BOOLEAN_LIT
@ TOK_BOOLEAN_LIT
Definition
token.hpp:49
TOK_EXTERN
@ TOK_EXTERN
Definition
token.hpp:40
TOK_RETURN
@ TOK_RETURN
Definition
token.hpp:38
TOK_CONTINUE
@ TOK_CONTINUE
Definition
token.hpp:31
include
lexer
token.hpp
Generated by
1.15.0