Está en la página 1de 23

Ambigedad.

Deteccin y
eliminacin
Enzo Andreetto

rboles de derivacin
En clases anteriores se vieron a la inferencia recursiva y a
las derivaciones por izquierda y por derecha como
procedimientos para demostrar que una palabra pertenece
al lenguaje generado por una determinada gramtica. Un
concepto relacionado es el de rbol de derivacin.

Sea G = (V, T, P, S). Los rboles de derivacin para G son


aqullos que cumplen con las siguientes condiciones:
1) Cada nodo interior est etiquetado con una variable de
V.
2) Cada hoja est etiquetada bien con una variable, un
smbolo terminal o . Sin embargo, si la hoja est
etiquetada con , entonces tiene que ser el nico hijo
de su padre.
3) Si un nodo interior est etiquetado como A y sus hijos
estn etiquetados como : X1, X2, ..., Xk
respectivamente, comenzando por la izquierda,
entonces A X1 X2 ... Xk es una produccin de P.

Ejemplo: Sea la gramtica G = (V, T, P, S) definida como


V = {A, B}
T = {0, 1, #}
S = {A}
P = { A 0A1, A B, B # }
La palabra 00#11 L(G) y su rbol es:
A
0

B
#

La existencia de un rbol de derivacin para la palabra


00#11 indica que pertenece al lenguaje generado de G
pero, adems, determina su estructura sintctica
indicando la precedencia de los smbolos terminales.
Si, por ejemplo, se escribiera una gramtica que
generase expresiones de nmeros enteros con la
suma y el producto, la palabra 1 + 3 * 2 podra tener,
por ejemplo, el siguiente rbol:
S
A + B
1

A * A
3

Pero no el rbol:
S
B * A
1 + 3

ya que el producto tiene mayor precedencia que la suma y


el resultado debera ser 7, no 8.

Dada una gramtica G = (V, T, P, S), las siguientes


afirmaciones son equivalentes:
- La inferencia recursiva determina que la cadena terminal
w pertenece al lenguaje de la variable A.
- A * w.
- A *lm w.
- A *rm w.
- Existe un rbol de derivacin cuya raz es A.
Aunque puede haber ms de una derivacin para una
palabra w, qu ocurre cuando hay ms de un rbol
sintctico?

Ambigedad
Una gramtica es ambigua cuando existen dos rboles de
derivacin diferentes para al menos una palabra. Este
problema hace que la gramtica no determine la
estructura sintctica de los elementos de la palabra.
Ejemplo: La gramtica con las reglas de produccin
S S + S y S S * S tiene dos rboles para la palabra
S + S * S.
S
S
S

S
S

S
S +

No existe un algoritmo que permita decidir si una


gramtica libre de contexto es ambigua. Sin embargo, el
siguiente hecho sirve para determinar si hay ambigedad:
En una gramtica no ambigua las derivaciones no son
necesariamente nicas, pero las derivaciones ms a la
izquierda y ms a la derecha s lo sern.
Teorema: Para cada gramtica G = (V, T, P, S) y cadena
w en T *, w tiene dos rboles de derivacin distintos si y
slo si w tiene dos derivaciones a la izquierda distintas
desde S.
Por ejemplo: Para la gramtica de la diapositiva anterior y
la palabra S + S * S, existen las derivaciones por izquierda
S lm S + S lm S + S * S y
S lm S * S lm S + S * S

No hay un procedimiento que permita eliminar la


ambigedad de una gramtica, adems de que existen
ciertos lenguajes (llamados inherentemente ambiguos)
para los que no existen gramticas no ambiguas. Sin
embargo, s se pueden identificar ciertas causas de
ambigedad y criterios para eliminarla.
En primer lugar, se deben evitar reglas de produccin
redundantes que permitan derivar la misma palabra. Un
ejemplo trivial sera el de una gramtica ambigua para el
lenguaje que tiene slo a la cadena vaca . Por ejemplo:
S A B, A
O tambin S A SA, A
Una gramtica no ambigua para este lenguaje tendra slo
la regla S

Otro caso a considerar es la concatenacin de n


terminales. Por ejemplo, el lenguaje que consiste en las
palabras de una o ms a. Si se considera la palabra aaa,
sta se interpreta como la expresin aa seguida por a, o
como a seguida por la expresin aa? Una gramtica no
ambigua debera seguir uno de estos criterios, pero no los
dos a la vez. La gramtica con las reglas S aS Sa a
genera el lenguaje en cuestin, pero es ambigua. En
cambio, S Sa a no lo es.

Una causa tpica de ambigedad ocurre cuando la


gramtica no considera cmo se asocian ciertas
secuencias de caracteres. Es fcil ver esto cuando ciertos
smbolos se interpretan como operadores. Por ejemplo,
considrese el lenguaje con nmeros enteros de un dgito
y sumas de enteros de un dgito. La siguiente es una
gramtica ambigua para el mismo:
S S +A A+ S A
A0 1 9

La palabra 1 + 2 + 3 tiene los siguientes rboles:


S
S
S + A
S + A
A

A + S
1

A + S
2

1
3
Dado que la adicin cumple con la ley asociativa, ambas
expresiones arrojan el mismo resultado. Sin embargo,
difieren desde un punto de vista sintctico. El rbol de la
izquierda equivale a (1 + 2) + 3, mientras que el de la
derecha es 1 + (2 + 3).

Para eliminar la ambigedad, se debe lograr una


gramtica que opte por el primer o por el segundo rbol.
Es decir, que asocie al operador + por izquierda o por
derecha. Una vez ms, el problema est en la
redundancia dada por las reglas S + A y A + S. Se debe
optar por una de las dos y, si se conserva S + A la suma
se analizar sintcticamente como asociativa por
izquierda; en cambio, si se emplea A + S, la suma
asociar por derecha.

Considrese ahora la gramtica dada por las siguientes


reglas:
SS+S S*S A
A 0 1 9 AA
Dos derivaciones por izquierda diferentes para la palabra
1 + 2 * 3 son:
- S lm S + S lm A + S lm 1 + S lm 1 + S * S
lm 1 + A * S lm 1 + 2 * S lm 1 + 2 * A lm 1 + 2 * 3
- S lm S * S lm S + S * S lm A + S * S lm 1 + S * S
lm 1 + A * S lm 1 + 2 * S lm 1 + 2 * A
lm 1 + 2 * 3
Esto demuestra que la gramtica es ambigua. En este
caso, el problema se produce porque la gramtica no
puede determinar la precedencia de los operadores + y *.

Como el producto tiene mayor precedencia que la suma,


la primera de las derivaciones es la deseable, ya que se
busca que la expresin sea evaluada como 1 + (2 * 3) y
no como (1 + 2) * 3. Para eliminar la ambigedad, se
necesitan otras variables, cada una de las cuales
expresar un concepto diferente. Se usar el smbolo
inicial S para denotar una expresin aritmtica con suma y
producto. La variable A representar el trmino de una
suma y B el factor de un producto. Las siguientes reglas
producen una gramtica no ambigua para el lenguaje en
cuestin:
S S +A A
A A * B B (S)
B 0 1 9 BB

La primer regla dice que una expresin es un trmino o


una expresin ms un trmino. Ntese que la regla
S S + A fuerza a la gramtica a asociar a la suma por
izquierda; de lo contrario, se habra usado S A + S. La
segunda dice que un trmino es el producto de un trmino
con un factor, un factor o una expresin entre parntesis.
La tercer regla dice que un factor es un dgito o la
concatenacin de dos dgitos.
Como * tiene mayor precedencia que + (es decir, debe
resolverse primero a menos que los parntesis indiquen
otra cosa), sta debe ocupar lugares ms cercanos a la
raz en el rbol de derivacin.

Con las nuevas reglas, la derivacin ms a la izquierda


para la palabra 1 + 2 * 3 es:
S lm S + A lm A + A lm B + A lm 1 + A lm 1 + A * B
lm 1 + B * B lm 1 + 2 * B lm 1 + 2 * 3. Y el rbol
resultante es:
S
S + A
A A * B
B B

3
1 2

Como la expresin tiene una suma y un producto sin que


haya parntesis, la gramtica obliga a que se aplique
primero la regla 1 antes que la 2, por lo que la suma
estar ms cerca de la raz del rbol.
Por ltimo, la gramtica vista asocia a la suma y al
producto por izquierda, si bien se podra haber optado por
lo contrario. Sin embargo, podra haber operaciones que
forzosamente deban asociarse por izquierda o por
derecha. Por ejemplo, la potenciacin asocia por derecha.
Si se denota a la misma con el signo , se dir que
2 3 2 = 2 (3 2) = 2 9 = 512.

Ejercicios
1) a) Escriba una gramtica libre de contexto no ambigua
para expresiones con nmeros enteros y las operaciones
+, -, *, / y .
b) Encuentre la derivacin ms a la izquierda de la palabra
(12 5) 2.
c) Haga el rbol de derivacin para la palabra del punto b).
2) Demuestre que la gramtica S AA, A aSa, A a
es ambigua.

3) Considrese la gramtica S aS aSbS


Esta gramtica es ambigua. Demuestre que la cadena aab
tiene dos:
a)rboles de derivacin.
b)Derivaciones ms a la izquierda.
c)Derivaciones ms a la derecha.
4) Determine una gramtica no ambigua para el lenguaje
del ejercicio 3. El lenguaje tiene todas y slo las cadenas
formadas por smbolos a y smbolos b en las que n
smbolos b consecutivos estn precedidos por n o ms
smbolos a.

5) Escriba una gramtica no ambigua para el

lenguaje de los identificadores cuyos elementos


son secuencias de letras, dgitos o guiones bajos,
empezando con una letra o un guin bajo.

Fuentes
-MORAL, Serafn; Modelos de Computacin I.
Departamento de Ciencias de la Computacin e IA. ETSI
Informtica. Universidad de Granada. Captulo 4.
-HOPCROFT, John E; MOTWANI, Rajeev; ULMAN, Jeffrey
D. Introduccin a la teora de autmatas, lenguajes y
computacin. Pearson. Tercera edicin. Captulos 5.2 y
5.4.