Está en la página 1de 6
Procesadores de Lenguaje 3 e r curso 2º cuatrimestre Tema 4: Analizador sintáctico Alfonso Ortega:

Procesadores de Lenguaje

3 er curso 2º cuatrimestre

Procesadores de Lenguaje 3 e r curso 2º cuatrimestre Tema 4: Analizador sintáctico Alfonso Ortega:

Tema 4: Analizador sintáctico

Alfonso Ortega: alfonso@ii.uam.es

 
 
 
 

Analizador sintáctico

 

Analizador sintáctico

 

Conceptos

Conceptos: clases de estrategias de análisis sintáctico

Se ocupa específicamente del tratamiento de la parte del lenguaje de programación que es independiente del contexto

 

Las diferentes técnicas para resolver el problema se pueden agrupar de la siguiente forma:

Primer enfoque

 

Recuerde el alumno la definición que vio en TALF de gramáticas independientes del contexto < Σ T , Σ N , axioma, reglas >

Donde

A partir del axioma de la gramática y el programa (transformado en secuencia de “tokens” por el analizador morfológico):

• axioma

Σ N

• Probar con las distintas opciones de derivación para cada no terminal que encontremos

 

• reglas ∈ ℘(Σ N ×Σ * ),, Σ * = Σ T ∪Σ N

 

Es decir, las reglas de producción tienen la forma Av,,A ∈ Σ N v (Σ T ∪Σ N ) *

• Ir avanzando simultáneamente en el programa y en las hojas del árbol de derivación que estamos construyendo, cuando haya coincidencia entre el terminal actual en el programa y el terminal de la hoja actual del árbol.

También recibe el nombre de “parser

 

Suele ser el que gobierna todo el proceso de análisis.

 

Hasta que

El proceso de análisis puede entenderse como el mecanismo para obtener el “árbol

 

sintáctico de derivación del programa (en caso de ser correcto) que es una manera de poder reducir el programa completo al axioma de la gramática.

Recuérdese que, tras el paso de análisis morfológico, los símbolos terminales para este paso son las unidades sintácticas reconocidas por el analizador morfológico

 

• O bien se recorra por completo la cadena y coincida con las hojas del árbol y, por tanto, el programa es sintácticamente correcto

• O bien se intentan todas las opciones posibles para cada no terminal (incluido el axioma) y no se puede completar el análisis por lo que el programa es sintácticamente incorrecto.

3
3
4
4

Analizador sintáctico

Conceptos: clases de estrategias de análisis sintáctico

Segundo enfoque:

A partir de la cadena de “tokens” devueltos por el analizador morfológico, se comienza a leer intentando identificar las partes derechas de las reglas de la gramática.

Cuando esto ocurre se sustituye la cadena de “tokens” por el no terminal de la parte izquierda de la regla y se continúa el mismo análisis teniendo en cuenta esta sustitución

Si en algún momento ninguna secuencia de la cadena se corresponde con la parte derecha de ninguna regla tal vez se tenga que deshacer alguna elección para probar si con otra decisión se consigue terminar el análisis

Cuando se han probado sistemáticamente todas las opciones sin poder terminar el análisis se concluye que el programa es sintácticamente incorrecto.

La otra forma de terminar el análisis es cuando se consigue obtener por el mecanismo descrito el axioma de la gramática.

En este último caso se concluye que el programa es sintácticamente correcto.

Analizador sintáctico

Conceptos: clases de estrategias de análisis sintáctico

Al primer enfoque, por la manera y el orden en que procede se le conoce también como análisis descendente o “top down”.

Por la misma razón al segundo enfoque se le conoce también como análisis ascendente o “bottom up”.

5 6
5
6

Análisis sintáctico descendente

Introducción

Análisis sintáctico descendente

Top-down” con vuelta atrás lenta: conceptos

El alumno puede imaginar alguna solución a este problema con las herramientas que ha adquirido en otras materias de la carrera.

Se está ante una situación en la que se debe encontrar una derivación (secuencia de aplicación de reglas de la gramática en lugares concretos) que lleve desde el no terminal inicial (el axioma) hasta la situación final (el programa proporcionado como entrada)

Además, el número de posibles derivaciones es muy grande (potencialmente infinito)

Esta situación puede a los problemas de búsqueda de un camino que llevara de una situación 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 búsqueda ciega y sus propiedades de las que se mencionan algunas:

Las dos estrategias básicas son en anchura y en profundidad

En anchura siempre se puede conseguir encontrar la solución óptima (aquella para la que se requiere un menor número de pasos)

En profundidad, excepto árboles infinitos, se suele tener oportunidad de encontrar alguna solución con menos esfuerzo

Podríamos considerar el análisis sintáctico top-down con vuelta atrás lenta como un caso particular de búsqueda ciega en profundidad (se desempate de izquierda a derecha)

El criterio para decidir si una regla es aplicable en una posición es la coincidencia de esa posición 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 derivación “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 sintáctico para el programa que resulta ser correcto

Si no se ha podido “cerrar” el árbol de derivación pero se ha probado todas las reglas en cada posición y no se puede aplicar ninguna otra opción. En ese caso se ha demostrado que el programa es sintácticamente incorrecto.

Describiremos esta técnica mediante los siguientes ejemplos

7 8
7
8

Análisis “top-down”, vuelta atrás lenta

Ejemplos previos

Análisis sintáctico de la palabra aaabbb

G=<{S},{a,b} {S aSb |ab},

S>

S

aaabbb

Análisis “top-down”, vuelta atrás lenta

Ejemplos previos

G=<{S},{a,b} {S →→→→ aSb |ab},

