You are on page 1of 22

UNIDAD I: LENGUAJES Y GRAMTICAS

Captulo 1. Introduccin.

Captulo 2. Lenguajes Formales

Captulo 3. Gramticas Formales.

3.1. Concepto de gramtica formal


Producciones. Gramtica Formal. Lenguaje
asociado a una gramtica. Recursividad.
Gramticas equivalentes.

3.2. Tipos de gramticas


Jerarqua de Chomsky. Gramticas de tipos 0, 1,
2, y 3.

3.3. rboles de derivacin


Representacin arborescente de derivaciones.
Ambigedad.

1
3.1 Concepto de gramtica formal

Hemos visto que lenguajes son subconjuntos de las


palabras sobre un alfabeto (LW()).
Cmo se puede definir las palabras que pertenecen a un
determinado lenguaje?
Enumerando el conjunto de palabras
algunos lenguajes son infinitos?
Descripcin informal de las palabras:
a veces complicado y demasiado impreciso
Descripcin formal, basada en los operadores de
palabras:
no suelen ser suficientes para especificar todos los
lenguajes

Necesitamos un formalismo para definir los lenguajes (las


palabras que pertenecen a un lenguaje).

una posibilidad - Gramticas formales:

Una gramtica describe de forma inequvoca la


estructura de las palabras de un lenguaje
Proporcionan un mecanismo para generar todas las
palabras que pertenecen a un determinado lenguaje
(tambin se llaman gramticas generadoras)

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.

Definicin (Derivacin directa):


Sea un alfabeto, x::=y una produccin sobre , y v,w*.
w es una derivacin directa de v, o v produce directamente w, o
v se reduce de forma directa a w, representado por vw, si:
z, u*: v=zxu w=zyu

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

Nota: Aparte de ::= se usara tambin " como smbolo


de la operacin de produccin. El contexto determina si
se refiere a una produccin o una derivacin.

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.

La longitud de una derivacin v*w es el nmero de


derivaciones directas en la secuencia.

El operador + se refiere a una derivacin con longitud >0.

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. ...

Podemos usar producciones para representar estas reglas:


<oracin>::=<sujeto> <predicado>.
<sujeto>::=<frase_nominal>
<frase_nominal>::=<grupo_nominal> <calificativo>
<frase_nominal>::=<grupo_nominal>
...

Podemos analizar si una palabra del lenguaje (en castellano son


frases) es gramaticalmente correcta:
<oracin>

<sujeto> <predicado> .
<frase_nominal>
... ...
<grupo_nominal> <calificativo>
... ...
El gato pequeo juega .

5
La idea consiste en definir un lenguaje mediante reglas de
produccin.

Ejemplo lenguaje formal 1


={S,A,a,b}
P={S::=Ab, A::=aAb, A::=}

Cules son todas las posibles derivaciones


(irreducibles) desde S?

SAbb
SAbaAbbabb
SAbaAbb aaAbbbaabbb
...
{x|S*x y x es irreducible}={anbn+1|n>=0}

Ejemplo lenguaje formal 2


={S,a,b}
P={S::=, S::=aSb}
{x|S*x y x es irreducible}?

Se puede considerar que los elementos de tienen distinta


funcionalidad:
S y A variables (smbolos no terminales)
a y b smbolos terminales
S smbolo no terminal de partida (axioma)

Ejemplo lenguaje formal 3


Definicin de la instruccin if de un lenguaje de
programacin.

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

Definicin (gramtica en BNF):


Una gramtica se encuentra representada en la forma Backus-
Naur (BNF), si todas las producciones tienen la forma u::=v y
todas las producciones con la misma cabeza:
u::=v , u::=w, ...
se representan por:
u::=v | w | ...

3.1.3 Lenguaje asociado a una gramtica

Definicin (forma sentencial):


Sea una gramtica G=(N, T, S, P). Una forma sentencial de G
es una secuencia de smbolos x* tal que S*x.

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*.

Nota: Usaremos tambin el trmino palabra.

Definicin (lenguaje reconocido):


Dada una gramtica G=(N, T, S, P), el lenguaje reconocido o
generado por G est formado por todas las sentencias (palabras)
de G:
L(G)={x|S*x y 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

derivaciones U+xUy con x,y*.


Si para todas las derivaciones recursivas en U se verifica

x=, se dice que la gramtica es recursiva a izquierdas en U.


Si para todas las derivaciones recursivas en U se verifica

y=, se dice que la gramtica es recursiva a derechas en U.

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.

3.1.5 Gramticas equivalentes

Definicin (Gramticas equivalentes):


Dos gramticas G1 y G2 son equivalentes si L(G1)=L(G2).
(se escribe G1G2).

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

3.2.1 Jerarqua de Chomsky


Todas las gramticas posibles:
G0 G1
G2 G3G2G1G0
G3

L(G0)=lenguajes recursivamente enumerables o sin


restricciones
L(G1)=lenguajes sensibles al contexto
L(G2)=lenguajes independientes del contexto
L(G3)=lenguajes regulares

3.2.2 Gramticas de tipo 0 (gramticas sin


restricciones)

Definicin (Gramticas de tipo 0):


Las gramticas de tipo 0 son las definidas anteriormente, cuyas
reglas de produccin tiene la forma:
xAy::=v con x,y,v *, AN

Definicin (gramtica de estructura de frases):


Una gramtica de estructura de frases es aquella cuyas
producciones tienen la forma:
xAy::=xvy con x,y,v *, AN

Nota: v puede ser la cramtica puede tener reglas


compresoras y derivaciones decrecientes.

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

3.2.3 Gramticas de tipo 1 (gramticas sensibles al


contexto)

Definicin (Gramticas de tipo 1):


Las gramticas de tipo 1 son aquellas cuyas producciones
tienen una de las dos formas siguientes:
1. xAy::=xvy con x,y *, AN, v+
2. S::=, siendo SN el axioma

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)

