Unidad IV Análisis Sintáctico - Departamento de...

63
Unidad IV Análisis Sintáctico M.C. Juan Carlos Olivares Rojas

Transcript of Unidad IV Análisis Sintáctico - Departamento de...

Page 1: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Unidad IV Análisis Sintáctico

M.C. Juan Carlos Olivares Rojas

Page 2: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Agenda

4.1 Introducción a las Gramáticas libres de contexto y árboles de derivación.

4.2 Diagramas de sintaxis.4.3 Precedencia de operadores.4.4 Analizador sintáctico.4.4.1 Analizador descendente (LL).4.4.2 Analizador ascendente(LR, LALR).

Page 3: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Agenda

• 4.5 Administración de tablas de símbolos

• 4.6 Manejo de errores sintácticos y su recuperación

• 4.7 Generadores de código para analizadores sintácticos: Yacc, Bison

Page 4: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.1 Introducción a las Gramáticas libres de contexto y árboles de

derivación• Todo lenguaje posee una serie de reglas

para describir los programas fuentes (sintaxis).

• Un analizador sintáctico implementa estas reglas haciendo uso de GICs

Page 5: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Gramáticas

• Son un formalismo matemático que permite decidir si una cadena pertenece a un lenguaje dado.

• Se define como la cuarteta G= (N, Σ, S, P), en donde N es el conjunto de símbolos terminales, Σ es conjunto de símbolos terminales, S es el símbolo inicial (S pertenece a N) y P es un cojunto de reglas de producción.

Page 6: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Gramáticas

• Los símbolos no terminales (N) son aquellos que pueden seguir derivando en otros; mientras que los terminales el proceso finaliza allí.

• Las reglas de producción siguen el formato: α�β donde α y β pertenecen a N y Σ en cualquier forma.

Page 7: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Reglas de producción

• Son las reglas que permiten decidir si la cadena pertenece a un lenguaje y la estructura que lleva:

• S�A|aB B� ε

• A�aA|bC C� ε

• S� Genera cadenas del lenguaje a*b u a

Page 8: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Tipos de gramáticas

• Las gramáticas más sencillas son las gramáticas regulares, debido a que no presentan anomalías de ningún tipo. Desafortunadamente este tipo de gramáticas no permiten expresar todos los lenguajes posibles y en especial los humanos por lo que se necesitan otros tipos de gramáticas. Las más utilizadas en informáticas son las libres del contexto.

Page 9: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Gramáticas Regulares

• Son las que se forman a través de Autómatas Finitos Deterministas y Expresiones regulares. No presentan ambiguedades.

• Sus reglas de producción son del tipo: α�βdonde α pertenece a N y β pertenece a (Σ)* N?

Page 10: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Gramáticas Independientes del Contexto

• Son aquellas G cuya reglas de producción son de la forma: α�β, en donde α pertenece a N y β pertenece (N u Σ)*

• Las ventajas de uso de GICs son:

• Proporcionan una estructura sintáctica precisa y fácil de comprender

Page 11: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Gramáticas Independientes del Contexto

• Proporciona al lenguaje fuente una estructura adecuada para la generación del código.

• Por medio de las GICs es fácil construir analizadores sintácticos

• Es sencillo añadir funcionalidades a un analizador sintáctico

Page 12: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

GICs

• Hay que revisar que la gramática no sea inherentemente ambigua para poder eliminar esa ambigüedad o rediseñar la gramática sin anomalías.

• Algunas formas de eliminar esa ambigüedad es utilizando técnicas como algoritmos CYK y las formas normales de Chomsky (FNCh) y Greibach (FNG).

Page 13: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Ejemplos de GICs

• Expresiones válidas en lenguajes C:

Expr � (expr) | - expr | expr op expr| VAR | NUM

• Error sintáctico: cuando la secuencia de componentes léxicos no puede ser generada por la gramática del lenguaje fuente.

Page 14: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Ejemplos de GICs

• Declaración de variables en C:

Decl � TIPO listavar PYCListavar � var | var COMA listavarVar � ID | ASTER varDimension � CI ENTERO CD |CI ENTERO

CD dimension

