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/CHANGELOG.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Trest Language will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [2.0.0] - 2024-11-01
|
|
9
|
+
|
|
10
|
+
**Desenvolvido por:** PoktWeb
|
|
11
|
+
**Documentação:** https://trest-site.vercel.app
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- ✨ Enhanced npm package configuration with proper installation scripts
|
|
15
|
+
- 🛠️ Pre-install and post-install validation scripts
|
|
16
|
+
- 📝 Improved CLI with verbose and debug modes
|
|
17
|
+
- 🔍 Better error handling and logging
|
|
18
|
+
- 📦 Proper .npmignore configuration
|
|
19
|
+
- 📄 LICENSE file (MIT)
|
|
20
|
+
- 🎯 Engine requirements validation (Node >= 18, npm >= 9)
|
|
21
|
+
- 🌍 Multi-platform support (Windows, Linux, macOS)
|
|
22
|
+
- 🏷️ Version management scripts
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- 📚 Updated README with comprehensive installation instructions
|
|
26
|
+
- 🔧 Improved CLI error messages with emoji indicators
|
|
27
|
+
- 📊 Enhanced compiler output with detailed statistics
|
|
28
|
+
- 🎨 Better user experience with colored output
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- 🐛 Fixed bin paths in package.json
|
|
32
|
+
- 🔧 Corrected post-build script paths
|
|
33
|
+
- ✅ Improved TypeScript compilation
|
|
34
|
+
|
|
35
|
+
## [1.0.0] - Initial Release
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- 🎉 Initial release of Trest Language
|
|
39
|
+
- 🔤 Cyrillic support for keywords
|
|
40
|
+
- 🌐 Web compilation (JavaScript output)
|
|
41
|
+
- 💻 Executable compilation (.exe output)
|
|
42
|
+
- 📚 Standard library (Math, String, Array, IO)
|
|
43
|
+
- 📦 Module system (import/export)
|
|
44
|
+
- 🔄 Error handling (try/catch/throw)
|
|
45
|
+
- 🎯 Variables, functions, loops, conditions
|
|
46
|
+
- 📖 Complete documentation
|
|
47
|
+
|
package/INSTALL.md
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# 📦 Guia de Instalação - Trest Language
|
|
2
|
+
|
|
3
|
+
Este guia fornece instruções detalhadas para instalar e usar o Trest Language em diferentes cenários.
|
|
4
|
+
|
|
5
|
+
## 📋 Pré-requisitos
|
|
6
|
+
|
|
7
|
+
Antes de instalar o Trest, certifique-se de ter:
|
|
8
|
+
|
|
9
|
+
- **Node.js** >= 18.0.0
|
|
10
|
+
- **npm** >= 9.0.0
|
|
11
|
+
|
|
12
|
+
Verifique suas versões:
|
|
13
|
+
```bash
|
|
14
|
+
node --version
|
|
15
|
+
npm --version
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Se você não tem o Node.js instalado, baixe em: https://nodejs.org/
|
|
19
|
+
|
|
20
|
+
## 🚀 Instalação
|
|
21
|
+
|
|
22
|
+
### Opção 1: Instalação Global (Recomendado)
|
|
23
|
+
|
|
24
|
+
Instale o Trest globalmente para ter acesso aos comandos `trest` e `trestc` em qualquer lugar:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install -g trest-language
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Verifique a instalação:**
|
|
31
|
+
```bash
|
|
32
|
+
trest --version
|
|
33
|
+
trestc --version
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Uso:**
|
|
37
|
+
```bash
|
|
38
|
+
trest arquivo.trest
|
|
39
|
+
trestc arquivo.trest --mode web
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Opção 2: Instalação Local em Projeto
|
|
43
|
+
|
|
44
|
+
Para usar o Trest apenas em um projeto específico:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install trest-language
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Uso via npx:**
|
|
51
|
+
```bash
|
|
52
|
+
npx trest arquivo.trest
|
|
53
|
+
npx trestc arquivo.trest --mode web
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Opção 3: Instalação a partir do Código Fonte
|
|
57
|
+
|
|
58
|
+
Se você quer contribuir ou customizar o Trest:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Clone o repositório
|
|
62
|
+
git clone https://github.com/trest-language/trest.git
|
|
63
|
+
cd trest
|
|
64
|
+
|
|
65
|
+
# Instale as dependências
|
|
66
|
+
npm install
|
|
67
|
+
|
|
68
|
+
# Compile o projeto
|
|
69
|
+
npm run build
|
|
70
|
+
|
|
71
|
+
# (Opcional) Linke globalmente para testes
|
|
72
|
+
npm link
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 🎯 Verificação da Instalação
|
|
76
|
+
|
|
77
|
+
Após instalar, teste com um arquivo de exemplo:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Verificar versão
|
|
81
|
+
trest --version
|
|
82
|
+
|
|
83
|
+
# Ver ajuda
|
|
84
|
+
trest --help
|
|
85
|
+
|
|
86
|
+
# Executar exemplo
|
|
87
|
+
trest exemplos/hello_cyrillic.trest
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## 🔧 Configuração
|
|
91
|
+
|
|
92
|
+
### Arquivo de Configuração
|
|
93
|
+
|
|
94
|
+
O Trest cria automaticamente um arquivo `.trestrc` na primeira execução:
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"version": "2.0.0",
|
|
99
|
+
"compiler": {
|
|
100
|
+
"web": {
|
|
101
|
+
"minify": false,
|
|
102
|
+
"bundle": true
|
|
103
|
+
},
|
|
104
|
+
"exe": {
|
|
105
|
+
"minify": false,
|
|
106
|
+
"standalone": true
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"runtime": {
|
|
110
|
+
"strictMode": false,
|
|
111
|
+
"debugMode": false
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Variáveis de Ambiente (Opcional)
|
|
117
|
+
|
|
118
|
+
Você pode configurar variáveis de ambiente:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Modo debug global
|
|
122
|
+
export TREST_DEBUG=true
|
|
123
|
+
|
|
124
|
+
# Caminho para módulos std customizados
|
|
125
|
+
export TREST_STD_PATH=/caminho/para/std
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 🐛 Resolução de Problemas
|
|
129
|
+
|
|
130
|
+
### Erro: "command not found: trest"
|
|
131
|
+
|
|
132
|
+
**Causa:** Instalação global não funcionou ou PATH não está configurado.
|
|
133
|
+
|
|
134
|
+
**Solução:**
|
|
135
|
+
```bash
|
|
136
|
+
# Reinstalar globalmente
|
|
137
|
+
npm install -g trest-language
|
|
138
|
+
|
|
139
|
+
# Verificar local de instalação global
|
|
140
|
+
npm config get prefix
|
|
141
|
+
|
|
142
|
+
# Adicionar ao PATH (Linux/Mac)
|
|
143
|
+
export PATH=$PATH:$(npm config get prefix)/bin
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Erro: "Node version too old"
|
|
147
|
+
|
|
148
|
+
**Causa:** Versão do Node.js é menor que 18.
|
|
149
|
+
|
|
150
|
+
**Solução:** Atualize o Node.js:
|
|
151
|
+
```bash
|
|
152
|
+
# Usando nvm (recomendado)
|
|
153
|
+
nvm install 18
|
|
154
|
+
nvm use 18
|
|
155
|
+
|
|
156
|
+
# Ou baixe do site oficial
|
|
157
|
+
# https://nodejs.org/
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Erro: "Permission denied"
|
|
161
|
+
|
|
162
|
+
**Causa:** Sem permissões para instalar globalmente.
|
|
163
|
+
|
|
164
|
+
**Soluções:**
|
|
165
|
+
|
|
166
|
+
**Linux/Mac:**
|
|
167
|
+
```bash
|
|
168
|
+
# Usar sudo (não recomendado)
|
|
169
|
+
sudo npm install -g trest-language
|
|
170
|
+
|
|
171
|
+
# Ou configurar npm para não usar sudo
|
|
172
|
+
mkdir ~/.npm-global
|
|
173
|
+
npm config set prefix '~/.npm-global'
|
|
174
|
+
export PATH=~/.npm-global/bin:$PATH
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Windows:** Execute o PowerShell como Administrador
|
|
178
|
+
|
|
179
|
+
### Binários não encontrados após build
|
|
180
|
+
|
|
181
|
+
**Solução:**
|
|
182
|
+
```bash
|
|
183
|
+
# Limpar e reconstruir
|
|
184
|
+
npm run clean
|
|
185
|
+
npm run build
|
|
186
|
+
|
|
187
|
+
# Verificar se os arquivos existem
|
|
188
|
+
ls dist/cli.js dist/compiler.js
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## 🔄 Atualização
|
|
192
|
+
|
|
193
|
+
Para atualizar para a versão mais recente:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Global
|
|
197
|
+
npm update -g trest-language
|
|
198
|
+
|
|
199
|
+
# Local
|
|
200
|
+
npm update trest-language
|
|
201
|
+
|
|
202
|
+
# Verificar versão
|
|
203
|
+
trest --version
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## 🗑️ Desinstalação
|
|
207
|
+
|
|
208
|
+
Para remover o Trest:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Desinstalar globalmente
|
|
212
|
+
npm uninstall -g trest-language
|
|
213
|
+
|
|
214
|
+
# Desinstalar localmente
|
|
215
|
+
npm uninstall trest-language
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## 📚 Próximos Passos
|
|
219
|
+
|
|
220
|
+
Depois de instalar, consulte:
|
|
221
|
+
|
|
222
|
+
- [README.md](README.md) - Visão geral do projeto
|
|
223
|
+
- [docs/README.md](docs/README.md) - Documentação completa
|
|
224
|
+
- [docs/guide.md](docs/guide.md) - Guia de início rápido
|
|
225
|
+
- [docs/examples.md](docs/examples.md) - Exemplos de código
|
|
226
|
+
|
|
227
|
+
## 💡 Dicas
|
|
228
|
+
|
|
229
|
+
1. **Use `--verbose`** para ver detalhes da execução:
|
|
230
|
+
```bash
|
|
231
|
+
trest arquivo.trest --verbose
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
2. **Use `--debug`** para debugging detalhado:
|
|
235
|
+
```bash
|
|
236
|
+
trest arquivo.trest --debug
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
3. **Use `--strict`** para erros mais informativos:
|
|
240
|
+
```bash
|
|
241
|
+
trest arquivo.trest --strict
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
4. **Para compilação de produção:**
|
|
245
|
+
```bash
|
|
246
|
+
trestc app.trest --mode web --minify
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## 🤝 Contribuindo
|
|
250
|
+
|
|
251
|
+
Veja [CONTRIBUTING.md](CONTRIBUTING.md) para informações sobre como contribuir.
|
|
252
|
+
|
|
253
|
+
## 📞 Suporte
|
|
254
|
+
|
|
255
|
+
Se você encontrar problemas:
|
|
256
|
+
|
|
257
|
+
1. Verifique a seção de resolução de problemas acima
|
|
258
|
+
2. Consulte as [issues no GitHub](https://github.com/trest-language/trest/issues)
|
|
259
|
+
3. Abra uma nova issue se necessário
|
|
260
|
+
|
|
261
|
+
## 📄 Licença
|
|
262
|
+
|
|
263
|
+
MIT - veja [LICENSE](LICENSE) para mais detalhes.
|
|
264
|
+
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Trest Language Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
# Trest - Язык программирования с поддержкой кириллицы
|
|
2
|
+
|
|
3
|
+
Современный язык программирования, профессионально структурированный и компилируемый для **Web** и **Desktop (.exe)** с полной поддержкой кириллицы (русский алфавит).
|
|
4
|
+
|
|
5
|
+
> **📖 Версия на португальском:** Для документации на португальском используйте ключевые слова на португальском (se, enquanto, funcao, и т.д.) или смотрите примеры в папке `exemplos/`.
|
|
6
|
+
|
|
7
|
+
## 🚀 Основные возможности
|
|
8
|
+
|
|
9
|
+
- ✅ **Компиляция для Web** - Генерирует оптимизированный JavaScript
|
|
10
|
+
- ✅ **Компиляция для Desktop** - Создает нативные исполняемые файлы .exe
|
|
11
|
+
- ✅ **Система модулей** - Импорт/Экспорт модулей
|
|
12
|
+
- ✅ **Стандартная библиотека** - std с математическими функциями, строками, массивами и I/O
|
|
13
|
+
- ✅ **Обработка ошибок** - Расширенный Try/Catch/Throw
|
|
14
|
+
- ✅ **Синтаксис на кириллице** - Ключевые слова на русском языке
|
|
15
|
+
- ✅ **Динамическая типизация** - Типы выводятся автоматически
|
|
16
|
+
- ✅ **Система сборки** - Профессиональные инструменты компиляции
|
|
17
|
+
|
|
18
|
+
## 📦 Установка
|
|
19
|
+
|
|
20
|
+
### Установка через npm (рекомендуется)
|
|
21
|
+
|
|
22
|
+
**Глобальная установка:**
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g trest-language
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
После установки команды `trest` и `trestc` будут доступны глобально:
|
|
28
|
+
```bash
|
|
29
|
+
trest --version
|
|
30
|
+
trestc --help
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Локальная установка в проект:**
|
|
34
|
+
```bash
|
|
35
|
+
npm install trest-language
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Используйте через `npx`:
|
|
39
|
+
```bash
|
|
40
|
+
npx trest programa.trest
|
|
41
|
+
npx trestc programa.trest --mode web
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Установка из исходников
|
|
45
|
+
|
|
46
|
+
Если вы хотите установить из исходников или внести изменения:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Клонировать репозиторий
|
|
50
|
+
git clone https://github.com/trest-language/trest.git
|
|
51
|
+
cd trest
|
|
52
|
+
|
|
53
|
+
# Установить зависимости
|
|
54
|
+
npm install
|
|
55
|
+
|
|
56
|
+
# Собрать проект
|
|
57
|
+
npm run build
|
|
58
|
+
|
|
59
|
+
# (Опционально) Создать симлинки для глобального использования
|
|
60
|
+
npm link
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Требования
|
|
64
|
+
|
|
65
|
+
- **Node.js**: >= 18.0.0
|
|
66
|
+
- **npm**: >= 9.0.0
|
|
67
|
+
- **TypeScript**: 5.0+ (для разработки)
|
|
68
|
+
|
|
69
|
+
Проверьте вашу версию:
|
|
70
|
+
```bash
|
|
71
|
+
node --version # должно быть >= v18
|
|
72
|
+
npm --version # должно быть >= 9
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 🎯 Быстрый старт
|
|
76
|
+
|
|
77
|
+
### Запуск напрямую (интерпретатор)
|
|
78
|
+
```bash
|
|
79
|
+
npm start exemplos/hello_cyrillic.trest
|
|
80
|
+
# или
|
|
81
|
+
trest exemplos/hello_cyrillic.trest
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Компиляция для Web (JavaScript)
|
|
85
|
+
```bash
|
|
86
|
+
npm run compile:web -- exemplos/hello_cyrillic.trest
|
|
87
|
+
# или
|
|
88
|
+
trestc exemplos/hello_cyrillic.trest --mode web --output app.js
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Компиляция для исполняемого файла (.exe)
|
|
92
|
+
```bash
|
|
93
|
+
npm run compile:exe -- exemplos/hello_cyrillic.trest
|
|
94
|
+
# или
|
|
95
|
+
trestc exemplos/hello_cyrillic.trest --mode exe --output app.exe
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 📚 Синтаксис языка
|
|
99
|
+
|
|
100
|
+
### Переменные
|
|
101
|
+
|
|
102
|
+
```trest
|
|
103
|
+
перем имя = "Trest"
|
|
104
|
+
пусть возраст = 25
|
|
105
|
+
конст pi = 3.14159
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Функции
|
|
109
|
+
|
|
110
|
+
```trest
|
|
111
|
+
функция сложить(a, b) {
|
|
112
|
+
вернуть a + b
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
пусть результат = сложить(5, 3)
|
|
116
|
+
печать(результат)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Условия
|
|
120
|
+
|
|
121
|
+
```trest
|
|
122
|
+
если (возраст >= 18) {
|
|
123
|
+
печать("Совершеннолетний")
|
|
124
|
+
} иначе {
|
|
125
|
+
печать("Несовершеннолетний")
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Циклы
|
|
130
|
+
|
|
131
|
+
**Пока:**
|
|
132
|
+
```trest
|
|
133
|
+
пусть i = 0
|
|
134
|
+
пока (i < 10) {
|
|
135
|
+
печать(i)
|
|
136
|
+
i = i + 1
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Для:**
|
|
141
|
+
```trest
|
|
142
|
+
для (пусть i = 0; i < 10; i = i + 1) {
|
|
143
|
+
печать(i)
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Обработка ошибок
|
|
148
|
+
|
|
149
|
+
```trest
|
|
150
|
+
попытаться {
|
|
151
|
+
пусть результат = разделить(10, 0)
|
|
152
|
+
} перехватить (ошибка) {
|
|
153
|
+
печать("Ошибка:", ошибка)
|
|
154
|
+
} наконец {
|
|
155
|
+
печать("Операция завершена")
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Модули
|
|
160
|
+
|
|
161
|
+
**Импорт:**
|
|
162
|
+
```trest
|
|
163
|
+
импорт { max, min } из "std/math"
|
|
164
|
+
импорт * как Math из "std/math"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Экспорт:**
|
|
168
|
+
```trest
|
|
169
|
+
экспорт функция мояФункция() {
|
|
170
|
+
вернуть "Привет"
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
экспорт конст константа = 42
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Объекты
|
|
177
|
+
|
|
178
|
+
```trest
|
|
179
|
+
пусть человек = {
|
|
180
|
+
имя: "Иван",
|
|
181
|
+
возраст: 30,
|
|
182
|
+
город: "Москва"
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
печать(человек.имя) # "Иван"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Массивы
|
|
189
|
+
|
|
190
|
+
```trest
|
|
191
|
+
пусть числа = [1, 2, 3, 4, 5]
|
|
192
|
+
печать(числа[0]) # 1
|
|
193
|
+
|
|
194
|
+
числа[0] = 10
|
|
195
|
+
печать(числа) # [10, 2, 3, 4, 5]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## 📖 Стандартная библиотека (std)
|
|
199
|
+
|
|
200
|
+
### Math
|
|
201
|
+
|
|
202
|
+
```trest
|
|
203
|
+
импорт * как Math из "std/math"
|
|
204
|
+
|
|
205
|
+
пусть x = Math.abs(-5) # 5
|
|
206
|
+
пусть y = Math.max(10, 20) # 20
|
|
207
|
+
пусть z = Math.sqrt(16) # 4
|
|
208
|
+
пусть pi = Math.PI # 3.14159...
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### String
|
|
212
|
+
|
|
213
|
+
```trest
|
|
214
|
+
импорт * как String из "std/string"
|
|
215
|
+
|
|
216
|
+
пусть текст = "Привет Мир"
|
|
217
|
+
пусть размер = String.размер(текст) # 11
|
|
218
|
+
пусть верхний = String.верхний(текст) # "ПРИВЕТ МИР"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Array
|
|
222
|
+
|
|
223
|
+
```trest
|
|
224
|
+
импорт * как Array из "std/array"
|
|
225
|
+
|
|
226
|
+
пусть arr = [1, 2, 3]
|
|
227
|
+
Array.добавить(arr, 4) # [1, 2, 3, 4]
|
|
228
|
+
пусть обратный = Array.обратить(arr) # [4, 3, 2, 1]
|
|
229
|
+
пусть отсортированный = Array.отсортировать([3, 1, 2]) # [1, 2, 3]
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### IO
|
|
233
|
+
|
|
234
|
+
```trest
|
|
235
|
+
импорт * как IO из "std/io"
|
|
236
|
+
|
|
237
|
+
пусть содержимое = IO.читатьФайл("файл.txt")
|
|
238
|
+
IO.писатьФайл("выход.txt", "Содержимое")
|
|
239
|
+
пусть существует = IO.существуетФайл("файл.txt")
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 🏗️ Структура проекта
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
treste/
|
|
246
|
+
├── src/
|
|
247
|
+
│ ├── lexer.ts # Лексический анализатор
|
|
248
|
+
│ ├── parser.ts # Синтаксический анализатор
|
|
249
|
+
│ ├── ast.ts # Определения AST
|
|
250
|
+
│ ├── interpreter.ts # Интерпретатор
|
|
251
|
+
│ ├── compiler.ts # CLI компилятора
|
|
252
|
+
│ ├── compiler/
|
|
253
|
+
│ │ ├── web.ts # Компилятор для Web
|
|
254
|
+
│ │ └── exe.ts # Компилятор для исполняемого файла
|
|
255
|
+
│ ├── std/ # Стандартная библиотека
|
|
256
|
+
│ │ ├── math.trest
|
|
257
|
+
│ │ ├── string.trest
|
|
258
|
+
│ │ ├── array.trest
|
|
259
|
+
│ │ └── io.trest
|
|
260
|
+
│ ├── types.ts # Система типов
|
|
261
|
+
│ ├── errors.ts # Обработка ошибок
|
|
262
|
+
│ └── module.ts # Система модулей
|
|
263
|
+
├── exemplos/ # Примеры программ
|
|
264
|
+
├── dist/ # Скомпилированный код
|
|
265
|
+
└── package.json
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## 🔧 Доступные скрипты
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
npm run build # Компилировать TypeScript
|
|
272
|
+
npm run build:watch # Компилировать в режиме наблюдения
|
|
273
|
+
npm start <файл> # Запустить файл Trest
|
|
274
|
+
npm run compile:web # Компилировать в JavaScript
|
|
275
|
+
npm run compile:exe # Компилировать в исполняемый файл
|
|
276
|
+
npm run bundle # Создать исполняемый bundle
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## 📝 Ключевые слова
|
|
280
|
+
|
|
281
|
+
### Кириллица (Русский) - Основной синтаксис
|
|
282
|
+
| Trest | Эквивалент |
|
|
283
|
+
|-------|------------|
|
|
284
|
+
| `если` | if |
|
|
285
|
+
| `иначе` | else |
|
|
286
|
+
| `пока` | while |
|
|
287
|
+
| `для` | for |
|
|
288
|
+
| `функция` | function |
|
|
289
|
+
| `вернуть` | return |
|
|
290
|
+
| `перем`, `пусть`, `конст` | var, let, const |
|
|
291
|
+
| `печать` | print/console.log |
|
|
292
|
+
| `импорт` | import |
|
|
293
|
+
| `экспорт` | export |
|
|
294
|
+
| `из` | from |
|
|
295
|
+
| `попытаться` | try |
|
|
296
|
+
| `перехватить` | catch |
|
|
297
|
+
| `бросить` | throw |
|
|
298
|
+
| `наконец` | finally |
|
|
299
|
+
| `прервать` | break |
|
|
300
|
+
| `продолжить` | continue |
|
|
301
|
+
| `истина` | true |
|
|
302
|
+
| `ложь` | false |
|
|
303
|
+
|
|
304
|
+
### Português (Latino) - Alternativa
|
|
305
|
+
| Trest | Equivalente |
|
|
306
|
+
|-------|-------------|
|
|
307
|
+
| `se` | if |
|
|
308
|
+
| `senao` | else |
|
|
309
|
+
| `enquanto` | while |
|
|
310
|
+
| `para` | for |
|
|
311
|
+
| `funcao` | function |
|
|
312
|
+
| `retorne` | return |
|
|
313
|
+
| `var`, `let`, `const` | var, let, const |
|
|
314
|
+
| `imprima` | print/console.log |
|
|
315
|
+
| `importe` | import |
|
|
316
|
+
| `exporte` | export |
|
|
317
|
+
| `de` | from |
|
|
318
|
+
| `tente` | try |
|
|
319
|
+
| `capture` | catch |
|
|
320
|
+
| `lance` | throw |
|
|
321
|
+
| `finalmente` | finally |
|
|
322
|
+
| `quebre` | break |
|
|
323
|
+
| `continue` | continue |
|
|
324
|
+
| `verdadeiro` | true |
|
|
325
|
+
| `falso` | false |
|
|
326
|
+
|
|
327
|
+
## 🌐 Компиляция для Web
|
|
328
|
+
|
|
329
|
+
Компилятор для web генерирует современный JavaScript, который может использоваться в:
|
|
330
|
+
- Браузерах (через `<script>` или bundler)
|
|
331
|
+
- Node.js
|
|
332
|
+
- React/Vue/Angular
|
|
333
|
+
- Любой JavaScript-среде
|
|
334
|
+
|
|
335
|
+
**Пример:**
|
|
336
|
+
```bash
|
|
337
|
+
trestc программа.trest --mode web --output app.js
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## 💻 Компиляция для исполняемого файла
|
|
341
|
+
|
|
342
|
+
Компилятор для исполняемого файла создает `.exe` файл, который:
|
|
343
|
+
- Не требует установленного Node.js
|
|
344
|
+
- Автономен (включает все зависимости)
|
|
345
|
+
- Запускается напрямую в Windows
|
|
346
|
+
|
|
347
|
+
**Пример:**
|
|
348
|
+
```bash
|
|
349
|
+
trestc программа.trest --mode exe --output app.exe
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## 🎓 Примеры
|
|
353
|
+
|
|
354
|
+
Смотрите папку `exemplos/` для полных программ, демонстрирующих:
|
|
355
|
+
- Базовые операции
|
|
356
|
+
- Функции и замыкания
|
|
357
|
+
- Структуры управления
|
|
358
|
+
- Массивы и объекты
|
|
359
|
+
- Модули и импорты
|
|
360
|
+
- Обработку ошибок
|
|
361
|
+
|
|
362
|
+
**Примеры на кириллице:**
|
|
363
|
+
- `exemplos/hello_cyrillic.trest` - Привет Мир
|
|
364
|
+
- `exemplos/variaveis_cyrillic.trest` - Переменные
|
|
365
|
+
- `exemplos/condicional_cyrillic.trest` - Условные операторы
|
|
366
|
+
- `exemplos/loop_cyrillic.trest` - Циклы
|
|
367
|
+
- `exemplos/funcao_cyrillic.trest` - Функции
|
|
368
|
+
- `exemplos/completo_cyrillic.trest` - Полный пример
|
|
369
|
+
|
|
370
|
+
**Примеры на португальском:**
|
|
371
|
+
- `exemplos/hello.trest` - Olá Mundo
|
|
372
|
+
- `exemplos/variaveis.trest` - Variáveis
|
|
373
|
+
- И другие...
|
|
374
|
+
|
|
375
|
+
## 📄 Лицензия
|
|
376
|
+
|
|
377
|
+
MIT
|
|
378
|
+
|
|
379
|
+
## 👤 Автор
|
|
380
|
+
|
|
381
|
+
**PoktWeb**
|
|
382
|
+
|
|
383
|
+
- Сайт документации: [https://trest-site.vercel.app](https://trest-site.vercel.app)
|
|
384
|
+
- GitHub: [@poktweb](https://github.com/poktweb)
|
|
385
|
+
|
|
386
|
+
## 🤝 Вклад
|
|
387
|
+
|
|
388
|
+
Вклады приветствуются! Не стесняйтесь открывать issues и pull requests.
|