Un compilador completo para el lenguaje de programación Notch, un lenguaje temático inspirado en Minecraft que compila a código ensamblador x86.
- Descripción General
- Características
- Arquitectura del Compilador
- Instalación
- Uso
- Sintaxis del Lenguaje Notch
- Ejemplos
- Estructura del Proyecto
- Desarrollo
- Contribuir
- Autores
Este proyecto implementa un compilador completo para el lenguaje Notch, que incluye:
- Análisis Léxico (Scanner/Tokenizer)
- Análisis Sintáctico (Parser) con generación de AST
- Análisis Semántico con tabla de símbolos
- Generación de Código a ensamblador x86
El lenguaje Notch utiliza una sintaxis temática de Minecraft, donde conceptos como WorldName, Inventory, Stack, Torch, etc., representan elementos tradicionales de programación.
- Análisis Léxico Completo: Reconocimiento de tokens, palabras reservadas y operadores
- Generación de AST: Construcción de árbol de sintaxis abstracta
- Tabla de Símbolos: Gestión de variables, tipos y alcance
- Análisis Semántico: Validación de tipos y coherencia semántica
- Generación de Código: Producción de código ensamblador x86 optimizado
- Sintaxis Temática: Lenguaje inspirado en Minecraft para mayor legibilidad
- Suite de Pruebas: 18+ casos de prueba para diferentes características
Código Fuente (.ne) → Scanner → Parser → Analizador Semántico → Generador de Código → ASM (.asm)
↓ ↓ ↓ ↓
Tokens AST Tabla Símbolos Código x86
- Scanner (
scanner.py): Análisis léxico y tokenización - Parser (
parser.py): Análisis sintáctico y construcción del AST - Analizador Semántico (
analizadorSemantico/): Validación semántica - Generador de Código (
generadorCodigo/): Producción de código ensamblador - Tabla de Símbolos (
analizadorSemantico/tabla_simbolos.py): Gestión de símbolos
- Python 3.11 o superior
- Sistema operativo Windows, Linux o macOS
-
Clonar el repositorio:
git clone https://github.com/tuusuario/notch-compiler.git cd notch-compiler -
Configurar el entorno (opcional):
python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate
-
El proyecto no requiere dependencias externas (solo bibliotecas estándar de Python)
-
Ejecutar el compilador:
python main.py
-
Proporcionar archivo fuente:
Ingrese la ruta del archivo a analizar: Pruebas/prueba1_readyToEat.ne -
El compilador generará:
- Tokens en consola (para depuración)
- AST en consola (para depuración)
- Tabla de símbolos en consola (para depuración)
- Archivo
programa.asmcon el código ensamblador
; Programa: programa.asm
; Estudiantes: Diana Sanabria, Jefferson Salas
; Descripción: Código generado desde lenguaje Notch
segmento_datos segment
cookies dw 2
health dw 10
result dw 0
segmento_datos ends
segmento_codigo segment
; ... código generado ...
segmento_codigo endsWorldName NombrePrograma:
Inventory
Stack variable1 = valor1, variable2 = valor2;
Torch resultado;
PolloCrudo
target condicion craft hit PolloCrudo
// código del bloque if
PolloAsado miss PolloCrudo
// código del bloque else
PolloAsado
PolloAsado
SpawnPoint
// punto de entrada del programa
worldSave
| Elemento Notch | Equivalente Tradicional | Descripción |
|---|---|---|
WorldName |
program |
Declaración del programa |
Inventory |
var section |
Sección de variables |
Stack |
integer |
Tipo entero |
Torch |
boolean |
Tipo booleano |
PolloCrudo/PolloAsado |
if/else |
Estructura condicional |
SpawnPoint |
begin |
Inicio del código principal |
worldSave |
end |
Final del programa |
- Stack: Números enteros
- Torch: Valores booleanos (On/Off)
- Rune: Caracteres
- Spider: Cadenas de texto
- Book: Arreglos
notch-compiler/
├── main.py # Punto de entrada principal
├── scanner.py # Analizador léxico
├── parser.py # Analizador sintáctico
├── generador_muro.py # Utilidades de generación
├── programa.asm # Código ASM generado (output)
├── RunTimeLibrary.asm # Biblioteca en tiempo de ejecución
├── analizadorSemantico/ # Módulo de análisis semántico
│ ├── semantico.py
│ └── tabla_simbolos.py
├── generadorCodigo/ # Módulo de generación de código
│ └── generadorCodigo.py
├── Pruebas/ # Suite de casos de prueba
│ ├── prueba1_readyToEat.ne
│ ├── prueba2_declaracionConstantes.ne
│ ├── ... (18 casos de prueba)
└── TareaIntro/ # Ejercicios introductorios
├── Reto1MostrarVal.ne
├── Reto2MostarPares.ne
└── ...
El proyecto incluye una extensa suite de pruebas:
- Funcionalidad Básica: Declaraciones, constantes, prototipos
- Operaciones: Enteros, flotantes, caracteres, cadenas
- Estructuras de Control: If, While, For, Switch
- Tipos de Datos: Conjuntos, archivos, arreglos, registros
- Características Avanzadas: Rutinas, manejo de errores
# Ejecutar una prueba específica
python main.py
# Entrada: Pruebas/prueba1_readyToEat.ne
# Ejecutar todas las pruebas (script personalizado necesario)
# for file in Pruebas/*.ne; do python main.py < "$file"; doneEl compilador muestra información detallada durante la ejecución:
- Lista completa de tokens generados
- AST estructurado
- Contenido de la tabla de símbolos
- Código ASM generado
- Fork el proyecto
- Crear una rama para la característica (
git checkout -b feature/nueva-caracteristica) - Commit los cambios (
git commit -am 'Agregar nueva característica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Crear un Pull Request
- Falta manejo completo de errores semánticos
- Optimización del código ASM generado
- Documentación de la gramática formal