Page 15: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Jerarquía de Chomsky

• Las otras dos gramáticas en las cuales clasificó Chomsky (GR tipo 3, GIC tipo 2) son las gramáticas sensible al contexto (tipo 1, donde |α| < |β|, donde α y β pertenecen a (Σu N)* salvo ε) y las gramáticas del tipo 0 o sin restricciones, las cuales sus reglas de producción pueden ser de cualquier tipo.

Page 16: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Árboles de Derivación

• Es la representación gráfica de la derivación de una cadena.

• Se crea utilizando el símbolo inicial como la raíz, los símbolos N representan nodos del árbol y los símbolos Σ las hojas del árbol.

• A través de los árboles de derivación se puede verificar la sintaxis de un lenguaje así como comprobar el significado de las palabras.

Page 17: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Árboles de derivación

• Si para la misma cadena existen dos o más árboles de derivación la gramática es ambigua.

SA c

aA ba

Page 18: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

BNF

• La Forma Backus-Naur es una meta-sintaxis; es decir, una sintaxis para representar sintaxis. Es un estándar para representar lenguajes.

• Los paréntesis triangulares < y > sirven para indicar los símbolos no terminales.

• La barra vertical | para representar O

Page 19: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

BNF

• La doble flecha � indica las derivaciones

• ::= indica � las producciones

• [] indican elementos opcionales

• {} indican términos repetitivos

Page 20: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.2 Diagramas de sintaxis• Es otra forma (al igual que los árboles de

derivación) de especificar gramáticas del tipo 2.

• La característica de este esquema es que permite ver las derivaciones al instante de que ocurren.

Page 21: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Diagramas de sintaxis

<W>::=<W1> < W2> <W3>

<W>::=ab <W>

<W>::=< W1> < W2> | <W1>a | ab <W2>

Page 22: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.3 Precedencia de operadores• La precedencia de operadores es de vital

importancia en el proceso de análisis sintáctico ya que nos representará la forma en que debe construirse el árbol de derivación.

• En aritmética existen prioridades, por ejemplo: * y / tienen preferencia sobre + y -. () indican la máxima prioridad.

Page 23: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Prioridad de operadores

• La instrucción a = b + c / 2 en la mayoría de los lenguajes no se evalúa de la forma a = (b + c) /2, sino de la forma a = b + (c/2)

• La forma de evaluación depende de cómo se construyan los operadores, ya sea en infijo, postfijo o prefijo.

• Las operaciones se realizan de abajo hacia arriba.

Page 24: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.4 Analizador sintáctico• Un analizador sintáctico (Parser) es un

programa que reconoce si una o varias cadenas de caracteres forman parte de un determinado lenguaje. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres de contexto.

Page 25: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador sintáctico

• Los analizadores sintácticos fueron extensivamente estudiados durante los años 70 del siglo XX, detectándose numerosos patrones de funcionamiento en ellos, cosa que permitió la creación de programas generadores de analizadores sintácticos a partir de una especificación de la sintaxis del lenguaje, tales y como YACC, GNU bison y javacc.

Page 26: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Análisis sintáctico• Es el proceso de determinar si una cadena dada

puede ser generada por una gramática.

• Los analizadores sintácticos de lenguajes de programación suele hacerse de izquierda a derecha, viendo un componente léxico a la vez

• Los analizadores pueden clasificarse dependiendo de la forma en como se construyen los nodos del árbol de derivación sintáctico: ascendentes y descendentes

Page 27: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Análisis sintáctico

AnalizadorLéxico

AnalizadorSintáctico

Petición

AnalizadorLéxico

Componente léxico

Page 28: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Análisis sintáctico

AnalizadorLéxico

AnalizadorSintáctico

Resto de la etapa inicial

Tabla de símbolos

Programa fuente

componente léxico

Representación

intermedia

Árbol de análisis

sintáctico

Page 29: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Análisis sintáctico• Las gramáticas se pueden expresar en forma BNF

(Backus-Naur Form).

• El análisis sintáctico impone una estructura jerárquica.

id1 := id2 +

id3 *60

Page 30: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Tipos de analizadores sintácticos

