Está en la página 1de 73

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE


Anlisis Sintctico Descendente con Retroceso El anlisis sintctico descendente (ASD) intenta encontrar entre las producciones de la gramtica la derivacin por la izquierda del smbolo inicial para una cadena de entrada. Ejemplo: Analizar la cadena de entrada cad dada la gramtica siguiente:

ANALISIS SINTACTICO DESCENDENTE

cad, se toma la primera produccin

ANALISIS SINTACTICO DESCENDENTE


cad, se toma la segunda produccin. siguiente hoja del rbol A cabd

ANALISIS SINTACTICO DESCENDENTE


cad se compara con la siguiente hoja del rbol etiquetada con b. Como no concuerda, se indica el error y se vuelve a A para ver si hay otra alternativa no intentada.

ANALISIS SINTACTICO DESCENDENTE


cad, se toma la siguiente alternativa que comienza por a. siguiente hoja del rbol A, cad

ANALISIS SINTACTICO DESCENDENTE


cad, coincide d con d anlisis exitoso

ANALISIS SINTACTICO DESCENDENTE


Anlisis Sintctico Predictivo Descendente con

El analizador debe realizar la previsin de la regla a aplicar slo con ver el primer smbolo que produce para que el algoritmo tenga una complejidad lineal.

ANALISIS SINTACTICO DESCENDENTE


Ejemplo: . Sent if Express then Sent . Sent while Express do Sent . Sent begin Sent end Existe slo una posibilidad de derivacin, segn que el primer smbolo que haya en la entrada sea un if, while o begin

ANALISIS SINTACTICO DESCENDENTE


Anlisis Sintctico Descendente con Predictivo Las gramticas que son susceptibles de ser analizadas sintcticamente de forma descendente mediante un anlisis predictivo y consultando un nicamente un smbolo de entrada pertenecen al grupo LL(1). A partir de gramticas LL(1) se pueden construir analizadores sintcticos descendentes predictivos (ASDP), que son ASD sin retroceso.

ANALISIS SINTACTICO DESCENDENTE


Conjuntos de Prediccin Son conjuntos de smbolos terminales
Ayudan a predecir qu regla se debe aplicar para el no Terminal que hay que derivar.

Se construyen a partir de los smbolos de las partes derechas de las producciones de la gramtica. El analizador consulta el siguiente smbolo en la entrada.
si pertenece al conjunto de prediccin de una regla aplica esa regla, si no da error.

ANALISIS SINTACTICO DESCENDENTE


Ejemplos de Conjuntos de Prediccin Supngase la entrada babxcc, que se han ledo ya los smbolos subrayados en babxcc, y la gramtica es:
A aBc|xC|B B bA C c

Qu produccin seguir el anlisis?

debe

tomar

para

ANALISIS SINTACTICO DESCENDENTE

La cadena de derivaciones ha sido:


A B bA baBc babAc

Ahora hay que seguir desarrollando la variable A utilizando los conjuntos de prediccin. Como la siguiente letra es una .x. se elige la segunda opcin (A x C)

ANALISIS SINTACTICO DESCENDENTE


La gramtica no cumple los requisitos para LL(1) porque si aparece una a en la entrada hay dos posibles opciones. Luego el anlisis: no puede ser predictivo y, la gramtica no es LL(1).

ANALISIS SINTACTICO DESCENDENTE

Clculo de los conjuntos de prediccin


Clculo de los primeros Clculo de los siguientes

ANALISIS SINTACTICO DESCENDENTE


Clculo de los Conjuntos de Prediccin Los conjuntos de prediccin se calculan:
en funcin de los primeros smbolos que puede generar la parte derecha de la regla, y cuando la parte derecha puede generar la cadena vaca, en funcin de los smbolos que pueden aparecer a continuacin de la parte izquierda de la regla en una forma sentencial derivable del smbolo inicial.

ANALISIS SINTACTICO DESCENDENTE


Para poder definir los conjunto prediccin es necesario determinar: conjunto de primeros de

calcular los primeros smbolos que genera una cadena de terminales y no terminales

conjunto de siguientes
obtener los smbolos que pueden seguir a un no terminal en una forma sentencial.

ANALISIS SINTACTICO DESCENDENTE

Clculo de los primeros

ANALISIS SINTACTICO DESCENDENTE


Sea una gramtica Def. Si es una forma sentencial compuesta por una concatenacin de smbolos, PRIM() es el conjunto de terminales (o ) que pueden aparecer iniciando las cadenas que pueden derivar de . Def. formal-

ANALISIS SINTACTICO DESCENDENTE


Reglas:

ANALISIS SINTACTICO DESCENDENTE


Gramtica

ANALISIS SINTACTICO DESCENDENTE

Clculo de los siguientes

ANALISIS SINTACTICO DESCENDENTE


Se aplica a no terminales (N) de la gramtica (A) Devuelve el conjunto de terminales que pueden aparecer a continuacin de A en alguna forma sentencial derivada del smbolo inicial y Un smbolo ($) que representa el final de la cadena de entrada.