Definicin (Gramticas de tipo 2):


Las gramticas de tipo 2 son aquellas cuyas producciones
tienen la forma:
A::=v con v *, AN

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)

Definicin (Gramticas regulares normalizados):


Gramticas lineales por la izquierda: todas aquellas cuyas
producciones tienen una de las siguientes formas:
A::=a
A::=Va (S,A,VN, aT, y S el axioma)
S::=
Gramticas lineales por la derecha: todas aquellas cuyas
producciones tienen una de las siguientes formas:
A::=a
A::=aV (S,A,VN, aT, y S el axioma)
S::=
Una gramtica es regular (o de tipo 3) si es lineal por la
derecha o lineal por la izquierda.

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

3.3.1 Representacin arborescente de derivaciones

Definicin (rbol de derivacin):


Sea G=(N,T, S, P) una gramtica de estructura de frases y w
una forma sentencial de G, que se obtiene mediante una
derivacin: u0=Su1...un=w
El rbol de derivacin de w correspondiente a dicha derivacin
cumple las siguientes propiedades:
1. La raz del rbol es S
2. Cada derivacin directa se representa mediante un conjunto
de ramas que salen de un nodo dado de la siguiente forma:
Si uiui+1 es una derivacin directa en la secuencia, tal que:
ui= xiAiyi con AiN , xi,yi*
ui+1= xiviyi con vi* y vi=vi1...vin
entonces
.... Ai ....

vi1 vi2 ... vin

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?

Notas: sobre rboles de derivacin


Todos los nodos interiores corresponden a smbolos no
terminales.
Si un nodo es hijo de un nodo padre, este padre no puede
tener otros hijos.
El resultado de un rbol de derivacin es el conjunto de
nodos hoja de izquierda a derecha y corresponde a una
forma sentencial (se eliminan los smbolos sobrantes).
Si todas las hojas del rbol son smbolos terminales o ,
entonces el resultado es una sentencia (o palabra).
Un rbol de derivacin cuya raz no es el axioma de la
gramtica es un rbol parcial.

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

En general se puede afirmar que: Dada una derivacin, existe


un nico rbol que la representa.
Por el contrario: Un mismo rbol puede corresponder a varias
derivaciones (ejempos 5 y 6 anteriores).

Est ltima afirmacin no es vlida para gramticas lineales (que


incluyen las gramticas del tipo 3). Por que?
Consideramos: G=({S,A},{0,1},S,{S::=0S|1A|, A::=1A|1S})

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

Dos posibles interpretaciones: (i+i)*i y i+(i*i) (ambigedad)

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).

La gramtica G1 genera dos rboles de derivacin distintas para


la palabra x=i+i*i:
E E
E E E E

E E E E
i + i * i i + i * i
cada uno dara un valor distinto a la expresin

Se pude modificar la gramtica G1 para obtener una gramtica


equivalente que no es ambigua (evitando as la doble
interpretacin):

G2=({E,T,F},{+,*,i,(,)},E,{E::=E+T|T, T::=T*F|F, F::=(E)|i})


solo existe n rbol para la palabra x=i+i*i
E
E T

T T F

F F
i + i * i
EE+Ti+Ti+ T*Fi+F*Fi+i*Fi+i*i

Para dar preferencia a la adiccin hay que especificar la


palabra como (i+i)*i. Cmo sera el rbol de derivacin?

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:

1. Una gramtica para el lenguaje:


L={x| x{a,b}* y na(x)= nb(x)}

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)

Es L inherentemente ambiguo? NO.


G3=({S,T,U},{a,b},S,P) con
P={S::=aTbS|bUaS|, T::=aTbT|, U::=bUaU|}
Cmo es el rbol de derivacin para abab?
(se puede demostrar que G3 no es ambigua)

2. Un lenguaje inherentemente ambiguo:


L={anbncm|n,m0}{anbmcm|n,m0}
Se puede definir L como la unin de dos lenguajes L1L2.

Gramtica para L1:


G4=({S1,A},{a,b,c},S1,{S1::=S1c|A, A::=aAb|})
Gramtica para L2:
G5=({S2,B},{a,b,c},S2,{S2::=aS2|B, B::=bBc|})
Gramtica para L (uniendo G4 y G5):
G6=({S2,S1,S,A,B},{a,b,c},S,P) con P={S::=S1|S2,
S2::=aS2|B, B::=bBc|, S1::=S1c|A, A::=aAb|})

Consideramos las palabras anbncn para cualquier n.


(se puede demostrar que L es inherentemente ambiguo)

22

You might also like