• LL (left to left) leen la cadena de izquierda a derecha y derivan por la izquierda

• LR (left to right)

• S�aA• A�aBbC• B�b• C�c

Page 31: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.4.1 Analizador descendente (LL)

• Existen diferentes métodos de análisis sintáctico. La mayoría caen en una de dos categorías: ascendentes y descendentes. Los ascendentes construyen el árbol desde las hojas hacia la raíz. Los descendentes lo hacen en modo inverso.

• Un analizador ampliamente utilizado se denomina método de análisis predictivodescendente recursivo que es muy sencillo.

Page 32: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador descendente

• Derivación izquierda:

• S�aA�aaBbC�aabbC�aabbc (1234)• S�aA�aaBbC�aaBbc�aabbc (3421)

• LL(k) traductores “top-down”• Un análisis anticipado de k caracteres

Page 33: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador descendente

• S�aS|cA• A�bA|cB|ε• B�cB|a| ε

• Construir cadena acbb

• S�aS o S�cA; al anticipar el primer símbolo

Page 34: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador descendente

�accbbA� εΕAcbb

�acbbAA�bAbacb

�acbAA�bAbac

�acAS�cAca

S�aSS�aSaε

DerivaciónRegla a Aplicar

AnticipaciónPrefijo

Page 35: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador descendente

• L={anabcn | n>0}• S�aSc|aabc

• Se requiere una anticipación de por los menos tres símbolos LL(3)

• S�aaAc• A�Sc|abc LL(1)

Page 36: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.4.2 Analizador ascendente (LR, LALR)

• Algunos problemas no se pueden resolver de forma descendente ya que no están fácil quitar la ambigüedad. En algunos casos es más fácil demostrar algo ya existente.

• Generalmente los analizadores sintácticos LR(k) son del tipo “bottom-up”

Page 37: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador ascendente

• El analizador trata de reducir la cadena de entrada w al símbolo inicial S. En un proceso que recorre el árbol de derivación en sentido inverso que se llama reducción.

• No sólo es necesario una gramática que no presente ambigüedades sino que también tenga el valor de k más pequeño.

Page 38: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador ascendente

S�AS

A�A+TA

T�bA+b

T�(A)T+b

A�T(A)+b

T�b(T)+b

(b)+b

Regla a aplicarReducción

Page 39: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.5 Administración de tablas de símbolos

• La tabla de símbolos se crea durante la fase de análisis léxico a través de los componentes léxicos, pero en el proceso de análisis sintáctico sufren algunas modificaciones.

• Generalmente se agregan valores de tipo y significado para el análisis sintáctico.

Page 40: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.6 Manejo de errores sintácticos y su recuperación.

• Si los traductores tuvieran que procesar programas correctas el proceso de implantación se simplificaría mucho.

• ¿Cómo debe de responder un compilador de pascal a un código Fortran?

• Ningún método de recuperación de errores resuelve todos los problemas

Page 41: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Tipos de errores• Léxicos: como escribir mal un identificador, palabra

clave u operador.

• Sintácticos: como una expresión aritmética con paréntesis no equilibrados.

• Semánticos: como un operador aplicado a un operadorando incompatible.

• Lógicos: como una llamada infinitamente recursiva

Page 42: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Tipos de errores

• La mayoría de los errores se centra en la fase de análisis sintáctico.

• El manejador de errores debe:

• Informar la presencia de errores con claridad y exactitud.

Page 43: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Administrador de errores

• Recuperar de cada error con la suficiente rapidez como para detectar errores posibles.

• No debe retrasar de manera significativa el procesamiento de programas correctos.

• Debe indicar la línea del error y algún mensaje informativo

Page 44: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Estrategias de recuperación de errores

• Modo Pánico

• Nivel de Frase

• Producciones de error

• Corrección global

Page 45: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Recuperación en modo pánico

• Es el más sencillo de implantar.

• El analizador sintáctico desecha componentes léxicos hasta encontrar un carácter de sincronización. Estos caracteres son el punto y como (;) entre otros.

Page 46: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Recuperación en modo pánico

int a.b,c;

struct c {….}

main() {

int a;}

Page 47: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Recuperación a nivel de frase