ANALISIS SINTACTICO DESCENDENTE Def.Si A es un smbolo inicial no terminal de la gramtica, SIG(A) es el conjunto de terminales (y $) que pueden aparecer a continuacin de A en alguna forma sentencial derivada del smbolo inicial. Def. formal

ANALISIS SINTACTICO DESCENDENTE


Reglas para el Clculo del conjunto de los siguientes

ANALISIS SINTACTICO DESCENDENTE


Clculo de gramtica: los siguientes de la

ANALISIS SINTACTICO DESCENDENTE


Gramtica

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

Clculo de los conjuntos de prediccin

ANALISIS SINTACTICO DESCENDENTE


La funcin PRED se aplica a producciones de la gramtica (A ) devuelve un conjunto de prediccin que puede contener cualesquiera de los terminales de la gramtica y el smbolo $, pero nunca puede contener .

ANALISIS SINTACTICO DESCENDENTE


Cuando el ASDP tiene que derivar un no Terminal consulta el smbolo de entrada y lo busca en los conjuntos de prediccin de cada regla de ese no terminal. si los conjuntos de prediccin son disjuntos, el AS podr construir una derivacin por la izda. de la cadena de entrada.

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

La Condicin LL(1)

ANALISIS SINTACTICO DESCENDENTE


Gramticas LL(1), se debe cumplir:

ANALISIS SINTACTICO DESCENDENTE


Caractersticas de la condicin LL(1) La secuencia de tokens se analiza de izquierda a derecha. Siempre deriva el no terminal que aparezca ms a la izquierda. Slo es necesario ver un token de la secuencia de entrada para averiguar que regla de produccin seguir.

ANALISIS SINTACTICO DESCENDENTE


Ejemplo de la Gramtica LL(1)

ANALISIS SINTACTICO DESCENDENTE


Si se aade la regla B a

ANALISIS SINTACTICO DESCENDENTE


Cumple esta gramtica la condicin LL(1)?

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE


Modificacin de gramticas no LL(1)
Eliminacin de la ambigedad Factorizacin por la izquierda Eliminacin de la recursividad por la izquierda

ANALISIS SINTACTICO DESCENDENTE


Caractersticas Algunas caractersticas garantizan que una gramtica no es LL(1):
Recursiva por la izquierda Smbolos comunes por la izquierda Ambigua

Existen mtodos para modificarla convertirla en una gramtica LL(1)

ANALISIS SINTACTICO DESCENDENTE


Eliminacin de la Ambigedad Ms de un rbol sintctico posible. No existe una metodologa para eliminarla Solucin: replantearse el diseo de la misma para encontrar una gramtica no ambigua equivalente (que genere el mismo lenguaje)

ANALISIS SINTACTICO DESCENDENTE


Factorizacin por la Izquierda: Si dos producciones alternativas de un smbolo A empiezan igual, no se sabr por cul de ellas seguir. Solucin: reescribir las producciones de A para retrasar la decisin hasta haber visto lo suficiente de la entrada como para elegir la opcin correcta.

ANALISIS SINTACTICO DESCENDENTE


Regla general para factorizar por la izquierda: Encontrar el prefijo ms largo comn a dos o ms producciones de A, pero siempre aqul que sea comn a ms producciones Si existe un prefijo comn ms corto en varias producciones y otro ms largo en un par de ellas, hay que eliminar primero el ms corto comn a las varias ( = tal que || < | |).

ANALISIS SINTACTICO DESCENDENTE


Solucin: sustituir las producciones:

ANALISIS SINTACTICO DESCENDENTE


Sea la gramtica Sent if Expr then Sent else Sent endif Sent if Expr then Sent endif Sent otras Solucin: sustituirlo por dos producciones de la forma

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE


Eliminacin recursiva por la izquierda: Una gramtica es recursiva por izquierda.

la

ANALISIS SINTACTICO DESCENDENTE


Regla para modificar una gramtica Regla para modificar una gramtica y deje de ser recursiva por la izquierda.

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE


Ejemplo de una gramtica en LL(1) conversin de una

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

Analizador sintctico descendente predictivo dirigido por tabla

ANALISIS SINTACTICO DESCENDENTE


Modelo de un ASDP no recursivo dirigido por tabla Modelo del analizador sintctico predictivo Construccin de la tablas de anlisis sintctico Procedimiento para construir tablas de anlisis LL(1) Mensajes de error de tipo sintctico

ANALISIS SINTACTICO DESCENDENTE


Caractersticas Es otra forma de construir un ASDP Construccin utilizando una pila de smbolos (terminales y no terminales) A la vista de un token de preanlisis se buscar en la tabla de anlisis. Primero construir la tabla y despus realizar el proceso de anlisis.

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE


Explicacin del grfico El programa tiene en cuenta A, el smbolo de la cima de la pila, ya, el smbolo en curso de la entrada.

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE


Construccin de las tablas de anlisis Sintctico

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE


Procedimientos para construir tablas de anlisis

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE