Está en la página 1de 11

1

3.3. rboles de derivacin


Representacin arborescente de derivaciones.
Ambigedad.

3.2. Tipos de gramticas


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

3.1. Concepto de gramtica formal


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

Captulo 3. Gramticas Formales.

Captulo 2. Lenguajes Formales

Captulo 1. Introduccin.

UNIDAD I: LENGUAJES Y GRAMTICAS

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

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)

una posibilidad - Gramticas formales:

Necesitamos un formalismo para definir los lenguajes (las


palabras que pertenecen a un lenguaje).

3.1 Concepto de gramtica formal

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.

Ejemplos:
={ab}; a::=bb

v=aabbaa

w1=bbabbaa

w2=aabbaa
Para que wi se verifica v
wi?

w3=bbbbbbaa

w4=aabbab

v=a

w=bb
: vw
si x::=y, entonces se verifica xy

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

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.

3.1.1 Producciones

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

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}?

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

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


derivaciones directas en la secuencia.

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.

<grupo_nominal> <calificativo>
...
...
El gato
pequeo

<frase_nominal>

<sujeto>

juega

...

...

<predicado> .

Podemos analizar si una palabra del lenguaje (en castellano son


frases) es gramaticalmente correcta:
<oracin>

Podemos usar producciones para representar estas reglas:


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

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

Motivacin

3.1.2 Gramtica formal

las

posibles

derivaciones

Ejemplo lenguaje formal 3


Definicin de la instruccin if de un lenguaje de
programacin.

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 2


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

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

Cules son todas


(irreducibles) desde S?

Ejemplo lenguaje formal 1


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

La idea consiste en definir un lenguaje mediante reglas de


produccin.

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.

3.1.3 Lenguaje asociado a una gramtica

Definicin (gramtica en BNF):


Una gramtica se encuentra representada en la forma BackusNaur (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 | ...

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

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

Nota: Usaremos tambin el trmino palabra.

Definicin (sentencia):
Una sentencia de G es una forma sentencial x tal que xT*.

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

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.

Definicin (Gramticas equivalentes):


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

3.1.5 Gramticas equivalentes

Corolarios:

Lenguajes infinitos slo pueden describirse mediante


gramticas recursivas.

Existen gramticas recursivas que generan lenguajes finitos.

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

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.

3.1.4 Recursividad

G1
G2
G3

G3G2G1G0

de

tipo

(gramticas

sin

sin

10

Nota: v puede ser la cramtica puede tener reglas


compresoras y derivaciones decrecientes.

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

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

3.2.2 Gramticas
restricciones)

Todas las gramticas posibles:

L(G0)=lenguajes recursivamente enumerables


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

G0

3.2.1 Jerarqua de Chomsky

3.2 Tipos de gramticas

11

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

Nota:

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

3.2.3 Gramticas de tipo 1 (gramticas sensibles al


contexto)

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

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:
Cules de las siguientes reglas son de tipo 2?

AA::=b;
A::=aaB;
aBA::=a;
a::=AC;
A::=

12

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)

Definicin (Gramticas de tipo 2):


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

3.2.4 Gramticas de tipo 2 (gramticas independientes


del contexto)

13

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)

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.

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.

3.2.5 Gramticas de tipo 3 (gramticas regulares)

14

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}

Regulares

Gramtica
General
Estructura de frases

S axioma

con aT y A,BN

S axioma
con xT* y A,BN

con aT y A,BN

15

con x,y* , v+ y AN
S axioma
con v* y AN
con v+ y AN
S axioma
con xT* y A,BN

Producciones
xAy::=v
con x,y,v* y AN
xAy::=xvy con x,y,v* y AN

xAy::=xvy
S::=
General
A::=v
Normalizado
A::=v
S::=
General
A::=x
Lineal por la
A::=Bx
izquierda
A::=a
Normalizado A::=Ba
Tipo3
S::=
General
A::=x
Lineal por la
A::=xB
derecha
A::=a
Normalizado A::=aB
S::=

Lenguaje
Recursivamente
enumerable
Tipo0
(sin estricciones)
Sensibles al
Tipo1
contexto
Independientes
del contexto Tipo2

2. G2=({A,B,C},{a,b},A,P) con

16

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

vi1 vi2 ... vin

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

3.3.1 Representacin arborescente de derivaciones

3.3 rboles de derivacin

=aabb

17

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.

3. Si tenemos una gramtica en forma general de tipo 0,


entonces es posible representa las derivaciones en forma
de rbol?

a a

P={A::=aABC|abC, bCB::=bB, bB::=bb, bC::=b}


SaABCaabCBCaabBCaabbCaabb

E
E

EE*EE*i
E-E*ii-E*ii-i*i

i - i * i

18

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

EE-Ei-E
i-E*Ei-i*Ei-i*i

i - i * i

Ejemplo:
(Precedencia de operadores)
G1=({E},{-,*,i, (, )},E,{E::=E-E|E*E|(E)|i})

x=i+i*i

3.3.2 Ambigedad

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

Por el contrario: Un mismo rbol puede corresponder a varias


derivaciones (ejempos 5 y 6 anteriores).

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


un nico rbol que la representa.

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

sentencia

lenguaje

0..*

0..*

derivacin

1..*

gramtica

1..*
1

rbol de der.

19

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

Definiciones (ambigedad):

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

E
E

i - i * i

- i * i
i

20

Para dar preferencia a la adiccin hay que especificar la


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

EE-Ti-Ti-T*Fi-F*Fi-i*Fi-i*i

F
F

T
T

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

Se pude modificar la gramtica G1 para obtener una gramtica


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

cada uno dara un valor distinto a la expresin

i - i * i

La gramtica G1 genera dos rboles de derivacin distintas para


la palabra x=i-i*i:

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

21

Para desambiguar la gramtica de las expresiones (G1) 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
E::=E-T
(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)
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)

Consideramos las palabras anbncn para cualquier n.


(se puede demostrar que L es inherentemente ambiguo)

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

2. Un lenguaje inherentemente ambiguo:


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

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)

1. Una gramtica para el lenguaje:


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

Ejemplos:

22

También podría gustarte