@yakuzaa/jade-compiler 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.
Files changed (65) hide show
  1. package/dist/ast/nodes.d.ts +219 -0
  2. package/dist/ast/nodes.d.ts.map +1 -0
  3. package/dist/ast/nodes.js +2 -0
  4. package/dist/ast/nodes.js.map +1 -0
  5. package/dist/cli.d.ts +14 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +108 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/codegen/ir_generator.d.ts +42 -0
  10. package/dist/codegen/ir_generator.d.ts.map +1 -0
  11. package/dist/codegen/ir_generator.js +691 -0
  12. package/dist/codegen/ir_generator.js.map +1 -0
  13. package/dist/codegen/ir_nodes.d.ts +143 -0
  14. package/dist/codegen/ir_nodes.d.ts.map +1 -0
  15. package/dist/codegen/ir_nodes.js +3 -0
  16. package/dist/codegen/ir_nodes.js.map +1 -0
  17. package/dist/codegen/ir_printer.d.ts +10 -0
  18. package/dist/codegen/ir_printer.d.ts.map +1 -0
  19. package/dist/codegen/ir_printer.js +131 -0
  20. package/dist/codegen/ir_printer.js.map +1 -0
  21. package/dist/codegen/wasm_generator.d.ts +12 -0
  22. package/dist/codegen/wasm_generator.d.ts.map +1 -0
  23. package/dist/codegen/wasm_generator.js +48 -0
  24. package/dist/codegen/wasm_generator.js.map +1 -0
  25. package/dist/codegen/wat_generator.d.ts +29 -0
  26. package/dist/codegen/wat_generator.d.ts.map +1 -0
  27. package/dist/codegen/wat_generator.js +345 -0
  28. package/dist/codegen/wat_generator.js.map +1 -0
  29. package/dist/index.d.ts +61 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +79 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/lexer/lexer.d.ts +31 -0
  34. package/dist/lexer/lexer.d.ts.map +1 -0
  35. package/dist/lexer/lexer.js +475 -0
  36. package/dist/lexer/lexer.js.map +1 -0
  37. package/dist/lexer/token.d.ts +8 -0
  38. package/dist/lexer/token.d.ts.map +1 -0
  39. package/dist/lexer/token.js +2 -0
  40. package/dist/lexer/token.js.map +1 -0
  41. package/dist/lexer/token_type.d.ts +80 -0
  42. package/dist/lexer/token_type.d.ts.map +1 -0
  43. package/dist/lexer/token_type.js +98 -0
  44. package/dist/lexer/token_type.js.map +1 -0
  45. package/dist/parser/parse_result.d.ts +12 -0
  46. package/dist/parser/parse_result.d.ts.map +1 -0
  47. package/dist/parser/parse_result.js +2 -0
  48. package/dist/parser/parse_result.js.map +1 -0
  49. package/dist/parser/parser.d.ts +57 -0
  50. package/dist/parser/parser.d.ts.map +1 -0
  51. package/dist/parser/parser.js +1094 -0
  52. package/dist/parser/parser.js.map +1 -0
  53. package/dist/semantic/semantic_analyzer.d.ts +10 -0
  54. package/dist/semantic/semantic_analyzer.d.ts.map +1 -0
  55. package/dist/semantic/semantic_analyzer.js +16 -0
  56. package/dist/semantic/semantic_analyzer.js.map +1 -0
  57. package/dist/semantic/symbol_table.d.ts +33 -0
  58. package/dist/semantic/symbol_table.d.ts.map +1 -0
  59. package/dist/semantic/symbol_table.js +105 -0
  60. package/dist/semantic/symbol_table.js.map +1 -0
  61. package/dist/semantic/type_checker.d.ts +66 -0
  62. package/dist/semantic/type_checker.d.ts.map +1 -0
  63. package/dist/semantic/type_checker.js +963 -0
  64. package/dist/semantic/type_checker.js.map +1 -0
  65. package/package.json +84 -0
