Este proyecto es una herramienta interactiva diseñada para la creación, visualización y simulación de gramáticas utilizando diversos algoritmos de análisis sintáctico. Desarrollado como parte del curso de Lenguajes y Compiladores, permite a los usuarios definir gramáticas y obtener tablas de análisis, conjuntos de Primero y Siguiente, y simulaciones de derivación en tiempo real.
El generador incluye soporte completo para los siguientes algoritmos de análisis sintáctico (Bottom-Up y Top-Down):
- LL(1): Análisis descendente predecible.
- LR(0): Análisis ascendente con estados de cierre canónico.
- SLR(1): Análisis ascendente simple con conjuntos de Siguiente.
- CLR(1): Análisis ascendente canónico con símbolos de anticipación (lookahead).
- LALR(1): Análisis ascendente con fusión de estados de núcleo idéntico.
- Interfaz Gráfica (GUI): Diseñada con PyQt6 para una experiencia de usuario fluida e intuitiva.
- Cálculo de Conjuntos: Generación automática de los conjuntos Primero (First) y Siguiente (Follow).
- Visualización de Colecciones Canónicas: Visualización detallada de los estados y sus ítems.
- Simulación de Análisis: Herramienta interactiva para probar cadenas de entrada y visualizar los pasos del stack (pila).
- Exportación de Datos:
- Tablas de análisis en formato CSV.
- Reportes de estados y colecciones canónicas en PDF.
- Manejo de Símbolos Especiales: Soporte nativo para símbolos de producción vacía (λ / ε).
Para ejecutar este proyecto, necesitarás:
- Python 3.8+
- PyQt6: Para la interfaz gráfica.
- ReportLab: Necesario para la exportación de reportes en PDF.
-
Clonar el repositorio:
git clone https://github.com/JimSegovia/ParserGenerator.git cd ParserGenerator -
Instalar dependencias:
pip install PyQt6 reportlab
-
Ejecutar la aplicación:
python pargen_gui.py
- Definir la Gramática:
- Ingrese los No Terminales separados por
|(ej:S|A|B). - Ingrese los Terminales separados por
|(ej:id|+|*|(|)). - Defina las Reglas de Producción (una por línea, usando
->o→).
- Ingrese los No Terminales separados por
- Seleccionar Algoritmo: Use el menú desplegable para elegir entre LL(1), LR(0), SLR(1), CLR(1) o LALR(1).
- Generar Parser: Haga clic en el botón verde "Build Parser".
- Analizar Cadenas: En la pestaña "Parse Tree", ingrese una cadena de tokens separados por espacios (ej:
id + id) y presione "Parse Input".
Desarrollado por: Jim Segovia
