hoshi-lang dev
Yet another programming language
Loading...
Searching...
No Matches
lexer.hpp
Go to the documentation of this file.
1//
2// Created by XIaokang00010 on 2023/1/24.
3//
4
5#ifndef HOSHI_LANG_LEXER_HPP
6#define HOSHI_LANG_LEXER_HPP
7
8#include <cstdint>
9#include <istream>
10#include <share/def.hpp>
11
12namespace yoi {
13
14 class lexer {
15 std::wstringstream stream;
16 public:
17 struct Comment {
18 uint64_t line, col;
21 };
22
24
25 struct token {
26 uint64_t line, col;
127
129 int64_t vInt;
130 double vDeci;
131 bool vBool;
132 uint64_t vUint;
133 int16_t vShort;
134
135 vBasicValue(int64_t v);
136
137 vBasicValue(double v);
138
139 vBasicValue(bool v);
140
141 vBasicValue(uint64_t v);
142
143 vBasicValue(int16_t v);
144
145 vBasicValue();
147
149
150 token();
151
152 token(int64_t line, int64_t col, tokenKind kind);
153
154 token(int64_t line, int64_t col, tokenKind kind, vBasicValue basicVal);
155
156 token(int64_t line, int64_t col, tokenKind kind, wstr strVal);
157 };
158
159 struct lexerState {
160 int64_t line, col;
161 std::istream::pos_type pos;
164
165 lexerState();
166
167 lexerState(int64_t line, int64_t col, std::istream::pos_type pos, wchar curCh, lexer::token curToken);
168 };
169
171
174
175 int64_t line, col;
176
177 void getCh();
178
179 explicit lexer(std::wstringstream ss);
180
181 void saveState();
182
183 void returnState();
184
185 void dropState();
186
187 token scan();
188
190
192
193 token strStart();
194
196
198
200
202
204
206
208
209 token notStart();
210
212
214
216
218
220
221 token dotStart();
222
224
226
228
230
232
234
236
237 token andStart();
238
239 token orStart();
240
241 token xorStart();
242
244 };
245
246} // rex
247
248#endif //HOSHI_LANG_LEXER_HPP
vec< lexerState > states
Definition lexer.hpp:170
token percentSignStart()
Definition lexer.cpp:418
token equalStart()
Definition lexer.cpp:428
token rightBracesStart()
Definition lexer.cpp:537
token scan()
Definition lexer.cpp:29
token semicolonStart()
Definition lexer.cpp:474
token andStart()
Definition lexer.cpp:560
token curToken
Definition lexer.hpp:172
token strStart()
Definition lexer.cpp:212
token greaterStart()
Definition lexer.cpp:461
token alphaStart()
Definition lexer.cpp:96
token xorStart()
Definition lexer.cpp:580
token leftParenthesesStart()
Definition lexer.cpp:507
std::wstringstream stream
Definition lexer.hpp:15
token asteriskStart()
Definition lexer.cpp:370
vec< Comment > comments
Definition lexer.hpp:23
token digitStart()
Definition lexer.cpp:233
token binaryNotStart()
Definition lexer.cpp:592
void getCh()
Definition lexer.cpp:12
token plusStart()
Definition lexer.cpp:357
token orStart()
Definition lexer.cpp:570
token slashStart()
Definition lexer.cpp:380
int64_t col
Definition lexer.hpp:175
token rightBracketStart()
Definition lexer.cpp:525
int64_t line
Definition lexer.hpp:175
token sharpStart()
Definition lexer.cpp:586
void saveState()
Definition lexer.cpp:543
token minusStart()
Definition lexer.cpp:341
token dotStart()
Definition lexer.cpp:496
void returnState()
Definition lexer.cpp:547
token leftBracesStart()
Definition lexer.cpp:531
token colonStart()
Definition lexer.cpp:480
wchar curCh
Definition lexer.hpp:173
token leftBracketStart()
Definition lexer.cpp:519
token notStart()
Definition lexer.cpp:438
token operatorStart()
Definition lexer.cpp:646
token commaStart()
Definition lexer.cpp:490
token lessStart()
Definition lexer.cpp:448
token rightParenthesesStart()
Definition lexer.cpp:513
void dropState()
Definition lexer.cpp:555
wstr::value_type wchar
Definition def.hpp:49
std::vector< t > vec
Definition def.hpp:53
std::wstring wstr
Definition def.hpp:48
std::istream::pos_type pos
Definition lexer.hpp:161
uint64_t col
Definition lexer.hpp:26
enum yoi::lexer::token::tokenKind kind
uint64_t line
Definition lexer.hpp:26
union yoi::lexer::token::vBasicValue basicVal