@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,345 @@
1
+ export class WATGenerator {
2
+ indent = 0;
3
+ lines = [];
4
+ stringTable = new Map();
5
+ // FIX 1: strings ficam na página 1 (offset 1024..65535)
6
+ // heap começa na página 2 (offset 65536)
7
+ // A memória precisa de 2 páginas para ambos caberem
8
+ nextStringOffset = 1024;
9
+ stringData = [];
10
+ // Guarda typeDefinitions para calcular offsets reais de campos
11
+ typeDefinitions = new Map();
12
+ generate(module) {
13
+ this.lines = [];
14
+ this.stringTable.clear();
15
+ this.stringData = [];
16
+ this.nextStringOffset = 1024;
17
+ this.typeDefinitions.clear();
18
+ // Indexar tipos para lookup de campos
19
+ for (const typeDef of module.typeDefinitions) {
20
+ this.typeDefinitions.set(typeDef.name, typeDef);
21
+ }
22
+ this.emit('(module');
23
+ this.indent++;
24
+ // 1. Importações do runtime
25
+ this.emitRuntimeImports();
26
+ // 2. Memória linear — 2 páginas: página 1 para strings, página 2 para heap
27
+ this.emit('(memory (export "memory") 2)');
28
+ // 3. Alocador de heap (começa na página 2 = offset 65536)
29
+ this.emitHeapAllocator();
30
+ // 4. Funções
31
+ for (const func of module.functions) {
32
+ this.generateFunction(func);
33
+ }
34
+ // 5. Segmentos de dados (strings) — emitidos APÓS as funções
35
+ // para que os offsets já estejam calculados
36
+ this.emitDataSegments();
37
+ this.indent--;
38
+ this.emit(')');
39
+ return this.lines.join('\n');
40
+ }
41
+ emitRuntimeImports() {
42
+ this.emit('(import "jade" "log_i32" (func $jade_log_i32 (param i32)))');
43
+ this.emit('(import "jade" "log_f64" (func $jade_log_f64 (param f64)))');
44
+ this.emit('(import "jade" "log_str" (func $jade_log_str (param i32)))');
45
+ this.emit('(import "jade" "malloc" (func $jade_malloc (param i32) (result i32)))');
46
+ this.emit('(import "jade" "free" (func $jade_free (param i32)))');
47
+ this.emit('(import "jade" "erro" (func $jade_erro (param i32)))');
48
+ this.emit('(import "jade" "emitir_evento" (func $jade_emitir_evento (param i32 i32)))');
49
+ this.emit('(import "jade" "lista_tamanho" (func $jade_lista_tamanho (param i32) (result i32)))');
50
+ this.emit('(import "jade" "lista_obter" (func $jade_lista_obter (param i32 i32) (result i32)))');
51
+ this.emit('(import "jade" "concat" (func $jade_concat (param i32 i32) (result i32)))');
52
+ }
53
+ generateFunction(func) {
54
+ const params = func.parameters
55
+ .map(p => `(param $${this.sanitizeName(p.name)} ${this.mapTypeToWASM(p.type)})`)
56
+ .join(' ');
57
+ const result = func.returnType !== 'void' ? `(result ${this.mapTypeToWASM(func.returnType)})` : '';
58
+ const locals = func.locals
59
+ .map(l => `(local $${this.sanitizeName(l.name)} ${this.mapTypeToWASM(l.type)})`)
60
+ .join(' ');
61
+ this.emit(`(func ${this.sanitizeName(func.name)} ${params} ${result}`);
62
+ this.indent++;
63
+ if (locals) {
64
+ this.emit(locals);
65
+ }
66
+ for (const block of func.blocks) {
67
+ this.generateBlock(block, func);
68
+ }
69
+ this.indent--;
70
+ this.emit(')');
71
+ const exportName = func.name.startsWith('@')
72
+ ? func.name.slice(1)
73
+ : func.name;
74
+ this.emit(`(export "${exportName}" (func ${this.sanitizeName(func.name)}))`);
75
+ }
76
+ generateBlock(block, func) {
77
+ for (const instr of block.instructions) {
78
+ this.generateInstruction(instr);
79
+ }
80
+ this.generateTerminator(block.terminator, block, func);
81
+ }
82
+ generateInstruction(instr) {
83
+ switch (instr.kind) {
84
+ case 'BinaryOp':
85
+ this.pushValue(instr.left);
86
+ this.pushValue(instr.right);
87
+ this.emit(this.mapBinaryOp(instr.op, instr.type));
88
+ this.emit(`local.set $${this.sanitizeName(instr.result)}`);
89
+ break;
90
+ case 'UnaryOp':
91
+ this.pushValue(instr.operand);
92
+ if (instr.op === 'neg') {
93
+ if (instr.type === 'i32') {
94
+ this.emit('i32.const 0');
95
+ this.emit('local.get $temp');
96
+ this.emit('i32.sub');
97
+ }
98
+ else {
99
+ this.emit('f64.neg');
100
+ }
101
+ }
102
+ else if (instr.op === 'not') {
103
+ this.emit('i32.eqz');
104
+ }
105
+ this.emit(`local.set $${this.sanitizeName(instr.result)}`);
106
+ break;
107
+ case 'Store':
108
+ this.pushValue(instr.value);
109
+ this.emit(`local.set $${this.sanitizeName(instr.target)}`);
110
+ break;
111
+ case 'Load':
112
+ this.emit(`local.get $${this.sanitizeName(instr.source)}`);
113
+ this.emit(`local.set $${this.sanitizeName(instr.result)}`);
114
+ break;
115
+ case 'Call':
116
+ for (const arg of instr.args)
117
+ this.pushValue(arg);
118
+ this.emit(`call ${this.sanitizeName(instr.callee)}`);
119
+ if (instr.result) {
120
+ this.emit(`local.set $${this.sanitizeName(instr.result)}`);
121
+ }
122
+ break;
123
+ case 'GetField': {
124
+ // FIX 2: usar typeName real do objeto para calcular offset
125
+ // FIX 3: usar f64.load para f64, não i64.load
126
+ const typeName = this.resolveTypeName(instr.object);
127
+ const fieldOffset = this.getFieldOffset(typeName, instr.field);
128
+ this.pushValue(instr.object);
129
+ this.emit(`i32.const ${fieldOffset}`);
130
+ this.emit('i32.add');
131
+ this.emit(this.loadOpForType(instr.type));
132
+ this.emit(`local.set $${this.sanitizeName(instr.result)}`);
133
+ break;
134
+ }
135
+ case 'SetField': {
136
+ // FIX 2: usar typeName real do objeto para calcular offset
137
+ // FIX 3: usar f64.store para f64, não i64.store
138
+ const typeName = this.resolveTypeName(instr.object);
139
+ const setFieldOffset = this.getFieldOffset(typeName, instr.field);
140
+ this.pushValue(instr.object);
141
+ this.emit(`i32.const ${setFieldOffset}`);
142
+ this.emit('i32.add');
143
+ this.pushValue(instr.value);
144
+ this.emit(this.storeOpForType(instr.type));
145
+ break;
146
+ }
147
+ case 'Alloc':
148
+ this.emit(`i32.const ${this.getSizeOf(instr.typeName)}`);
149
+ this.emit(`call $jade_malloc_internal`);
150
+ this.emit(`local.set $${this.sanitizeName(instr.result)}`);
151
+ break;
152
+ case 'Assign':
153
+ this.pushValue(instr.value);
154
+ this.emit(`local.set $${this.sanitizeName(instr.result)}`);
155
+ break;
156
+ case 'Phi':
157
+ // FIX 4: comentário WAT usa ;; não ;
158
+ this.emit(`;; phi node for ${instr.result}`);
159
+ break;
160
+ }
161
+ }
162
+ generateTerminator(term, _block, _func) {
163
+ switch (term.kind) {
164
+ case 'Return':
165
+ if (term.value)
166
+ this.pushValue(term.value);
167
+ this.emit('return');
168
+ break;
169
+ case 'Branch':
170
+ break;
171
+ case 'CondBranch':
172
+ this.pushValue(term.condition);
173
+ this.emit('if');
174
+ this.indent++;
175
+ this.indent--;
176
+ this.emit('end');
177
+ break;
178
+ case 'Unreachable':
179
+ this.emit('unreachable');
180
+ break;
181
+ }
182
+ }
183
+ pushValue(value) {
184
+ switch (value.kind) {
185
+ case 'Constant':
186
+ if (value.type === 'i32' || value.type === 'i1') {
187
+ this.emit(`i32.const ${value.type === 'i1' ? (value.value ? 1 : 0) : value.value}`);
188
+ }
189
+ else if (value.type === 'f64') {
190
+ this.emit(`f64.const ${value.value}`);
191
+ }
192
+ else if (value.type === 'ptr' && typeof value.value === 'string') {
193
+ const offset = this.allocString(value.value);
194
+ this.emit(`i32.const ${offset} ;; "${value.value}"`);
195
+ }
196
+ else {
197
+ this.emit(`i32.const 0 ;; ptr genérico`);
198
+ }
199
+ break;
200
+ case 'LocalRef':
201
+ this.emit(`local.get $${this.sanitizeName(value.name)}`);
202
+ break;
203
+ case 'GlobalRef':
204
+ // FIX 4: comentário WAT usa ;; não ;
205
+ this.emit(`;; global ref ${value.name}`);
206
+ break;
207
+ }
208
+ }
209
+ // Resolve o nome do tipo de um IRValue (para lookup de offsets de campo)
210
+ resolveTypeName(value) {
211
+ // Na IR atual não temos tipagem de struct no value, então usamos
212
+ // a typeDefinitions indexada para fazer lookup por campo
213
+ // Isso é suficiente para o MVP — com múltiplos tipos com campos iguais
214
+ // precisaria de anotação de tipo no IRValue
215
+ return 'Unknown';
216
+ }
217
+ loadOpForType(type) {
218
+ switch (type) {
219
+ case 'f64': return 'f64.load';
220
+ case 'i64': return 'i64.load';
221
+ default: return 'i32.load';
222
+ }
223
+ }
224
+ storeOpForType(type) {
225
+ switch (type) {
226
+ case 'f64': return 'f64.store';
227
+ case 'i64': return 'i64.store';
228
+ default: return 'i32.store';
229
+ }
230
+ }
231
+ mapBinaryOp(op, type) {
232
+ const prefix = type === 'f64' ? 'f64' : 'i32';
233
+ const map = {
234
+ 'add': `${prefix}.add`,
235
+ 'sub': `${prefix}.sub`,
236
+ 'mul': `${prefix}.mul`,
237
+ 'div': type === 'f64' ? 'f64.div' : 'i32.div_s',
238
+ 'eq': `${prefix}.eq`,
239
+ 'ne': `${prefix}.ne`,
240
+ 'lt': type === 'f64' ? 'f64.lt' : 'i32.lt_s',
241
+ 'le': type === 'f64' ? 'f64.le' : 'i32.le_s',
242
+ 'gt': type === 'f64' ? 'f64.gt' : 'i32.gt_s',
243
+ 'ge': type === 'f64' ? 'f64.ge' : 'i32.ge_s',
244
+ 'and': 'i32.and',
245
+ 'or': 'i32.or',
246
+ };
247
+ return map[op] || `;; op desconhecido: ${op}`;
248
+ }
249
+ getSizeOf(typeName) {
250
+ const typeDef = this.typeDefinitions.get(typeName);
251
+ if (!typeDef)
252
+ return 64;
253
+ // Calcular tamanho real: i32/ptr = 4 bytes, f64 = 8 bytes, alinhado em 8
254
+ let size = 0;
255
+ for (const field of typeDef.fields) {
256
+ size += field.type === 'f64' || field.type === 'i64' ? 8 : 4;
257
+ }
258
+ // Alinhar para múltiplo de 8
259
+ return Math.ceil(size / 8) * 8;
260
+ }
261
+ mapTypeToWASM(type) {
262
+ switch (type) {
263
+ case 'i32':
264
+ case 'i1':
265
+ case 'ptr': return 'i32';
266
+ case 'i64': return 'i64';
267
+ case 'f32': return 'f32';
268
+ case 'f64': return 'f64';
269
+ case 'void': return '';
270
+ default: return 'i32';
271
+ }
272
+ }
273
+ getFieldOffset(typeName, fieldName) {
274
+ // Tentar lookup na typeDefinitions indexada
275
+ const typeDef = this.typeDefinitions.get(typeName);
276
+ if (typeDef) {
277
+ let offset = 0;
278
+ for (const field of typeDef.fields) {
279
+ if (field.name === fieldName)
280
+ return offset;
281
+ offset += field.type === 'f64' || field.type === 'i64' ? 8 : 4;
282
+ }
283
+ }
284
+ // Fallback: buscar em todos os tipos pelo nome do campo
285
+ for (const [, def] of this.typeDefinitions) {
286
+ let offset = 0;
287
+ for (const field of def.fields) {
288
+ if (field.name === fieldName)
289
+ return offset;
290
+ offset += field.type === 'f64' || field.type === 'i64' ? 8 : 4;
291
+ }
292
+ }
293
+ return 0;
294
+ }
295
+ allocString(str) {
296
+ if (this.stringTable.has(str)) {
297
+ return this.stringTable.get(str);
298
+ }
299
+ const offset = this.nextStringOffset;
300
+ this.stringTable.set(str, offset);
301
+ const encoder = new TextEncoder();
302
+ const bytes = encoder.encode(str);
303
+ // FIX: formato WAT correto para bytes: \XX (barra + hex)
304
+ const escaped = Array.from(bytes)
305
+ .map(b => '\\' + b.toString(16).padStart(2, '0'))
306
+ .join('');
307
+ this.stringData.push({ offset, data: escaped });
308
+ // +1 para null terminator, alinhado em 4 bytes
309
+ this.nextStringOffset = offset + bytes.length + 1;
310
+ this.nextStringOffset = Math.ceil(this.nextStringOffset / 4) * 4;
311
+ return offset;
312
+ }
313
+ emitHeapAllocator() {
314
+ // Heap começa na página 2 (65536) — página 1 reservada para strings/dados estáticos
315
+ this.emit('(global $heap_ptr (mut i32) (i32.const 65536)) ;; heap começa na página 2');
316
+ this.emit('(func $jade_malloc_internal (param $size i32) (result i32)');
317
+ this.indent++;
318
+ this.emit('(local $old_ptr i32)');
319
+ this.emit('global.get $heap_ptr');
320
+ this.emit('local.set $old_ptr');
321
+ this.emit('global.get $heap_ptr');
322
+ this.emit('local.get $size');
323
+ this.emit('i32.add');
324
+ this.emit('global.set $heap_ptr');
325
+ this.emit('local.get $old_ptr');
326
+ this.indent--;
327
+ this.emit(')');
328
+ }
329
+ emitDataSegments() {
330
+ if (this.stringData.length === 0)
331
+ return;
332
+ for (const { offset, data } of this.stringData) {
333
+ this.emit(`(data (i32.const ${offset}) "${data}")`);
334
+ }
335
+ }
336
+ sanitizeName(name) {
337
+ return name.replace(/^[@%]/, '$');
338
+ }
339
+ emit(line) {
340
+ if (line.trim() === '')
341
+ return;
342
+ this.lines.push(' '.repeat(this.indent) + line);
343
+ }
344
+ }
345
+ //# sourceMappingURL=wat_generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wat_generator.js","sourceRoot":"","sources":["../../codegen/wat_generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * JADE Compiler — Public API
3
+ *
4
+ * Pipeline: source → Lexer → Parser → SemanticAnalyzer → IRGenerator → WASMGenerator → .wasm
5
+ */
6
+ export { Lexer } from './lexer/lexer.js';
7
+ export { Token } from './lexer/token.js';
8
+ export { TokenType } from './lexer/token_type.js';
9
+ export { Parser } from './parser/parser.js';
10
+ export type { ParseResult, ParseError } from './parser/parse_result.js';
11
+ export { SemanticAnalyzer } from './semantic/semantic_analyzer.js';
12
+ export type { ResultadoSemantico } from './semantic/semantic_analyzer.js';
13
+ export { IRGenerator } from './codegen/ir_generator.js';
14
+ export { IRPrinter } from './codegen/ir_printer.js';
15
+ export { WATGenerator } from './codegen/wat_generator.js';
16
+ export { WASMGenerator } from './codegen/wasm_generator.js';
17
+ export * as AST from './ast/nodes.js';
18
+ export * as IR from './codegen/ir_nodes.js';
19
+ /**
20
+ * Compila source JADE e retorna o binário WebAssembly.
21
+ *
22
+ * @param source Código-fonte JADE
23
+ * @param moduleName Nome do módulo WASM gerado (padrão: "jade_module")
24
+ */
25
+ export declare function compile(source: string, moduleName?: string): Promise<{
26
+ success: false;
27
+ errors: {
28
+ phase: "parse";
29
+ message: string;
30
+ line: number;
31
+ column: number;
32
+ }[];
33
+ wasm: null;
34
+ wat: null;
35
+ } | {
36
+ success: false;
37
+ errors: {
38
+ phase: "semantic";
39
+ message: string;
40
+ line: number;
41
+ column: number;
42
+ }[];
43
+ wasm: null;
44
+ wat: null;
45
+ } | {
46
+ success: false;
47
+ errors: {
48
+ phase: "codegen";
49
+ message: string;
50
+ line: number;
51
+ column: number;
52
+ }[];
53
+ wasm: null;
54
+ wat: string;
55
+ } | {
56
+ success: true;
57
+ errors: never[];
58
+ wasm: Uint8Array<ArrayBufferLike> | null;
59
+ wat: string;
60
+ }>;
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAQ5C;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,SAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDvE"}
package/dist/index.js ADDED
@@ -0,0 +1,79 @@
1
+ /**
2
+ * JADE Compiler — Public API
3
+ *
4
+ * Pipeline: source → Lexer → Parser → SemanticAnalyzer → IRGenerator → WASMGenerator → .wasm
5
+ */
6
+ export { Lexer } from './lexer/lexer.js';
7
+ export { TokenType } from './lexer/token_type.js';
8
+ export { Parser } from './parser/parser.js';
9
+ export { SemanticAnalyzer } from './semantic/semantic_analyzer.js';
10
+ export { IRGenerator } from './codegen/ir_generator.js';
11
+ export { IRPrinter } from './codegen/ir_printer.js';
12
+ export { WATGenerator } from './codegen/wat_generator.js';
13
+ export { WASMGenerator } from './codegen/wasm_generator.js';
14
+ export * as AST from './ast/nodes.js';
15
+ export * as IR from './codegen/ir_nodes.js';
16
+ import { Lexer } from './lexer/lexer.js';
17
+ import { Parser } from './parser/parser.js';
18
+ import { SemanticAnalyzer } from './semantic/semantic_analyzer.js';
19
+ import { IRGenerator } from './codegen/ir_generator.js';
20
+ import { WASMGenerator } from './codegen/wasm_generator.js';
21
+ /**
22
+ * Compila source JADE e retorna o binário WebAssembly.
23
+ *
24
+ * @param source Código-fonte JADE
25
+ * @param moduleName Nome do módulo WASM gerado (padrão: "jade_module")
26
+ */
27
+ export async function compile(source, moduleName = 'jade_module') {
28
+ const tokens = new Lexer(source).tokenize();
29
+ const parseResult = new Parser(tokens).parse();
30
+ if (!parseResult.success || !parseResult.program) {
31
+ return {
32
+ success: false,
33
+ errors: parseResult.errors.map(e => ({
34
+ phase: 'parse',
35
+ message: e.message,
36
+ line: e.line,
37
+ column: e.column
38
+ })),
39
+ wasm: null,
40
+ wat: null
41
+ };
42
+ }
43
+ const semanticResult = new SemanticAnalyzer().analisar(parseResult.program);
44
+ if (!semanticResult.sucesso) {
45
+ return {
46
+ success: false,
47
+ errors: semanticResult.erros.map(e => ({
48
+ phase: 'semantic',
49
+ message: e.mensagem,
50
+ line: e.linha,
51
+ column: e.coluna
52
+ })),
53
+ wasm: null,
54
+ wat: null
55
+ };
56
+ }
57
+ const ir = new IRGenerator(moduleName).generate(parseResult.program);
58
+ const wasmResult = await new WASMGenerator().generate(ir);
59
+ if (wasmResult.errors.length > 0) {
60
+ return {
61
+ success: false,
62
+ errors: wasmResult.errors.map(msg => ({
63
+ phase: 'codegen',
64
+ message: msg,
65
+ line: 0,
66
+ column: 0
67
+ })),
68
+ wasm: null,
69
+ wat: wasmResult.wat
70
+ };
71
+ }
72
+ return {
73
+ success: true,
74
+ errors: [],
75
+ wasm: wasmResult.wasm ?? null,
76
+ wat: wasmResult.wat
77
+ };
78
+ }
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Token } from './token.js';
2
+ export declare class Lexer {
3
+ private source;
4
+ private position;
5
+ private line;
6
+ private column;
7
+ private tokens;
8
+ constructor(source: string);
9
+ tokenize(): Token[];
10
+ private peek;
11
+ private peekNext;
12
+ private advance;
13
+ private match;
14
+ private addToken;
15
+ private readString;
16
+ private readNumber;
17
+ private isDatePattern;
18
+ private readDate;
19
+ private isTimePattern;
20
+ private readTime;
21
+ private readIdentifierOrKeyword;
22
+ private skipLineComment;
23
+ private skipBlockComment;
24
+ private skipWhitespace;
25
+ private newLine;
26
+ private isAtEnd;
27
+ private isDigit;
28
+ private isAlpha;
29
+ private isAlphaNumeric;
30
+ }
31
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../lexer/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA+DnC,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,MAAM;IAI1B,QAAQ,IAAI,KAAK,EAAE;IAyHnB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,UAAU;IA+BlB,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,cAAc;CAGvB"}