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
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Pre-install script
|
|
4
|
+
* Valida o ambiente antes da instalação
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { execSync } = require('child_process');
|
|
8
|
+
const os = require('os');
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
|
|
12
|
+
const VERSION = require('../package.json').version;
|
|
13
|
+
const MIN_NODE_VERSION = 18;
|
|
14
|
+
const MIN_NPM_VERSION = 9;
|
|
15
|
+
|
|
16
|
+
console.log(`\n🚀 Trest Language v${VERSION} - Pre-installation check\n`);
|
|
17
|
+
|
|
18
|
+
// Verificar Node.js
|
|
19
|
+
function checkNodeVersion() {
|
|
20
|
+
const nodeVersion = process.version;
|
|
21
|
+
const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
|
|
22
|
+
|
|
23
|
+
if (majorVersion < MIN_NODE_VERSION) {
|
|
24
|
+
console.error(`❌ Node.js ${MIN_NODE_VERSION}+ required. Current: ${nodeVersion}`);
|
|
25
|
+
console.error('Please update Node.js from https://nodejs.org/');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
console.log(`✅ Node.js version: ${nodeVersion}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Verificar npm
|
|
33
|
+
function checkNpmVersion() {
|
|
34
|
+
try {
|
|
35
|
+
const npmVersion = execSync('npm --version', { encoding: 'utf-8' }).trim();
|
|
36
|
+
const majorVersion = parseInt(npmVersion.split('.')[0]);
|
|
37
|
+
|
|
38
|
+
if (majorVersion < MIN_NPM_VERSION) {
|
|
39
|
+
console.error(`❌ npm ${MIN_NPM_VERSION}+ required. Current: ${npmVersion}`);
|
|
40
|
+
console.error('Please update npm: npm install -g npm@latest');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
console.log(`✅ npm version: ${npmVersion}`);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error('❌ Failed to check npm version');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Verificar sistema operacional
|
|
52
|
+
function checkOS() {
|
|
53
|
+
const platform = os.platform();
|
|
54
|
+
const supported = ['darwin', 'linux', 'win32'];
|
|
55
|
+
|
|
56
|
+
if (!supported.includes(platform)) {
|
|
57
|
+
console.warn(`⚠️ Platform ${platform} may not be fully supported`);
|
|
58
|
+
} else {
|
|
59
|
+
console.log(`✅ Platform: ${platform}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Verificar TypeScript
|
|
64
|
+
function checkTypeScript() {
|
|
65
|
+
try {
|
|
66
|
+
const tsVersion = execSync('tsc --version', { encoding: 'utf-8' }).trim();
|
|
67
|
+
console.log(`✅ ${tsVersion}`);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.warn('⚠️ TypeScript not found globally (will be installed locally)');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Verificar espaço em disco
|
|
74
|
+
function checkDiskSpace() {
|
|
75
|
+
try {
|
|
76
|
+
const stats = fs.statSync(process.cwd());
|
|
77
|
+
console.log(`✅ Sufficient disk space`);
|
|
78
|
+
} catch (error) {
|
|
79
|
+
console.warn('⚠️ Could not verify disk space');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Executar todas as verificações
|
|
84
|
+
console.log('Checking environment...\n');
|
|
85
|
+
checkNodeVersion();
|
|
86
|
+
checkNpmVersion();
|
|
87
|
+
checkOS();
|
|
88
|
+
checkTypeScript();
|
|
89
|
+
checkDiskSpace();
|
|
90
|
+
|
|
91
|
+
console.log('\n✅ Pre-installation checks passed!\n');
|
|
92
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Version bump script
|
|
4
|
+
* Atualiza a versão em todos os lugares necessários
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const { execSync } = require('child_process');
|
|
10
|
+
|
|
11
|
+
function updateVersion() {
|
|
12
|
+
const packageJsonPath = path.join(__dirname, '..', 'package.json');
|
|
13
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
14
|
+
const newVersion = process.env.npm_config_version || packageJson.version;
|
|
15
|
+
|
|
16
|
+
console.log(`\n📦 Updating version to ${newVersion}\n`);
|
|
17
|
+
|
|
18
|
+
// Atualizar package.json
|
|
19
|
+
packageJson.version = newVersion;
|
|
20
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
21
|
+
console.log('✅ Updated package.json');
|
|
22
|
+
|
|
23
|
+
// Atualizar README se necessário
|
|
24
|
+
updateReadme(newVersion);
|
|
25
|
+
|
|
26
|
+
// Criar tag git
|
|
27
|
+
try {
|
|
28
|
+
execSync(`git tag -a v${newVersion} -m "Release v${newVersion}"`, { stdio: 'inherit' });
|
|
29
|
+
console.log(`✅ Created git tag v${newVersion}`);
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.warn('⚠️ Could not create git tag (may already exist)');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
console.log(`\n✅ Version update complete!\n`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function updateReadme(version) {
|
|
38
|
+
const readmePath = path.join(__dirname, '..', 'README.md');
|
|
39
|
+
|
|
40
|
+
if (fs.existsSync(readmePath)) {
|
|
41
|
+
let content = fs.readFileSync(readmePath, 'utf-8');
|
|
42
|
+
|
|
43
|
+
// Substituir referências de versão
|
|
44
|
+
content = content.replace(/v\d+\.\d+\.\d+/g, `v${version}`);
|
|
45
|
+
|
|
46
|
+
fs.writeFileSync(readmePath, content);
|
|
47
|
+
console.log('✅ Updated README.md');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
updateVersion();
|
|
52
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Стандартная библиотека массивов
|
|
2
|
+
|
|
3
|
+
экспорт функция длина(массив) {
|
|
4
|
+
пусть счетчик = 0
|
|
5
|
+
пока (массив[счетчик] != null) {
|
|
6
|
+
счетчик = счетчик + 1
|
|
7
|
+
}
|
|
8
|
+
вернуть счетчик
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
экспорт функция добавить(массив, элемент) {
|
|
12
|
+
# Добавляет элемент в конец массива
|
|
13
|
+
массив[длина(массив)] = элемент
|
|
14
|
+
вернуть массив
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
экспорт функция удалить(массив, индекс) {
|
|
18
|
+
# Удаляет элемент из массива
|
|
19
|
+
пусть новый = []
|
|
20
|
+
пусть i = 0
|
|
21
|
+
пока (i < длина(массив)) {
|
|
22
|
+
если (i != индекс) {
|
|
23
|
+
добавить(новый, массив[i])
|
|
24
|
+
}
|
|
25
|
+
i = i + 1
|
|
26
|
+
}
|
|
27
|
+
вернуть новый
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
экспорт функция включает(массив, элемент) {
|
|
31
|
+
пусть i = 0
|
|
32
|
+
пока (i < длина(массив)) {
|
|
33
|
+
если (массив[i] == элемент) {
|
|
34
|
+
вернуть истина
|
|
35
|
+
}
|
|
36
|
+
i = i + 1
|
|
37
|
+
}
|
|
38
|
+
вернуть ложь
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
экспорт функция обратить(массив) {
|
|
42
|
+
пусть новый = []
|
|
43
|
+
пусть i = длина(массив) - 1
|
|
44
|
+
пока (i >= 0) {
|
|
45
|
+
добавить(новый, массив[i])
|
|
46
|
+
i = i - 1
|
|
47
|
+
}
|
|
48
|
+
вернуть новый
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
экспорт функция срез(массив, начало, конец) {
|
|
52
|
+
пусть новый = []
|
|
53
|
+
пусть i = начало
|
|
54
|
+
пока (i < конец && i < длина(массив)) {
|
|
55
|
+
добавить(новый, массив[i])
|
|
56
|
+
i = i + 1
|
|
57
|
+
}
|
|
58
|
+
вернуть новый
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
экспорт функция отсортировать(массив) {
|
|
62
|
+
# Bubble sort упрощенный
|
|
63
|
+
пусть новый = []
|
|
64
|
+
пусть i = 0
|
|
65
|
+
пока (i < длина(массив)) {
|
|
66
|
+
добавить(новый, массив[i])
|
|
67
|
+
i = i + 1
|
|
68
|
+
}
|
|
69
|
+
# Базовая реализация сортировки
|
|
70
|
+
пусть обмен = истина
|
|
71
|
+
пока (обмен) {
|
|
72
|
+
обмен = ложь
|
|
73
|
+
пусть j = 0
|
|
74
|
+
пока (j < длина(новый) - 1) {
|
|
75
|
+
если (новый[j] > новый[j + 1]) {
|
|
76
|
+
пусть temp = новый[j]
|
|
77
|
+
новый[j] = новый[j + 1]
|
|
78
|
+
новый[j + 1] = temp
|
|
79
|
+
обмен = истина
|
|
80
|
+
}
|
|
81
|
+
j = j + 1
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
вернуть новый
|
|
85
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Стандартная библиотека Trest - Главный модуль
|
|
2
|
+
|
|
3
|
+
# Реэкспортировать все модули std
|
|
4
|
+
импорт * как math из "std/math"
|
|
5
|
+
импорт * как string из "std/string"
|
|
6
|
+
импорт * как array из "std/array"
|
|
7
|
+
импорт * как io из "std/io"
|
|
8
|
+
|
|
9
|
+
# Экспортировать объекты со всеми функциями
|
|
10
|
+
экспорт конст Math = math
|
|
11
|
+
экспорт конст String = string
|
|
12
|
+
экспорт конст Array = array
|
|
13
|
+
экспорт конст IO = io
|
package/src/std/io.trest
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Стандартная библиотека ввода/вывода
|
|
2
|
+
# Примечание: Реальные реализации потребуют нативных привязок Node.js
|
|
3
|
+
|
|
4
|
+
экспорт функция читатьФайл(путь) {
|
|
5
|
+
# Заглушка - требует нативную привязку
|
|
6
|
+
бросить "читатьФайл требует нативную привязку Node.js"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
экспорт функция писатьФайл(путь, содержимое) {
|
|
10
|
+
# Заглушка - требует нативную привязку
|
|
11
|
+
бросить "писатьФайл требует нативную привязку Node.js"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
экспорт функция существуетФайл(путь) {
|
|
15
|
+
# Заглушка - требует нативную привязку
|
|
16
|
+
бросить "существуетФайл требует нативную привязку Node.js"
|
|
17
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Стандартная математическая библиотека
|
|
2
|
+
|
|
3
|
+
экспорт функция abs(x) {
|
|
4
|
+
если (x < 0) {
|
|
5
|
+
вернуть -x
|
|
6
|
+
}
|
|
7
|
+
вернуть x
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
экспорт функция max(a, b) {
|
|
11
|
+
если (a > b) {
|
|
12
|
+
вернуть a
|
|
13
|
+
}
|
|
14
|
+
вернуть b
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
экспорт функция min(a, b) {
|
|
18
|
+
если (a < b) {
|
|
19
|
+
вернуть a
|
|
20
|
+
}
|
|
21
|
+
вернуть b
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
экспорт функция pow(основание, показатель) {
|
|
25
|
+
пусть результат = 1
|
|
26
|
+
для (пусть i = 0; i < показатель; i = i + 1) {
|
|
27
|
+
результат = результат * основание
|
|
28
|
+
}
|
|
29
|
+
вернуть результат
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
экспорт функция sqrt(x) {
|
|
33
|
+
если (x < 0) {
|
|
34
|
+
бросить "Квадратный корень из отрицательного числа"
|
|
35
|
+
}
|
|
36
|
+
если (x == 0) {
|
|
37
|
+
вернуть 0
|
|
38
|
+
}
|
|
39
|
+
пусть оценка = x / 2
|
|
40
|
+
для (пусть i = 0; i < 10; i = i + 1) {
|
|
41
|
+
оценка = (оценка + x / оценка) / 2
|
|
42
|
+
}
|
|
43
|
+
вернуть оценка
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
экспорт функция ceil(x) {
|
|
47
|
+
пусть целаяЧасть = x - (x % 1)
|
|
48
|
+
если (x > 0 && x != целаяЧасть) {
|
|
49
|
+
вернуть целаяЧасть + 1
|
|
50
|
+
}
|
|
51
|
+
вернуть целаяЧасть
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
экспорт функция floor(x) {
|
|
55
|
+
вернуть x - (x % 1)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
экспорт функция round(x) {
|
|
59
|
+
если (x - floor(x) >= 0.5) {
|
|
60
|
+
вернуть ceil(x)
|
|
61
|
+
}
|
|
62
|
+
вернуть floor(x)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
экспорт конст PI = 3.141592653589793
|
|
66
|
+
экспорт конст E = 2.718281828459045
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Стандартная библиотека строк
|
|
2
|
+
|
|
3
|
+
экспорт функция размер(строка) {
|
|
4
|
+
# Строки - это массивы, поэтому возвращаем длину массива
|
|
5
|
+
пусть счетчик = 0
|
|
6
|
+
пока (строка[счетчик] != null) {
|
|
7
|
+
счетчик = счетчик + 1
|
|
8
|
+
}
|
|
9
|
+
вернуть счетчик
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
экспорт функция верхний(строка) {
|
|
13
|
+
# Базовое преобразование в верхний регистр
|
|
14
|
+
# В реальной реализации потребуется обработка специальных символов
|
|
15
|
+
пусть результат = ""
|
|
16
|
+
пусть i = 0
|
|
17
|
+
пока (строка[i] != null) {
|
|
18
|
+
пусть символ = строка[i]
|
|
19
|
+
# Упрощенное преобразование
|
|
20
|
+
результат = результат + символ
|
|
21
|
+
i = i + 1
|
|
22
|
+
}
|
|
23
|
+
вернуть результат
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
экспорт функция нижний(строка) {
|
|
27
|
+
# Базовое преобразование в нижний регистр
|
|
28
|
+
пусть результат = ""
|
|
29
|
+
пусть i = 0
|
|
30
|
+
пока (строка[i] != null) {
|
|
31
|
+
пусть символ = строка[i]
|
|
32
|
+
# Упрощенное преобразование
|
|
33
|
+
результат = результат + символ
|
|
34
|
+
i = i + 1
|
|
35
|
+
}
|
|
36
|
+
вернуть результат
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
экспорт функция заменить(строка, старый, новый) {
|
|
40
|
+
# Базовая реализация замены
|
|
41
|
+
# В реальной реализации потребуется более сложная обработка
|
|
42
|
+
вернуть строка
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
экспорт функция разделить(строка, разделитель) {
|
|
46
|
+
# Базовая реализация split
|
|
47
|
+
пусть результат = []
|
|
48
|
+
пусть текущий = ""
|
|
49
|
+
пусть i = 0
|
|
50
|
+
пока (строка[i] != null) {
|
|
51
|
+
если (строка[i] == разделитель) {
|
|
52
|
+
результат = результат + [текущий]
|
|
53
|
+
текущий = ""
|
|
54
|
+
} иначе {
|
|
55
|
+
текущий = текущий + строка[i]
|
|
56
|
+
}
|
|
57
|
+
i = i + 1
|
|
58
|
+
}
|
|
59
|
+
результат = результат + [текущий]
|
|
60
|
+
вернуть результат
|
|
61
|
+
}
|