treste 2.0.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/INSTALL.md +264 -0
  3. package/LICENSE +22 -0
  4. package/README.md +388 -0
  5. package/README_PT.md +261 -0
  6. package/dist/ast.d.ts +140 -0
  7. package/dist/ast.d.ts.map +1 -0
  8. package/dist/ast.js +3 -0
  9. package/dist/ast.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +201 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/compiler/exe.d.ts +13 -0
  15. package/dist/compiler/exe.d.ts.map +1 -0
  16. package/dist/compiler/exe.js +129 -0
  17. package/dist/compiler/exe.js.map +1 -0
  18. package/dist/compiler/web.d.ts +43 -0
  19. package/dist/compiler/web.d.ts.map +1 -0
  20. package/dist/compiler/web.js +413 -0
  21. package/dist/compiler/web.js.map +1 -0
  22. package/dist/compiler.d.ts +3 -0
  23. package/dist/compiler.d.ts.map +1 -0
  24. package/dist/compiler.js +195 -0
  25. package/dist/compiler.js.map +1 -0
  26. package/dist/errors.d.ts +21 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +56 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +26 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/interpreter.d.ts +32 -0
  35. package/dist/interpreter.d.ts.map +1 -0
  36. package/dist/interpreter.js +425 -0
  37. package/dist/interpreter.js.map +1 -0
  38. package/dist/lexer.d.ts +113 -0
  39. package/dist/lexer.d.ts.map +1 -0
  40. package/dist/lexer.js +446 -0
  41. package/dist/lexer.js.map +1 -0
  42. package/dist/module.d.ts +19 -0
  43. package/dist/module.d.ts.map +1 -0
  44. package/dist/module.js +112 -0
  45. package/dist/module.js.map +1 -0
  46. package/dist/parser.d.ts +45 -0
  47. package/dist/parser.d.ts.map +1 -0
  48. package/dist/parser.js +599 -0
  49. package/dist/parser.js.map +1 -0
  50. package/dist/std/array.trest +85 -0
  51. package/dist/std/index.trest +13 -0
  52. package/dist/std/io.trest +17 -0
  53. package/dist/std/math.trest +66 -0
  54. package/dist/std/string.trest +61 -0
  55. package/dist/types.d.ts +29 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +86 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +101 -0
  60. package/scripts/postbuild.js +90 -0
  61. package/scripts/postinstall.js +89 -0
  62. package/scripts/preinstall.js +92 -0
  63. package/scripts/version.js +52 -0
  64. package/src/std/array.trest +85 -0
  65. package/src/std/index.trest +13 -0
  66. package/src/std/io.trest +17 -0
  67. package/src/std/math.trest +66 -0
  68. package/src/std/string.trest +61 -0
