Escolar Documentos
Profissional Documentos
Cultura Documentos
1.8 Ejercicios
1. Sea ={!} y x=!. Definir las siguientes palabras: xx, xxx, x3, x8, x0. ¿Cuáles son
sus longitudes? Definir Σ*.
2. Sea Σ ={0,1,2}, x=00, y=1, z=210. Definir las siguientes palabras: xy, xz,
yz, xyz, x3, x2y2, (xy)2, (zxx)3. ¿Cuáles son sus longitudes, cabezas y colas?
3. Sea Σ ={0,1,2}. Escribir seis de las cadenas más cortas de Σ+ y de Σ*.
Es decir, u es una palabra no vacía del lenguaje universal del alfabeto Σ que contiene al menos
un símbolo no terminal y v es una palabra, posiblemente vacía, del mismo lenguaje universal.
Veamos un ejemplo de gramática:
ΣT = {0,1,2,3,4,5,6,7,8,9}
ΣN = {N,C}
S=N
P={
N ::= CN
N ::= C
C ::= 0
C ::= 1
C ::= 2
C ::= 3
C ::= 4
C ::= 5
C ::= 6
C ::= 7
C ::= 8
C ::= 9
}
Sea Σ un alfabeto y x::=y una producción sobre las palabras de ese alfabeto. Sean v y w dos
palabras del mismo alfabeto (v,w∈Σ*). Se dice que w es derivación directa de v, o que v pro-
duce directamente w, o que w se reduce directamente a v, si existen dos palabras z,u∈Σ*,
tales que:
v=zxu
w=zyu
Es decir, si v contiene la palabra x y, al sustituir x por y, v se transforma en w.
Indicamos esta relación con el símbolo v → w.
COROLARIO: Si x::=y es una producción sobre Σ, se sigue que x→y.
Ejemplos:
• Sea Σ el alfabeto castellano de las letras mayúsculas, y ME ::= BA una producción sobre Σ.
Es fácil ver que CAMELLO→CABALLO.
• Sea el alfabeto Σ={0,1,2,N,C}, y el conjunto de producciones
N ::= CN
N ::= C
C ::= 0
C ::= 1
C ::= 2
Pueden demostrarse fácilmente las siguientes derivaciones directas:
N → CN → CCN → CCC → 2CC → 21C → 210
1.9.3. Derivación
Sea Σ un alfabeto y P un conjunto de producciones sobre las palabras de ese alfabeto. Sean v y
w dos palabras del mismo alfabeto (v,w∈Σ*). Se dice que w es derivación de v, o que v produ-
ce w, o que w se reduce a v, si existe una secuencia finita de palabras u0, u1, ..., un (n>0),
tales que
v = u0 → u1 → u2 ... un-1 → un = w
Indicamos esta relación con el símbolo v → + w. La secuencia anterior se llama derivación de
longitud n.
En el ejemplo anterior, puede verse que N → + 210 mediante una secuencia de longitud 6.
COROLARIO: Si v → w, entonces v →+ w mediante una secuencia de longitud 1.
01-CAPITULO 01 9/2/06 11:42 Página 14
1.9.8. Recursividad
Una gramática G se llama recursiva en U, U ∈ΣN, si U →+ xUy. Si x es la palabra vacía (x=λ) se
dice que la gramática es recursiva a izquierdas. Si y=λ, se dice que G es recursiva a derechas en
U. Si un lenguaje es infinito, la gramática que lo representa tiene que ser recursiva.
Una regla de producción es recursiva si tiene la forma U ::= xUy. Se dice que es recursiva
a izquierdas si x=λ, y recursiva a derechas si y=λ.
1.9.9. Ejercicios
1. Sea la gramática G = ({a,b,c,0,1}, {I}, I, {I::=a|b|c|Ia|Ib|Ic|I0|I1}).
¿Cuál es el lenguaje descrito por esta gramática? Encontrar, si es posible, derivaciones de
a, ab0, a0c01, 0a, 11, aaa.
2. Construir una gramática para el lenguaje {abna | n=0,1,...}.
3. Sea la gramática G = ({+,-,*,/,(,),i}, {E,T,F}, E, P), donde P contiene las
producciones:
E ::= T | E+T | E-T
T ::= F | T*F | T/F
F ::= (E) | i
Obtener derivaciones de las siguientes sentencias: i, (i), i*i, i*i+i, i*(i+i).
Se dice que dos gramáticas son equivalentes cuando describen el mismo lenguaje.
01-CAPITULO 01 9/2/06 11:42 Página 19
1.10.6. Ejercicios
1. Sean las gramáticas siguientes:
• G1 = ({c}, {S,A}, S, {S::=λ|A, A::=AA|c})
• G2 = ({c,d}, {S,A}, S, {S::=λ|A, A::=cAd|cd})
• G3 = ({c,d}, {S,A}, S, {S::=λ|A, A::=Ad|cA|c|d})
• G4 = ({c,d}, {S,A,B}, S, {S::=cA, A::=d|cA|Bd, B::=d|Bd})
• G5 = ({c}, {S,A}, S, {S::=λ|A, A::=AcA|c})
• G6 = ({0,c}, {S,A,B}, S, {S::=AcA, A::=0, Ac::=AAcA|ABc|AcB,
B::=A|AB})
Definir el lenguaje descrito por cada una de ellas, así como las relaciones de inclusión en-
tre los seis lenguajes, si las hay.
Encontrar una gramática de tipo 2 equivalente a G6.
2. Sean los lenguajes siguientes:
• L1 = {0m1n | m n 0}
• L2 = {0k1m0n | n=k+m}
• L3 = {wcw | w{0,1}*}
• L4 = {wcw-1 | w{0,1}*}
• L5 = {10n | n=0,1,2,...}
Construir una gramática que describa cada uno de los lenguajes anteriores.
3. Se llama palíndromo a toda palabra x que cumpla x=x-1. Se llama lenguaje palindrómi-
co a todo lenguaje cuyas palabras sean todas palíndromos. Sean las gramáticas
• G1 = ({a,b}, {S}, S, {S::=aSa|aSb|bSb|bSa|aa|bb})
• G2 = ({a,b}, {S}, S, {S::=aS|Sa|bS|Sb|a|b})
¿Alguna de ellas describe un lenguaje palindrómico?
4. Sea L un lenguaje palindrómico. ¿Es L-1 un lenguaje palindrómico? ¿Lo es L L-1?
5. Sea x un palíndromo. ¿Es L=x* un lenguaje palindrómico?
parte derecha. Por cada uno de los símbolos de x se dibuja una rama que parte del nodo
dado y termina en otro, denotado por dicho símbolo.
Sean dos símbolos A y B en la palabra x. Si A está a la izquierda de B en x, entonces la
rama que termina en A se dibujará a la izquierda de la rama que termina en B.
Para cada rama, el nodo de partida se llama padre del nodo final. Este último es el hijo del
primero. Dos nodos hijos del mismo padre se llaman hermanos. Un nodo es ascendiente de otro
si es su padre o es ascendiente de su padre. Un nodo es descendiente de otro si es su hijo o es
descendiente de uno de sus hijos.
A lo largo del proceso de construcción del árbol, los nodos finales de cada paso sucesivo,
leídos de izquierda a derecha, dan la forma sentencial obtenida por la derivación representada por
el árbol.
Se llama rama terminal aquella que se dirige hacia un nodo denotado por un símbolo termi-
nal de la gramática. Este nodo se denomina hoja o nodo terminal del árbol. El conjunto de las
hojas del árbol, leído de izquierda a derecha, da la sentencia generada por la derivación.
Ejemplo: Sea la gramática G = ({0,1,2,3,4,5,6,7,8,9}, {N,C}, N, {N::=C|CN,
C::=0|1|2|3|4|5|6|7|8|9}). Sea la derivación:
N → CN → CCN → CCC → 2CC → 23C → 235
La Figura 1.2 representa el árbol correspondiente a esta derivación.
A veces, un árbol puede representar varias derivaciones diferentes. Por ejemplo, el árbol de la
Figura 1.2 representa también, entre otras, a las siguientes derivaciones:
N → CN → CCN → CCC → CC5 → 2C5 → 235
N → CN → 2N → 2CN → 23N → 23C → 235
Sea S → w1 → w2 ... x una derivación de la palabra x en la gramática G. Se dice que ésta
es la derivación más a la izquierda de x en G, si en cada uno de los pasos o derivaciones direc-
tas se ha aplicado una producción cuya parte izquierda modifica el símbolo no terminal situado
C N
C N
2 3 5
más a la izquierda en la forma sentencial anterior. Dicho de otro modo: en cada derivación directa
u → v se ha generado el asidero de v.
En las derivaciones anteriores, correspondientes al árbol de la Figura 1.2, la derivación más a
la izquierda es la última.
1.11.1. Subárbol
Dado un árbol A correspondiente a una derivación, se llama subárbol de A al árbol cuya raíz es
un nodo de A, cuyos nodos son todos los descendientes de la raíz del subárbol en A, y cuyas ramas
son todas las que unen dichos nodos entre sí en A.
Los nodos terminales de un subárbol, leídos de izquierda a derecha, forman una frase respec-
to a la raíz del subárbol. Si todos los nodos terminales del subárbol son hijos de la raíz, entonces
la frase es simple.
1.11.2. Ambigüedad
A veces, una sentencia puede obtenerse en una gramática por medio de dos o más árboles de
derivación diferentes. En este caso, se dice que la sentencia es ambigua. Una gramática es ambi-
gua si contiene al menos una sentencia ambigua.
Aunque la gramática sea ambigua, es posible que el lenguaje descrito por ella no lo sea.
Puesto que a un mismo lenguaje pueden corresponderle numerosas gramáticas, que una de éstas
sea ambigua no implica que lo sean las demás. Sin embargo, existen lenguajes para los que es
imposible encontrar gramáticas no ambiguas que los describan. En tal caso, se dice que estos len-
guajes son inherentemente ambiguos.
Ejemplo: Sea la gramática G1 = ({i,+,*,(,)}, {E}, E, {E::=E+E|E*E|(E)|i}) y la
sentencia i+i*i. La Figura 1.3 representa los dos árboles que generan esta sentencia en dicha
gramática.
E E E E
E E E E
i + i * i i + i * i
E T
T
T F
F
F
i + i * i
Una gramática es ambigua si existe en ella una sentencia que pueda obtenerse a partir del
axioma mediante dos derivaciones más a la izquierda distintas.
1.11.3. Ejercicios
1. En la gramática G2 del apartado anterior, dibujar árboles sintácticos para las derivaciones
siguientes:
• E→T→F→i
• E → T → F → (E) → (T) → (F) → (i)
• E → +T → +F → +i
2. En la misma gramática G2, demostrar que las sentencias i+i*i y i*i*i no son ambi-
guas. ¿Qué operador tiene precedencia en cada una de esas dos sentencias?
3. Demostrar que la siguiente gramática es ambigua, construyendo dos árboles para cada una
de las sentencias i+i*i y i+i+i: ({i,+,-,*,/,(,)}, {E,O}, E, {E::=i
|(E)|EOE, O::=+|-|*|/}).
01-CAPITULO 01 9/2/06 11:42 Página 23
2. Si todos los símbolos no terminales han quedado marcados, no existen símbolos super-
fluos en la gramática. Fin del proceso.
3. Si la última vez que se pasó por el paso 1 se marcó algún símbolo no terminal, volver al
paso 1.
4. Si se llega a este punto, todos los símbolos no terminales no marcados son superfluos.
1.12.7. Ejemplo
Sea G=({0,1},{S,A,B,C},S,P), donde P es el siguiente conjunto de producciones:
S ::= AB | 0S1 | A | C
A ::= 0AB | λ
B ::= B1 | λ
01-CAPITULO 01 9/2/06 11:42 Página 25
1.12.8. Ejercicio
1. Limpiar la gramática G = ({i,+}, {Z,E,F,G,P,Q,S,T}, Z, {Z::=E+T,
E::=E|S+F|T, F::=F|FP|P, P::=G, G::=G|GG|F, T::=T*i|i,
Q::=E|E+F|T|S, S::=i})