Você está na 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 Descendente con


Predictivo

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 debe tomar para
seguir el anlisis?
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 de


prediccin es necesario determinar:
conjunto de primeros
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 los siguientes de la


gramtica:
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 y
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 la
izquierda.
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 conversin de una


gramtica en LL(1)
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

Você também pode gostar