package/dist/lexer.js ADDED
@@ -0,0 +1,446 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Lexer = exports.TokenType = void 0;
4
+ var TokenType;
5
+ (function (TokenType) {
6
+ // Literais
7
+ TokenType["NUMBER"] = "NUMBER";
8
+ TokenType["STRING"] = "STRING";
9
+ TokenType["BOOLEAN"] = "BOOLEAN";
10
+ // Identificadores
11
+ TokenType["IDENTIFIER"] = "IDENTIFIER";
12
+ // Operadores
13
+ TokenType["PLUS"] = "PLUS";
14
+ TokenType["MINUS"] = "MINUS";
15
+ TokenType["MULTIPLY"] = "MULTIPLY";
16
+ TokenType["DIVIDE"] = "DIVIDE";
17
+ TokenType["MODULO"] = "MODULO";
18
+ TokenType["EQUAL"] = "EQUAL";
19
+ TokenType["NOT_EQUAL"] = "NOT_EQUAL";
20
+ TokenType["LESS"] = "LESS";
21
+ TokenType["LESS_EQUAL"] = "LESS_EQUAL";
22
+ TokenType["GREATER"] = "GREATER";
23
+ TokenType["GREATER_EQUAL"] = "GREATER_EQUAL";
24
+ TokenType["AND"] = "AND";
25
+ TokenType["OR"] = "OR";
26
+ TokenType["NOT"] = "NOT";
27
+ TokenType["ASSIGN"] = "ASSIGN";
28
+ // Delimitadores
29
+ TokenType["LPAREN"] = "LPAREN";
30
+ TokenType["RPAREN"] = "RPAREN";
31
+ TokenType["LBRACE"] = "LBRACE";
32
+ TokenType["RBRACE"] = "RBRACE";
33
+ TokenType["LBRACKET"] = "LBRACKET";
34
+ TokenType["RBRACKET"] = "RBRACKET";
35
+ TokenType["COMMA"] = "COMMA";
36
+ TokenType["SEMICOLON"] = "SEMICOLON";
37
+ TokenType["DOT"] = "DOT";
38
+ // Palavras-chave
39
+ TokenType["IF"] = "IF";
40
+ TokenType["ELSE"] = "ELSE";
41
+ TokenType["WHILE"] = "WHILE";
42
+ TokenType["FOR"] = "FOR";
43
+ TokenType["FUNC"] = "FUNC";
44
+ TokenType["RETURN"] = "RETURN";
45
+ TokenType["TRUE"] = "TRUE";
46
+ TokenType["FALSE"] = "FALSE";
47
+ TokenType["VAR"] = "VAR";
48
+ TokenType["LET"] = "LET";
49
+ TokenType["CONST"] = "CONST";
50
+ TokenType["PRINT"] = "PRINT";
51
+ TokenType["IMPORT"] = "IMPORT";
52
+ TokenType["EXPORT"] = "EXPORT";
53
+ TokenType["FROM"] = "FROM";
54
+ TokenType["AS"] = "AS";
55
+ TokenType["BREAK"] = "BREAK";
56
+ TokenType["CONTINUE"] = "CONTINUE";
57
+ TokenType["CLASS"] = "CLASS";
58
+ TokenType["NEW"] = "NEW";
59
+ TokenType["THIS"] = "THIS";
60
+ TokenType["TRY"] = "TRY";
61
+ TokenType["CATCH"] = "CATCH";
62
+ TokenType["THROW"] = "THROW";
63
+ TokenType["FINALLY"] = "FINALLY";
64
+ TokenType["SWITCH"] = "SWITCH";
65
+ TokenType["CASE"] = "CASE";
66
+ TokenType["DEFAULT"] = "DEFAULT";
67
+ TokenType["DO"] = "DO";
68
+ TokenType["INTERFACE"] = "INTERFACE";
69
+ TokenType["EXTENDS"] = "EXTENDS";
70
+ TokenType["IMPLEMENTS"] = "IMPLEMENTS";
71
+ TokenType["STATIC"] = "STATIC";
72
+ TokenType["PUBLIC"] = "PUBLIC";
73
+ TokenType["PRIVATE"] = "PRIVATE";
74
+ TokenType["PROTECTED"] = "PROTECTED";
75
+ TokenType["ASYNC"] = "ASYNC";
76
+ TokenType["AWAIT"] = "AWAIT";
77
+ TokenType["ALL"] = "ALL";
78
+ TokenType["MODULE"] = "MODULE";
79
+ TokenType["IN"] = "IN";
80
+ TokenType["OF"] = "OF";
81
+ TokenType["NULL"] = "NULL";
82
+ TokenType["UNDEFINED"] = "UNDEFINED";
83
+ // Template strings
84
+ TokenType["TEMPLATE_START"] = "TEMPLATE_START";
85
+ TokenType["TEMPLATE_END"] = "TEMPLATE_END";
86
+ TokenType["TEMPLATE_EXPR"] = "TEMPLATE_EXPR";
87
+ // Spread/Rest
88
+ TokenType["SPREAD"] = "SPREAD";
89
+ TokenType["REST"] = "REST";
90
+ // Operadores avançados
91
+ TokenType["POW"] = "POW";
92
+ TokenType["NULLISH_COALESCING"] = "NULLISH_COALESCING";
93
+ TokenType["OPTIONAL_CHAIN"] = "OPTIONAL_CHAIN";
94
+ TokenType["INCREMENT"] = "INCREMENT";
95
+ TokenType["DECREMENT"] = "DECREMENT";
96
+ TokenType["PLUS_ASSIGN"] = "PLUS_ASSIGN";
97
+ TokenType["MINUS_ASSIGN"] = "MINUS_ASSIGN";
98
+ TokenType["MULTIPLY_ASSIGN"] = "MULTIPLY_ASSIGN";
99
+ TokenType["DIVIDE_ASSIGN"] = "DIVIDE_ASSIGN";
100
+ // Especiais
101
+ TokenType["EOF"] = "EOF";
102
+ TokenType["NEWLINE"] = "NEWLINE";
103
+ })(TokenType || (exports.TokenType = TokenType = {}));
104
+ class Lexer {
105
+ constructor(input) {
106
+ this.position = 0;
107
+ this.line = 1;
108
+ this.column = 1;
109
+ this.currentChar = null;
110
+ this.keywords = {
111
+ // Ключевые слова только на кириллице
112
+ 'если': TokenType.IF,
113
+ 'иначе': TokenType.ELSE,
114
+ 'иначеесли': TokenType.ELSE,
115
+ 'пока': TokenType.WHILE,
116
+ 'для': TokenType.FOR,
117
+ 'функция': TokenType.FUNC,
118
+ 'вернуть': TokenType.RETURN,
119
+ 'истина': TokenType.TRUE,
120
+ 'ложь': TokenType.FALSE,
121
+ 'перем': TokenType.VAR,
122
+ 'пусть': TokenType.LET,
123
+ 'конст': TokenType.CONST,
124
+ 'печать': TokenType.PRINT,
125
+ 'импорт': TokenType.IMPORT,
126
+ 'экспорт': TokenType.EXPORT,
127
+ 'измодуля': TokenType.FROM,
128
+ 'как': TokenType.AS,
129
+ 'прервать': TokenType.BREAK,
130
+ 'продолжить': TokenType.CONTINUE,
131
+ 'класс': TokenType.CLASS,
132
+ 'новый': TokenType.NEW,
133
+ 'это': TokenType.THIS,
134
+ 'попытаться': TokenType.TRY,
135
+ 'перехватить': TokenType.CATCH,
136
+ 'бросить': TokenType.THROW,
137
+ 'наконец': TokenType.FINALLY,
138
+ 'переключатель': TokenType.SWITCH,
139
+ 'случай': TokenType.CASE,
140
+ 'поумолчанию': TokenType.DEFAULT,
141
+ 'делать': TokenType.DO,
142
+ 'интерфейс': TokenType.INTERFACE,
143
+ 'расширяет': TokenType.EXTENDS,
144
+ 'реализует': TokenType.IMPLEMENTS,
145
+ 'статический': TokenType.STATIC,
146
+ 'публичный': TokenType.PUBLIC,
147
+ 'приватный': TokenType.PRIVATE,
148
+ 'защищенный': TokenType.PROTECTED,
149
+ 'асинхронный': TokenType.ASYNC,
150
+ 'ожидать': TokenType.AWAIT,
151
+ 'все': TokenType.ALL,
152
+ 'модуль': TokenType.MODULE,
153
+ 'в': TokenType.IN,
154
+ 'из': TokenType.OF,
155
+ 'нуль': TokenType.NULL,
156
+ 'неопределен': TokenType.UNDEFINED,
157
+ };
158
+ this.input = input;
159
+ this.currentChar = this.input[0] || null;
160
+ }
161
+ advance() {
162
+ if (this.currentChar === '\n') {
163
+ this.line++;
164
+ this.column = 1;
165
+ }
166
+ else {
167
+ this.column++;
168
+ }
169
+ this.position++;
170
+ this.currentChar = this.position < this.input.length
171
+ ? this.input[this.position]
172
+ : null;
173
+ }
174
+ skipWhitespace() {
175
+ while (this.currentChar !== null && /\s/.test(this.currentChar)) {
176
+ this.advance();
177
+ }
178
+ }
179
+ skipComment() {
180
+ if (this.currentChar === '#') {
181
+ while (this.currentChar !== null) {
182
+ // @ts-ignore - Type narrowing issue
183
+ if (this.currentChar === '\n' || this.currentChar === '\r') {
184
+ break;
185
+ }
186
+ this.advance();
187
+ }
188
+ }
189
+ }
190
+ readNumber() {
191
+ let num = '';
192
+ const startLine = this.line;
193
+ const startColumn = this.column;
194
+ while (this.currentChar !== null && /[\d.]/.test(this.currentChar)) {
195
+ num += this.currentChar;
196
+ this.advance();
197
+ }
198
+ return {
199
+ type: TokenType.NUMBER,
200
+ value: num.includes('.') ? parseFloat(num) : parseInt(num, 10),
201
+ line: startLine,
202
+ column: startColumn,
203
+ };
204
+ }
205
+ readString() {
206
+ const quote = this.currentChar;
207
+ this.advance();
208
+ let str = '';
209
+ const startLine = this.line;
210
+ const startColumn = this.column;
211
+ while (this.currentChar !== null && this.currentChar !== quote) {
212
+ if (this.currentChar === '\\') {
213
+ this.advance();
214
+ if (this.currentChar !== null) {
215
+ const escaped = this.currentChar;
216
+ switch (escaped) {
217
+ case 'n':
218
+ str += '\n';
219
+ break;
220
+ case 't':
221
+ str += '\t';
222
+ break;
223
+ case 'r':
224
+ str += '\r';
225
+ break;
226
+ case '\\':
227
+ str += '\\';
228
+ break;
229
+ case '"':
230
+ str += '"';
231
+ break;
232
+ case "'":
233
+ str += "'";
234
+ break;
235
+ default: str += escaped;
236
+ }
237
+ this.advance();
238
+ }
239
+ }
240
+ else {
241
+ str += this.currentChar;
242
+ this.advance();
243
+ }
244
+ }
245
+ if (this.currentChar === quote) {
246
+ this.advance();
247
+ }
248
+ return {
249
+ type: TokenType.STRING,
250
+ value: str,
251
+ line: startLine,
252
+ column: startColumn,
253
+ };
254
+ }
255
+ readIdentifier() {
256
+ let id = '';
257
+ const startLine = this.line;
258
+ const startColumn = this.column;
259
+ while (this.currentChar !== null &&
260
+ /[a-zA-Z_áàâãéêíóôõúçÁÀÂÃÉÊÍÓÔÕÚÇа-яА-ЯёЁ0-9]/.test(this.currentChar)) {
261
+ id += this.currentChar;
262
+ this.advance();
263
+ }
264
+ // Para palavras-chave, verificar exatamente (case-sensitive para cirílico)
265
+ const keyword = this.keywords[id] || this.keywords[id.toLowerCase()];
266
+ if (keyword) {
267
+ return {
268
+ type: keyword,
269
+ value: id,
270
+ line: startLine,
271
+ column: startColumn,
272
+ };
273
+ }
274
+ return {
275
+ type: TokenType.IDENTIFIER,
276
+ value: id,
277
+ line: startLine,
278
+ column: startColumn,
279
+ };
280
+ }
281
+ tokenize() {
282
+ const tokens = [];
283
+ while (this.currentChar !== null) {
284
+ this.skipWhitespace();
285
+ this.skipComment();
286
+ if (this.currentChar === null)
287
+ break;
288
+ const startLine = this.line;
289
+ const startColumn = this.column;
290
+ // Números
291
+ if (/\d/.test(this.currentChar)) {
292
+ tokens.push(this.readNumber());
293
+ continue;
294
+ }
295
+ // Strings
296
+ if (this.currentChar === '"' || this.currentChar === "'") {
297
+ tokens.push(this.readString());
298
+ continue;
299
+ }
300
+ // Identificadores e palavras-chave (suporta latino, cirílico e português)
301
+ if (/[a-zA-Z_áàâãéêíóôõúçÁÀÂÃÉÊÍÓÔÕÚÇа-яА-ЯёЁ]/.test(this.currentChar)) {
302
+ tokens.push(this.readIdentifier());
303
+ continue;
304
+ }
305
+ // Operadores e delimitadores
306
+ switch (this.currentChar) {
307
+ case '+':
308
+ tokens.push({ type: TokenType.PLUS, value: '+', line: startLine, column: startColumn });
309
+ this.advance();
310
+ break;
311
+ case '-':
312
+ tokens.push({ type: TokenType.MINUS, value: '-', line: startLine, column: startColumn });
313
+ this.advance();
314
+ break;
315
+ case '*':
316
+ tokens.push({ type: TokenType.MULTIPLY, value: '*', line: startLine, column: startColumn });
317
+ this.advance();
318
+ break;
319
+ case '/':
320
+ tokens.push({ type: TokenType.DIVIDE, value: '/', line: startLine, column: startColumn });
321
+ this.advance();
322
+ break;
323
+ case '%':
324
+ tokens.push({ type: TokenType.MODULO, value: '%', line: startLine, column: startColumn });
325
+ this.advance();
326
+ break;
327
+ case '=':
328
+ this.advance();
329
+ if (this.currentChar === '=') {
330
+ tokens.push({ type: TokenType.EQUAL, value: '==', line: startLine, column: startColumn });
331
+ this.advance();
332
+ }
333
+ else {
334
+ tokens.push({ type: TokenType.ASSIGN, value: '=', line: startLine, column: startColumn });
335
+ }
336
+ break;
337
+ case '!':
338
+ this.advance();
339
+ // @ts-ignore - Type narrowing issue
340
+ if (this.currentChar === '=') {
341
+ tokens.push({ type: TokenType.NOT_EQUAL, value: '!=', line: startLine, column: startColumn });
342
+ this.advance();
343
+ }
344
+ else {
345
+ tokens.push({ type: TokenType.NOT, value: '!', line: startLine, column: startColumn });
346
+ }
347
+ break;
348
+ case '<':
349
+ this.advance();
350
+ // @ts-ignore - Type narrowing issue
351
+ if (this.currentChar === '=') {
352
+ tokens.push({ type: TokenType.LESS_EQUAL, value: '<=', line: startLine, column: startColumn });
353
+ this.advance();
354
+ }
355
+ else {
356
+ tokens.push({ type: TokenType.LESS, value: '<', line: startLine, column: startColumn });
357
+ }
358
+ break;
359
+ case '>':
360
+ this.advance();
361
+ // @ts-ignore - Type narrowing issue
362
+ if (this.currentChar === '=') {
363
+ tokens.push({ type: TokenType.GREATER_EQUAL, value: '>=', line: startLine, column: startColumn });
364
+ this.advance();
365
+ }
366
+ else {
367
+ tokens.push({ type: TokenType.GREATER, value: '>', line: startLine, column: startColumn });
368
+ }
369
+ break;
370
+ case '&':
371
+ this.advance();
372
+ if (this.currentChar === '&') {
373
+ tokens.push({ type: TokenType.AND, value: '&&', line: startLine, column: startColumn });
374
+ this.advance();
375
+ }
376
+ break;
377
+ case '|':
378
+ this.advance();
379
+ if (this.currentChar === '|') {
380
+ tokens.push({ type: TokenType.OR, value: '||', line: startLine, column: startColumn });
381
+ this.advance();
382
+ }
383
+ break;
384
+ case '(':
385
+ tokens.push({ type: TokenType.LPAREN, value: '(', line: startLine, column: startColumn });
386
+ this.advance();
387
+ break;
388
+ case ')':
389
+ tokens.push({ type: TokenType.RPAREN, value: ')', line: startLine, column: startColumn });
390
+ this.advance();
391
+ break;
392
+ case '{':
393
+ tokens.push({ type: TokenType.LBRACE, value: '{', line: startLine, column: startColumn });
394
+ this.advance();
395
+ break;
396
+ case '}':
397
+ tokens.push({ type: TokenType.RBRACE, value: '}', line: startLine, column: startColumn });
398
+ this.advance();
399
+ break;
400
+ case '[':
401
+ tokens.push({ type: TokenType.LBRACKET, value: '[', line: startLine, column: startColumn });
402
+ this.advance();
403
+ break;
404
+ case ']':
405
+ tokens.push({ type: TokenType.RBRACKET, value: ']', line: startLine, column: startColumn });
406
+ this.advance();
407
+ break;
408
+ case ',':
409
+ tokens.push({ type: TokenType.COMMA, value: ',', line: startLine, column: startColumn });
410
+ this.advance();
411
+ break;
412
+ case ';':
413
+ tokens.push({ type: TokenType.SEMICOLON, value: ';', line: startLine, column: startColumn });
414
+ this.advance();
415
+ break;
416
+ case '.':
417
+ tokens.push({ type: TokenType.DOT, value: '.', line: startLine, column: startColumn });
418
+ this.advance();
419
+ break;
420
+ case '\n':
421
+ tokens.push({ type: TokenType.NEWLINE, value: '\n', line: startLine, column: startColumn });
422
+ this.advance();
423
+ break;
424
+ case '\r':
425
+ case '\t':
426
+ case '\f':
427
+ case '\v':
428
+ // Игнорировать общие управляющие символы
429
+ this.advance();
430
+ break;
431
+ default:
432
+ // Игнорировать невидимые символы (BOM, zero-width spaces, etc.)
433
+ if (this.currentChar && /[\u200B-\u200D\uFEFF]/.test(this.currentChar)) {
434
+ this.advance();
435
+ break;
436
+ }
437
+ const charCode = this.currentChar ? this.currentChar.charCodeAt(0) : 0;
438
+ throw new Error(`Неожиданный символ: ${this.currentChar} (код: ${charCode}) на строке ${startLine}, колонке ${startColumn}`);
439
+ }
440
+ }
441
+ tokens.push({ type: TokenType.EOF, value: '', line: this.line, column: this.column });
442
+ return tokens;
443
+ }
444
+ }
445
+ exports.Lexer = Lexer;
446
+ //# 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,19 @@
1
+ import { Program } from './ast';
2
+ export interface Module {
3
+ path: string;
4
+ name: string;
5
+ ast: Program;
6
+ exports: Map<string, any>;
7
+ dependencies: string[];
8
+ }
9
+ export declare class ModuleSystem {
10
+ private modules;
11
+ private basePath;
12
+ constructor(basePath?: string);
13
+ resolveModule(importPath: string, fromPath?: string): string;
14
+ private normalizePath;
15
+ loadModule(modulePath: string, fromPath?: string): Module;
16
+ getModule(modulePath: string): Module | undefined;
17
+ getAllModules(): Module[];
18
+ }
19
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,GAAE,MAAsB;IAIrC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAyBnE,OAAO,CAAC,aAAa;IAiBd,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAiCzD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIjD,aAAa,IAAI,MAAM,EAAE;CAGjC"}
package/dist/module.js ADDED
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ModuleSystem = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const lexer_1 = require("./lexer");
40
+ const parser_1 = require("./parser");
41
+ const errors_1 = require("./errors");
42
+ class ModuleSystem {
43
+ constructor(basePath = process.cwd()) {
44
+ this.modules = new Map();
45
+ this.basePath = basePath;
46
+ }
47
+ resolveModule(importPath, fromPath) {
48
+ // Resolve caminho relativo
49
+ if (importPath.startsWith('./') || importPath.startsWith('../')) {
50
+ if (!fromPath) {
51
+ throw new errors_1.ImportError(`Não é possível resolver caminho relativo sem arquivo de origem`, 0, 0);
52
+ }
53
+ const dir = path.dirname(fromPath);
54
+ const resolved = path.resolve(dir, importPath);
55
+ return this.normalizePath(resolved);
56
+ }
57
+ // Resolve módulo absoluto ou da std
58
+ if (importPath.startsWith('std/')) {
59
+ const stdPath = path.join(__dirname, 'std', importPath.slice(4));
60
+ return this.normalizePath(stdPath);
61
+ }
62
+ // Resolve do node_modules ou caminho absoluto
63
+ return this.normalizePath(path.resolve(this.basePath, importPath));
64
+ }
65
+ normalizePath(filePath) {
66
+ // Tenta com extensão .trest
67
+ if (fs.existsSync(filePath + '.trest')) {
68
+ return filePath + '.trest';
69
+ }
70
+ // Tenta sem extensão
71
+ if (fs.existsSync(filePath)) {
72
+ return filePath;
73
+ }
74
+ // Tenta como diretório com index.trest
75
+ const indexPath = path.join(filePath, 'index.trest');
76
+ if (fs.existsSync(indexPath)) {
77
+ return indexPath;
78
+ }
79
+ return filePath;
80
+ }
81
+ loadModule(modulePath, fromPath) {
82
+ const resolved = this.resolveModule(modulePath, fromPath);
83
+ if (this.modules.has(resolved)) {
84
+ return this.modules.get(resolved);
85
+ }
86
+ if (!fs.existsSync(resolved)) {
87
+ throw new errors_1.ImportError(`Módulo não encontrado: ${modulePath} (resolvido para: ${resolved})`, 0, 0);
88
+ }
89
+ const source = fs.readFileSync(resolved, 'utf-8');
90
+ const lexer = new lexer_1.Lexer(source);
91
+ const tokens = lexer.tokenize();
92
+ const parser = new parser_1.Parser(tokens);
93
+ const ast = parser.parse();
94
+ const module = {
95
+ path: resolved,
96
+ name: path.basename(resolved, '.trest'),
97
+ ast,
98
+ exports: new Map(),
99
+ dependencies: [],
100
+ };
101
+ this.modules.set(resolved, module);
102
+ return module;
103
+ }
104
+ getModule(modulePath) {
105
+ return this.modules.get(modulePath);
106
+ }
107
+ getAllModules() {
108
+ return Array.from(this.modules.values());
109
+ }
110
+ }
111
+ exports.ModuleSystem = ModuleSystem;
112
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { Token } from './lexer';
2
+ import { Program } from './ast';
3
+ export declare class Parser {
4
+ private tokens;
5
+ private position;
6
+ constructor(tokens: Token[]);
7
+ private currentToken;
8
+ private peekToken;
9
+ private advance;
10
+ private expect;
11
+ private skipNewlines;
12
+ parse(): Program;
13
+ private parseStatement;
14
+ private parseVariableDeclaration;
15
+ private parseFunctionDeclaration;
16
+ private parseBlockStatement;
17
+ private parseIfStatement;
18
+ private parseWhileStatement;
19
+ private parseForStatement;
20
+ private parseReturnStatement;
21
+ private parsePrintStatement;
22
+ private parseExpressionStatement;
23
+ private parseExpression;
24
+ private parseAssignment;
25
+ private parseLogicalOr;
26
+ private parseLogicalAnd;
27
+ private parseEquality;
28
+ private parseComparison;
29
+ private parseAddition;
30
+ private parseMultiplication;
31
+ private parseUnary;
32
+ private parsePostfix;
33
+ private parseCallExpression;
34
+ private parseIndexExpression;
35
+ private parsePrimary;
36
+ private parseArrayLiteral;
37
+ private parseImportStatement;
38
+ private parseExportStatement;
39
+ private parseBreakStatement;
40
+ private parseContinueStatement;
41
+ private parseTryStatement;
42
+ private parseThrowStatement;
43
+ private parseObjectLiteral;
44
+ }
45
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,SAAS,CAAC;AAC3C,OAAO,EAEL,OAAO,EAmBR,MAAM,OAAO,CAAC;AAEf,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,QAAQ,CAAa;gBAEjB,MAAM,EAAE,KAAK,EAAE;IAI3B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,YAAY;IAUb,KAAK,IAAI,OAAO;IAevB,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,YAAY;IA2CpB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,oBAAoB;IA2C5B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,kBAAkB;CA0B3B"}