Вы находитесь на странице: 1из 12

ANLISIS SINTCTICO DESCENDENTE Y ASCENDENTE

Ing. de Computacin y Sistemas Autmatas y Compiladores Ing. Carlos Gaytn Toledo

Anlisis Sintctico Descendente


El rbol de derivacin se construye: Desde la raz (smbolo inicial de la gramtica) hacia las hojas (cadena de tokens) Procesando la cadena de tokens de izquierda a derecha Construyendo la derivacin mas la izquierda

Problemas para el Anlisis Sintctico Descendente


La Recursividad por la izquierda: Una gramtica tiene recursividad izquierda si contiene un no-terminal A tal que existe una derivacin A+A para alguna cadena . Da lugar a un bucle infinito de recursin durante el anlisis sintctico descendente. Las Producciones que tienen el mismo prefijo: Son producciones de la forma A 1 | 2 | | n | Da lugar a indeterminismo, no sabramos cual produccin elegir. Probaramos una y si se produce un error haramos retroceso para probar derivar con las otras producciones.
01/05/2012 3

Eliminacin de la Recursividad por la Izquierda


Eliminacin de la Recursividad Izquierda Directa Elimina recursividad por la izquierda de un paso, es decir, de la forma A A | Se resuelve transformando las producciones originales de A segn como sigue: Ordenar las producciones de A en la forma siguiente: A A 1 | A 2 | | A m | 1 | 2 | | n Reemplazar las producciones de A por: A 1 A | 2 A | | n A A 1 A | 2 A | | m A |
01/05/2012 4

Eliminacin de la Recursividad por la Izquierda


Eliminar la recursividad izquierda de la gramtica: EE+T|E-T|T TT*F|T/F|F F ( E ) | num Eliminamos recursividad izquierda directa para T: remplazamos: TT*F|T/F|F por T F T T * F T| / F T | La gramtica queda as: E T E E + T E | - T E | T F T T * F T | / F T | F ( E ) | num
5

Solucin Eliminamos recursividad izquierda directa para E:


remplazamos EE+T|E-T|T por E T E E + T E| - T E |
01/05/2012

Eliminacin de la Recursividad por la Izquierda


Eliminacin de la Recursividad Izquierda Indirecta Elimina recursividad izquierda de varios pasos, donde a partir de una FS que empieza por un no terminal se puede derivar una nueva FS donde reaparece al principio dicho no terminal: A + A Se resuelve sistemticamente aplicando el siguiente Algoritmo: Ordenar los smbolos no trminales segn A1, A2, ..., An Desde i=1 Hasta n Desde j=1 Hasta i-1 Reemplazar c/prod. AiAj por Ai1|2||k donde Aj1|2||k son las reglas actuales de Aj Eliminar recursividad izquierda directa de las producciones de Ai
01/05/2012 6

Eliminacin de la Recursividad por la Izquierda


Eliminar recursividad izquierda indirecta en la G: SAa|b AAc|Sd| Donde: S Aa Sda presenta recursividad izquierda indirecta.
Trabajamos con A2 = A: Trabajamos con la produccin (4) ASd AAad|bd Eliminamos recursividad izquierda directa para A AAc|Aad|bd| A b d A | A A c A| a d A| La nueva gramtica es: SAa|b A b d A | A A c A | a d A |
7

Solucin A1 = S, A2 = A Trabajamos con A1 = S: No hay no terminales anteriores a S No hay recursividad izquierda directa para S
01/05/2012

Factorizacin por la izquierda


Una gramtica se factoriza por la izquierda cuando dos producciones para un no terminal tienen smbolos comunes por la izquierda: A 1 | 2. Algoritmo, que deja gramtica factorizada por la izquierda: Para cada no terminal A, encontrar el prefijo ms largo comn a dos o ms de sus producciones. Ordenar la producciones de A: A 1 | 2 | | n | Reemplazar las producciones de A por: A A | A 1 | 2 | | n Repetir el paso anterior hasta que no existan producciones con prefijos comunes.

01/05/2012

Factorizacin por la izquierda


Factorizar la gramatica: S ABc | ABde | ABdf | ABS Aa Bb ABd es el prefijo mas largo de las producciones de S: S ABdS | ABc | ABS S e | f AB es ahora el prefijo mas largo de las producciones de S: S ABS S dS | c | S S e | f

Anlisis Sintctico Ascendente


Construye el rbol de AS para una cadena de tokens desde las hojas hacia la raz o smbolo inicial. Construye la inversa de la derivacin mas a la derecha realizando reducciones en lugar de derivaciones.

01/05/2012

10

Anlisis Sintctico Ascendente


Cada reduccin sustituye una subcadena (empuadora, asidero o mango), que concuerde con el consecuente de un regla de produccin, por el antecedente de esa regla. El anlisis sintctico ascendente se basaba en la identificacin de las empuaduras. Formalmente, la empuadura de una FS derecha , esta descrita por una produccin A, y la posicin dentro de donde la cadena puede ser localizada y remplazada por A para producir la FS derecha anterior, en una derivacin derecha de .
01/05/2012 11

Empuadura, mango o asidero


Ejemplo: anlisis sintctico ascendente de la cadena abbcde con la gramtica: S aABe A Abc | b Bd abbcde 3 aAbcde 2 aAde 4 aABe 1 S (1) (2) (3) (4) Las empuaduras de las FS son:
(1) posicin 2, produccin A b (2) posicin 2, produccin A Abc (3) posicin 3, produccin B d (4) posicin 1, produccin S aABe
01/05/2012 12

Вам также может понравиться