treste 2.5.4 → 2.5.5
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/README.md +524 -536
- package/dist/cli.js +17 -8
- package/dist/cli.js.map +1 -1
- package/dist/compiler/exe.d.ts.map +1 -1
- package/dist/compiler/exe.js +3 -9
- package/dist/compiler/exe.js.map +1 -1
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +5 -0
- package/dist/interpreter.js.map +1 -1
- package/dist/std-native.d.ts +43 -6
- package/dist/std-native.d.ts.map +1 -1
- package/dist/std-native.js +791 -62
- package/dist/std-native.js.map +1 -1
- package/package.json +7 -9
package/README.md
CHANGED
|
@@ -1,536 +1,524 @@
|
|
|
1
|
-
# Trest - Linguagem de Programação com Suporte a Cirílico
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/treste)
|
|
4
|
-
[](https://opensource.org/licenses/MIT)
|
|
5
|
-
[](https://nodejs.org/)
|
|
6
|
-
[](https://trest-site.vercel.app)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- ✅ **
|
|
22
|
-
- ✅ **Compilação para
|
|
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
|
-
npx
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- **
|
|
83
|
-
- **
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
trest -e "печать(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
импорт
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
числа[
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
пусть
|
|
268
|
-
пусть
|
|
269
|
-
пусть
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
пусть
|
|
279
|
-
пусть
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
Array
|
|
290
|
-
пусть
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
HTTP
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
пусть
|
|
310
|
-
пусть
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
FS
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
пусть
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
пусть
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
DB
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
пусть
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
пусть
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
пусть
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
├──
|
|
383
|
-
│ ├──
|
|
384
|
-
│ ├──
|
|
385
|
-
│ ├──
|
|
386
|
-
│ ├──
|
|
387
|
-
│ ├── compiler
|
|
388
|
-
│ ├──
|
|
389
|
-
│ │
|
|
390
|
-
│
|
|
391
|
-
│ ├──
|
|
392
|
-
│ │ ├──
|
|
393
|
-
│ │ ├──
|
|
394
|
-
│ │ ├──
|
|
395
|
-
│ │ ├──
|
|
396
|
-
│ │ ├──
|
|
397
|
-
│ │ ├──
|
|
398
|
-
│ │ ├──
|
|
399
|
-
│ │ ├──
|
|
400
|
-
│ │ ├──
|
|
401
|
-
│ │ ├──
|
|
402
|
-
│ │ ├──
|
|
403
|
-
│ │
|
|
404
|
-
│
|
|
405
|
-
│ ├──
|
|
406
|
-
│
|
|
407
|
-
|
|
408
|
-
├──
|
|
409
|
-
├──
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
npm run build
|
|
418
|
-
npm
|
|
419
|
-
npm
|
|
420
|
-
npm run compile:
|
|
421
|
-
npm run
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
|
432
|
-
|
|
|
433
|
-
|
|
|
434
|
-
|
|
|
435
|
-
|
|
|
436
|
-
|
|
|
437
|
-
|
|
|
438
|
-
|
|
|
439
|
-
|
|
|
440
|
-
|
|
|
441
|
-
|
|
|
442
|
-
|
|
|
443
|
-
|
|
|
444
|
-
|
|
|
445
|
-
|
|
|
446
|
-
|
|
|
447
|
-
|
|
|
448
|
-
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
-
|
|
457
|
-
-
|
|
458
|
-
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
-
|
|
470
|
-
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
-
|
|
482
|
-
-
|
|
483
|
-
-
|
|
484
|
-
-
|
|
485
|
-
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
- `exemplos/
|
|
490
|
-
- `exemplos/
|
|
491
|
-
- `exemplos/
|
|
492
|
-
- `exemplos/
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
[
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
**
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
##
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
MIT
|
|
527
|
-
|
|
528
|
-
## 👤 Autor
|
|
529
|
-
|
|
530
|
-
**PoktWeb**
|
|
531
|
-
|
|
532
|
-
- Site de documentação: [https://trest-site.vercel.app](https://trest-site.vercel.app)
|
|
533
|
-
|
|
534
|
-
## 🤝 Contribuições
|
|
535
|
-
|
|
536
|
-
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.
|
|
1
|
+
# Trest - Linguagem de Programação com Suporte a Cirílico
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/treste)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://trest-site.vercel.app)
|
|
7
|
+
|
|
8
|
+
Linguagem de programação moderna e profissional, estruturalmente organizada e compilável para **Web** e **Desktop (.exe)** com suporte completo a cirílico (alfabeto russo).
|
|
9
|
+
|
|
10
|
+
> **🎯 Característica Única:** Trest permite programar usando palavras-chave em cirílico ou latino, mantendo a mesma sintaxe e funcionalidades.
|
|
11
|
+
|
|
12
|
+
> **🔒 Segurança:** Versão 2.5.5 mantém todas as correções de segurança da cadeia de suprimentos. Veja [DOCUMENTACAO_COMPLETA.md](./DOCUMENTACAO_COMPLETA.md#segurança) para detalhes.
|
|
13
|
+
|
|
14
|
+
> **🚀 Deploy na Vercel:** Versão 2.5.5 inclui suporte completo para deploy na Vercel! Use `npm create trest` para criar projetos otimizados para serverless functions.
|
|
15
|
+
|
|
16
|
+
> **🌐 Full Stack Revolution:** Versão 2.5.5 adiciona manipulação de DOM, CSS e interoperabilidade com NPM! Trest agora é uma linguagem completa para Web e Desktop.
|
|
17
|
+
|
|
18
|
+
## 🚀 Principais Funcionalidades
|
|
19
|
+
|
|
20
|
+
- ✅ **Execução Inline** - Execute código direto na linha de comando com `-e`
|
|
21
|
+
- ✅ **Compilação para Web** - Gera JavaScript otimizado
|
|
22
|
+
- ✅ **Compilação para Desktop** - Cria executáveis .exe nativos
|
|
23
|
+
- ✅ **Deploy na Vercel** - Crie projetos otimizados para serverless functions
|
|
24
|
+
- ✅ **Manipulação de DOM** - Módulo std/dom para interação com páginas web
|
|
25
|
+
- ✅ **Sistema de CSS** - Módulo std/style para estilização e carregamento de CSS
|
|
26
|
+
- ✅ **Interoperabilidade NPM** - Importe qualquer pacote do ecossistema Node.js
|
|
27
|
+
- ✅ **Framework de Testes** - Módulo std/test para testes unitários
|
|
28
|
+
- ✅ **Sistema de Módulos** - Import/Export de módulos
|
|
29
|
+
- ✅ **Biblioteca Padrão** - std com funções matemáticas, strings, arrays e I/O
|
|
30
|
+
- ✅ **Tratamento de Erros** - Try/Catch/Throw estendido
|
|
31
|
+
- ✅ **Sintaxe em Cirílico** - Palavras-chave em russo
|
|
32
|
+
- ✅ **Tipagem Dinâmica** - Tipos inferidos automaticamente
|
|
33
|
+
- ✅ **Sistema de Build** - Ferramentas de compilação profissionais
|
|
34
|
+
|
|
35
|
+
## 📦 Instalação
|
|
36
|
+
|
|
37
|
+
### Instalação via npm (recomendado)
|
|
38
|
+
|
|
39
|
+
**Instalação global:**
|
|
40
|
+
```bash
|
|
41
|
+
npm install -g treste
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Após a instalação, os comandos `trest` e `trestc` estarão disponíveis globalmente:
|
|
45
|
+
```bash
|
|
46
|
+
trest --version
|
|
47
|
+
trestc --help
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Instalação local em projeto:**
|
|
51
|
+
```bash
|
|
52
|
+
npm install treste
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Use via `npx`:
|
|
56
|
+
```bash
|
|
57
|
+
npx trest programa.trest
|
|
58
|
+
npx trestc programa.trest --mode web
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Instalação a partir do código-fonte
|
|
62
|
+
|
|
63
|
+
Se você quiser instalar a partir do código-fonte ou fazer modificações:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Baixar o código-fonte
|
|
67
|
+
cd treste
|
|
68
|
+
|
|
69
|
+
# Instalar dependências
|
|
70
|
+
npm install
|
|
71
|
+
|
|
72
|
+
# Compilar o projeto
|
|
73
|
+
npm run build
|
|
74
|
+
|
|
75
|
+
# (Opcional) Criar links globais para testes
|
|
76
|
+
npm link
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Requisitos
|
|
80
|
+
|
|
81
|
+
- **Node.js**: >= 18.0.0
|
|
82
|
+
- **npm**: >= 9.0.0
|
|
83
|
+
- **TypeScript**: 5.0+ (para desenvolvimento)
|
|
84
|
+
|
|
85
|
+
Verifique sua versão:
|
|
86
|
+
```bash
|
|
87
|
+
node --version # deve ser >= v18
|
|
88
|
+
npm --version # deve ser >= 9
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## 🎯 Guia Rápido
|
|
92
|
+
|
|
93
|
+
### Criar novo projeto (Vercel-ready)
|
|
94
|
+
```bash
|
|
95
|
+
# Opção 1: Usando npx (Recomendado)
|
|
96
|
+
npx create-trest-app meu-projeto
|
|
97
|
+
|
|
98
|
+
# Opção 2: Usando npx com alias
|
|
99
|
+
npx create-trest meu-projeto
|
|
100
|
+
|
|
101
|
+
# Opção 3: Se já tiver instalado globalmente
|
|
102
|
+
npm install -g treste@latest
|
|
103
|
+
create-trest-app meu-projeto
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Nota:** O comando `npm create trest` requer um pacote separado `create-trest` no npm. Use `npx create-trest-app` que funciona imediatamente.
|
|
107
|
+
|
|
108
|
+
### Executar código inline (sem arquivo)
|
|
109
|
+
```bash
|
|
110
|
+
trest -e "печать('Olá, Mundo!')"
|
|
111
|
+
trest -e "пусть x = 10; печать(x)"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Executar arquivo (interpretador)
|
|
115
|
+
```bash
|
|
116
|
+
trest exemplos/hello_cyrillic.trest
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Compilar para Web (JavaScript)
|
|
120
|
+
```bash
|
|
121
|
+
npm run compile:web -- exemplos/hello_cyrillic.trest
|
|
122
|
+
# ou
|
|
123
|
+
trestc exemplos/hello_cyrillic.trest --mode web --output app.js
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Compilar para executável (.exe)
|
|
127
|
+
```bash
|
|
128
|
+
npm run compile:exe -- exemplos/hello_cyrillic.trest
|
|
129
|
+
# ou
|
|
130
|
+
trestc exemplos/hello_cyrillic.trest --mode exe --output app.exe
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 📚 Sintaxe da Linguagem
|
|
134
|
+
|
|
135
|
+
Todos os exemplos abaixo usam a sintaxe em **cirílico** (palavras-chave em russo), que é a forma nativa do Trest:
|
|
136
|
+
|
|
137
|
+
### Variáveis
|
|
138
|
+
|
|
139
|
+
```trest
|
|
140
|
+
перем имя = "Trest"
|
|
141
|
+
пусть возраст = 25
|
|
142
|
+
конст pi = 3.14159
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Funções
|
|
146
|
+
|
|
147
|
+
```trest
|
|
148
|
+
функция сложить(a, b) {
|
|
149
|
+
вернуть a + b
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
пусть результат = сложить(5, 3)
|
|
153
|
+
печать(результат)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Condicionais
|
|
157
|
+
|
|
158
|
+
```trest
|
|
159
|
+
если (возраст >= 18) {
|
|
160
|
+
печать("Совершеннолетний")
|
|
161
|
+
} иначе {
|
|
162
|
+
печать("Несовершеннолетний")
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Operadores Ternários
|
|
167
|
+
|
|
168
|
+
```trest
|
|
169
|
+
пусть result = возраст >= 18 ? "Adulto" : "Menor"
|
|
170
|
+
печать(result)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Switch/Case
|
|
174
|
+
|
|
175
|
+
```trest
|
|
176
|
+
переключатель (день) {
|
|
177
|
+
случай 1:
|
|
178
|
+
печать("Понедельник")
|
|
179
|
+
прервать
|
|
180
|
+
случай 2:
|
|
181
|
+
печать("Вторник")
|
|
182
|
+
прервать
|
|
183
|
+
поумолчанию:
|
|
184
|
+
печать("Другой день")
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Loops
|
|
189
|
+
|
|
190
|
+
**While (Enquanto):**
|
|
191
|
+
```trest
|
|
192
|
+
пусть i = 0
|
|
193
|
+
пока (i < 10) {
|
|
194
|
+
печать(i)
|
|
195
|
+
i = i + 1
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**For (Para):**
|
|
200
|
+
```trest
|
|
201
|
+
для (пусть i = 0; i < 10; i = i + 1) {
|
|
202
|
+
печать(i)
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Tratamento de Erros
|
|
207
|
+
|
|
208
|
+
```trest
|
|
209
|
+
попытаться {
|
|
210
|
+
пусть результат = разделить(10, 0)
|
|
211
|
+
} перехватить (ошибка) {
|
|
212
|
+
печать("Ошибка:", ошибка)
|
|
213
|
+
} наконец {
|
|
214
|
+
печать("Операция завершена")
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Módulos
|
|
219
|
+
|
|
220
|
+
**Import (Importar):**
|
|
221
|
+
```trest
|
|
222
|
+
импорт { max, min } измодуля "std/math"
|
|
223
|
+
импорт * как Math измодуля "std/math"
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Export (Exportar):**
|
|
227
|
+
```trest
|
|
228
|
+
экспорт функция мояФункция() {
|
|
229
|
+
вернуть "Привет"
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
экспорт конст константа = 42
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Objetos
|
|
236
|
+
|
|
237
|
+
```trest
|
|
238
|
+
пусть человек = {
|
|
239
|
+
имя: "Иван",
|
|
240
|
+
возраст: 30,
|
|
241
|
+
город: "Москва"
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
печать(человек.имя) # "Иван"
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Arrays
|
|
248
|
+
|
|
249
|
+
```trest
|
|
250
|
+
пусть числа = [1, 2, 3, 4, 5]
|
|
251
|
+
печать(числа[0]) # 1
|
|
252
|
+
|
|
253
|
+
числа[0] = 10
|
|
254
|
+
печать(числа) # [10, 2, 3, 4, 5]
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## 📖 Biblioteca Padrão (std)
|
|
258
|
+
|
|
259
|
+
Trest inclui uma biblioteca padrão rica com 11 módulos:
|
|
260
|
+
|
|
261
|
+
### Math (Matemática)
|
|
262
|
+
|
|
263
|
+
```trest
|
|
264
|
+
импорт * как Math измодуля "std/math"
|
|
265
|
+
|
|
266
|
+
пусть x = Math.abs(-5) # 5
|
|
267
|
+
пусть y = Math.max(10, 20) # 20
|
|
268
|
+
пусть z = Math.sqrt(16) # 4
|
|
269
|
+
пусть pi = Math.PI # 3.14159...
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### String (Cadeias de Texto)
|
|
273
|
+
|
|
274
|
+
```trest
|
|
275
|
+
импорт * как String измодуля "std/string"
|
|
276
|
+
|
|
277
|
+
пусть текст = "Привет Мир"
|
|
278
|
+
пусть размер = String.размер(текст) # 11
|
|
279
|
+
пусть верхний = String.верхний(текст) # "ПРИВЕТ МИР"
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Array (Arrays)
|
|
283
|
+
|
|
284
|
+
```trest
|
|
285
|
+
импорт * как Array измодуля "std/array"
|
|
286
|
+
|
|
287
|
+
пусть arr = [1, 2, 3]
|
|
288
|
+
Array.добавить(arr, 4) # [1, 2, 3, 4]
|
|
289
|
+
пусть обратный = Array.обратить(arr) # [4, 3, 2, 1]
|
|
290
|
+
пусть отсортированный = Array.отсортировать([3, 1, 2]) # [1, 2, 3]
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### HTTP (Client e Server)
|
|
294
|
+
|
|
295
|
+
```trest
|
|
296
|
+
импорт * как HTTP измодуля "std/http"
|
|
297
|
+
|
|
298
|
+
пусть resposta = HTTP.GET("https://api.example.com")
|
|
299
|
+
HTTP.POST("https://api.example.com", данные)
|
|
300
|
+
HTTP.создатьСервер(3000, обработчик)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Crypto (Criptografia)
|
|
304
|
+
|
|
305
|
+
```trest
|
|
306
|
+
импорт * как Crypto измодуля "std/crypto"
|
|
307
|
+
|
|
308
|
+
пусть hash = Crypto.md5("текст")
|
|
309
|
+
пусть sha = Crypto.sha256("данные")
|
|
310
|
+
пусть encrypted = Crypto.зашифровать("секрет", "ключ")
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### FileSystem (Sistema de Arquivos)
|
|
314
|
+
|
|
315
|
+
```trest
|
|
316
|
+
импорт * как FS измодуля "std/filesystem"
|
|
317
|
+
|
|
318
|
+
пусть содержимое = FS.читатьФайл("файл.txt")
|
|
319
|
+
FS.писатьФайл("выход.txt", "Содержимое")
|
|
320
|
+
пусть существует = FS.существуетФайл("файл.txt")
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### JSON (Manipulação de JSON)
|
|
324
|
+
|
|
325
|
+
```trest
|
|
326
|
+
импорт * как JSON измодуля "std/json"
|
|
327
|
+
|
|
328
|
+
пусть obj = JSON.парсить('{"имя": "Иван"}')
|
|
329
|
+
пусть str = JSON.строка({имя: "Иван"})
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Date (Datas)
|
|
333
|
+
|
|
334
|
+
```trest
|
|
335
|
+
импорт * как Date измодуля "std/date"
|
|
336
|
+
|
|
337
|
+
пусть agora = Date.сейчас()
|
|
338
|
+
пусть formatado = Date.форматировать(agora, "YYYY-MM-DD")
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Database (Base de Dados)
|
|
342
|
+
|
|
343
|
+
```trest
|
|
344
|
+
импорт * как DB измодуля "std/database"
|
|
345
|
+
|
|
346
|
+
DB.подключить("sqlite", "dados.db")
|
|
347
|
+
DB.выполнить("SELECT * FROM usuarios")
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### RegEx (Expressões Regulares)
|
|
351
|
+
|
|
352
|
+
```trest
|
|
353
|
+
импорт * как RegEx измодуля "std/regex"
|
|
354
|
+
|
|
355
|
+
пусть matches = RegEx.найти("olá mundo", /olá/)
|
|
356
|
+
пусть replaced = RegEx.заменить("olá", /olá/, "привет")
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Path (Caminhos de Arquivo)
|
|
360
|
+
|
|
361
|
+
```trest
|
|
362
|
+
импорт * как Path измодуля "std/path"
|
|
363
|
+
|
|
364
|
+
пусть dir = Path.директория("/caminho/arquivo.txt") # "/caminho"
|
|
365
|
+
пусть name = Path.имя("arquivo.txt") # "arquivo.txt"
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Process (Variáveis de Ambiente)
|
|
369
|
+
|
|
370
|
+
```trest
|
|
371
|
+
импорт * как Process измодуля "std/process"
|
|
372
|
+
|
|
373
|
+
пусть user = Process.получитьEnv("USER")
|
|
374
|
+
пусть envs = Process.получитьEnvVars()
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## 🏗️ Estrutura do Projeto
|
|
378
|
+
|
|
379
|
+
```
|
|
380
|
+
treste/
|
|
381
|
+
├── src/
|
|
382
|
+
│ ├── lexer.ts # Analisador léxico
|
|
383
|
+
│ ├── parser.ts # Analisador sintático
|
|
384
|
+
│ ├── ast.ts # Definições AST
|
|
385
|
+
│ ├── interpreter.ts # Interpretador
|
|
386
|
+
│ ├── compiler.ts # CLI do compilador
|
|
387
|
+
│ ├── compiler/
|
|
388
|
+
│ │ ├── web.ts # Compilador para Web
|
|
389
|
+
│ │ └── exe.ts # Compilador para executável
|
|
390
|
+
│ ├── std/ # Biblioteca padrão
|
|
391
|
+
│ │ ├── math.trest
|
|
392
|
+
│ │ ├── string.trest
|
|
393
|
+
│ │ ├── array.trest
|
|
394
|
+
│ │ ├── http.trest
|
|
395
|
+
│ │ ├── crypto.trest
|
|
396
|
+
│ │ ├── filesystem.trest
|
|
397
|
+
│ │ ├── json.trest
|
|
398
|
+
│ │ ├── date.trest
|
|
399
|
+
│ │ ├── database.trest
|
|
400
|
+
│ │ ├── regex.trest
|
|
401
|
+
│ │ ├── path.trest
|
|
402
|
+
│ │ ├── process.trest
|
|
403
|
+
│ │ └── io.trest
|
|
404
|
+
│ ├── types.ts # Sistema de tipos
|
|
405
|
+
│ ├── errors.ts # Tratamento de erros
|
|
406
|
+
│ └── module.ts # Sistema de módulos
|
|
407
|
+
├── exemplos/ # Exemplos de programas
|
|
408
|
+
├── DOCUMENTACAO_COMPLETA.md # Documentação completa unificada
|
|
409
|
+
├── dist/ # Código compilado
|
|
410
|
+
└── package.json
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
## 🔧 Scripts Disponíveis
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
npm run build # Compilar TypeScript
|
|
417
|
+
npm run build:watch # Compilar em modo watch
|
|
418
|
+
npm start <arquivo> # Executar arquivo Trest
|
|
419
|
+
npm run compile:web # Compilar para JavaScript
|
|
420
|
+
npm run compile:exe # Compilar para executável
|
|
421
|
+
npm run bundle # Criar bundle executável
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
## 📝 Palavras-Chave
|
|
425
|
+
|
|
426
|
+
### Cirílico (Russo) - Sintaxe Principal
|
|
427
|
+
|
|
428
|
+
| Trest | Equivalente |
|
|
429
|
+
|-------|-------------|
|
|
430
|
+
| `если` | if |
|
|
431
|
+
| `иначе` | else |
|
|
432
|
+
| `пока` | while |
|
|
433
|
+
| `для` | for |
|
|
434
|
+
| `функция` | function |
|
|
435
|
+
| `вернуть` | return |
|
|
436
|
+
| `перем`, `пусть`, `конст` | var, let, const |
|
|
437
|
+
| `печать` | print/console.log |
|
|
438
|
+
| `импорт` | import |
|
|
439
|
+
| `экспорт` | export |
|
|
440
|
+
| `измодуля` | from |
|
|
441
|
+
| `попытаться` | try |
|
|
442
|
+
| `перехватить` | catch |
|
|
443
|
+
| `бросить` | throw |
|
|
444
|
+
| `наконец` | finally |
|
|
445
|
+
| `прервать` | break |
|
|
446
|
+
| `продолжить` | continue |
|
|
447
|
+
| `истина` | true |
|
|
448
|
+
| `ложь` | false |
|
|
449
|
+
|
|
450
|
+
> **Nota:** Embora Trest suporte palavras-chave em latino, o uso de cirílico é a forma recomendada e nativa da linguagem.
|
|
451
|
+
|
|
452
|
+
## 🌐 Compilação para Web
|
|
453
|
+
|
|
454
|
+
O compilador para web gera JavaScript moderno que pode ser usado em:
|
|
455
|
+
- Navegadores (via `<script>` ou bundler)
|
|
456
|
+
- Node.js
|
|
457
|
+
- React/Vue/Angular
|
|
458
|
+
- Qualquer ambiente JavaScript
|
|
459
|
+
|
|
460
|
+
**Exemplo:**
|
|
461
|
+
```bash
|
|
462
|
+
trestc программа.trest --mode web --output app.js
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
## 💻 Compilação para Executável
|
|
466
|
+
|
|
467
|
+
O compilador para executável cria arquivo `.exe` que:
|
|
468
|
+
- Não requer Node.js instalado
|
|
469
|
+
- É autossuficiente (inclui todas as dependências)
|
|
470
|
+
- Executa diretamente no Windows
|
|
471
|
+
|
|
472
|
+
**Exemplo:**
|
|
473
|
+
```bash
|
|
474
|
+
trestc программа.trest --mode exe --output app.exe
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
## 🎓 Exemplos
|
|
478
|
+
|
|
479
|
+
Veja a pasta `exemplos/` para programas completos demonstrando:
|
|
480
|
+
- Operações básicas
|
|
481
|
+
- Funções e closures
|
|
482
|
+
- Estruturas de controle
|
|
483
|
+
- Arrays e objetos
|
|
484
|
+
- Módulos e imports
|
|
485
|
+
- Tratamento de erros
|
|
486
|
+
|
|
487
|
+
**Exemplos em cirílico:**
|
|
488
|
+
- `exemplos/crypto_demo.trest` - Demonstração de criptografia
|
|
489
|
+
- `exemplos/http_demo.trest` - Cliente HTTP e servidor
|
|
490
|
+
- `exemplos/database_demo.trest` - Operações de banco de dados
|
|
491
|
+
- `exemplos/filesystem_demo.trest` - Operações de arquivo
|
|
492
|
+
- `exemplos/todas_funcionalidades.trest` - Exemplo completo
|
|
493
|
+
|
|
494
|
+
## 🔒 Segurança
|
|
495
|
+
|
|
496
|
+
**Versão 2.5.5** mantém todas as correções de segurança da cadeia de suprimentos:
|
|
497
|
+
- ✅ Scripts de instalação removidos
|
|
498
|
+
- ✅ Sem acesso ao shell durante instalação
|
|
499
|
+
- ✅ Acesso à rede controlado e documentado
|
|
500
|
+
|
|
501
|
+
**Documentação de Segurança:**
|
|
502
|
+
Consulte a seção de [Segurança](./DOCUMENTACAO_COMPLETA.md#segurança) na documentação completa.
|
|
503
|
+
|
|
504
|
+
## 📚 Documentação Completa
|
|
505
|
+
|
|
506
|
+
Para mais informações, consulte a documentação completa:
|
|
507
|
+
|
|
508
|
+
- **[DOCUMENTACAO_COMPLETA.md](./DOCUMENTACAO_COMPLETA.md)** - Documentação completa unificada (inclui guia, referência da API, exemplos e arquitetura)
|
|
509
|
+
|
|
510
|
+
Ou visite o site oficial: [https://trest-site.vercel.app](https://trest-site.vercel.app)
|
|
511
|
+
|
|
512
|
+
## 📄 Licença
|
|
513
|
+
|
|
514
|
+
MIT
|
|
515
|
+
|
|
516
|
+
## 👤 Autor
|
|
517
|
+
|
|
518
|
+
**PoktWeb**
|
|
519
|
+
|
|
520
|
+
- Site de documentação: [https://trest-site.vercel.app](https://trest-site.vercel.app)
|
|
521
|
+
|
|
522
|
+
## 🤝 Contribuições
|
|
523
|
+
|
|
524
|
+
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.
|