azkal-lang 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ import { Token } from "./tokens.js";
2
+ export declare class Lexer {
3
+ private source;
4
+ private pos;
5
+ private line;
6
+ private col;
7
+ private tokens;
8
+ constructor(source: string);
9
+ tokenize(): Token[];
10
+ private current;
11
+ private peek;
12
+ private advance;
13
+ private addToken;
14
+ private skipWhitespace;
15
+ private skipLineComment;
16
+ private readString;
17
+ private readTemplateString;
18
+ private readNumber;
19
+ private readIdentifier;
20
+ private isDigit;
21
+ private isAlpha;
22
+ private isAlphaNumeric;
23
+ }
@@ -0,0 +1,349 @@
1
+ import { TokenType, KEYWORDS } from "./tokens.js";
2
+ import { LexerError } from "./errors.js";
3
+ export class Lexer {
4
+ source;
5
+ pos = 0;
6
+ line = 1;
7
+ col = 1;
8
+ tokens = [];
9
+ constructor(source) {
10
+ this.source = source;
11
+ }
12
+ tokenize() {
13
+ while (this.pos < this.source.length) {
14
+ this.skipWhitespace();
15
+ if (this.pos >= this.source.length)
16
+ break;
17
+ const ch = this.current();
18
+ // Comments
19
+ if (ch === "/" && this.peek() === "/") {
20
+ this.skipLineComment();
21
+ continue;
22
+ }
23
+ // Newlines
24
+ if (ch === "\n") {
25
+ this.addToken(TokenType.Newline, "\\n");
26
+ this.advance();
27
+ this.line++;
28
+ this.col = 1;
29
+ continue;
30
+ }
31
+ // Template strings
32
+ if (ch === "`") {
33
+ this.readTemplateString();
34
+ continue;
35
+ }
36
+ // Regular strings
37
+ if (ch === '"' || ch === "'") {
38
+ this.readString(ch);
39
+ continue;
40
+ }
41
+ // Numbers
42
+ if (this.isDigit(ch)) {
43
+ this.readNumber();
44
+ continue;
45
+ }
46
+ // Identifiers and keywords
47
+ if (this.isAlpha(ch)) {
48
+ this.readIdentifier();
49
+ continue;
50
+ }
51
+ // Three-character operators
52
+ if (ch === "." && this.peek() === "." && this.source[this.pos + 2] === ".") {
53
+ this.addToken(TokenType.Spread, "...");
54
+ this.advance();
55
+ this.advance();
56
+ this.advance();
57
+ continue;
58
+ }
59
+ // Two-character operators
60
+ if (ch === "=" && this.peek() === "=") {
61
+ this.addToken(TokenType.Eq, "==");
62
+ this.advance();
63
+ this.advance();
64
+ continue;
65
+ }
66
+ if (ch === "!" && this.peek() === "=") {
67
+ this.addToken(TokenType.NotEq, "!=");
68
+ this.advance();
69
+ this.advance();
70
+ continue;
71
+ }
72
+ if (ch === "<" && this.peek() === "=") {
73
+ this.addToken(TokenType.LtEq, "<=");
74
+ this.advance();
75
+ this.advance();
76
+ continue;
77
+ }
78
+ if (ch === ">" && this.peek() === "=") {
79
+ this.addToken(TokenType.GtEq, ">=");
80
+ this.advance();
81
+ this.advance();
82
+ continue;
83
+ }
84
+ if (ch === "|" && this.peek() === ">") {
85
+ this.addToken(TokenType.PipeOp, "|>");
86
+ this.advance();
87
+ this.advance();
88
+ continue;
89
+ }
90
+ // Single-character tokens
91
+ const singleCharTokens = {
92
+ "+": TokenType.Plus,
93
+ "-": TokenType.Minus,
94
+ "*": TokenType.Star,
95
+ "/": TokenType.Slash,
96
+ "%": TokenType.Percent,
97
+ "=": TokenType.Assign,
98
+ "<": TokenType.Lt,
99
+ ">": TokenType.Gt,
100
+ "!": TokenType.Bang,
101
+ "(": TokenType.LParen,
102
+ ")": TokenType.RParen,
103
+ "{": TokenType.LBrace,
104
+ "}": TokenType.RBrace,
105
+ "[": TokenType.LBracket,
106
+ "]": TokenType.RBracket,
107
+ ",": TokenType.Comma,
108
+ ".": TokenType.Dot,
109
+ ":": TokenType.Colon,
110
+ };
111
+ if (ch in singleCharTokens) {
112
+ this.addToken(singleCharTokens[ch], ch);
113
+ this.advance();
114
+ continue;
115
+ }
116
+ throw new LexerError(`Unexpected character: '${ch}'`, this.line, this.col);
117
+ }
118
+ this.addToken(TokenType.EOF, "");
119
+ return this.tokens;
120
+ }
121
+ current() {
122
+ return this.source[this.pos];
123
+ }
124
+ peek() {
125
+ return this.source[this.pos + 1];
126
+ }
127
+ advance() {
128
+ this.pos++;
129
+ this.col++;
130
+ }
131
+ addToken(type, value) {
132
+ this.tokens.push({ type, value, line: this.line, col: this.col });
133
+ }
134
+ skipWhitespace() {
135
+ while (this.pos < this.source.length) {
136
+ const ch = this.current();
137
+ if (ch === " " || ch === "\t" || ch === "\r") {
138
+ this.advance();
139
+ }
140
+ else {
141
+ break;
142
+ }
143
+ }
144
+ }
145
+ skipLineComment() {
146
+ while (this.pos < this.source.length && this.current() !== "\n") {
147
+ this.advance();
148
+ }
149
+ }
150
+ readString(quote) {
151
+ const startLine = this.line;
152
+ const startCol = this.col;
153
+ this.advance(); // skip opening quote
154
+ let value = "";
155
+ while (this.pos < this.source.length && this.current() !== quote) {
156
+ if (this.current() === "\n") {
157
+ throw new LexerError("Unterminated string", startLine, startCol);
158
+ }
159
+ if (this.current() === "\\") {
160
+ this.advance();
161
+ if (this.pos >= this.source.length)
162
+ break;
163
+ const esc = this.current();
164
+ switch (esc) {
165
+ case "n":
166
+ value += "\n";
167
+ break;
168
+ case "t":
169
+ value += "\t";
170
+ break;
171
+ case "\\":
172
+ value += "\\";
173
+ break;
174
+ case "'":
175
+ value += "'";
176
+ break;
177
+ case '"':
178
+ value += '"';
179
+ break;
180
+ default: value += esc;
181
+ }
182
+ }
183
+ else {
184
+ value += this.current();
185
+ }
186
+ this.advance();
187
+ }
188
+ if (this.pos >= this.source.length) {
189
+ throw new LexerError("Unterminated string", startLine, startCol);
190
+ }
191
+ this.advance(); // skip closing quote
192
+ this.tokens.push({ type: TokenType.String, value, line: startLine, col: startCol });
193
+ }
194
+ readTemplateString() {
195
+ const startLine = this.line;
196
+ const startCol = this.col;
197
+ this.advance(); // skip opening backtick
198
+ // Emit TemplateString start marker
199
+ this.tokens.push({ type: TokenType.TemplateString, value: "`", line: startLine, col: startCol });
200
+ let text = "";
201
+ while (this.pos < this.source.length && this.current() !== "`") {
202
+ if (this.current() === "{") {
203
+ // Emit accumulated text as a string part
204
+ this.tokens.push({ type: TokenType.String, value: text, line: this.line, col: this.col });
205
+ text = "";
206
+ this.tokens.push({ type: TokenType.TemplateExprStart, value: "${", line: this.line, col: this.col });
207
+ this.advance(); // skip {
208
+ // Lex the expression inside { }
209
+ let braceDepth = 1;
210
+ while (this.pos < this.source.length && braceDepth > 0) {
211
+ if (this.current() === "}") {
212
+ braceDepth--;
213
+ if (braceDepth === 0) {
214
+ this.tokens.push({ type: TokenType.TemplateExprEnd, value: "}$", line: this.line, col: this.col });
215
+ this.advance(); // skip closing }
216
+ break;
217
+ }
218
+ }
219
+ if (this.current() === "{")
220
+ braceDepth++;
221
+ // We need to lex actual tokens inside the interpolation
222
+ this.skipWhitespace();
223
+ if (this.pos >= this.source.length || this.current() === "}")
224
+ continue;
225
+ const ch = this.current();
226
+ if (ch === '"' || ch === "'") {
227
+ this.readString(ch);
228
+ continue;
229
+ }
230
+ if (this.isDigit(ch)) {
231
+ this.readNumber();
232
+ continue;
233
+ }
234
+ if (this.isAlpha(ch)) {
235
+ this.readIdentifier();
236
+ continue;
237
+ }
238
+ // Operators inside template
239
+ if (ch === "=" && this.peek() === "=") {
240
+ this.addToken(TokenType.Eq, "==");
241
+ this.advance();
242
+ this.advance();
243
+ continue;
244
+ }
245
+ if (ch === "!" && this.peek() === "=") {
246
+ this.addToken(TokenType.NotEq, "!=");
247
+ this.advance();
248
+ this.advance();
249
+ continue;
250
+ }
251
+ const singleTokens = {
252
+ "+": TokenType.Plus, "-": TokenType.Minus, "*": TokenType.Star,
253
+ "/": TokenType.Slash, "%": TokenType.Percent, "(": TokenType.LParen,
254
+ ")": TokenType.RParen, "[": TokenType.LBracket, "]": TokenType.RBracket,
255
+ ",": TokenType.Comma, ".": TokenType.Dot, "<": TokenType.Lt,
256
+ ">": TokenType.Gt, "!": TokenType.Bang,
257
+ };
258
+ if (ch in singleTokens) {
259
+ this.addToken(singleTokens[ch], ch);
260
+ this.advance();
261
+ continue;
262
+ }
263
+ throw new LexerError(`Unexpected character in template: '${ch}'`, this.line, this.col);
264
+ }
265
+ continue;
266
+ }
267
+ if (this.current() === "\\") {
268
+ this.advance();
269
+ if (this.pos >= this.source.length)
270
+ break;
271
+ switch (this.current()) {
272
+ case "n":
273
+ text += "\n";
274
+ break;
275
+ case "t":
276
+ text += "\t";
277
+ break;
278
+ case "`":
279
+ text += "`";
280
+ break;
281
+ case "\\":
282
+ text += "\\";
283
+ break;
284
+ case "{":
285
+ text += "{";
286
+ break;
287
+ default: text += this.current();
288
+ }
289
+ this.advance();
290
+ continue;
291
+ }
292
+ if (this.current() === "\n") {
293
+ text += "\n";
294
+ this.advance();
295
+ this.line++;
296
+ this.col = 1;
297
+ continue;
298
+ }
299
+ text += this.current();
300
+ this.advance();
301
+ }
302
+ if (this.pos >= this.source.length) {
303
+ throw new LexerError("Unterminated template string", startLine, startCol);
304
+ }
305
+ // Emit remaining text
306
+ this.tokens.push({ type: TokenType.String, value: text, line: this.line, col: this.col });
307
+ // End marker
308
+ this.tokens.push({ type: TokenType.TemplateString, value: "`", line: this.line, col: this.col });
309
+ this.advance(); // skip closing backtick
310
+ }
311
+ readNumber() {
312
+ const startCol = this.col;
313
+ let value = "";
314
+ let hasDot = false;
315
+ while (this.pos < this.source.length && (this.isDigit(this.current()) || this.current() === ".")) {
316
+ if (this.current() === ".") {
317
+ if (hasDot)
318
+ break;
319
+ // Don't treat `1..` as a float
320
+ if (this.peek() && !this.isDigit(this.peek()))
321
+ break;
322
+ hasDot = true;
323
+ }
324
+ value += this.current();
325
+ this.advance();
326
+ }
327
+ this.tokens.push({ type: TokenType.Number, value, line: this.line, col: startCol });
328
+ }
329
+ readIdentifier() {
330
+ const startCol = this.col;
331
+ let value = "";
332
+ while (this.pos < this.source.length && this.isAlphaNumeric(this.current())) {
333
+ value += this.current();
334
+ this.advance();
335
+ }
336
+ const type = KEYWORDS[value] ?? TokenType.Identifier;
337
+ this.tokens.push({ type, value, line: this.line, col: startCol });
338
+ }
339
+ isDigit(ch) {
340
+ return ch >= "0" && ch <= "9";
341
+ }
342
+ isAlpha(ch) {
343
+ return (ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z") || ch === "_";
344
+ }
345
+ isAlphaNumeric(ch) {
346
+ return this.isAlpha(ch) || this.isDigit(ch);
347
+ }
348
+ }
349
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { Token } from "./tokens.js";
2
+ import * as AST from "./ast.js";
3
+ export declare class Parser {
4
+ private tokens;
5
+ private pos;
6
+ constructor(tokens: Token[]);
7
+ parse(): AST.Program;
8
+ private declaration;
9
+ private letDeclaration;
10
+ private fnDeclaration;
11
+ private statement;
12
+ private ifStatement;
13
+ private whileStatement;
14
+ private forStatement;
15
+ private returnStatement;
16
+ private breakStatement;
17
+ private continueStatement;
18
+ private block;
19
+ private expressionStatement;
20
+ private expression;
21
+ private assignment;
22
+ private pipe;
23
+ private logicalOr;
24
+ private logicalAnd;
25
+ private equality;
26
+ private comparison;
27
+ private addition;
28
+ private multiplication;
29
+ private unary;
30
+ private callExpr;
31
+ private primary;
32
+ private parseTemplateLiteral;
33
+ private isObjectLiteral;
34
+ private parseObjectLiteral;
35
+ private parseParams;
36
+ private parseArgs;
37
+ private skipNewlines;
38
+ private expectEndOfStatement;
39
+ private current;
40
+ private peekNext;
41
+ private check;
42
+ private match;
43
+ private advance;
44
+ private consume;
45
+ private isAtEnd;
46
+ private error;
47
+ }