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

Procesadores de Lenguaje

3er curso 2 cuatrimestre

Tema 4: Analizador sintctico

Alfonso Ortega: alfonso@ii.uam.es

Analizador sintctico

Analizador sintctico
Conceptos: clases de estrategias de anlisis sintctico

Conceptos
Se ocupa especficamente del tratamiento de la parte del lenguaje de programacin que es independiente del contexto Recuerde el alumno la definicin que vio en TALF de gramticas independientes del contexto < T, N, axioma, reglas > Donde axioma N reglas (N*),, *= TN Es decir, las reglas de produccin tienen la forma Av,,A N v (TN)* Tambin recibe el nombre de parser Suele ser el que gobierna todo el proceso de anlisis. El proceso de anlisis puede entenderse como el mecanismo para obtener el rbol sintctico de derivacin del programa (en caso de ser correcto) que es una manera de poder reducir el programa completo al axioma de la gramtica. Recurdese que, tras el paso de anlisis morfolgico, los smbolos terminales para este paso son las unidades sintcticas reconocidas por el analizador morfolgico

Las diferentes tcnicas para resolver el problema se pueden agrupar de la siguiente forma: Primer enfoque A partir del axioma de la gramtica y el programa (transformado en secuencia de tokens por el analizador morfolgico): Probar con las distintas opciones de derivacin para cada no terminal que encontremos Ir avanzando simultneamente en el programa y en las hojas del rbol de derivacin que estamos construyendo, cuando haya coincidencia entre el terminal actual en el programa y el terminal de la hoja actual del rbol. Hasta que O bien se recorra por completo la cadena y coincida con las hojas del rbol y, por tanto, el programa es sintcticamente correcto O bien se intentan todas las opciones posibles para cada no terminal (incluido el axioma) y no se puede completar el anlisis por lo que el programa es sintcticamente incorrecto.

Analizador sintctico
Conceptos: clases de estrategias de anlisis sintctico

Analizador sintctico
Conceptos: clases de estrategias de anlisis sintctico

Segundo enfoque: A partir de la cadena de tokens devueltos por el analizador morfolgico, se comienza a leer intentando identificar las partes derechas de las reglas de la gramtica. Cuando esto ocurre se sustituye la cadena de tokens por el no terminal de la parte izquierda de la regla y se contina el mismo anlisis teniendo en cuenta esta sustitucin Si en algn momento ninguna secuencia de la cadena se corresponde con la parte derecha de ninguna regla tal vez se tenga que deshacer alguna eleccin para probar si con otra decisin se consigue terminar el anlisis Cuando se han probado sistemticamente todas las opciones sin poder terminar el anlisis se concluye que el programa es sintcticamente incorrecto. La otra forma de terminar el anlisis es cuando se consigue obtener por el mecanismo descrito el axioma de la gramtica. En este ltimo caso se concluye que el programa es sintcticamente correcto.

Al primer enfoque, por la manera y el orden en que procede se le conoce tambin como anlisis descendente o top down. Por la misma razn al segundo enfoque se le conoce tambin como anlisis ascendente o bottom up.

Anlisis sintctico descendente


Introduccin

Anlisis sintctico descendente


Top-down con vuelta atrs lenta: conceptos

El alumno puede imaginar alguna solucin a este problema con las herramientas que ha adquirido en otras materias de la carrera. Se est ante una situacin en la que se debe encontrar una derivacin (secuencia de aplicacin de reglas de la gramtica en lugares concretos) que lleve desde el no terminal inicial (el axioma) hasta la situacin final (el programa proporcionado como entrada) Adems, el nmero de posibles derivaciones es muy grande (potencialmente infinito) Esta situacin puede a los problemas de bsqueda de un camino que llevara de una situacin inicial a otra final atravesando un espacio enorme de posibles situaciones. Ya se ha estudiado en asignaturas como IA la existencia de estrategias generales (para cualquier problema) de bsqueda ciega y sus propiedades de las que se mencionan algunas: Las dos estrategias bsicas son en anchura y en profundidad En anchura siempre se puede conseguir encontrar la solucin ptima (aquella para la que se requiere un menor nmero de pasos) En profundidad, excepto rboles infinitos, se suele tener oportunidad de encontrar alguna solucin con menos esfuerzo
7

