Skip to content

Compilador completo para el lenguaje de programación Notch, inspirado en Minecraft, que genera código ensamblador x86.

Notifications You must be signed in to change notification settings

Jeshon04CRC/MinecraftCompiler

Repository files navigation

🎮 Notch Language Compiler

Python License Status

Un compilador completo para el lenguaje de programación Notch, un lenguaje temático inspirado en Minecraft que compila a código ensamblador x86.

Tabla de Contenidos

Descripción General

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.

Características

  • 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

Arquitectura del Compilador

Código Fuente (.ne) → Scanner → Parser → Analizador Semántico → Generador de Código → ASM (.asm)
                        ↓         ↓              ↓                      ↓
                     Tokens      AST      Tabla Símbolos         Código x86

Componentes Principales:

  1. Scanner (scanner.py): Análisis léxico y tokenización
  2. Parser (parser.py): Análisis sintáctico y construcción del AST
  3. Analizador Semántico (analizadorSemantico/): Validación semántica
  4. Generador de Código (generadorCodigo/): Producción de código ensamblador
  5. Tabla de Símbolos (analizadorSemantico/tabla_simbolos.py): Gestión de símbolos

Instalación

Prerrequisitos

  • Python 3.11 o superior
  • Sistema operativo Windows, Linux o macOS

Instalación

  1. Clonar el repositorio:

    git clone https://github.com/tuusuario/notch-compiler.git
    cd notch-compiler
  2. Configurar el entorno (opcional):

    python -m venv venv
    source venv/bin/activate  # En Windows: venv\Scripts\activate
  3. El proyecto no requiere dependencias externas (solo bibliotecas estándar de Python)

Uso

Compilación Básica

  1. Ejecutar el compilador:

    python main.py
  2. Proporcionar archivo fuente:

    Ingrese la ruta del archivo a analizar: Pruebas/prueba1_readyToEat.ne
    
  3. 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.asm con el código ensamblador

Ejemplo de Salida

; 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 ends

Sintaxis del Lenguaje Notch

Estructura Básica

WorldName 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

Elementos del Lenguaje

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

Tipos de Datos Soportados

  • Stack: Números enteros
  • Torch: Valores booleanos (On/Off)
  • Rune: Caracteres
  • Spider: Cadenas de texto
  • Book: Arreglos

Estructura del Proyecto

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
    └── ...

Casos de Prueba

El proyecto incluye una extensa suite de pruebas:

  1. Funcionalidad Básica: Declaraciones, constantes, prototipos
  2. Operaciones: Enteros, flotantes, caracteres, cadenas
  3. Estructuras de Control: If, While, For, Switch
  4. Tipos de Datos: Conjuntos, archivos, arreglos, registros
  5. Características Avanzadas: Rutinas, manejo de errores

Desarrollo

Ejecución de Pruebas

# 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"; done

Depuración

El 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

Contribuir

  1. Fork el proyecto
  2. Crear una rama para la característica (git checkout -b feature/nueva-caracteristica)
  3. Commit los cambios (git commit -am 'Agregar nueva característica')
  4. Push a la rama (git push origin feature/nueva-caracteristica)
  5. Crear un Pull Request

Problemas Conocidos

  • Falta manejo completo de errores semánticos
  • Optimización del código ASM generado
  • Documentación de la gramática formal

Referencias

About

Compilador completo para el lenguaje de programación Notch, inspirado en Minecraft, que genera código ensamblador x86.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •