hispano-lang 1.1.7 → 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/README.md CHANGED
@@ -1,41 +1,106 @@
1
- # HispanoLang
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/nicvazquezdev/hispano-lang-website/main/public/hl-main-logo.png" alt="HispanoLang" width="180"/>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <strong>El lenguaje de programación en español</strong>
7
+ </p>
8
+
9
+ <p align="center">
10
+ Un lenguaje de programación moderno, expresivo y completamente en español.<br/>
11
+ Diseñado para eliminar las barreras del idioma en la educación tecnológica.
12
+ </p>
13
+
14
+ <p align="center">
15
+ <a href="https://www.npmjs.com/package/hispano-lang"><img src="https://img.shields.io/npm/v/hispano-lang?style=for-the-badge&logo=npm&logoColor=white&color=cb3837" alt="npm version"/></a>
16
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="License: MIT"/></a>
17
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/hispano-lang?style=for-the-badge&logo=node.js&logoColor=white&color=339933" alt="Node.js Version"/></a>
18
+ <a href="https://www.npmjs.com/package/hispano-lang"><img src="https://img.shields.io/npm/dm/hispano-lang?style=for-the-badge&color=blue" alt="Downloads"/></a>
19
+ </p>
20
+
21
+ <p align="center">
22
+ <a href="#inicio-rápido">Inicio Rápido</a> •
23
+ <a href="#instalación">Instalación</a> •
24
+ <a href="#referencia-del-lenguaje">Documentación</a> •
25
+ <a href="#ejemplos">Ejemplos</a> •
26
+ <a href="#contribuir">Contribuir</a>
27
+ </p>
2
28
 
