-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtest.ts
More file actions
67 lines (55 loc) · 1.87 KB
/
Copy pathtest.ts
File metadata and controls
67 lines (55 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { Lexer } from './src/lexer';
import { Parser } from './src/parser2';
import { Generator } from './src/generator';
// Test the transpiler with a simple Russian JS code
const source = `
переменная имя = "Мир";
если (имя === "Мир") {
вывести("Привет, " + имя + "!");
}
// Example with updated terminology
если (пользователь.управляющий) {
показать("Привет, начальник!");
} иначе {
вывести("Доступ запрещён");
}
задача привет(имя) {
вернуть `Привет, ${имя}!`;
}
`;
console.log("Source code:");
console.log(source);
// 1. Tokenization
console.log("\n=== Tokenization ===");
const lexer = new Lexer(source);
const tokens = lexer.tokenize();
console.log(tokens);
// 2. Parsing
console.log("\n=== Parsing ===");
const parser = new Parser(tokens);
const ast = parser.parse();
console.log(JSON.stringify(ast, null, 2));
// 3. Code Generation
console.log("\n=== Generated JavaScript ===");
const generator = new Generator();
const jsCode = generator.generate(ast);
console.log(jsCode);
// 4. Execute the generated code (be careful with this in production!)
console.log("\n=== Execution Result ===");
const consoleLog = console.log;
const mockConsole = {
log: (message: string) => console.log(`console.log: ${message}`)
};
try {
// Replace the global console with our mock for testing
(global as any).console = mockConsole;
// Create a function with the generated code and call it
const result = new Function(jsCode)();
// Restore the original console
(global as any).console = { log: consoleLog };
console.log("Execution completed successfully!");
} catch (error) {
// Restore the original console in case of error
(global as any).console = { log: consoleLog };
console.error("Error during execution:", error);
}