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;
27 enum class tokenKind {
28 unknown = 0,
31 string,
32 integer,
35 decimal,
36 boolean,
37 toSign,
38 plus,
39 minus,
41 slash,
61 equal,
64 logicOr,
66 directAssignSign, // :=
73 semicolon, // ;
74 colon, // :
75 comma, // ,
76 dot, // .
77 sharp, // #
78 kUse,
79 kFunc,
83 kStruct,
84 kImpl,
85 kLet,
86 kIn,
87 kFor,
89 kWhile,
90 kIf,
91 kElif,
92 kElse,
93 kReturn,
95 kBreak,
96 kCast,
97 kNull,
98 kImport,
99 kExport,
100 kAs,
101 kFrom,
102 kTry,
103 kCatch,
104 kFinally,
105 kThrow,
106 kTypeId,
107 kDynCast,
108 kNoFFI,
109 kStatic,
113 kNew,
114 kCallable,
117 kAlias,
118 kEnum,
121 kWeak,
122 kYield,
123 kDecltype,
124 kConcept,
125 kSatisfy,
126 eof,
128
130 int64_t vInt;
131 double vDeci;
132 bool vBool;
133 uint64_t vUint;
134 int16_t vShort;
135
136 vBasicValue(int64_t v);
137
138 vBasicValue(double v);
139
140 vBasicValue(bool v);
141
142 vBasicValue(uint64_t v);
143
144 vBasicValue(int16_t v);
145
146 vBasicValue();
148
150
151 token();
152
153 token(int64_t line, int64_t col, tokenKind kind);
154
155 token(int64_t line, int64_t col, tokenKind kind, vBasicValue basicVal);
156
157 token(int64_t line, int64_t col, tokenKind kind, wstr strVal);
158 };
159
160 struct lexerState {
161 int64_t line, col;
162 std::istream::pos_type pos;
165
166 lexerState();
167
168 lexerState(int64_t line, int64_t col, std::istream::pos_type pos, wchar curCh, lexer::token curToken);
169 };
170
172
175
176 int64_t line, col;
177
178 void getCh();
179
180 explicit lexer(std::wstringstream ss);
181
182 void saveState();
183
184 void returnState();
185
186 void dropState();
187
188 token scan();
189
191
193
194 token strStart();
195
197
199
201
203
205
207
209
210 token notStart();
211
213
215
217
219
221
222 token dotStart();
223
225
227
229
231
233
235
237
238 token andStart();
239
240 token orStart();
241
242 token xorStart();
243
245 };
246
247} // rex
248
249#endif //HOSHI_LANG_LEXER_HPP
vec< lexerState > states
Definition lexer.hpp:171
token percentSignStart()
Definition lexer.cpp:420
token equalStart()
Definition lexer.cpp:430
token rightBracesStart()
Definition lexer.cpp:539
token scan()
Definition lexer.cpp:29
token semicolonStart()
Definition lexer.cpp:476
token andStart()
Definition lexer.cpp:562
token curToken
Definition lexer.hpp:173
token strStart()
Definition lexer.cpp:214
token greaterStart()
Definition lexer.cpp:463
token alphaStart()
Definition lexer.cpp:96
token xorStart()
Definition lexer.cpp:582
token leftParenthesesStart()
Definition lexer.cpp:509
std::wstringstream stream
Definition lexer.hpp:15
token asteriskStart()
Definition lexer.cpp:372
vec< Comment > comments
Definition lexer.hpp:23
token digitStart()
Definition lexer.cpp:235
token binaryNotStart()
Definition lexer.cpp:594
void getCh()
Definition lexer.cpp:12
token plusStart()
Definition lexer.cpp:359
token orStart()
Definition lexer.cpp:572
token slashStart()
Definition lexer.cpp:382
int64_t col
Definition lexer.hpp:176
token rightBracketStart()
Definition lexer.cpp:527
int64_t line
Definition lexer.hpp:176
token sharpStart()
Definition lexer.cpp:588
void saveState()
Definition lexer.cpp:545
token minusStart()
Definition lexer.cpp:343
token dotStart()
Definition lexer.cpp:498
void returnState()
Definition lexer.cpp:549
token leftBracesStart()
Definition lexer.cpp:533
token colonStart()
Definition lexer.cpp:482
wchar curCh
Definition lexer.hpp:174
token leftBracketStart()
Definition lexer.cpp:521
token notStart()
Definition lexer.cpp:440
token operatorStart()
Definition lexer.cpp:648
token commaStart()
Definition lexer.cpp:492
token lessStart()
Definition lexer.cpp:450
token rightParenthesesStart()
Definition lexer.cpp:515
void dropState()
Definition lexer.cpp:557
wstr::value_type wchar
Definition def.hpp:52
std::vector< t > vec
Definition def.hpp:56
std::wstring wstr
Definition def.hpp:51
std::istream::pos_type pos
Definition lexer.hpp:162
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