Professional Documents
Culture Documents
Captulo 1. Introduccin.
1
3.1 Concepto de gramtica formal
2
3.1.1 Producciones
Definicin (Produccin):
Sea un alfabeto. Una produccin, o regla de produccin, o
regla de derivacin, o regla de escritura, es un par ordenado
(x,y), tambin representado por x::=y, tal que x+ e y*.
Se llama x la cabeza o parte izquierda de la produccin, e y su
cuerpo o parte derecha.
Ejemplos:
={ab}; a::=bb
v=aabbaa
w1=bbabbaa
w2=aabbaa Para que wi se verifica vwi?
w3=bbbbbbaa
w4=aabbab
v=a
w=bb : vw
si x::=y, entonces se verifica xy
3
Definicin (Derivacin):
Sea un alfabeto, y P un conjunto de producciones sobre .
Sean v y w dos palabras de *. Se dice que w deriva de v, o v
produce w, o v se reduce a w, y se presenta por v*w si:
1. v=w o
2. existe una secuencia finita de derivaciones directas
u0u1
u1u2
un-1un
tales que u0=v y un=w.
Ejemplos:
1. La longitud de u*u es 0.
2. ={C,N,0,1,2}
P={ N::=CN, N::=C, C::=0, C::=1, C::=2}
NCN
CNCC
CC0C N*00 con longitud 4
0C00
{x|x * y CCC*x y x es irreducible}?
{x|x * y N*x y x es irreducible}?
Propiedades de la derivacin
1. Reflexiva: x* : x*x
2. Transitiva: x,y,z* : si x*y e y*z, entonces x*z.
3. Simtrica: no
4
3.1.2 Gramtica formal
Motivacin
Ejemplo Castellano:
La sintaxis del castellano se define mediante reglas:
1. Un oracin consta de sujeto y predicado y termina
con un punto.
2. Un sujeto es una frase nominal.
3. Una frase nominal es un grupo nominal seguido de un
calificativo (que puede faltar)
4. ...
<sujeto> <predicado> .
<frase_nominal>
... ...
<grupo_nominal> <calificativo>
... ...
El gato pequeo juega .
5
La idea consiste en definir un lenguaje mediante reglas de
produccin.
SAbb
SAbaAbbabb
SAbaAbb aaAbbbaabbb
...
{x|S*x y x es irreducible}={anbn+1|n>=0}
6
Definicin (Gramtica formal):
Se denomina gramtica formal a una cudrupla:
G=(N, T, S, P) donde:
N es un alfabeto de smbolos no terminales
T es un alfabeto de smbolos terminales
N T = ; llamaremos al conjunto N T
SN es el axioma o smbolo inicial
P es un conjunto de producciones u::=v, tal que:
u+ y v*
u=xAy, x,y*, AN
Ejemplos:
1. G1=({S,A), {a,b},S,P)
P={S::=Ab, A::=aAb, A::=}
2. G=(N, T, S, P) no es una gramtica si
SN
u::=v P con uT*
a: aT aN
7
Ejemplos:
G=({S,A), {a,b},S,P)
P={S::=Ab, A::=aAb|}
Formas sentenciales: S, Ab, aaAbbb, aabbb, b
No lo son: a, aaAbb
Definicin (sentencia):
Una sentencia de G es una forma sentencial x tal que xT*.
Ejemplos:
1.G1=({S,A), {a,b},S,P) con P={S::=Ab, A::=aAb|}
L(G1)={anbn+1|n0}
2.G2=({S,A), {a,b},S,P) con P={S::=Ab, A::=aAb}
L(G2)?
3.G3=({S,A), {a,b},S,P) con P={S::=Ab, A::=aAb|aS}
L(G3)?
4.G4=({S,A), {a,b},S,P) con P={S::=Ab, A::=ab|a}
L(G4)?
5.G5=({A,B,C,D,E,S},{a},S,P) con P={S::=ABaC, Ba::=aaB,
BC::=DC|E, aD::=Da, AD::=AB, aE::=Ea, AE::= }
L(G5)?
6.G6=({S,A), {a,b},S,P) con P={S::=Ab, A::=Aab|a}
L(G6)?
3.1.4 Recursividad
8
Definicin (gramtica recursiva):
Una gramtica se llama recursiva en U, UN, si existen
Ejemplos:
1. G=({S,A), {a,b},S,P) con P={S::=Ab|Sa, A::=aAb|}
recursiva en A y S; recursiva a izquierdas en S
2. G=({S,A), {a,b},S,P) con P={S::=aAb, A::=Sb|}
recursiva en A y S; no recursiva a izquierdas en S
Corolarios:
Lenguajes infinitos slo pueden describirse mediante
gramticas recursivas.
Existen gramticas recursivas que generan lenguajes finitos.
Ejemplos:
1. G1=({S},{a,b},S,{S::=aSb|ab})
G2=({A,B,C,E},{a,b},A,P) con
P={A::=aABC|abC, CB::=BC, bB::=bb, bC::=b, E::=b}
G1 y G2 son equivalentes.
9
3.2 Tipos de gramticas
10
Propiedades de gramticas de tipo 0
1. Todo lenguaje descrito por una gramtica del tipo 0, puede
ser generado por una gramtica de estructuras de frases.
Ejemplos:
1. De las siguientes producciones, indicar cuales cumplen el
criterio de gramticas de estructura de frases y cuales no.
aABcD::=aABD; aAd::=ad; aABd::=aACDEfAd
aABE::=aABeE; CB::=BC
2. Cmo convertir CB::=BC en estructura de frases?
CB::=XB; XB::=XY; XY::=BY; BY::=BC
Nota:
Las producciones mantienen el contexto pero no pueden
ser compresoras (con la excepcin de S::=):
Su1u2...un con 1|u1||u2|...|un|
(si no se utiliza la regla S::=)
La regla S::= permite generar la palabra vaca.
Ejemplos:
Cules de las siguientes reglas son de tipo 1?
AB::=aCdB; aA::=aCBbb; aBA::=a;
ABC::=AC; AaBF::=AaCF
11
3.2.4 Gramticas de tipo 2 (gramticas independientes
del contexto)
Nota:
A::= es una produccin de tipo 2.
Sin embargo, se puede demostrar que todo lenguaje
generado por una gramtica de tipo 2 puede ser generado por
una gramtica cuyas producciones tienen la forma:
1. A::=v con v +, AN
2. S::= siendo S el axioma de la gramtica
(se demuestra en el captulo 10)
Ejemplos:
Cules de las siguientes reglas son de tipo 2?
AA::=b; A::=aaB; aBA::=a;
a::=AC; A::=
12
3.2.5 Gramticas de tipo 3 (gramticas regulares)
Ejemplos:
1. Cules de las siguientes reglas son de tipo 3?
aA::=aaV; A::=abV; a::=Ba;
a::=C; A::=
2. G=({A,B,C},{a,b},A,P) con P={A::=aB, B::=Cb, ...}
No es lineal por la derecha ni lineal por la izquierda,
pero s es una gramtica lineal.
Nota:
Hay definiciones ms generales para gramticas lineales por la
derecha (izquierda) [Linz, pp. 91-...]:
Una gramtica se denomina lineal por la derecha si sus
producciones tienen las siguientes formas:
1. A::=xB
2. A::=x , donde A,BN y xT*.
(en clase usaremos las definiciones dadas anteriormente)
13
Ejemplos:
1. Lenguaje representado por G1=({S,A,B},{0,1},S,P) con
P={S::=0A|1, A::=1A|1B, B::=0S}
S1
S0A01B010S0101
S0A01A011B0110S01101
S0A01A011B0110S01100A011001B
0110010S01100101
S0A*01...1A01...1B01...1B01...10S
01...101
S0A*01...1A01...1B01...1B01...10S
01...100A*01...1001...1A*01...1001...1B
01...1001...10S01...1001...101
L(G)={(01i0)j1|i1, j0}
2. Lenguaje representado por G2=({S,B},{0,1},S,P) con
P={S::=B1|1, B::=S0}
3. Lenguaje representado por G3=({S,B},{0,1},S,P) con
P={S::=1B|1, B::=0S}
14
Lenguaje Gramtica Producciones
Recursivamente General xAy::=v con x,y,v* y AN
enumerable Tipo0 Estructura de frases xAy::=xvy con x,y,v* y AN
(sin estricciones)
Sensibles al Tipo1 xAy::=xvy con x,y* , v+ y AN
contexto S::= S axioma
Independientes General A::=v con v* y AN
del contexto Tipo2 Normalizado A::=v con v+ y AN
S::= S axioma
General A::=x con xT* y A,BN
Lineal por la A::=Bx
izquierda A::=a con aT y A,BN
Normalizado A::=Ba
Regulares Tipo3 S::= S axioma
General A::=x con xT* y A,BN
Lineal por la A::=xB
derecha A::=a con aT y A,BN
Normalizado A::=aB
S::= S axioma
15
3.3 rboles de derivacin
Ejemplos:
1. G1= ( {a,b} {A,B,S}, S, { S::=AB, A::= aA | a, B::= bB|
b})
y la derivacin S AB aB abB abb
S
2. G2=({A A B ,B,C},{a,b},A,P)
con
B P={A::=aABC|
abC, bCB::=bB,
bB::=bb, a b b bC::=b}
16
SaABCaabCBCaabBCaabbCaabb
S
A B C
a a b b = aabb
3. Si tenemos una gramtica en forma general de tipo 0,
entonces es posible representa las derivaciones en forma
de rbol?
17
Ms ejemplos (escriba los rboles de derivacin):
4. G3=({S},{0,1},S,P) con P={S::=SS||0S|1S}
SSS0SS0S1S00S1S001S001
5. G3 como en 4.
SSSS1S0S1S0S100S1001
3.3.2 Ambigedad
Ejemplo:
(Precedencia de operadores)
G1=({E},{+,*,i, (, )},E,{E::=E+E|E*E|(E)|i})
x=i+i*i
E E
E E E E
E E E E
E i + i * i E+Ei+E i + i * i
EE*EE*i
i+E*Ei+i*Ei+i*i E+E*ii+E*ii+i*i
Definiciones (ambigedad):
18
Sea una gramtica G. Una sentencia xL(G) es ambigua si
puede obtenerse por medio de varias derivaciones distintas
correspondientes a rboles de derivacin diferentes.
Una gramtica es ambigua si genera alguna sentencia
ambigua.
Un lenguaje es inherentemente ambiguo si no existe una
gramtica que la describe y que no sea ambigua.
Notas:
La ambigedad es una propiedad indeseada en lenguajes de
programacin (vase el ejemplo anterior). Cada instruccin
debe tener slo una interpretacin.
No existen algoritmos generales que nos digan si una
gramtica dada es ambigua (un problema no decidible). Tan
slo se pueden encontrar condiciones suficientes para
asegurar que una gramtica no es ambigua.
El hecho de que la gramtica que describe un lenguaje sea
ambigua no implica necesariamente que el lenguaje sea
inherentemente ambiguo
Existen lenguajes que son inherentemente ambiguos (que
slo se pueden describir, por ejemplo, con gramticas
independientes del contexto ambiguas).
1 0..*
lenguaje gramtica
1..*
1 0..* 1..* 1
sentencia derivacin rbol de der.
19
La ambigedad puede presentar un problema en los lenguajes de
programacin. Por ejemplo, para calcular el valor de una
expresin el rbol de derivacin especifica en que orden se
resuelven las operaciones (de abajo a arriba).
E E E E
i + i * i i + i * i
cada uno dara un valor distinto a la expresin
T T F
F F
i + i * i
EE+Ti+Ti+ T*Fi+F*Fi+i*Fi+i*i
20
Para desambiguar la gramtica de las expresiones (G 1) se usan
dos ideas:
1. agrupacin en una direccin (en este caso a la izquierda):
Cadenas de operandos para un mismo operador se
generan de la derecha hasta la izquierda.
i+i*i*i+i*i+i
E::=E+T
i*(i+i*i+i)*(i+i)*i
T::=T*F
(eso implica que se calculan las expresiones de izquierda
a derecha)
2. reglas de preferencia (* tiene preferencia sobre +)
Los operadores se generan en distintos niveles.
Desde el axioma se genera el operador de menor
preferencia (este va a ser ms alto en el rbol de
derivacin).
Sucesivamente, se generan operadores de mayor
preferencia desde niveles ms bajos (variables a los
que slo se llegan a travs de varias derivaciones).
Orden: E>T>F
Los operandos de una expresin de un nivel de
preferencia slo pueden ser expresiones del mismo
nivel o de un nivel ms bajo.
E::=E+T | T
T::=T*F | F
Para que el operando de una operacin sea otra
operacin con un operador de menor nivel es necesario
usar los smbolos de cambio de preferencia ( y ).
F::=(E)
21
Ejemplos:
Primer intento:
G1=({S},{a,b},S,{S::=|aSb|bSa|SS})
Es una gramtica ambigua (vase la sentencia abab).
Segundo intento:
G2=({S},{a,b},S,{S::=|aSbS|bSaS})
Siegue siendo ambigua (vase la sentencia abab)
22