S>

S a S b a S b
S
a S
b
a S
b

a b

ACEPTADA

aaabbb

9 21 Análisis “top-down”, vuelta atrás lenta Análisis “top-down”, vuelta atrás lenta Ejemplos previos
9
21
Análisis “top-down”, vuelta atrás lenta
Análisis “top-down”, vuelta atrás lenta
Ejemplos previos
Ejemplos previos
• Análisis sintáctico de la palabra abbb
S
S
G=<{S},{a,b}
{S →→→→ aSb
|ab},
S
abbb
G=<{S},{a,b}
{S →→→→ aSb
|ab},
S
abbb
a
S
b
a
b
a
b
S>
S>
RECHAZADA
22
31

Análisis “top-down”, vuelta atrás lenta

Análisis “top-down”, vuelta atrás lenta

Ejemplos previos Ejemplos previos • Análisis de la palabra i+--i G=<{E},{-,+,i} E i+--i G=<{E},{-,+,i} E
Ejemplos previos
Ejemplos previos
• Análisis de la palabra i+--i
G=<{E},{-,+,i}
E
i+--i
G=<{E},{-,+,i}
E
E
E
i+--i
{E→→→→-E
{E→→→→-E
|i
|i
E
E
+
E
i
-
E
|E+E},
|E+E},
E>
E>
i
-
E
-
E
-
E
E
i
-
E
ACEPTADA
32
48
Análisis “top-down”, vuelta atrás lenta
Análisis “top-down”, vuelta atrás lenta
Ejemplos previos
Conclusiones
• Considerar el análisis para i++i
G=<{E},{-,+,i}
E
i+--i
• Como el alumno habrá observado, la presencia en la gramática de reglas recursivas
por la izquierda hace que este tipo de análisis encuentre bucles infinitos de los que
no puede salir.
{E→→→→-E
|i
|E+E},
• En las siguientes transparencias se sacará provecho de este descubrimiento y se
presentará otras propiedades de las gramáticas interesantes para la construcción de
analizadores sintácticos descendentes eficientes.
E>
49
50

Propiedades de las gramáticas para los analizadores descendentes

Propiedades

Uno de los objetivos de este tema es demostrar que se puede construir fácilmente 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 sólo 1 símbolo de la entrada por anticipado) si la gramática se puede expresar en forma adecuada

Propiedades necesarias para expresar la gramática de esa forma

Eliminar recursividad por la izquierda (por su relación suele considerarse un paso auxiliar para la cuarta propiedad)

Eliminar símbolos inaccesibles (por su relación suele considerarse un paso auxiliar para la cuarta propiedad)

Eliminar reglas del tipo A→λ

Expresión de la gramática en forma normal de Greibach

Factorización por la izquierda (que es una condición necesaria para LL(1))

Forma normal de Greibach

Eliminación de recursividad a izquierdas: ejemplo previo

Analícese el siguiente ejemplo

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

i

i+--i

E i E’
E
i
E’

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

{E→→→→-EE’|iE’

E’→→→→+EE’|λλλλ},

E>

+ E E’
+
E E’
- E E’ λλλλ - E E’ λλλλ i E’ λλλλ
- E E’
λλλλ
-
E E’
λλλλ
i
E’
λλλλ

λλλλ

51 52 Forma normal de Greibach Forma normal de Greibach Eliminación de recursividad a izquierdas:
51
52
Forma normal de Greibach
Forma normal de Greibach
Eliminación de recursividad a izquierdas: conclusiones previas
Lema: eliminación de recursividad a izquierdas
• Del ejemplo anterior no parece poder deducirse idea intuitiva alguna
• Sin embargo la técnica se puede generalizar
Toda gramática independiente del contexto puede reducirse a otra equivalente sin
reglas recursivas a izquierdas
• Una regla recursiva a izquierdas tiene el siguiente aspecto
A→Ax,,A ∈ Σ N ∧ x ∈ (Σ T ∪Σ N ) *
• El lema se demuestra de forma constructiva realizando para cada regla recursiva el
siguiente tratamiento:
• Sea < Σ T , Σ N , S, P> una gramática que tiene reglas recursivas de la siguiente
forma:
• A→Aα 1 |
|Aα
n |β 1 |
m
• Donde {β i } n i=1 representa todas las partes derechas no recursivas
• Se sustituye el subconjunto anterior de reglas por
• |β
A→β 1 X|
X
m
• |α
X→α 1 X|
n X|λ
53
54

Forma normal de Greibach

Eliminación de recursividad a izquierdas: ejemplo 1

G=<{E,T,F},

{-,*,i}

{E→→→→E+T|T

T→→→→T*F|F

F→→→→i},

E>

G’=<{E,E’,T,T’,F}, G’=<{E,E’,T,T’,F}, {-,*,i} {-,*,i} {E→→→→TE’ {E→→→→TE’
G’=<{E,E’,T,T’,F},
G’=<{E,E’,T,T’,F},
{-,*,i}
{-,*,i}
{E→→→→TE’
{E→→→→TE’
E’→→→→+TE’|λλλλ
E’→→→→+TE’|λλλλ
T→→→→FT’
T→→→→FT’
T’→→→→*FT’|λλλλ
T’→→→→*FT’|λλλλ
F→→→→i},
F→→→→i},
E>
E>
A→Aαααα 1 | |Aαααα n |β 1 | |β m A→β 1 X| |β m
A→Aαααα 1 |
|Aαααα
n |β 1 |
m
A→β 1 X|
m X
X→αααα 1 X|
|αααα
n X|λ
55
55