Un lenguaje de programación interpretado personalizado implementado en Python con características similares a JavaScript y otros lenguajes modernos.
Este proyecto implementa un intérprete completo para un lenguaje de programación personalizado que incluye:
- Lexer: Análisis léxico para tokenizar el código fuente
- Parser: Análisis sintáctico para construir el AST (Abstract Syntax Tree)
- Interpreter: Evaluación del AST para ejecutar el programa
- Enteros:
5,25,-10 - Cadenas:
"Hello, World!",'texto' - Booleanos:
true,false
let- Declaración de variablesfunction- Definición de funcionesreturn- Retorno de valoresif- Condicionalesclass- Definición de clasesfor,while- Buclesconst- Constantespublic,private,protected- Modificadores de accesostatic,abstract- Modificadores de claseextends- Herenciaself,super- Referencias de objetoand,or,not- Operadores lógicos
- Aritméticos:
+,-,*,/ - Comparación:
==,!=,>,<,>=,<= - Asignación:
= - Lógicos:
and,or,not
- Paréntesis:
(,) - Llaves:
{,} - Delimitadores:
;,, - Comillas:
",'
src/
├── lexer.py # Analizador léxico
├── parser_1.py # Analizador sintáctico
├── interpreter.py # Intérprete
├── ast.py # Definiciones del AST
├── object.py # Tipos de objetos
└── token_1.py # Definiciones de tokens
run_test.py # Archivo de pruebas y ejemplos
README.md # Este archivo
- Python 3.x
- Clona el repositorio:
git clone https://github.com/aomerge/Interpreted-Programing-Language.git
cd Interpreted-Programing-Language- Ejecuta el archivo de prueba:
python run_test.pyfrom src.lexer import Lexer
from src.parser_1 import Parser
from src.interpreter import Interpreter
# Código fuente en tu lenguaje
codigo_fuente = '''
let x = 5;
let y = 25;
return x + y;
'''
# Crear lexer y parser
lexer = Lexer(codigo_fuente)
parser = Parser(lexer)
# Parsear el código
program = parser.getProgram()
# Verificar errores
if parser.errors:
for error in parser.errors:
print(error)
else:
# Interpretar el programa
interpreter = Interpreter()
resultado = interpreter.interpret(program)
print(f"Resultado: {resultado}")let x = 5;
let y = 25;
return x + y;Salida: 30
return "Hello, World!";Salida: "Hello, World!"
let nombre = "Juan";
let edad = 25;
let activo = true;
function saludar(nombre) {
return "Hola, " + nombre;
}
if (edad >= 18) {
return saludar(nombre);
}| Token | Descripción | Ejemplo |
|---|---|---|
LET |
Declaración de variable | let x = 5; |
FUNCTION |
Definición de función | function test() {} |
RETURN |
Retorno de valor | return x; |
INT |
Número entero | 42 |
STRING |
Cadena de texto | "texto" |
IDENT |
Identificador | variable |
ASSIGN |
Asignación | = |
PLUS |
Suma | + |
MINUS |
Resta | - |
MULTIPLICATION |
Multiplicación | * |
DIVISION |
División | / |
EQUAL |
Igualdad | == |
NOT_EQUAL |
Desigualdad | != |
El archivo run_test.py contiene ejemplos de uso del intérprete:
python run_test.pyEste archivo demuestra:
- Declaración de variables con
let - Operaciones aritméticas
- Retorno de valores
- Manejo de cadenas
- Convierte el código fuente en tokens
- Reconoce palabras clave, identificadores, números y operadores
- Maneja espacios en blanco y caracteres especiales
- Construye el AST a partir de los tokens
- Implementa la gramática del lenguaje
- Detecta errores de sintaxis
- Evalúa el AST
- Ejecuta las operaciones
- Maneja el entorno de variables
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-caracteristica) - Commit tus cambios (
git commit -am 'Añadir nueva característica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Crea un Pull Request
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE para más detalles.
aomerge - GitHub Profile
Este es un proyecto educativo para aprender sobre la implementación de lenguajes de programación e intérpretes.