• Esta técnica utiliza una corrección de caracteres adyacentes, ya sea por inserción, eliminación o intercambio.

• Esta técnica permite sustituir , por ;, etc. Son traductores que corrigen errores. Desafortunadamente para muchos casos no aplican por lo que no se utilizan demasiados.

Page 48: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Producciones de error

• Se pueden generar gramáticas para generar producciones de error y así de esta forma seguir con el proceso.

• La dificultad radica en el sentido de encontrar esas reglas gramaticales para generar error. En algunos casos sería inclusiva más extensa que la gramática del propio lenguaje.

• for(i<3, a<10; i++)

Page 49: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Corrección global

• Idealmente, sería recomendable que un traductor hiciera el mínimo de cambios para procesar una entrada inválida. Este algoritmo genera menores costos globales para realizar cambios.

• El problema radica en que el implementar estas estrategias son muy costosas en tiempo y espacio.

Page 50: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

4.7 Generadores de código para analizadores sintácticos: Yacc, Bison

• YACC (YET ANOTHER COMPILER-COMPILER): provee una herramienta general para describir la entrada de un programa de computación. El usuario de YACC especifica las estructuras de su entrada, junto con el código que seráinvocado en la medida en que cada una de esas estructuras es reconocida.

Page 51: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

YACC/BISON

• YACC convierte esa especificación en una subrutina que maneja el proceso de entrada.

• La subrutina de entrada producida por YACC llama a la rutina provista por el usuario para devolver el próximo ítem básico de la entrada.

Page 52: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

YACC/BISON

• GNU Bison es un generador de parsers de propósito general que convierte una descripción gramatical desde una gramática libre de contexto LALR en un programa en C para hacer el parser.

• Es utilizado para crear parsers para muchos lenguajes, desde simples calculadoras hasta lenguajes complejos.

Page 53: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

YACC/BISON

• GNU Bison tiene compatibilidad con Yacc: todas las gramáticas bien escritas para Yacc, funcionan en Bison sin necesidad de ser modificadas.

• Cualquier persona que esté familiarizada con Yacc podría utilizar Bison sin problemas. Es necesaria experiencia con C para utilizar Bison.

Page 54: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

YACC

• Yet Another Compiler-Compiler

• Analizador.y (#include “lex.yy.c”) � bison �

analizador.c (y.tab.c) � gcc � analizador

• $gcc analizador.c –o analizador -lfl

Page 55: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Estructura de un programa en Bison

%{Declaraciones globales C

}%Declaraciones bison%%

GramáticasNombre:prod1|prod2|…|prodn;

%%Código auxiliar C

Page 56: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Tips

• Todo lexema debe ser un entero

#define VAR 200 (256)return (VAR);

Gramática vacíaGramática: prod1|

prod2|;

Page 57: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Tips

• Reduce/Reduce � ambigüedad infinita• Shift/Reduce

• S�A S�b• A� b

• A� a|b|c demasiada profundidad• A� x|y|z

Page 58: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador.lex%{

#include “ytab.h”}%sp [\n\r\t]If [i][f]%%{if} {return (IF);}“(” {return (PI); }. return (ERROR);%%

Page 59: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador.y

%{#include “lex.yy.c”

}%%token IF PI PD LLI LLD%token ID NUM OPREL OPLOG

%%programa: linea programa

|;

Page 60: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Analizador.yLinea: if linea

|;

if: if PI condicion PD LLI campo LLD;

.: {printf(“Error sintáctico”);}%%main(int argc, char *argv[]){FILE *f = fopen(argv[1], “r”);yyin = f;while (yyparse());fclose(f);

}

Page 61: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

Bison

$flex analizador.lex$bison analizador.y$gcc analizador.c –o analizador –lfl

• yytext componente léxico• yyin flujo de entrada• yylineno línea de error

Page 62: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

%%yyerror(){printf(“Error sintáctico en %d linea”, yylineno);

}

Page 63: Unidad IV Análisis Sintáctico - Departamento de …dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps2_u4.pdf4.1 Introducci ón a las Gram áticas libres de contexto y árboles de

¿Preguntas?