topazc
token.hpp
Go to the documentation of this file.
1
6
7#pragma once
8#include <cstdint>
9#include <sstream>
10
88
92struct Token {
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;
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};
std::string to_str()
Method for converting token to string.
Definition token.hpp:109
std::string value
Definition token.hpp:94
TokenType type
Definition token.hpp:93
Token(TokenType t, std::string v, uint32_t l, uint32_t c, std::string fn)
Definition token.hpp:100
uint32_t line
Definition token.hpp:96
std::string file_name
Definition token.hpp:98
uint32_t column
Definition token.hpp:97
TokenType
All tokens types.
Definition token.hpp:14
@ TOK_OP_DEC
Definition token.hpp:57
@ TOK_OP_RBRACKET
Definition token.hpp:84
@ TOK_OP_DIV_EQ
Definition token.hpp:61
@ TOK_OP_COMMA
Definition token.hpp:75
@ TOK_BREAK
Definition token.hpp:32
@ TOK_OP_DIV
Definition token.hpp:60
@ TOK_OP_NEXT
Definition token.hpp:86
@ TOK_OP_LBRACKET
Definition token.hpp:83
@ TOK_OP_EQ_EQ
Definition token.hpp:65
@ TOK_USE
Definition token.hpp:36
@ TOK_LET
Definition token.hpp:24
@ TOK_IF
Definition token.hpp:26
@ TOK_OP_LS
Definition token.hpp:69
@ TOK_OP_GT_EQ
Definition token.hpp:68
@ TOK_CHARACTER_LIT
Definition token.hpp:43
@ TOK_OP_MINUS_EQ
Definition token.hpp:56
@ TOK_OP_LBRACE
Definition token.hpp:81
@ TOK_STRING_LIT
Definition token.hpp:50
@ TOK_PRIV
Definition token.hpp:35
@ TOK_OP_RBRACE
Definition token.hpp:82
@ TOK_SHORT_LIT
Definition token.hpp:44
@ TOK_INT_LIT
Definition token.hpp:45
@ TOK_UNSAFE
Definition token.hpp:39
@ TOK_FOR
Definition token.hpp:28
@ TOK_OP_LPAREN
Definition token.hpp:79
@ TOK_OP_NOT_EQ_EQ
Definition token.hpp:66
@ TOK_OP_PLUS_EQ
Definition token.hpp:53
@ TOK_ID
Definition token.hpp:42
@ TOK_OP_L_OR
Definition token.hpp:73
@ TOK_OP_SEMICOLON
Definition token.hpp:78
@ TOK_BOOL
Definition token.hpp:15
@ TOK_DOUBLE
Definition token.hpp:21
@ TOK_DO
Definition token.hpp:29
@ TOK_OP_MULT_EQ
Definition token.hpp:59
@ TOK_OP_RPAREN
Definition token.hpp:80
@ TOK_MODULE
Definition token.hpp:33
@ TOK_OP_INC
Definition token.hpp:54
@ TOK_OP_QUESTION
Definition token.hpp:85
@ TOK_OP_PLUS
Definition token.hpp:52
@ TOK_WHILE
Definition token.hpp:30
@ TOK_NOTH
Definition token.hpp:22
@ TOK_OP_COLON
Definition token.hpp:77
@ TOK_LONG
Definition token.hpp:19
@ TOK_OP_L_NOT
Definition token.hpp:71
@ TOK_CHAR
Definition token.hpp:16
@ TOK_OP_DOT
Definition token.hpp:76
@ TOK_OP_EQ
Definition token.hpp:64
@ TOK_OP_MODULO_EQ
Definition token.hpp:63
@ TOK_FLOAT_LIT
Definition token.hpp:47
@ TOK_OP_L_AND
Definition token.hpp:72
@ TOK_DOUBLE_LIT
Definition token.hpp:48
@ TOK_OP_MODULO
Definition token.hpp:62
@ TOK_CONST
Definition token.hpp:37
@ TOK_SHORT
Definition token.hpp:17
@ TOK_FUN
Definition token.hpp:25
@ TOK_OP_MULT
Definition token.hpp:58
@ TOK_ELSE
Definition token.hpp:27
@ TOK_OP_REF
Definition token.hpp:74
@ TOK_LONG_LIT
Definition token.hpp:46
@ TOK_FLOAT
Definition token.hpp:20
@ TOK_INT
Definition token.hpp:18
@ TOK_OP_GT
Definition token.hpp:67
@ TOK_OP_MINUS
Definition token.hpp:55
@ TOK_PUB
Definition token.hpp:34
@ TOK_OP_LS_EQ
Definition token.hpp:70
@ TOK_BOOLEAN_LIT
Definition token.hpp:49
@ TOK_EXTERN
Definition token.hpp:40
@ TOK_RETURN
Definition token.hpp:38
@ TOK_CONTINUE
Definition token.hpp:31