0% encontró este documento útil (0 votos)
19 vistas1 página

Proyecto Final - Lenguajes

El proyecto final implementa un analizador sintáctico para gramáticas libres de contexto que determina si una gramática es LL(1), SLR(1) o ninguna, y realiza el análisis correspondiente. Utiliza funciones para calcular los conjuntos FIRST y FOLLOW, y construye tablas de parsing para manejar conflictos. Se identificaron problemas en el tratamiento de producciones complejas y en el cálculo de FOLLOW, aunque algunos ya han sido solucionados.

Cargado por

smolinae2401
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas1 página

Proyecto Final - Lenguajes

El proyecto final implementa un analizador sintáctico para gramáticas libres de contexto que determina si una gramática es LL(1), SLR(1) o ninguna, y realiza el análisis correspondiente. Utiliza funciones para calcular los conjuntos FIRST y FOLLOW, y construye tablas de parsing para manejar conflictos. Se identificaron problemas en el tratamiento de producciones complejas y en el cálculo de FOLLOW, aunque algunos ya han sido solucionados.

Cargado por

smolinae2401
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Proyecto final

Integrantes:

David Ríos Arboleda

Samuel Molina Echeverri

Nuestro sistema implementa un analizador sintáctico para gramáticas libres de contexto capaz de
determinar si una gramática es LL(1), SLR(1) o ninguna, y realizar el análisis correspondiente. El
código procesa la gramática mediante la función read_grammar(), que divide las producciones en
símbolos individuales, incluyendo casos especiales como "(S)", "S+" o "T*" mediante reglas
específicas.

Para el análisis LL(1), calculamos los conjuntos FIRST y FOLLOW de forma iterativa. La tabla de
parsing se construye verificando posibles conflictos entre producciones para un mismo par (no
terminal, terminal). Cuando detectamos ambigüedades, el sistema determina que la gramática no
es LL(1). En el caso SLR(1), generamos el autómata LR(0) y usamos los conjuntos FOLLOW para
decidir reducciones, marcando como conflicto cualquier estado que requiera múltiples acciones
con el mismo terminal.

El Parser principal funciona con un sistema de pila: en LL(1) expande no terminales según la tabla
predictiva, mientras que en SLR(1) alterna entre desplazamientos y reducciones guiado por la tabla
de acciones. Las cadenas de entrada se validan con un marcador de fin ($), devolviendo "yes" o
"no" según si son aceptadas.

Problemas identificados:

El tratamiento de producciones complejas en read_grammar() puede fallar con ciertas gramáticas


no contempladas

El cálculo de FOLLOW presenta dificultades con recursión izquierda en algunos casos

La detección de conflictos no especifica el tipo ni ubicación exacta del problema

Algunos de estos problemas ya fueron solucionados a la fecha que se entrega este documento, por
el momento conteníamos con la solución de read_grammar()

También podría gustarte