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.
- package/CHANGELOG.md +47 -0
- package/INSTALL.md +264 -0
- package/LICENSE +22 -0
- package/README.md +388 -0
- package/README_PT.md +261 -0
- package/dist/ast.d.ts +140 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +3 -0
- package/dist/ast.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +201 -0
- package/dist/cli.js.map +1 -0
- package/dist/compiler/exe.d.ts +13 -0
- package/dist/compiler/exe.d.ts.map +1 -0
- package/dist/compiler/exe.js +129 -0
- package/dist/compiler/exe.js.map +1 -0
- package/dist/compiler/web.d.ts +43 -0
- package/dist/compiler/web.d.ts.map +1 -0
- package/dist/compiler/web.js +413 -0
- package/dist/compiler/web.js.map +1 -0
- package/dist/compiler.d.ts +3 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +195 -0
- package/dist/compiler.js.map +1 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +56 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter.d.ts +32 -0
- package/dist/interpreter.d.ts.map +1 -0
- package/dist/interpreter.js +425 -0
- package/dist/interpreter.js.map +1 -0
- package/dist/lexer.d.ts +113 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +446 -0
- package/dist/lexer.js.map +1 -0
- package/dist/module.d.ts +19 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +112 -0
- package/dist/module.js.map +1 -0
- package/dist/parser.d.ts +45 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +599 -0
- package/dist/parser.js.map +1 -0
- package/dist/std/array.trest +85 -0
- package/dist/std/index.trest +13 -0
- package/dist/std/io.trest +17 -0
- package/dist/std/math.trest +66 -0
- package/dist/std/string.trest +61 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +86 -0
- package/dist/types.js.map +1 -0
- package/package.json +101 -0
- package/scripts/postbuild.js +90 -0
- package/scripts/postinstall.js +89 -0
- package/scripts/preinstall.js +92 -0
- package/scripts/version.js +52 -0
- package/src/std/array.trest +85 -0
- package/src/std/index.trest +13 -0
- package/src/std/io.trest +17 -0
- package/src/std/math.trest +66 -0
- package/src/std/string.trest +61 -0
package/dist/compiler.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const minimist_1 = __importDefault(require("minimist"));
|
|
43
|
+
const web_1 = require("./compiler/web");
|
|
44
|
+
const exe_1 = require("./compiler/exe");
|
|
45
|
+
const VERSION = '2.0.0';
|
|
46
|
+
async function main() {
|
|
47
|
+
const args = (0, minimist_1.default)(process.argv.slice(2));
|
|
48
|
+
// Help
|
|
49
|
+
if (args.help || args.h) {
|
|
50
|
+
showHelp();
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
// Version
|
|
54
|
+
if (args.version || args.v) {
|
|
55
|
+
console.log(`Trest Compiler v${VERSION}`);
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
const inputFile = args._[0];
|
|
59
|
+
const outputFile = args.output || args.o;
|
|
60
|
+
const mode = args.mode || args.m || 'run';
|
|
61
|
+
const minify = args.minify !== undefined;
|
|
62
|
+
const expose = args.expose !== undefined;
|
|
63
|
+
if (!inputFile) {
|
|
64
|
+
showUsage();
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
// Validações
|
|
68
|
+
if (!fs.existsSync(inputFile)) {
|
|
69
|
+
console.error(`❌ Error: File not found: ${inputFile}`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
const fileStats = fs.statSync(inputFile);
|
|
73
|
+
if (!fileStats.isFile()) {
|
|
74
|
+
console.error(`❌ Error: ${inputFile} is not a file`);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
if (args.verbose || args.debug) {
|
|
79
|
+
console.log(`📄 Compiling: ${inputFile}`);
|
|
80
|
+
console.log(`📊 File size: ${fileStats.size} bytes`);
|
|
81
|
+
console.log(`🎯 Mode: ${mode}`);
|
|
82
|
+
console.log('');
|
|
83
|
+
}
|
|
84
|
+
const startTime = Date.now();
|
|
85
|
+
switch (mode) {
|
|
86
|
+
case 'web':
|
|
87
|
+
await compileWeb(inputFile, outputFile, { minify, expose }, args.verbose || args.debug);
|
|
88
|
+
break;
|
|
89
|
+
case 'exe':
|
|
90
|
+
await compileExe(inputFile, outputFile, { minify }, args.verbose || args.debug);
|
|
91
|
+
break;
|
|
92
|
+
case 'run':
|
|
93
|
+
default:
|
|
94
|
+
console.log('💡 Tip: Use "trest <arquivo>" to run directly');
|
|
95
|
+
process.exit(0);
|
|
96
|
+
}
|
|
97
|
+
const duration = Date.now() - startTime;
|
|
98
|
+
if (args.verbose || args.debug) {
|
|
99
|
+
console.log(`\n✅ Compilation completed in ${duration}ms`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.error('❌ Compilation error:', error.message);
|
|
104
|
+
if (args.debug && error.stack) {
|
|
105
|
+
console.error('\nStack trace:');
|
|
106
|
+
console.error(error.stack);
|
|
107
|
+
}
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function showUsage() {
|
|
112
|
+
console.log(`Trest Compiler v${VERSION}`);
|
|
113
|
+
console.log('');
|
|
114
|
+
console.log('Usage: trestc <файл.trest> [опции]');
|
|
115
|
+
console.log('');
|
|
116
|
+
console.log('Options:');
|
|
117
|
+
console.log(' --mode, -m <web|exe> Compilation mode');
|
|
118
|
+
console.log(' --output, -o <файл> Output file');
|
|
119
|
+
console.log(' --minify Minify code');
|
|
120
|
+
console.log(' --expose Expose functions globally (web only)');
|
|
121
|
+
console.log(' --verbose, -V Verbose output');
|
|
122
|
+
console.log(' --debug, -d Debug mode');
|
|
123
|
+
console.log(' --help, -h Show help');
|
|
124
|
+
console.log(' --version, -v Show version');
|
|
125
|
+
console.log('');
|
|
126
|
+
console.log('Examples:');
|
|
127
|
+
console.log(' trestc program.trest --mode web');
|
|
128
|
+
console.log(' trestc script.trest --mode exe -o app.exe');
|
|
129
|
+
}
|
|
130
|
+
function showHelp() {
|
|
131
|
+
console.log(`
|
|
132
|
+
Trest Compiler v${VERSION}
|
|
133
|
+
|
|
134
|
+
Usage:
|
|
135
|
+
trestc <файл.trest> [опции]
|
|
136
|
+
|
|
137
|
+
Compilation Modes:
|
|
138
|
+
web Compile to JavaScript
|
|
139
|
+
exe Compile to executable (.exe)
|
|
140
|
+
|
|
141
|
+
Options:
|
|
142
|
+
--mode, -m <mode> Compilation mode (web or exe)
|
|
143
|
+
--output, -o <file> Output file path
|
|
144
|
+
--minify Minify output code
|
|
145
|
+
--expose Expose functions globally (web only)
|
|
146
|
+
--verbose, -V Verbose output
|
|
147
|
+
--debug, -d Debug mode
|
|
148
|
+
--help, -h Show this help message
|
|
149
|
+
--version, -v Show version number
|
|
150
|
+
|
|
151
|
+
Examples:
|
|
152
|
+
trestc program.trest --mode web -o app.js
|
|
153
|
+
trestc script.trest --mode exe -o app.exe
|
|
154
|
+
trestc app.trest --mode web --minify --expose
|
|
155
|
+
|
|
156
|
+
For more information visit: https://github.com/trest-language/trest
|
|
157
|
+
`);
|
|
158
|
+
}
|
|
159
|
+
async function compileWeb(inputFile, outputFile, options = {}, verbose = false) {
|
|
160
|
+
try {
|
|
161
|
+
if (verbose)
|
|
162
|
+
console.log('🔤 Loading and parsing...');
|
|
163
|
+
const compiler = new web_1.WebCompiler(path.dirname(inputFile));
|
|
164
|
+
const jsCode = compiler.compile(inputFile, {
|
|
165
|
+
minify: options.minify,
|
|
166
|
+
bundle: true,
|
|
167
|
+
expose: options.expose
|
|
168
|
+
});
|
|
169
|
+
const finalOutput = outputFile || inputFile.replace(/\.trest$/, '.js');
|
|
170
|
+
if (verbose) {
|
|
171
|
+
console.log(`📝 Writing output: ${finalOutput}`);
|
|
172
|
+
console.log(`📊 Output size: ${jsCode.length} bytes`);
|
|
173
|
+
}
|
|
174
|
+
fs.writeFileSync(finalOutput, jsCode);
|
|
175
|
+
console.log(`✅ Compiled to JavaScript: ${finalOutput}`);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
throw new Error(`Web compilation failed: ${error.message}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function compileExe(inputFile, outputFile, options = {}, verbose = false) {
|
|
182
|
+
try {
|
|
183
|
+
if (verbose)
|
|
184
|
+
console.log('🔧 Building executable...');
|
|
185
|
+
const compiler = new exe_1.ExeCompiler(path.dirname(inputFile));
|
|
186
|
+
await compiler.compile(inputFile, outputFile, options);
|
|
187
|
+
const finalOutput = outputFile || inputFile.replace(/\.trest$/, '.exe');
|
|
188
|
+
console.log(`✅ Compiled to executable: ${finalOutput}`);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
throw new Error(`Executable compilation failed: ${error.message}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
main();
|
|
195
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare class TrestError extends Error {
|
|
2
|
+
message: string;
|
|
3
|
+
line: number;
|
|
4
|
+
column: number;
|
|
5
|
+
source?: string | undefined;
|
|
6
|
+
constructor(message: string, line: number, column: number, source?: string | undefined);
|
|
7
|
+
format(): string;
|
|
8
|
+
}
|
|
9
|
+
export declare class SyntaxError extends TrestError {
|
|
10
|
+
constructor(message: string, line: number, column: number, source?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class TypeError extends TrestError {
|
|
13
|
+
constructor(message: string, line: number, column: number, source?: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class RuntimeError extends TrestError {
|
|
16
|
+
constructor(message: string, line: number, column: number, source?: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class ImportError extends TrestError {
|
|
19
|
+
constructor(message: string, line: number, column: number, source?: string);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;IAE1B,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,MAAM,CAAC,EAAE,MAAM;gBAHf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,YAAA;IAOjB,MAAM,IAAI,MAAM;CAaxB;AAED,qBAAa,WAAY,SAAQ,UAAU;gBAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAI3E;AAED,qBAAa,SAAU,SAAQ,UAAU;gBAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAI3E;AAED,qBAAa,YAAa,SAAQ,UAAU;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAI3E;AAED,qBAAa,WAAY,SAAQ,UAAU;gBAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAI3E"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ImportError = exports.RuntimeError = exports.TypeError = exports.SyntaxError = exports.TrestError = void 0;
|
|
4
|
+
class TrestError extends Error {
|
|
5
|
+
constructor(message, line, column, source) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.message = message;
|
|
8
|
+
this.line = line;
|
|
9
|
+
this.column = column;
|
|
10
|
+
this.source = source;
|
|
11
|
+
this.name = 'TrestError';
|
|
12
|
+
Error.captureStackTrace(this, this.constructor);
|
|
13
|
+
}
|
|
14
|
+
format() {
|
|
15
|
+
const lines = this.source?.split('\n') || [];
|
|
16
|
+
const lineContent = lines[this.line - 1] || '';
|
|
17
|
+
const pointer = ' '.repeat(this.column - 1) + '^';
|
|
18
|
+
return [
|
|
19
|
+
`Erro na linha ${this.line}, coluna ${this.column}:`,
|
|
20
|
+
this.message,
|
|
21
|
+
'',
|
|
22
|
+
`${this.line} | ${lineContent}`,
|
|
23
|
+
` | ${pointer}`,
|
|
24
|
+
].join('\n');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.TrestError = TrestError;
|
|
28
|
+
class SyntaxError extends TrestError {
|
|
29
|
+
constructor(message, line, column, source) {
|
|
30
|
+
super(message, line, column, source);
|
|
31
|
+
this.name = 'SyntaxError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.SyntaxError = SyntaxError;
|
|
35
|
+
class TypeError extends TrestError {
|
|
36
|
+
constructor(message, line, column, source) {
|
|
37
|
+
super(message, line, column, source);
|
|
38
|
+
this.name = 'TypeError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.TypeError = TypeError;
|
|
42
|
+
class RuntimeError extends TrestError {
|
|
43
|
+
constructor(message, line, column, source) {
|
|
44
|
+
super(message, line, column, source);
|
|
45
|
+
this.name = 'RuntimeError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.RuntimeError = RuntimeError;
|
|
49
|
+
class ImportError extends TrestError {
|
|
50
|
+
constructor(message, line, column, source) {
|
|
51
|
+
super(message, line, column, source);
|
|
52
|
+
this.name = 'ImportError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.ImportError = ImportError;
|
|
56
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAW,SAAQ,KAAK;IACnC,YACS,OAAe,EACf,IAAY,EACZ,MAAc,EACd,MAAe;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QALR,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAS;QAGtB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAEM,MAAM;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAElD,OAAO;YACL,iBAAiB,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,MAAM,GAAG;YACpD,IAAI,CAAC,OAAO;YACZ,EAAE;YACF,GAAG,IAAI,CAAC,IAAI,MAAM,WAAW,EAAE;YAC/B,QAAQ,OAAO,EAAE;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF;AAzBD,gCAyBC;AAED,MAAa,WAAY,SAAQ,UAAU;IACzC,YAAY,OAAe,EAAE,IAAY,EAAE,MAAc,EAAE,MAAe;QACxE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC;AAED,MAAa,SAAU,SAAQ,UAAU;IACvC,YAAY,OAAe,EAAE,IAAY,EAAE,MAAc,EAAE,MAAe;QACxE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AALD,8BAKC;AAED,MAAa,YAAa,SAAQ,UAAU;IAC1C,YAAY,OAAe,EAAE,IAAY,EAAE,MAAc,EAAE,MAAe;QACxE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AALD,oCAKC;AAED,MAAa,WAAY,SAAQ,UAAU;IACzC,YAAY,OAAe,EAAE,IAAY,EAAE,MAAc,EAAE,MAAe;QACxE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,cAAc,OAAO,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Interpreter = exports.Parser = exports.TokenType = exports.Lexer = void 0;
|
|
18
|
+
var lexer_1 = require("./lexer");
|
|
19
|
+
Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return lexer_1.Lexer; } });
|
|
20
|
+
Object.defineProperty(exports, "TokenType", { enumerable: true, get: function () { return lexer_1.TokenType; } });
|
|
21
|
+
var parser_1 = require("./parser");
|
|
22
|
+
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return parser_1.Parser; } });
|
|
23
|
+
var interpreter_1 = require("./interpreter");
|
|
24
|
+
Object.defineProperty(exports, "Interpreter", { enumerable: true, get: function () { return interpreter_1.Interpreter; } });
|
|
25
|
+
__exportStar(require("./ast"), exports);
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iCAAkD;AAAzC,8FAAA,KAAK,OAAA;AAAS,kGAAA,SAAS,OAAA;AAChC,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,wCAAsB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Program } from './ast';
|
|
2
|
+
export declare class Interpreter {
|
|
3
|
+
private globalEnv;
|
|
4
|
+
constructor();
|
|
5
|
+
interpret(program: Program): void;
|
|
6
|
+
private evaluateStatement;
|
|
7
|
+
private evaluateVariableDeclaration;
|
|
8
|
+
private evaluateFunctionDeclaration;
|
|
9
|
+
private evaluateBlockStatement;
|
|
10
|
+
private evaluateIfStatement;
|
|
11
|
+
private evaluateReturnStatement;
|
|
12
|
+
private evaluatePrintStatement;
|
|
13
|
+
private evaluateExpression;
|
|
14
|
+
private evaluateAssignment;
|
|
15
|
+
private evaluateBinaryExpression;
|
|
16
|
+
private evaluateUnaryExpression;
|
|
17
|
+
private evaluateCallExpression;
|
|
18
|
+
private evaluateIdentifier;
|
|
19
|
+
private evaluateArrayLiteral;
|
|
20
|
+
private evaluateIndexExpression;
|
|
21
|
+
private evaluateObjectLiteral;
|
|
22
|
+
private evaluateMemberExpression;
|
|
23
|
+
private findEnvironment;
|
|
24
|
+
private isTruthy;
|
|
25
|
+
private isReturnValue;
|
|
26
|
+
private formatValue;
|
|
27
|
+
private evaluateTryStatement;
|
|
28
|
+
private evaluateThrowStatement;
|
|
29
|
+
private evaluateWhileStatement;
|
|
30
|
+
private evaluateForStatement;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=interpreter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAmBR,MAAM,OAAO,CAAC;AAwBf,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAc;;IASxB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMxC,OAAO,CAAC,iBAAiB;IAiDzB,OAAO,CAAC,2BAA2B;IAmBnC,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,wBAAwB;IA0ChC,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,sBAAsB;IAsC9B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,oBAAoB;CA0C7B"}
|