Podramos considerar el anlisis sintctico top-down con vuelta atrs lenta como un caso particular de bsqueda ciega en profundidad (se desempate de izquierda a derecha) El criterio para decidir si una regla es aplicable en una posicin es la coincidencia de esa posicin con el no terminal que est en la parte izquierda de la regla. No podremos continuar por un camino cuando tengamos terminales que discrepen con el programa (podemos suponer el orden de recorrido natural del programa (de izquierda a derecha) Habremos terminado el proceso en dos situaciones: Si el rbol de derivacin se cierra porque se ha llegado a eliminar todos los no terminales y se obtiene la misma secuencia de terminales del programa. En este caso se ha construido un rbol sintctico para el programa que resulta ser correcto Si no se ha podido cerrar el rbol de derivacin pero se ha probado todas las reglas en cada posicin y no se puede aplicar ninguna otra opcin. En ese caso se ha demostrado que el programa es sintcticamente incorrecto. Describiremos esta tcnica mediante los siguientes ejemplos
8

Anlisis top-down, vuelta atrs lenta

Anlisis top-down, vuelta atrs lenta


Ejemplos previos
aaabbb G=<{S},{a,b} {S aSb |ab}, S> S a a a S S b b b aaabbb

Ejemplos previos
Anlisis sintctico de la palabra aaabbb G=<{S},{a,b} {S aSb |ab}, S> S

ACEPTADA

21

Anlisis top-down, vuelta atrs lenta

Anlisis top-down, vuelta atrs lenta


Ejemplos previos
abbb G=<{S},{a,b} {S aSb |ab}, S> S a b a S S b a S b abbb

Ejemplos previos
Anlisis sintctico de la palabra abbb G=<{S},{a,b} {S aSb |ab}, S> S

RECHAZADA

22

31

Anlisis top-down, vuelta atrs lenta

Anlisis top-down, vuelta atrs lenta


Ejemplos previos
i+--i G=<{E},{-,+,i} {E-E |i |E+E}, E> E E E E i + E E i E E i ACEPTADA E E E E i+--i

Ejemplos previos
Anlisis de la palabra i+--i G=<{E},{-,+,i} {E-E |i |E+E}, E> E

32

48

Anlisis top-down, vuelta atrs lenta

Anlisis top-down, vuelta atrs lenta


Conclusiones
i+--i

Ejemplos previos
Considerar el anlisis para i++i G=<{E},{-,+,i} {E-E |i |E+E}, E> E

Como el alumno habr observado, la presencia en la gramtica de reglas recursivas por la izquierda hace que este tipo de anlisis encuentre bucles infinitos de los que no puede salir. En las siguientes transparencias se sacar provecho de este descubrimiento y se presentar otras propiedades de las gramticas interesantes para la construccin de analizadores sintcticos descendentes eficientes.

49

50

Propiedades de las gramticas para los analizadores descendentes


Propiedades

Forma normal de Greibach

Uno de los objetivos de este tema es demostrar que se puede construir fcilmente analizadores de tipo LL(1) (la entrada se lee desde la izquierda left las derivaciones en el rbol se hacen de izquierda left a derecha y se necesita conocer slo 1 smbolo de la entrada por anticipado) si la gramtica se puede expresar en forma adecuada Propiedades necesarias para expresar la gramtica de esa forma Eliminar recursividad por la izquierda (por su relacin suele considerarse un paso auxiliar para la cuarta propiedad) Eliminar smbolos inaccesibles (por su relacin suele considerarse un paso auxiliar para la cuarta propiedad) Eliminar reglas del tipo A

Eliminacin de recursividad a izquierdas: ejemplo previo


Analcese el siguiente ejemplo i+--i i E + E E E i + i E E E E E E E E G=<{E},{-,+,i} {E-EE|iE E+EE|}, E>

G=<{E},{-,+,i} {E-E |i |E+E}, E> E i

Expresin de la gramtica en forma normal de Greibach Factorizacin por la izquierda (que es una condicin necesaria para LL(1))

E
52

51

Forma normal de Greibach


Eliminacin de recursividad a izquierdas: conclusiones previas

Forma normal de Greibach


Lema: eliminacin de recursividad a izquierdas
Toda gramtica independiente del contexto puede reducirse a otra equivalente sin reglas recursivas a izquierdas

Del ejemplo anterior no parece poder deducirse idea intuitiva alguna Sin embargo la tcnica se puede generalizar

Una regla recursiva a izquierdas tiene el siguiente aspecto AAx,,A N x (TN)* El lema se demuestra de forma constructiva realizando para cada regla recursiva el siguiente tratamiento: Sea < T, N, S, P> una gramtica que tiene reglas recursivas de la siguiente forma: AA1|...|An|1|...|m

Donde {i

}ni=1

representa todas las partes derechas no recursivas

Se sustituye el subconjunto anterior de reglas por A1X|...|mX X1X|...|nX|

53

54

Forma normal de Greibach


Eliminacin de recursividad a izquierdas: ejemplo 1

G=<{E,T,F}, {-,*,i} {EE+T|T TT*F|F Fi}, E> AA1|...|An|1|...|m A1X|...|mX X1X|...|nX|

G=<{E,E,T,T,F}, {-,*,i} {ETE E+TE| TFT T*FT| Fi}, E>

55

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