PRIMER COMMIT
This commit is contained in:
161
README.txt
Normal file
161
README.txt
Normal file
@@ -0,0 +1,161 @@
|
||||
================================================================================
|
||||
ZAPLANG
|
||||
Lenguaje de programación con sintaxis en español
|
||||
================================================================================
|
||||
|
||||
DESCRIPCIÓN
|
||||
-----------
|
||||
zaplang es un lenguaje de programación interpretado cuya sintaxis está inspirada
|
||||
en C pero con palabras clave completamente en español. Está construido con ANTLR4
|
||||
(gramática dividida en Lexer y Parser) y un intérprete escrito en Python que
|
||||
ejecuta el árbol de análisis mediante el patrón Visitor.
|
||||
|
||||
El objetivo es facilitar el aprendizaje de programación a hispanohablantes,
|
||||
eliminando la barrera del inglés en las palabras reservadas del lenguaje.
|
||||
|
||||
|
||||
ARCHIVOS DEL PROYECTO
|
||||
---------------------
|
||||
zaplangLexer.g4 Gramática del analizador léxico (ANTLR4)
|
||||
zaplangParser.g4 Gramática del analizador sintáctico (ANTLR4)
|
||||
zaplangLexer.py Código generado por ANTLR4 (lexer)
|
||||
zaplangParser.py Código generado por ANTLR4 (parser)
|
||||
zaplangParserListener.py Listener generado por ANTLR4
|
||||
zaplangParserVisitor.py Visitor generado por ANTLR4
|
||||
zaplangLexer.tokens Tabla de tokens del lexer
|
||||
zaplangParser.tokens Tabla de tokens del parser
|
||||
zaplangLexer.interp Archivo de interpretación del lexer
|
||||
zaplangParser.interp Archivo de interpretación del parser
|
||||
interprete.py Intérprete principal (ejecuta programas .zap)
|
||||
demo.zap Programa de demostración
|
||||
|
||||
|
||||
REQUISITOS
|
||||
----------
|
||||
- Python 3.8 o superior
|
||||
- ANTLR4 runtime para Python:
|
||||
|
||||
pip install antlr4-python3-runtime
|
||||
|
||||
(Nota: no es necesario regenerar los archivos .py desde las gramáticas a menos
|
||||
que se modifiquen los archivos .g4)
|
||||
|
||||
|
||||
CÓMO EJECUTAR UN PROGRAMA
|
||||
--------------------------
|
||||
python interprete.py <archivo.zap>
|
||||
|
||||
Ejemplo con el programa de demostración incluido:
|
||||
|
||||
python interprete.py demo.zap
|
||||
|
||||
Salida esperada:
|
||||
|
||||
=== Demo zaplang ===
|
||||
Cuadrados: 1 4 9 16 25
|
||||
x es mayor que 10
|
||||
Factorial de 6: 720
|
||||
Arreglo: 10 20 30 40 50
|
||||
Cuenta regresiva: 3 2 1 ¡Ya!
|
||||
¡Hola desde zaplang!
|
||||
|
||||
|
||||
PALABRAS RESERVADAS
|
||||
-------------------
|
||||
Tipos de datos:
|
||||
Ent → entero (int)
|
||||
doble → doble precisión (double)
|
||||
flot → flotante (float)
|
||||
carac → carácter (char)
|
||||
cf → con firma (signed)
|
||||
sf → sin firma (unsigned)
|
||||
vacio → sin retorno (void)
|
||||
|
||||
Control de flujo:
|
||||
si → if
|
||||
sino → else
|
||||
mientras → while
|
||||
por → for
|
||||
caso → case / switch
|
||||
pordef → default
|
||||
retornar → return
|
||||
fin → break
|
||||
interrup → continue
|
||||
|
||||
Estructuras:
|
||||
estruct → struct
|
||||
enum → enum
|
||||
|
||||
Literales booleanos:
|
||||
verdadero → true
|
||||
falso → false
|
||||
|
||||
Especial:
|
||||
bul → marca de punto de entrada en estructuras caso/switch
|
||||
|
||||
|
||||
FUNCIONES DE ENTRADA/SALIDA INTEGRADAS
|
||||
---------------------------------------
|
||||
imprimir(valor) Imprime un valor sin salto de línea
|
||||
imprimirln(valor) Imprime un valor con salto de línea
|
||||
leer() Lee una línea como cadena de texto
|
||||
leerEnt() Lee un número entero desde la entrada estándar
|
||||
leerFlot() Lee un número flotante desde la entrada estándar
|
||||
leerCarac() Lee un carácter desde la entrada estándar
|
||||
longitud(cadena) Devuelve la longitud de una cadena
|
||||
|
||||
|
||||
CARACTERÍSTICAS DEL LENGUAJE
|
||||
-----------------------------
|
||||
- Funciones con parámetros y valor de retorno
|
||||
- Variables locales y globales con scoping léxico
|
||||
- Arreglos de tamaño fijo con inicialización literal
|
||||
- Estructuras (estruct) y enumeraciones (enum)
|
||||
- Punteros (sintaxis soportada, comportamiento simplificado)
|
||||
- Operadores aritméticos, lógicos, relacionales y de bits
|
||||
- Operadores de asignación compuesta (+=, -=, *=, etc.)
|
||||
- Operadores de incremento/decremento prefijos y postfijos (++/--)
|
||||
- Sentencia condicional (si/sino)
|
||||
- Estructura tipo switch (caso bul)
|
||||
- Bucles mientras y por (while y for)
|
||||
- Expresión ternaria (condicion ? valor_si : valor_no)
|
||||
- Comentarios de línea (//) y de bloque (/* */)
|
||||
- Punto de entrada obligatorio: función main()
|
||||
|
||||
|
||||
EJEMPLO DE PROGRAMA
|
||||
-------------------
|
||||
Ent factorial(Ent n) {
|
||||
si (n <= 1) retornar 1;
|
||||
retornar n * factorial(n - 1);
|
||||
}
|
||||
|
||||
vacio main() {
|
||||
Ent resultado = factorial(6);
|
||||
imprimirln(resultado); // Imprime: 720
|
||||
}
|
||||
|
||||
|
||||
REGENERAR LOS ARCHIVOS DE ANTLR4 (OPCIONAL)
|
||||
--------------------------------------------
|
||||
Si se modifican las gramáticas (.g4), regenerar con:
|
||||
|
||||
antlr4 -Dlanguage=Python3 zaplangLexer.g4
|
||||
antlr4 -Dlanguage=Python3 zaplangParser.g4
|
||||
|
||||
Requiere tener instalado ANTLR4 (herramienta de línea de comandos).
|
||||
Descarga: https://www.antlr.org/
|
||||
|
||||
|
||||
ARQUITECTURA INTERNA
|
||||
--------------------
|
||||
1. El código fuente (.zap) se lee como texto plano.
|
||||
2. zaplangLexer tokeniza el flujo de caracteres.
|
||||
3. zaplangParser construye el árbol de análisis sintáctico (AST).
|
||||
4. El intérprete (interprete.py) recorre el AST usando el patrón Visitor,
|
||||
administrando un entorno de variables con scoping por cadena de entornos
|
||||
(clase Entorno con referencia al padre).
|
||||
5. El control de flujo (retornar, fin, interrup) se implementa mediante
|
||||
excepciones de Python (RetornarSenal, FinSenal, InterrupSenal).
|
||||
|
||||
================================================================================
|
||||
Reference in New Issue
Block a user