3
- <div align="center">
29
+ ---
30
+
31
+ ## Tabla de Contenidos
32
+
33
+ - [Acerca de HispanoLang](#acerca-de-hispanolang)
34
+ - [Inicio Rápido](#inicio-rápido)
35
+ - [Instalación](#instalación)
36
+ - [Referencia del Lenguaje](#referencia-del-lenguaje)
37
+ - [Variables y Constantes](#variables-y-constantes)
38
+ - [Tipos de Datos](#tipos-de-datos)
39
+ - [Operadores](#operadores)
40
+ - [Estructuras de Control](#estructuras-de-control)
41
+ - [Funciones](#funciones)
42
+ - [Programación Orientada a Objetos](#programación-orientada-a-objetos)
43
+ - [Colecciones](#colecciones)
44
+ - [Manejo de Errores](#manejo-de-errores)
45
+ - [Ejemplos](#ejemplos)
46
+ - [API de Node.js](#api-de-nodejs)
47
+ - [Arquitectura](#arquitectura)
48
+ - [Contribuir](#contribuir)
49
+ - [Licencia](#licencia)
50
+
51
+ ---
52
+
53
+ ## Acerca de HispanoLang
54
+
55
+ HispanoLang es un lenguaje de programación interpretado con sintaxis completamente en español. Fue diseñado con un objetivo claro: **democratizar el acceso a la programación** para los más de 500 millones de hispanohablantes en el mundo.
56
+
57
+ ### ¿Por qué HispanoLang?
4
58
 
5
- **Un lenguaje de programación educativo en español para enseñar programación sin barreras de idioma**
59
+ La mayoría de los lenguajes de programación utilizan palabras clave en inglés, creando una barrera adicional para quienes están aprendiendo a programar. HispanoLang elimina esta barrera, permitiendo que los estudiantes se concentren en los **conceptos fundamentales** de la programación sin tener que lidiar simultáneamente con un idioma extranjero.
6
60
 
7
- [![npm version](https://img.shields.io/npm/v/hispano-lang?style=flat-square)](https://www.npmjs.com/package/hispano-lang)
8
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
9
- [![Node.js Version](https://img.shields.io/node/v/hispano-lang?style=flat-square)](https://nodejs.org/)
10
- [![Downloads](https://img.shields.io/npm/dm/hispano-lang?style=flat-square)](https://www.npmjs.com/package/hispano-lang)
61
+ ### Características
11
62
 
12
- [📖 Documentación](#documentación) • [🚀 Instalación](#instalación) • [💻 Uso](#uso) • [📚 Ejemplos](#ejemplos) • [🤝 Contribuir](#contribuir)
63
+ | Característica | Descripción |
64
+ | ------------------------------ | ---------------------------------------------------------------------- |
65
+ | **Sintaxis en Español** | Palabras clave intuitivas como `variable`, `funcion`, `si`, `mientras` |
66
+ | **Tipado Dinámico** | Sistema de tipos flexible con conversiones automáticas |
67
+ | **POO Completa** | Clases, herencia, constructores y métodos |
68
+ | **Funciones de Primera Clase** | Funciones como valores, closures y callbacks |
69
+ | **Colecciones Ricas** | Arrays y objetos con métodos funcionales integrados |
70
+ | **REPL Interactivo** | Experimenta con código en tiempo real |
71
+ | **Integración Node.js** | Usa HispanoLang como módulo en proyectos JavaScript |
72
+ | **TypeScript Ready** | Definiciones de tipos incluidas |
13
73
 
14
- </div>
74
+ ---
75
+
76
+ ## Inicio Rápido
77
+
78
+ ```bash
79
+ # Instalar globalmente
80
+ npm install -g hispano-lang
81
+
82
+ # Iniciar el REPL interactivo
83
+ hispano
15
84
 
16
- ## 🎯 ¿Por qué HispanoLang?
85
+ # O ejecutar un archivo
86
+ hispano mi_programa.hl
87
+ ```
17
88
 
18
- La mayoría de los lenguajes de programación utilizan palabras clave en inglés, lo que puede dificultar el aprendizaje para principiantes hispanohablantes. **HispanoLang** propone una sintaxis sencilla en español, enfocada en aprender conceptos esenciales de programación.
89
+ Tu primer programa en HispanoLang:
19
90
 
20
- ### ✨ Características principales:
91
+ ```
92
+ variable mensaje = "¡Hola, mundo!"
93
+ mostrar mensaje
94
+ ```
21
95
 
22
- - ✅ **Sintaxis 100% en español** - Sin barreras de idioma
23
- - ⚡ **Intérprete completo** - Implementado en JavaScript/Node.js
24
- - 🎓 **Minimalista** - Pensado para aprender lógica sin distracciones
25
- - 📚 **Educativo** - Enfoque en conceptos fundamentales
26
- - 🔧 **CLI Tool** - Interfaz de línea de comandos intuitiva
27
- - 🧪 **Suite de tests** - 170+ tests para garantizar calidad
28
- - 📦 **NPM Package** - Fácil instalación y distribución
29
- - 🔄 **REPL Interactivo** - Modo interactivo para experimentar
30
- - 📝 **TypeScript Support** - Definiciones de tipos incluidas
31
- - 🌍 **Open Source** - Libre para usar, modificar y contribuir
96
+ ---
32
97
 
33
- ## 🚀 Instalación
98
+ ## Instalación
34
99
 
35
- ### Prerrequisitos
100
+ ### Requisitos
36
101
 
37
- - **Node.js** >= 20.0.0
38
- - **npm** o **yarn**
102
+ - Node.js 20.0.0 o superior
103
+ - npm o yarn
39
104
 
40
105
  ### Instalación Global (Recomendada)
41
106
 
@@ -43,347 +108,682 @@ La mayoría de los lenguajes de programación utilizan palabras clave en inglés
43
108
  npm install -g hispano-lang
44
109
  ```
45
110
 
46
- ### Instalación Local
111
+ ### Instalación como Dependencia
47
112
 
48
113
  ```bash
49
114
  npm install hispano-lang
50
115
  ```
51
116
 
52
- ### Instalación desde Código Fuente
117
+ ### Desde el Código Fuente
53
118
 
54
119
  ```bash
55
120
  git clone https://github.com/nicvazquezdev/hispano-lang.git
56
121
  cd hispano-lang
57
122
  npm install
58
123
  npm run build
124
+ npm link
59
125
  ```
60
126
 
61
- ## 💻 Uso
127
+ ### Verificar Instalación
62
128
 
63
- ### CLI Tool
129
+ ```bash
130
+ hispano --version
131
+ ```
64
132
 
65
- Una vez instalado globalmente, puedes usar HispanoLang desde cualquier lugar:
133
+ ---
66
134
 
67
- ```bash
68
- # Modo interactivo (REPL)
69
- hispano
135
+ ## Referencia del Lenguaje
70
136
 
71
- # Ejecutar archivo
72
- hispano script.hl
137
+ ### Variables y Constantes
73
138
 
74
- # Ejecutar código directamente
75
- hispano -e "mostrar 'Hola mundo'"
139
+ #### Variables
76
140
 
77
- # Ver ayuda
78
- hispano --help
141
+ Las variables se declaran con la palabra clave `variable` y pueden ser reasignadas:
79
142
 
80
- # Ejecutar tests
81
- hispano --test
82
143
  ```
144
+ variable nombre = "Ana"
145
+ variable edad = 25
146
+ variable activo = verdadero
83
147
 
84
- ### Como Módulo Node.js
148
+ edad = 26 // Reasignación permitida
149
+ ```
85
150
 
86
- ```javascript
87
- const { interpret, run, getVariables } = require('hispano-lang');
151
+ #### Constantes
88
152
 
89
- // Interpretar código
90
- const result = interpret(`
91
- variable nombre = "Juan"
92
- mostrar "Hola " + nombre
93
- `);
153
+ Las constantes se declaran con `constante` y no pueden ser reasignadas:
94
154
 
95
- console.log(result.output); // ['Hola Juan']
155
+ ```
156
+ constante PI = 3.14159
157
+ constante MAX_INTENTOS = 3
158
+ constante VERSION = "2.0.0"
96
159
 
97
- // Ejecutar y obtener salidas
98
- const outputs = run(`
99
- variable x = 10
100
- mostrar x * 2
101
- `);
160
+ PI = 3.14 // Error: No se puede reasignar la constante
161
+ ```
162
+
163
+ ---
164
+
165
+ ### Tipos de Datos
166
+
167
+ | Tipo | Ejemplo | Descripción |
168
+ | ---------- | -------------------- | ------------------------------ |
169
+ | Número | `42`, `3.14`, `-10` | Enteros y decimales |
170
+ | Texto | `"Hola"`, `'Mundo'` | Cadenas de caracteres |
171
+ | Booleano | `verdadero`, `falso` | Valores lógicos |
172
+ | Arreglo | `[1, 2, 3]` | Colección ordenada |
173
+ | Objeto | `{ clave: valor }` | Colección de pares clave-valor |
174
+ | Nulo | `nulo` | Ausencia intencional de valor |
175
+ | Indefinido | `indefinido` | Variable sin valor asignado |
176
+ | Función | `funcion() {}` | Bloque de código reutilizable |
177
+ | Clase | `clase {}` | Plantilla para crear objetos |
178
+
179
+ #### Conversión de Tipos
102
180
 
103
- console.log(outputs); // ['20']
104
181
  ```
182
+ entero("42") // 42
183
+ entero(3.7) // 3
105
184
 
106
- ### TypeScript
185
+ decimal("3.14") // 3.14
107
186
 
108
- ```typescript
109
- import { interpret, InterpretationResult } from 'hispano-lang';
187
+ texto(123) // "123"
188
+ texto(verdadero) // "verdadero"
110
189
 
111
- const result: InterpretationResult = interpret(`
112
- variable edad = 25
113
- si edad >= 18 {
114
- mostrar "Es mayor de edad"
115
- }
116
- `);
190
+ booleano(1) // verdadero
191
+ booleano("") // falso
192
+
193
+ tipo(42) // "numero"
194
+ tipo("hola") // "texto"
195
+ tipo([1, 2]) // "arreglo"
117
196
  ```
118
197
 
119
- ## 📚 Sintaxis de HispanoLang
198
+ ---
120
199
 
121
- ### 🎯 Ejemplo Rápido
200
+ ### Operadores
122
201
 
123
- ```javascript
124
- // Saludo personalizado
125
- variable nombre = "María"
126
- mostrar "¡Hola " + nombre + "!"
202
+ #### Aritméticos
127
203
 
128
- // Calculadora simple
129
- variable a = 10
130
- variable b = 5
131
- variable suma = a + b
132
- mostrar "La suma es: " + suma
204
+ | Operador | Descripción | Ejemplo |
205
+ | -------- | -------------- | -------------- |
206
+ | `+` | Suma | `5 + 3` → `8` |
207
+ | `-` | Resta | `5 - 3` → `2` |
208
+ | `*` | Multiplicación | `5 * 3` → `15` |
209
+ | `/` | División | `6 / 2` → `3` |
210
+ | `%` | Módulo | `7 % 3` → `1` |
133
211
 
134
- // Condicional
135
- si suma > 10 {
136
- mostrar "¡Es un número grande!"
137
- } sino {
138
- mostrar "Es un número pequeño"
139
- }
140
- ```
212
+ #### Comparación
141
213
 
142
- ### Variables
214
+ | Operador | Descripción | Ejemplo |
215
+ | -------- | ------------- | ---------------------- |
216
+ | `==` | Igual a | `5 == 5` → `verdadero` |
217
+ | `!=` | Diferente de | `5 != 3` → `verdadero` |
218
+ | `<` | Menor que | `3 < 5` → `verdadero` |
219
+ | `>` | Mayor que | `5 > 3` → `verdadero` |
220
+ | `<=` | Menor o igual | `3 <= 3` → `verdadero` |
221
+ | `>=` | Mayor o igual | `5 >= 5` → `verdadero` |
143
222
 
144
- ```javascript
145
- variable nombre = "Juan"
146
- variable edad = 25
147
- variable activo = verdadero
148
- variable salario = 50000.50
149
- ```
223
+ #### Lógicos
150
224
 
151
- ### Entrada de datos
225
+ | Operador | Descripción | Ejemplo |
226
+ | -------- | ----------- | --------------------------------- |
227
+ | `y` | AND lógico | `verdadero y falso` → `falso` |
228
+ | `o` | OR lógico | `verdadero o falso` → `verdadero` |
229
+ | `!` | NOT lógico | `!verdadero` → `falso` |
152
230
 
153
- ```javascript
154
- // Entrada básica
155
- leer nombre
156
- mostrar "Hola " + nombre
231
+ #### Asignación Compuesta
157
232
 
158
- // Entrada con mensaje
159
- leer edad "¿Cuál es tu edad?"
160
- mostrar "Tienes " + edad + " años"
233
+ ```
234
+ variable x = 10
235
+ x += 5 // x = 15
236
+ x -= 3 // x = 12
237
+ x *= 2 // x = 24
238
+ x /= 4 // x = 6
239
+ x %= 4 // x = 2
161
240
  ```
162
241
 
163
- ### Condicionales
242
+ ---
164
243
 
165
- ```javascript
244
+ ### Estructuras de Control
245
+
246
+ #### Condicional Si/Sino
247
+
248
+ ```
166
249
  si edad >= 18 {
167
- mostrar "Es mayor de edad"
250
+ mostrar "Mayor de edad"
168
251
  } sino {
169
- mostrar "Es menor de edad"
252
+ mostrar "Menor de edad"
170
253
  }
171
254
  ```
172
255
 
173
- ### Bucles
256
+ #### Elegir/Caso (Switch)
174
257
 
175
- ```javascript
176
- // Bucle mientras
258
+ ```
259
+ elegir opcion {
260
+ caso 1: mostrar "Opción uno"
261
+ caso 2: mostrar "Opción dos"
262
+ caso 3: {
263
+ mostrar "Opción tres"
264
+ mostrar "Con múltiples líneas"
265
+ }
266
+ pordefecto: mostrar "Opción no válida"
267
+ }
268
+ ```
269
+
270
+ #### Bucle Mientras
271
+
272
+ ```
177
273
  variable i = 0
178
274
  mientras i < 5 {
179
- mostrar i
180
- i = i + 1
275
+ mostrar i
276
+ i = i + 1
277
+ }
278
+ ```
279
+
280
+ #### Bucle Para
281
+
282
+ ```
283
+ para (variable i = 0; i < 5; i = i + 1) {
284
+ mostrar i
285
+ }
286
+ ```
287
+
288
+ #### Bucle Hacer/Mientras
289
+
290
+ ```
291
+ variable x = 0
292
+ hacer {
293
+ mostrar x
294
+ x = x + 1
295
+ } mientras x < 3
296
+ ```
297
+
298
+ #### Bucle Para Cada
299
+
300
+ ```
301
+ variable frutas = ["manzana", "banana", "naranja"]
302
+ para cada fruta en frutas {
303
+ mostrar fruta
181
304
  }
305
+ ```
306
+
307
+ #### Control de Flujo
182
308
 
183
- // Bucle para
184
- para variable j = 0; j < 3; j = j + 1 {
185
- mostrar j
309
+ ```
310
+ mientras verdadero {
311
+ si condicion {
312
+ romper // Sale del bucle
313
+ }
314
+ si otraCondicion {
315
+ continuar // Salta a la siguiente iteración
316
+ }
186
317
  }
187
318
  ```
188
319
 
320
+ ---
321
+
189
322
  ### Funciones
190
323
 
191
- ```javascript
324
+ #### Declaración y Llamada
325
+
326
+ ```
192
327
  funcion saludar(nombre) {
193
- retornar "Hola " + nombre
328
+ retornar "Hola, " + nombre
194
329
  }
195
330
 
196
- mostrar saludar("Mundo")
331
+ mostrar saludar("María") // "Hola, María"
197
332
  ```
198
333
 
199
- ### Arrays
334
+ #### Funciones Anónimas
200
335
 
201
- ```javascript
202
- variable frutas = ["manzana", "banana", "naranja"]
203
- mostrar frutas.longitud() // 3
204
- mostrar frutas.primero() // manzana
205
- mostrar frutas.ultimo() // naranja
336
+ ```
337
+ variable duplicar = funcion(x) {
338
+ retornar x * 2
339
+ }
206
340
 
207
- // Métodos de array
208
- frutas.agregar("uva") // push
209
- frutas.remover() // pop
210
- frutas.contiene("banana") // includes
341
+ mostrar duplicar(5) // 10
211
342
  ```
212
343
 
213
- ### Objetos
344
+ #### Funciones como Parámetros
214
345
 
215
- ```javascript
346
+ ```
347
+ funcion aplicar(valor, operacion) {
348
+ retornar operacion(valor)
349
+ }
350
+
351
+ variable resultado = aplicar(5, funcion(x) { retornar x * x })
352
+ mostrar resultado // 25
353
+ ```
354
+
355
+ #### Funciones Matemáticas Integradas
356
+
357
+ ```
358
+ raiz(16) // 4
359
+ potencia(2, 8) // 256
360
+ absoluto(-5) // 5
361
+ redondear(3.7) // 4
362
+ piso(3.7) // 3
363
+ techo(3.2) // 4
364
+ seno(0) // 0
365
+ coseno(0) // 1
366
+ tangente(0) // 0
367
+ aleatorio() // Número entre 0 y 1
368
+ ```
369
+
370
+ ---
371
+
372
+ ### Programación Orientada a Objetos
373
+
374
+ #### Definición de Clases
375
+
376
+ ```
377
+ clase Persona {
378
+ constructor(nombre, edad) {
379
+ este.nombre = nombre
380
+ este.edad = edad
381
+ }
382
+
383
+ saludar() {
384
+ retornar "Hola, soy " + este.nombre
385
+ }
386
+
387
+ cumplirAnios() {
388
+ este.edad = este.edad + 1
389
+ }
390
+ }
391
+ ```
392
+
393
+ #### Instanciación
394
+
395
+ ```
396
+ variable persona = nuevo Persona("Carlos", 30)
397
+ mostrar persona.nombre // "Carlos"
398
+ mostrar persona.saludar() // "Hola, soy Carlos"
399
+
400
+ persona.cumplirAnios()
401
+ mostrar persona.edad // 31
402
+ ```
403
+
404
+ #### Herencia
405
+
406
+ ```
407
+ clase Empleado extiende Persona {
408
+ constructor(nombre, edad, cargo) {
409
+ super(nombre, edad)
410
+ este.cargo = cargo
411
+ }
412
+
413
+ presentarse() {
414
+ retornar este.saludar() + " y trabajo como " + este.cargo
415
+ }
416
+ }
417
+
418
+ variable emp = nuevo Empleado("Ana", 28, "Ingeniera")
419
+ mostrar emp.presentarse() // "Hola, soy Ana y trabajo como Ingeniera"
420
+ ```
421
+
422
+ #### Verificación de Tipo
423
+
424
+ ```
425
+ variable p = nuevo Persona("Luis", 25)
426
+ mostrar tipo(p) // "Persona"
427
+ ```
428
+
429
+ ---
430
+
431
+ ### Colecciones
432
+
433
+ #### Arreglos
434
+
435
+ ```
436
+ variable numeros = [1, 2, 3, 4, 5]
437
+
438
+ // Acceso y modificación
439
+ mostrar numeros[0] // 1
440
+ numeros[0] = 10
441
+
442
+ // Propiedades y métodos básicos
443
+ numeros.longitud() // 5
444
+ numeros.primero() // 10
445
+ numeros.ultimo() // 5
446
+ numeros.agregar(6) // Añade al final
447
+ numeros.remover() // Remueve del final
448
+ numeros.contiene(3) // verdadero
449
+ ```
450
+
451
+ #### Métodos Funcionales
452
+
453
+ ```
454
+ variable nums = [1, 2, 3, 4, 5]
455
+
456
+ // Transformación
457
+ nums.mapear(funcion(x) { retornar x * 2 })
458
+ // [2, 4, 6, 8, 10]
459
+
460
+ // Filtrado
461
+ nums.filtrar(funcion(x) { retornar x > 2 })
462
+ // [3, 4, 5]
463
+
464
+ // Reducción
465
+ nums.reducir(funcion(acc, x) { retornar acc + x }, 0)
466
+ // 15
467
+
468
+ // Búsqueda
469
+ nums.buscar(funcion(x) { retornar x > 3 })
470
+ // 4
471
+
472
+ // Verificación
473
+ nums.algunos(funcion(x) { retornar x > 4 }) // verdadero
474
+ nums.todos(funcion(x) { retornar x > 0 }) // verdadero
475
+
476
+ // Ordenamiento
477
+ nums.ordenar() // [1, 2, 3, 4, 5]
478
+ nums.invertir() // [5, 4, 3, 2, 1]
479
+
480
+ // Manipulación
481
+ nums.cortar(1, 3) // [2, 3]
482
+ nums.insertar(2, 99) // Inserta 99 en posición 2
483
+ nums.unir(", ") // "1, 2, 3, 4, 5"
484
+ ```
485
+
486
+ #### Iteración
487
+
488
+ ```
489
+ variable colores = ["rojo", "verde", "azul"]
490
+ colores.recorrer(funcion() {
491
+ mostrar "Color: " + elemento + " en índice " + indice
492
+ })
493
+ ```
494
+
495
+ #### Objetos
496
+
497
+ ```
216
498
  variable persona = {
217
- nombre: "Juan",
218
- edad: 30,
219
- ciudad: "Madrid"
499
+ nombre: "Elena",
500
+ edad: 32,
501
+ ciudad: "Madrid"
220
502
  }
221
503
 
222
- mostrar persona.nombre // Juan
223
- persona.edad = 31 // Modificar propiedad
504
+ mostrar persona.nombre // "Elena"
505
+ persona.edad = 33 // Modificar
506
+ persona.profesion = "Dev" // Añadir propiedad
224
507
  ```
225
508
 
226
- ### Strings
509
+ #### Cadenas de Texto
227
510
 
228
- ```javascript
229
- variable texto = "hola mundo"
230
- mostrar texto.longitud() // 10
231
- mostrar texto.mayusculas() // HOLA MUNDO
232
- mostrar texto.minusculas() // hola mundo
233
511
  ```
512
+ variable texto = "Hola Mundo"
234
513
 
235
- ### Manejo de errores
514
+ // Propiedades
515
+ texto.longitud() // 10
236
516
 
237
- ```javascript
517
+ // Transformación
518
+ texto.mayusculas() // "HOLA MUNDO"
519
+ texto.minusculas() // "hola mundo"
520
+ texto.recortar() // Elimina espacios extremos
521
+ texto.invertir() // "odnuM aloH"
522
+
523
+ // Búsqueda
524
+ texto.incluye("Mundo") // verdadero
525
+ texto.empiezaCon("Hola") // verdadero
526
+ texto.terminaCon("Mundo") // verdadero
527
+
528
+ // Extracción
529
+ texto.caracter(0) // "H"
530
+ texto.subcadena(0, 4) // "Hola"
531
+
532
+ // Manipulación
533
+ texto.dividir(" ") // ["Hola", "Mundo"]
534
+ texto.reemplazar("Mundo", "Amigo") // "Hola Amigo"
535
+ ```
536
+
537
+ #### Interpolación de Cadenas
538
+
539
+ ```
540
+ variable nombre = "María"
541
+ variable edad = 25
542
+
543
+ mostrar `Hola ${nombre}, tienes ${edad} años`
544
+ // "Hola María, tienes 25 años"
545
+
546
+ mostrar `El doble de tu edad es ${edad * 2}`
547
+ // "El doble de tu edad es 50"
548
+ ```
549
+
550
+ #### Métodos Numéricos
551
+
552
+ ```
553
+ variable n = 42
554
+
555
+ n.esPar() // verdadero
556
+ n.esImpar() // falso
557
+ n.esPositivo() // verdadero
558
+ n.esNegativo() // falso
559
+ n.aTexto() // "42"
560
+ ```
561
+
562
+ ---
563
+
564
+ ### Manejo de Errores
565
+
566
+ ```
238
567
  intentar {
239
- variable x = 10 / 0
568
+ variable resultado = operacionRiesgosa()
569
+ mostrar resultado
240
570
  } capturar (error) {
241
- mostrar "Error: " + error
571
+ mostrar "Ocurrió un error: " + error
242
572
  }
243
573
  ```
244
574
 
245
- ### Valores especiales
575
+ ---
246
576
 
247
- ```javascript
248
- variable valorNulo = nulo
249
- variable valorIndefinido = indefinido
250
- ```
577
+ ## Ejemplos
251
578
 
252
- ## 🧪 Testing
579
+ ### Calculadora Simple
253
580
 
254
- El proyecto incluye una suite completa de tests con más de 170 casos:
581
+ ```
582
+ funcion calculadora(a, b, operacion) {
583
+ elegir operacion {
584
+ caso "+": retornar a + b
585
+ caso "-": retornar a - b
586
+ caso "*": retornar a * b
587
+ caso "/": {
588
+ si b == 0 {
589
+ retornar "Error: División por cero"
590
+ }
591
+ retornar a / b
592
+ }
593
+ pordefecto: retornar "Operación no válida"
594
+ }
595
+ }
255
596
 
256
- ```bash
257
- npm test
597
+ mostrar calculadora(10, 5, "+") // 15
598
+ mostrar calculadora(10, 5, "*") // 50
258
599
  ```
259
600
 
260
- ## 🏗️ Arquitectura
601
+ ### Fibonacci
602
+
603
+ ```
604
+ funcion fibonacci(n) {
605
+ si n <= 1 {
606
+ retornar n
607
+ }
608
+ retornar fibonacci(n - 1) + fibonacci(n - 2)
609
+ }
261
610
 
611
+ para (variable i = 0; i < 10; i = i + 1) {
612
+ mostrar fibonacci(i)
613
+ }
262
614
  ```
263
- src/
264
- ├── tokenizer.js # Análisis léxico
265
- ├── parser.js # Análisis sintáctico
266
- ├── evaluator.js # Evaluación de expresiones
267
- └── interpreter.js # Orquestador principal
268
615
 
269
- bin/
270
- └── hispano.js # CLI tool
616
+ ### Sistema de Gestión
271
617
 
272
- test/
273
- └── test.js # Suite completa de tests (170+ casos)
274
618
  ```
619
+ clase Producto {
620
+ constructor(nombre, precio) {
621
+ este.nombre = nombre
622
+ este.precio = precio
623
+ }
624
+ }
275
625
 
276
- ## 🛠️ Desarrollo
626
+ clase Carrito {
627
+ constructor() {
628
+ este.productos = []
629
+ }
630
+
631
+ agregar(producto) {
632
+ este.productos.agregar(producto)
633
+ }
634
+
635
+ total() {
636
+ retornar este.productos.reducir(
637
+ funcion(acc, p) { retornar acc + p.precio },
638
+ 0
639
+ )
640
+ }
641
+
642
+ mostrarResumen() {
643
+ mostrar "=== Carrito de Compras ==="
644
+ para cada producto en este.productos {
645
+ mostrar `${producto.nombre}: $${producto.precio}`
646
+ }
647
+ mostrar `Total: $${este.total()}`
648
+ }
649
+ }
277
650
 
278
- ### Configuración del entorno
651
+ variable carrito = nuevo Carrito()
652
+ carrito.agregar(nuevo Producto("Laptop", 999))
653
+ carrito.agregar(nuevo Producto("Mouse", 29))
654
+ carrito.agregar(nuevo Producto("Teclado", 79))
655
+ carrito.mostrarResumen()
656
+ ```
279
657
 
280
- ```bash
281
- # Clonar el repositorio
282
- git clone https://github.com/nicvazquezdev/hispano-lang.git
283
- cd hispano-lang
658
+ ---
284
659
 
285
- # Instalar dependencias
286
- npm install
660
+ ## API de Node.js
287
661
 
288
- # Ejecutar en modo desarrollo
289
- npm run dev
662
+ ### Uso como Módulo
290
663
 
291
- # Ejecutar tests
292
- npm test
664
+ ```javascript
665
+ const { interpret, run } = require("hispano-lang");
293
666
 
294
- # Linting y formato
295
- npm run lint
296
- npm run format
667
+ // Interpretar código y obtener resultado completo
668
+ const result = interpret(`
669
+ variable x = 10
670
+ mostrar x * 2
671
+ `);
297
672
 
298
- # Build para producción
299
- npm run build
673
+ console.log(result.success); // true
674
+ console.log(result.output); // ['20']
675
+ console.log(result.error); // null
676
+
677
+ // Ejecutar y obtener solo la salida
678
+ const output = run(`mostrar "Hola desde Node.js"`);
679
+ console.log(output); // ['Hola desde Node.js']
300
680
  ```
301
681
 
302
- ### Scripts disponibles
682
+ ### TypeScript
303
683
 
304
- - `npm start` - Ejecutar el intérprete
305
- - `npm test` - Ejecutar tests
306
- - `npm run dev` - Modo desarrollo con nodemon
307
- - `npm run lint` - Verificar código con ESLint
308
- - `npm run format` - Formatear código con Prettier
309
- - `npm run build` - Construir para producción
310
- - `npm run demo` - Ejecutar demo
684
+ ```typescript
685
+ import { interpret, InterpretationResult } from "hispano-lang";
311
686
 
312
- ## 🤝 Contribuir
687
+ const result: InterpretationResult = interpret(`
688
+ variable mensaje = "TypeScript + HispanoLang"
689
+ mostrar mensaje
690
+ `);
691
+ ```
313
692
 
314
- ¡Las contribuciones son bienvenidas! Este proyecto está abierto a la comunidad.
693
+ ---
315
694
 
316
- ### Cómo contribuir
695
+ ## Arquitectura
317
696
 
318
- 1. **Fork** el proyecto
319
- 2. **Crea** una rama para tu feature (`git checkout -b feature/AmazingFeature`)
320
- 3. **Commit** tus cambios (`git commit -m 'Add some AmazingFeature'`)
321
- 4. **Push** a la rama (`git push origin feature/AmazingFeature`)
322
- 5. **Abre** un Pull Request
697
+ HispanoLang utiliza una arquitectura de intérprete clásica con tres fases:
323
698
 
324
- ### Guías de contribución
699
+ ```
700
+ ┌─────────────┐ ┌────────────┐ ┌─────────────┐
701
+ │ Tokenizer │ ──▶ │ Parser │ ──▶ │ Evaluator │
702
+ │ (Léxico) │ │ (Sintaxis) │ │ (Ejecución) │
703
+ └─────────────┘ └────────────┘ └─────────────┘
704
+ │ │ │
705
+ ▼ ▼ ▼
706
+ Tokens AST Resultado
707
+ ```
325
708
 
326
- - Sigue las convenciones de código existentes
327
- - ✅ Añade tests para nuevas funcionalidades
328
- - ✅ Actualiza la documentación si es necesario
329
- - ✅ Asegúrate de que todos los tests pasen
330
- - ✅ Usa `npm run lint` y `npm run format` antes de commitear
709
+ ### Estructura del Proyecto
331
710
 
332
- ### Áreas donde puedes contribuir
711
+ ```
712
+ hispano-lang/
713
+ ├── src/
714
+ │ ├── tokenizer.js # Análisis léxico
715
+ │ ├── parser.js # Análisis sintáctico → AST
716
+ │ ├── evaluator.js # Evaluación del AST
717
+ │ └── interpreter.js # Orquestador principal
718
+ ├── bin/
719
+ │ └── hispano.js # CLI
720
+ ├── test/
721
+ │ └── test.js # Suite de tests (310+)
722
+ └── dist/ # Build de producción
723
+ ```
333
724
 
334
- - 🐛 **Bug fixes** - Reporta y arregla bugs
335
- - ✨ **Nuevas funcionalidades** - Propón mejoras
336
- - 📚 **Documentación** - Mejora ejemplos y guías
337
- - 🧪 **Tests** - Añade casos de prueba
338
- - 🌍 **Traducciones** - Ayuda con documentación en otros idiomas
339
- - 🎨 **UI/UX** - Mejora la experiencia del CLI
725
+ ---
340
726
 
341
- ## 🐛 Reportar bugs
727
+ ## Contribuir
342
728
 
343
- Si encuentras un bug, por favor:
729
+ Las contribuciones son bienvenidas. Por favor, lee las siguientes guías antes de contribuir.
344
730
 
345
- 1. **Verifica** que no esté ya reportado en [Issues](https://github.com/nicvazquezdev/hispano-lang/issues)
346
- 2. **Crea** un nuevo issue con:
347
- - Descripción clara del problema
348
- - Código que reproduce el error
349
- - Versión de Node.js
350
- - Sistema operativo
351
- - Pasos para reproducir
731
+ ### Configuración del Entorno
352
732
 
353
- ## 📄 Licencia
733
+ ```bash
734
+ git clone https://github.com/nicvazquezdev/hispano-lang.git
735
+ cd hispano-lang
736
+ npm install
737
+ npm test
738
+ ```
354
739
 
355
- Este proyecto está bajo la **Licencia MIT**. Ver el archivo [LICENSE](LICENSE) para más detalles.
740
+ ### Flujo de Trabajo
356
741
 
357
- ## 👨‍💻 Autor
742
+ 1. Fork del repositorio
743
+ 2. Crear rama feature: `git checkout -b feature/nueva-funcionalidad`
744
+ 3. Commit de cambios: `git commit -m 'Añadir nueva funcionalidad'`
745
+ 4. Push a la rama: `git push origin feature/nueva-funcionalidad`
746
+ 5. Crear Pull Request
358
747
 
359
- **Nicolas Vazquez**
748
+ ### Estándares de Código
360
749
 
361
- - 🌐 GitHub: [@nicvazquezdev](https://github.com/nicvazquezdev)
362
- - 📧 Email: [nicorvazquezs@gmail.com](mailto:nicorvazquezs@gmail.com)
750
+ - Ejecutar `npm run lint` antes de commit
751
+ - Ejecutar `npm run format` para formatear código
752
+ - Añadir tests para nuevas funcionalidades
753
+ - Mantener cobertura de tests existente
363
754
 
364
- ## 🙏 Agradecimientos
755
+ ### Reportar Bugs
365
756
 
366
- - 🌍 **Comunidad de desarrolladores hispanohablantes**
367
- - 🧪 **Contribuidores y testers del proyecto**
368
- - 📚 **Educadores que usan HispanoLang en sus clases**
369
- - 🎓 **Estudiantes que aprenden programación con HispanoLang**
757
+ Abre un [issue](https://github.com/nicvazquezdev/hispano-lang/issues) incluyendo:
370
758
 
371
- ## 📊 Estadísticas
759
+ - Descripción del problema
760
+ - Código para reproducir
761
+ - Comportamiento esperado vs actual
762
+ - Versión de Node.js y sistema operativo
372
763
 
373
- - 🧪 **170+ tests** cubriendo todas las funcionalidades
374
- - 📦 **NPM package** listo para instalación global
375
- - 🔧 **CLI tool** con modo interactivo
376
- - 📝 **TypeScript support** con definiciones incluidas
377
- - 🌍 **100% en español** para educación sin barreras
764
+ ---
765
+
766
+ ## Licencia
767
+
768
+ Distribuido bajo la Licencia MIT. Ver [LICENSE](LICENSE) para más información.
378
769
 
379
770
  ---
380
771
 
381
- <div align="center">
772
+ ## Autor
382
773
 
383
- **Si te gusta este proyecto, ¡dale una estrella!**
774
+ **Nicolas Vazquez**
775
+
776
+ - GitHub: [@nicvazquezdev](https://github.com/nicvazquezdev)
777
+ - Email: nicorvazquezs@gmail.com
384
778
 
385
- [![GitHub stars](https://img.shields.io/github/stars/nicvazquezdev/hispano-lang?style=social)](https://github.com/nicvazquezdev/hispano-lang)
779
+ ---
386
780
 
387
- **Hecho con ❤️ para la comunidad hispanohablante**
781
+ <p align="center">
782
+ <sub>Hecho con dedicación para la comunidad hispanohablante</sub>
783
+ </p>
388
784
 
389
- </div>
785
+ <p align="center">
786
+ <a href="https://github.com/nicvazquezdev/hispano-lang">
787
+ <img src="https://img.shields.io/github/stars/nicvazquezdev/hispano-lang?style=social" alt="GitHub Stars"/>
788
+ </a>
789
+ </p>