@@ -0,0 +1,475 @@
1
+ import { TokenType } from './token_type.js';
2
+ const KEYWORDS = {
3
+ // Estrutura
4
+ 'modulo': TokenType.MODULO,
5
+ 'classe': TokenType.CLASSE,
6
+ 'entidade': TokenType.ENTIDADE,
7
+ 'servico': TokenType.SERVICO,
8
+ 'funcao': TokenType.FUNCAO,
9
+ 'evento': TokenType.EVENTO,
10
+ 'regra': TokenType.REGRA,
11
+ 'interface': TokenType.INTERFACE,
12
+ 'enum': TokenType.ENUM,
13
+ 'tela': TokenType.TELA,
14
+ 'fim': TokenType.FIM,
15
+ // Controle
16
+ 'se': TokenType.SE,
17
+ 'entao': TokenType.ENTAO,
18
+ 'senao': TokenType.SENAO,
19
+ 'enquanto': TokenType.ENQUANTO,
20
+ 'para': TokenType.PARA,
21
+ 'em': TokenType.EM,
22
+ 'retornar': TokenType.RETORNAR,
23
+ 'erro': TokenType.ERRO,
24
+ // Módulos
25
+ 'importar': TokenType.IMPORTAR,
26
+ 'como': TokenType.COMO,
27
+ 'extends': TokenType.EXTENDS,
28
+ 'implements': TokenType.IMPLEMENTS,
29
+ // Eventos
30
+ 'emitir': TokenType.EMITIR,
31
+ 'escutar': TokenType.ESCUTAR,
32
+ 'quando': TokenType.QUANDO,
33
+ // Variável
34
+ 'variavel': TokenType.VARIAVEL,
35
+ // Tipos
36
+ 'texto': TokenType.TIPO_TEXTO,
37
+ 'numero': TokenType.TIPO_NUMERO,
38
+ 'decimal': TokenType.TIPO_DECIMAL,
39
+ 'booleano': TokenType.TIPO_BOOLEANO,
40
+ 'data': TokenType.TIPO_DATA,
41
+ 'hora': TokenType.TIPO_HORA,
42
+ 'id': TokenType.TIPO_ID,
43
+ 'lista': TokenType.TIPO_LISTA,
44
+ 'mapa': TokenType.TIPO_MAPA,
45
+ 'objeto': TokenType.TIPO_OBJETO,
46
+ // Booleanos
47
+ 'verdadeiro': TokenType.VERDADEIRO,
48
+ 'falso': TokenType.FALSO,
49
+ // Lógicos
50
+ 'e': TokenType.E,
51
+ 'ou': TokenType.OU,
52
+ 'nao': TokenType.NAO,
53
+ };
54
+ export class Lexer {
55
+ source;
56
+ position = 0;
57
+ line = 1;
58
+ column = 1;
59
+ tokens = [];
60
+ constructor(source) {
61
+ this.source = source.normalize('NFC');
62
+ }
63
+ tokenize() {
64
+ while (!this.isAtEnd()) {
65
+ this.skipWhitespace();
66
+ if (this.isAtEnd())
67
+ break;
68
+ const startLine = this.line;
69
+ // Comentários
70
+ if (this.match('//')) {
71
+ this.skipLineComment();
72
+ continue;
73
+ }
74
+ if (this.match('/*')) {
75
+ this.skipBlockComment();
76
+ continue;
77
+ }
78
+ // Strings
79
+ if (this.peek() === '"') {
80
+ this.readString();
81
+ continue;
82
+ }
83
+ // Números (verificar data e hora primeiro)
84
+ if (this.isDigit(this.peek())) {
85
+ // Verificar se é data (YYYY-MM-DD)
86
+ if (this.isDatePattern()) {
87
+ this.readDate();
88
+ continue;
89
+ }
90
+ // Verificar se é hora (HH:MM)
91
+ if (this.isTimePattern()) {
92
+ this.readTime();
93
+ continue;
94
+ }
95
+ this.readNumber();
96
+ continue;
97
+ }
98
+ // Operadores de dois caracteres
99
+ if (this.match('==')) {
100
+ this.addToken(TokenType.IGUAL_IGUAL, undefined, this.column - 2);
101
+ continue;
102
+ }
103
+ if (this.match('!=')) {
104
+ this.addToken(TokenType.DIFERENTE, undefined, this.column - 2);
105
+ continue;
106
+ }
107
+ if (this.match('<=')) {
108
+ this.addToken(TokenType.MENOR_IGUAL, undefined, this.column - 2);
109
+ continue;
110
+ }
111
+ if (this.match('>=')) {
112
+ this.addToken(TokenType.MAIOR_IGUAL, undefined, this.column - 2);
113
+ continue;
114
+ }
115
+ if (this.match('->')) {
116
+ this.addToken(TokenType.SETA, undefined, this.column - 2);
117
+ continue;
118
+ }
119
+ if (this.match('..')) {
120
+ this.addToken(TokenType.PONTO_PONTO, undefined, this.column - 2);
121
+ continue;
122
+ }
123
+ // Operadores de um caractere
124
+ const startColumn = this.column;
125
+ const char = this.advance();
126
+ switch (char) {
127
+ case '+':
128
+ this.addToken(TokenType.MAIS, undefined, startColumn);
129
+ break;
130
+ case '-':
131
+ this.addToken(TokenType.MENOS, undefined, startColumn);
132
+ break;
133
+ case '*':
134
+ if (this.match('.')) {
135
+ this.addToken(TokenType.ASTERISCO_GLOB, undefined, startColumn);
136
+ }
137
+ else {
138
+ this.addToken(TokenType.ASTERISCO, undefined, startColumn);
139
+ }
140
+ break;
141
+ case '/':
142
+ this.addToken(TokenType.BARRA, undefined, startColumn);
143
+ break;
144
+ case '=':
145
+ this.addToken(TokenType.IGUAL, undefined, startColumn);
146
+ break;
147
+ case '<':
148
+ this.addToken(TokenType.MENOR, undefined, startColumn);
149
+ break;
150
+ case '>':
151
+ this.addToken(TokenType.MAIOR, undefined, startColumn);
152
+ break;
153
+ case ':':
154
+ this.addToken(TokenType.DOIS_PONTOS, undefined, startColumn);
155
+ break;
156
+ case ';':
157
+ this.addToken(TokenType.PONTO_VIRGULA, undefined, startColumn);
158
+ break;
159
+ case ',':
160
+ this.addToken(TokenType.VIRGULA, undefined, startColumn);
161
+ break;
162
+ case '.':
163
+ this.addToken(TokenType.PONTO, undefined, startColumn);
164
+ break;
165
+ case '?':
166
+ this.addToken(TokenType.INTERROGACAO, undefined, startColumn);
167
+ break;
168
+ case '!':
169
+ this.addToken(TokenType.EXCLAMACAO, undefined, startColumn);
170
+ break;
171
+ case '(':
172
+ this.addToken(TokenType.ABRE_PAREN, undefined, startColumn);
173
+ break;
174
+ case ')':
175
+ this.addToken(TokenType.FECHA_PAREN, undefined, startColumn);
176
+ break;
177
+ case '{':
178
+ this.addToken(TokenType.ABRE_CHAVE, undefined, startColumn);
179
+ break;
180
+ case '}':
181
+ this.addToken(TokenType.FECHA_CHAVE, undefined, startColumn);
182
+ break;
183
+ case '[':
184
+ this.addToken(TokenType.ABRE_COLCHETE, undefined, startColumn);
185
+ break;
186
+ case ']':
187
+ this.addToken(TokenType.FECHA_COLCHETE, undefined, startColumn);
188
+ break;
189
+ case '\n':
190
+ this.newLine();
191
+ break;
192
+ default:
193
+ if (this.isAlpha(char)) {
194
+ this.position--; // volta o caractere para readIdentifierOrKeyword consumir
195
+ this.column--; // volta a coluna também
196
+ this.readIdentifierOrKeyword();
197
+ }
198
+ else {
199
+ throw new Error(`Erro léxico na linha ${startLine}, coluna ${startColumn}: caractere inesperado '${char}'`);
200
+ }
201
+ }
202
+ }
203
+ this.addToken(TokenType.EOF);
204
+ return this.tokens;
205
+ }
206
+ peek() {
207
+ if (this.position >= this.source.length)
208
+ return '\0';
209
+ return this.source[this.position];
210
+ }
211
+ peekNext() {
212
+ if (this.position + 1 >= this.source.length)
213
+ return '\0';
214
+ return this.source[this.position + 1];
215
+ }
216
+ advance() {
217
+ const char = this.peek();
218
+ this.position++;
219
+ if (char === '\n') {
220
+ this.newLine();
221
+ }
222
+ else {
223
+ this.column++;
224
+ }
225
+ return char;
226
+ }
227
+ match(expected) {
228
+ if (this.position + expected.length > this.source.length)
229
+ return false;
230
+ const substring = this.source.substring(this.position, this.position + expected.length);
231
+ if (substring === expected) {
232
+ for (let i = 0; i < expected.length; i++) {
233
+ this.advance();
234
+ }
235
+ return true;
236
+ }
237
+ return false;
238
+ }
239
+ addToken(type, value, startColumn) {
240
+ const text = value !== undefined ? value : (type === TokenType.EOF ? '' : this.source.substring(this.position - 1, this.position));
241
+ this.tokens.push({
242
+ type,
243
+ value: text,
244
+ line: this.line,
245
+ column: startColumn !== undefined ? startColumn : this.column - text.length
246
+ });
247
+ }
248
+ readString() {
249
+ const startLine = this.line;
250
+ const stringStartColumn = this.column;
251
+ this.advance(); // pula a aspa inicial
252
+ let value = '';
253
+ while (this.peek() !== '"' && !this.isAtEnd()) {
254
+ const ch = this.advance();
255
+ if (ch === '\\') {
256
+ const next = this.advance();
257
+ switch (next) {
258
+ case 'n':
259
+ value += '\n';
260
+ break;
261
+ case 't':
262
+ value += '\t';
263
+ break;
264
+ case '"':
265
+ value += '"';
266
+ break;
267
+ case '\\':
268
+ value += '\\';
269
+ break;
270
+ default:
271
+ value += '\\' + next;
272
+ break;
273
+ }
274
+ }
275
+ else {
276
+ value += ch;
277
+ }
278
+ }
279
+ if (this.isAtEnd()) {
280
+ throw new Error(`Erro léxico na linha ${startLine}, coluna ${stringStartColumn}: string não terminada`);
281
+ }
282
+ this.advance(); // pula a aspa final
283
+ this.tokens.push({
284
+ type: TokenType.LITERAL_TEXTO,
285
+ value: `"${value}"`,
286
+ line: startLine,
287
+ column: stringStartColumn
288
+ });
289
+ }
290
+ readNumber() {
291
+ const startLine = this.line;
292
+ const numberStartColumn = this.column;
293
+ let value = '';
294
+ while (this.isDigit(this.peek())) {
295
+ value += this.advance();
296
+ }
297
+ // Verificar se é decimal
298
+ if (this.peek() === '.' && this.isDigit(this.peekNext())) {
299
+ value += this.advance(); // consome o ponto
300
+ while (this.isDigit(this.peek())) {
301
+ value += this.advance();
302
+ }
303
+ this.tokens.push({
304
+ type: TokenType.LITERAL_DECIMAL,
305
+ value,
306
+ line: startLine,
307
+ column: numberStartColumn
308
+ });
309
+ }
310
+ else {
311
+ this.tokens.push({
312
+ type: TokenType.LITERAL_NUMERO,
313
+ value,
314
+ line: startLine,
315
+ column: numberStartColumn
316
+ });
317
+ }
318
+ }
319
+ isDatePattern() {
320
+ const start = this.position;
321
+ // Verificar formato YYYY-MM-DD
322
+ if (this.source.length - start < 10)
323
+ return false;
324
+ // Ano (4 dígitos)
325
+ for (let i = 0; i < 4; i++) {
326
+ if (!this.isDigit(this.source[start + i]))
327
+ return false;
328
+ }
329
+ // Hífen
330
+ if (this.source[start + 4] !== '-')
331
+ return false;
332
+ // Mês (2 dígitos)
333
+ for (let i = 5; i < 7; i++) {
334
+ if (!this.isDigit(this.source[start + i]))
335
+ return false;
336
+ }
337
+ // Hífen
338
+ if (this.source[start + 7] !== '-')
339
+ return false;
340
+ // Dia (2 dígitos)
341
+ for (let i = 8; i < 10; i++) {
342
+ if (!this.isDigit(this.source[start + i]))
343
+ return false;
344
+ }
345
+ // Verificar se não é seguido por outro dígito (para não confundir com número)
346
+ if (start + 10 < this.source.length && this.isDigit(this.source[start + 10])) {
347
+ return false;
348
+ }
349
+ return true;
350
+ }
351
+ readDate() {
352
+ const startLine = this.line;
353
+ const dateStartColumn = this.column;
354
+ let value = '';
355
+ for (let i = 0; i < 10; i++) {
356
+ value += this.advance();
357
+ }
358
+ this.tokens.push({
359
+ type: TokenType.LITERAL_DATA,
360
+ value,
361
+ line: startLine,
362
+ column: dateStartColumn
363
+ });
364
+ }
365
+ isTimePattern() {
366
+ const start = this.position;
367
+ // Verificar formato HH:MM
368
+ if (this.source.length - start < 5)
369
+ return false;
370
+ // Hora (2 dígitos)
371
+ for (let i = 0; i < 2; i++) {
372
+ if (!this.isDigit(this.source[start + i]))
373
+ return false;
374
+ }
375
+ // Dois pontos
376
+ if (this.source[start + 2] !== ':')
377
+ return false;
378
+ // Minuto (2 dígitos)
379
+ for (let i = 3; i < 5; i++) {
380
+ if (!this.isDigit(this.source[start + i]))
381
+ return false;
382
+ }
383
+ // Verificar se não é seguido por outro dígito
384
+ if (start + 5 < this.source.length && this.isDigit(this.source[start + 5])) {
385
+ return false;
386
+ }
387
+ return true;
388
+ }
389
+ readTime() {
390
+ const startLine = this.line;
391
+ const timeStartColumn = this.column;
392
+ let value = '';
393
+ for (let i = 0; i < 5; i++) {
394
+ value += this.advance();
395
+ }
396
+ this.tokens.push({
397
+ type: TokenType.LITERAL_HORA,
398
+ value,
399
+ line: startLine,
400
+ column: timeStartColumn
401
+ });
402
+ }
403
+ readIdentifierOrKeyword() {
404
+ const startLine = this.line;
405
+ const identifierStartColumn = this.column;
406
+ let value = '';
407
+ value += this.advance(); // primeira letra
408
+ while (this.isAlphaNumeric(this.peek())) {
409
+ value += this.advance();
410
+ }
411
+ const keywordType = KEYWORDS[value.toLowerCase()];
412
+ if (keywordType) {
413
+ this.tokens.push({
414
+ type: keywordType,
415
+ value,
416
+ line: startLine,
417
+ column: identifierStartColumn
418
+ });
419
+ }
420
+ else {
421
+ this.tokens.push({
422
+ type: TokenType.IDENTIFICADOR,
423
+ value,
424
+ line: startLine,
425
+ column: identifierStartColumn
426
+ });
427
+ }
428
+ }
429
+ skipLineComment() {
430
+ while (this.peek() !== '\n' && !this.isAtEnd()) {
431
+ this.advance();
432
+ }
433
+ }
434
+ skipBlockComment() {
435
+ while (!this.match('*/') && !this.isAtEnd()) {
436
+ this.advance();
437
+ }
438
+ if (this.isAtEnd()) {
439
+ throw new Error(`Erro léxico na linha ${this.line}, coluna ${this.column}: comentário de bloco não terminado`);
440
+ }
441
+ }
442
+ skipWhitespace() {
443
+ while (true) {
444
+ switch (this.peek()) {
445
+ case ' ':
446
+ case '\r':
447
+ case '\t':
448
+ this.advance();
449
+ break;
450
+ default:
451
+ return;
452
+ }
453
+ }
454
+ }
455
+ newLine() {
456
+ this.line++;
457
+ this.column = 1;
458
+ }
459
+ isAtEnd() {
460
+ return this.position >= this.source.length;
461
+ }
462
+ isDigit(char) {
463
+ return char >= '0' && char <= '9';
464
+ }
465
+ isAlpha(char) {
466
+ return (char >= 'a' && char <= 'z') ||
467
+ (char >= 'A' && char <= 'Z') ||
468
+ char === '_' ||
469
+ char.charCodeAt(0) > 127; // caracteres acentuados
470
+ }
471
+ isAlphaNumeric(char) {
472
+ return this.isAlpha(char) || this.isDigit(char);
473
+ }
474
+ }
475
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../lexer/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { TokenType } from './token_type.js';
2
+ export interface Token {
3
+ type: TokenType;
4
+ value: string;
5
+ line: number;
6
+ column: number;
7
+ }
8
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../lexer/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../lexer/token.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ export declare enum TokenType {
2
+ MODULO = "MODULO",
3
+ CLASSE = "CLASSE",
4
+ ENTIDADE = "ENTIDADE",
5
+ SERVICO = "SERVICO",
6
+ FUNCAO = "FUNCAO",
7
+ EVENTO = "EVENTO",
8
+ REGRA = "REGRA",
9
+ INTERFACE = "INTERFACE",
10
+ ENUM = "ENUM",
11
+ TELA = "TELA",
12
+ FIM = "FIM",
13
+ SE = "SE",
14
+ ENTAO = "ENTAO",
15
+ SENAO = "SENAO",
16
+ ENQUANTO = "ENQUANTO",
17
+ PARA = "PARA",
18
+ EM = "EM",
19
+ RETORNAR = "RETORNAR",
20
+ ERRO = "ERRO",
21
+ IMPORTAR = "IMPORTAR",
22
+ COMO = "COMO",
23
+ EXTENDS = "EXTENDS",
24
+ IMPLEMENTS = "IMPLEMENTS",
25
+ EMITIR = "EMITIR",
26
+ ESCUTAR = "ESCUTAR",
27
+ QUANDO = "QUANDO",
28
+ VARIAVEL = "VARIAVEL",
29
+ TIPO_TEXTO = "TIPO_TEXTO",
30
+ TIPO_NUMERO = "TIPO_NUMERO",
31
+ TIPO_DECIMAL = "TIPO_DECIMAL",
32
+ TIPO_BOOLEANO = "TIPO_BOOLEANO",
33
+ TIPO_DATA = "TIPO_DATA",
34
+ TIPO_HORA = "TIPO_HORA",
35
+ TIPO_ID = "TIPO_ID",
36
+ TIPO_LISTA = "TIPO_LISTA",
37
+ TIPO_MAPA = "TIPO_MAPA",
38
+ TIPO_OBJETO = "TIPO_OBJETO",
39
+ VERDADEIRO = "VERDADEIRO",
40
+ FALSO = "FALSO",
41
+ E = "E",
42
+ OU = "OU",
43
+ NAO = "NAO",
44
+ LITERAL_NUMERO = "LITERAL_NUMERO",
45
+ LITERAL_DECIMAL = "LITERAL_DECIMAL",
46
+ LITERAL_TEXTO = "LITERAL_TEXTO",
47
+ LITERAL_DATA = "LITERAL_DATA",
48
+ LITERAL_HORA = "LITERAL_HORA",
49
+ IDENTIFICADOR = "IDENTIFICADOR",
50
+ MAIS = "MAIS",// +
51
+ MENOS = "MENOS",// -
52
+ ASTERISCO = "ASTERISCO",// *
53
+ BARRA = "BARRA",// /
54
+ IGUAL_IGUAL = "IGUAL_IGUAL",// ==
55
+ DIFERENTE = "DIFERENTE",// !=
56
+ MENOR = "MENOR",// <
57
+ MENOR_IGUAL = "MENOR_IGUAL",// <=
58
+ MAIOR = "MAIOR",// >
59
+ MAIOR_IGUAL = "MAIOR_IGUAL",// >=
60
+ IGUAL = "IGUAL",// =
61
+ SETA = "SETA",// ->
62
+ DOIS_PONTOS = "DOIS_PONTOS",// :
63
+ PONTO_VIRGULA = "PONTO_VIRGULA",// ;
64
+ VIRGULA = "VIRGULA",// ,
65
+ PONTO = "PONTO",// .
66
+ PONTO_PONTO = "PONTO_PONTO",// ..
67
+ INTERROGACAO = "INTERROGACAO",// ? (tipo opcional)
68
+ EXCLAMACAO = "EXCLAMACAO",// ! (tipo obrigatório)
69
+ ASTERISCO_GLOB = "ASTERISCO_GLOB",// .* (import wildcard)
70
+ ABRE_PAREN = "ABRE_PAREN",// (
71
+ FECHA_PAREN = "FECHA_PAREN",// )
72
+ ABRE_CHAVE = "ABRE_CHAVE",// {
73
+ FECHA_CHAVE = "FECHA_CHAVE",// }
74
+ ABRE_COLCHETE = "ABRE_COLCHETE",// [
75
+ FECHA_COLCHETE = "FECHA_COLCHETE",// ]
76
+ EOF = "EOF",
77
+ COMENTARIO_LINHA = "COMENTARIO_LINHA",// // ...
78
+ COMENTARIO_BLOCO = "COMENTARIO_BLOCO"
79
+ }
80
+ //# sourceMappingURL=token_type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token_type.d.ts","sourceRoot":"","sources":["../../lexer/token_type.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IAEnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IAGX,EAAE,OAAO;IACT,KAAK,UAAU;IACf,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,EAAE,OAAO;IACT,QAAQ,aAAa;IACrB,IAAI,SAAS;IAGb,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,UAAU,eAAe;IAGzB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;IAGjB,QAAQ,aAAa;IAGrB,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAG3B,UAAU,eAAe;IACzB,KAAK,UAAU;IAGf,CAAC,MAAM;IACP,EAAE,OAAO;IACT,GAAG,QAAQ;IAGX,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAG7B,aAAa,kBAAkB;IAG/B,IAAI,SAAS,CAAY,IAAI;IAC7B,KAAK,UAAU,CAAU,IAAI;IAC7B,SAAS,cAAc,CAAE,IAAI;IAC7B,KAAK,UAAU,CAAU,IAAI;IAG7B,WAAW,gBAAgB,CAAU,KAAK;IAC1C,SAAS,cAAc,CAAc,KAAK;IAC1C,KAAK,UAAU,CAAsB,IAAI;IACzC,WAAW,gBAAgB,CAAU,KAAK;IAC1C,KAAK,UAAU,CAAsB,IAAI;IACzC,WAAW,gBAAgB,CAAU,KAAK;IAG1C,KAAK,UAAU,CAAsB,IAAI;IAGzC,IAAI,SAAS,CAAwB,KAAK;IAG1C,WAAW,gBAAgB,CAAU,IAAI;IACzC,aAAa,kBAAkB,CAAM,IAAI;IACzC,OAAO,YAAY,CAAkB,IAAI;IACzC,KAAK,UAAU,CAAsB,IAAI;IACzC,WAAW,gBAAgB,CAAU,KAAK;IAC1C,YAAY,iBAAiB,CAAQ,qBAAqB;IAC1D,UAAU,eAAe,CAAY,wBAAwB;IAC7D,cAAc,mBAAmB,CAAI,uBAAuB;IAG5D,UAAU,eAAe,CAAY,IAAI;IACzC,WAAW,gBAAgB,CAAU,IAAI;IACzC,UAAU,eAAe,CAAY,IAAI;IACzC,WAAW,gBAAgB,CAAU,IAAI;IACzC,aAAa,kBAAkB,CAAM,IAAI;IACzC,cAAc,mBAAmB,CAAI,IAAI;IAGzC,GAAG,QAAQ;IACX,gBAAgB,qBAAqB,CAAI,SAAS;IAClD,gBAAgB,qBAAqB;CACtC"}