Você está na página 1de 54

Arbol de Derivación


S abc



S S S




S S S


Esta es una gramática libre de contexto: En la parte


izquierda de las producciones solo aparece una variable.
Al lenguage generado por esta gramática pertenece la


palabra a b c . Solo hay que aplicar la siguiente




cadena de producciones



S S S S S S a S S












a b S a b c






Modelos de Computación I– p.1/54


Arbol de Derivación

( * S )
S

S ) c
( S +

a b Modelos de Computación I– p.2/54


Construcción

Cada nodo del árbol va a contener un símbolo.


En el nodo raíz se pone el símbolo inicial S.
Se efectúa una ramificación del árbol por cada producción
que se aplique: Si a la variable de un nodo, A, se le aplica
una determinada regla A α , entonces para cada
símbolo que aparezca en α se añade un hijo con el
símbolo correspondiente, situados en el orden de
izquierda a derecha.
Este proceso se repite para todo paso de la derivación.
Si la parte derecha es una cadena vacía, entonces se
añade un solo hijo, etiquetado con ε.
En cada momento, leyendo los nodos de izquierda a
derecha se lee la palabra generada.

Modelos de Computación I– p.3/54


Ejemplo

S aAS S a A SbA A SS A ba

La palabra aabbaa tiene asociado el árbol:


S

a A S

a
S b A

a b a
Modelos de Computación I– p.4/54
Árboles y Derivaciones

Un árbol de derivación puede proceder de dos cadenas


de derivación distintas.

Se llama derivación por la izquierda asociada a un


árbol a aquella en la que siempre se deriva primero la
primera variable (más a la izquierda) que aparece en
la palabra.
Se llama derivación por la derecha asociada a un
árbol a aquella en la que siempre se deriva primero la
última variable (más a la derecha) que aparece en la
palabra.

Modelos de Computación I– p.5/54


Ejemplo

Dado el árbol de la palabra aabbaa


S

a A S

a
S b A

a b a
Derivación por la izquierda:
S aAS aSbAS aabAS aabbaS aabbaa



Derivación por la derecha:
S aAS aAa aSbAa aSbbaa aabbaa


Modelos de Computación I– p.6/54


Gramática Ambigua

Una gramática se dice ambigua si existe una palabra con


dos árboles de derivación distintos.
Ejemplo: La gramática S AA A aSa A a es
ambigua, ya que la palabra a5 tiene los dos árboles
siguientes:
S S

A A A A

a a S a a S a a

A A A A

a a a a
Modelos de Computación I– p.7/54
Lenguaje inherentemente ambiguo

Un lenguaje de tipo 2 es inherentemente ambiguo si toda


gramática que lo genera es ambigua.
Ejemplo: El lenguaje generado por la gramática anterior
S AA A aSa A a, no es inherentemente
ambiguo. Este lenguaje es a2 3i : i 0 y puede ser



generado por la gramática:
S aa S aaU U aaaU U aaa, que no es
ambigua.
Único árbol para a5 :
S

a a U

a a a Modelos de Computación I– p.8/54


Ejemplo


E I E I E E E I I abcd
es ambigua, ya que la palabra a b c admite dos árboles
de derivación distintos:
E E

I − E E − I

a I − E I
E − c

b I
I b

c
a

Eliminando la producción E I E la gramática deja de


Modelos de Computación I– p.9/54
ser ambigua.
Lenguaje inherentemente ambiguo
Lenguaje:
a n bn cm d m : n a n bm cm d n : n


L 1m 1 1m 1



Gramática:

S AB A ab A aAb B cd B cBd
S aCd C aCd C bDc C bc D bDc D b
La palabra aabbccdd tiene dos árboles de derivación
distintos:
S S

a C d
A B

a b c B d a C d
A

a b c d b D c

b c Modelos de Computación I– p.10/54


Símbolos y Producciones Inútiles


Un símbolo X V T se dice útil si y solo si existe una


cadena de derivaciones en G tal que

αXβ


S w T


Una producción se dice útil si y solo si todos sus símbolos
son útiles. Esto es equivalente a que pueda usarse en la
derivación de alguna palabra del lenguaje asociado a la
gramática.
Eliminando todos los símbolos y producciones inútiles el
lenguaje generado por la gramática no cambia.

Modelos de Computación I– p.11/54


Algoritmo

El algoritmo para eliminar los símbolos y producciones


inútiles consta de dos pasos:

1. Eliminar las variables desde las que no se puede


llegar a una palabra de T y las producciones en las


que aparezcan.
2. Eliminar aquellos símbolos que no sean alcanzables
desde el símbolo inicial, S, y las producciones en las
que estos aparezcan.

Modelos de Computación I– p.12/54


Orden de los algoritmos

Es importante aplicar los algoritmos anteriores en el orden


especificado.

S AB S a A a

En el primer paso se elimina B y la producción S AB.


Entonces en el segundo se elimina la variable A y la
producción A a.
Si aplicamos primero el segundo algoritmo, entonces no
se elimina nada.
Al aplicar despues el primero de los algoritmos se elimina
B y la producción S AB. En definitiva, nos queda la
gramática
S a A a
donde todavía nos queda la variable inútil A. Modelos de Computación I– p.13/54
Primera Parte
Se diseña un algoritmo calculando Vt , conjunto de variables que se
pueden subtituir por símbolos terminales.

Condición Básica: Si A T , entonces A


u u Vt



Condición Recursiva: Si A β1 βk y cada β j está en T Vt ,





entonces A Vt .


1. Vt 0/


2. Para cada producción de la forma A w, A se introduce en Vt .


3. Mientras Vt cambie
4. Para cada producción B α
5. Si todas las variables de α pertenecen a Vt ,
B se introduce en Vt
6. Eliminar las variables que esten en V y no en Vt
7. Eliminar todas las producciones donde aparezca una
Modelos de Computación I– p.14/54
variable de las eliminadas en el paso anterior
Ejemplo

S gAe S aY B S cY A bBY












A ooC B dd B D C jV B












C gi D n U kW V baXXX



V oV W c X fV Y Y hm














Vt BC DW AU S V Vt VX Y







S gAe


A ooC B dd B D



C gi D n U kW



W c


Modelos de Computación I– p.15/54


Segunda Parte

Realizamos una búsqueda recursiva a partir del símbolo


inicial S de todos los símbolos que se pueden alcanzar a
partir de el.

S aAd S fX A b A CEd
VS variables obtenidas
S TS símbolos terminales obtenid
J variables por analizar

a A d f X

b C E d Modelos de Computación I– p.16/54


Segunda Parte

– VS y J son conjuntos de variables.


– TS es un conjunto de símbolos terminales

S , TS 0/



1. J S , VS
2. Mientras J 0/


3. Extraer un elemento de J : A, (J J A ).
4. Para cada produccion de la forma A α
5.Para cada variable B en α
6. Si B no est en VS añadir B a J y a VS
7. Poner todos los simbolos terminales de α en TS
8. Eliminar todas las variables que no estén en VS
y todos los simbolos terminales que no esten en TS .
9. Eliminar todas las producciones donde aparezca
un simbolo o variable de los eliminados en el paso anterior.
Modelos de Computación I– p.17/54
Ejemplo

S gAe A ooC
B ×dd B ×D C gi
D ×n U ×kW W× c

VS SAC


J SAC
TS geoi



Variable analizada: S A C Única derivación
posible: S gAe gooCe googie


Lenguaje generado: googie . Modelos de Computación I– p.18/54


Lenguaje Vacío

Si el lenguaje generado por una gramática es vacío, esto


se detecta en que la variable S resulta inútil en el primer
algoritmo. En ese caso se pueden eliminar directamente
todas las producciones, pero no el símbolo S.

Ejemplo:

S aSb S bcD S cSE

E aDb F abc E abF

0/


VT FE LG

Modelos de Computación I– p.19/54


Formas Normales

Definen unas características que deben de verificar todas


las producciones de una gramática.

Producciones nulas
Producciones unitarias
Forma normal de Chomsky
Forma normal de Greibach

Modelos de Computación I– p.20/54


Motivación: el problema de la pertenencia

Problema: Dada una gramática independiente del


contexto G y una palabra u, ¿pertenece u a L G ?
S

α1 α2 α3

β1 β2 β3 β4 β5
Si la palabra es generada, nos sale en esta búsqueda.
Si la palabra no es generada, ¿Hasta qué profundidad
tenemos que generar para convencernos de que no se
puede? Modelos de Computación I– p.21/54
Producciones Nulas
A ε.

Algoritmo que dada una gramática G, construye una


gramática Gn equivalente a la anterior sin producciones
ε .



nulas y tal que L Gn LG

Si tenemos, A ε D aABc

D 

aABc aBc


Añadimos D aBc
Si B ε, entonce habría que añadir

D aBc D aAc D ac
Modelos de Computación I– p.22/54
Variables Anulables

Si tenemos C AB A ε B ε, habría que añadir,


al quitar las producciones nulas

C A C B C ε
Y después habría que eliminar C ε

Nosotros vamos a calcular desde el principio todas las


variables, E, tales que en algún momento aparece E ε.
Estas variables se dicen anulables. Son variables tales
ε


que E


Después vamos a eliminar todas las producciones nulas y


a añadir las producciones que compensen esta
eliminación.
Modelos de Computación I– p.23/54
Algoritmo (I)

H es el conjunto de las variables anulables


Cálculo de Variables Anulables:

1. H 0/
2. Para cada produccion A ε, se hace H H


A



3. Mientras H cambie
4. Para cada produccion B A1 A2 An ,


donde Ai H para todo i 1 n, se hace H H B




Modelos de Computación I– p.24/54


Algoritmo (II)

Eliminar y Añadir:

1. Se eliminan todas las producciones nulas de la gramatica


2. Para cada produccion de la gramatica de la forma
A α1 αn donde αi V T .





3. Se añaden todas las producciones de la forma


A β1 βn donde βi αi si αi H y




β i αi βi ε si α H






y no todos los βi puedan ser nulos al mismo tiempo

Modelos de Computación I– p.25/54


Palabra Vacía

Si G generaba inicialmente la palabra nula, entonces


la nueva gramática no la genera.
Se puede saber si se pierde la palabra vacía
comprobando si S H.
Si tenemos una gramática G, podemos construir una
gramática Gv con una sola producción nula y que
genera el mismo lenguaje que G más la palabra
vacía. Para ello se añade una nueva variable, Sv , que
pasa a ser el símbolo inicial de la nueva gramática,
Gv . También se añaden dos producciones:

Sv S Sv ε

Modelos de Computación I– p.26/54


Ejemplo

Eliminar las producciones nulas de la siguiente gramática:

S ABb S ABC C abC


B bB B ×ε A aA
A ×ε C AB


Cálculo de H {A B C S

Al ser S anulable la palabra vacía puede generarse


mediante esta gramática.

Modelos de Computación I– p.27/54


Ejemplo: Segunda Parte

S ABb S ABC C abC B bB


A aA C AB S Ab S Ab S Bb S
S bS b S AB S AB S AC S AC S BC S
S AS A S BS B S C S C C ab C
B bB b A aA a C BC B C AC

H ABC S


Modelos de Computación I– p.28/54


Producciones Unitarias

A B AB V

Si queremos eliminar A B, perdemos la posibilidad de

A B α


Para eliminar A B, añadimos todas las producciones
A α donde B α es una producción.

Si tenemos B C introduciríamos una unitaria que habría


que eliminar después.
Para poder eliminar todas de una vez calculamos, H:


conjunto de parejas A B tales que B derivable a partir de


A. Modelos de Computación I– p.29/54
Algoritmo

Se supone que no hay transiciones nulas


H conjunto de parejas A B tales que B derivable a partir
de A.

1. H 0/
2. Para toda produccion de la forma A B,


la pareja A B se introduce en H.
3. Mientras H cambie


4. Para cada dos parejas A B B C H


5. Si la pareja A C no esta en H


A C se introduce en H
6. Se eliman las producciones unitarias


7. Para cada pareja B A H


8. Para cada produccion A α
9. Se añade una produccion B α Modelos de Computación I– p.30/54
Ejemplo (I)

S aBc S × A A aAb
A × B A cd B ccBS
B dc


Cálculo de H SA AB



Cálculo de H SA AB



Cálculo de H SA AB SB

Modelos de Computación I– p.31/54


Ejemplo (II)

S aBc A aAb A cd
B ccBS B dc S aAbS aAb
S cdS cd A ccBSA ccBS A dcA dc
S ccBSS ccBS S dcS dc


H SA AB SB






H SA AB SB


Modelos de Computación I– p.32/54


El problema de la pertenencia(II)

Problema: Dada G sin producciones nulas ni unitarias y u de


longitud n, ¿pertenece u a L G ?

α1 α2 α3

β1 β2 β3 β4 β5
Si la palabra no es generada, ¿Hasta qué profundidad tenemos que
generar para convencernos de que no se puede? 2n 1 (en cada


paso o sacamos al menos un nuevo símbolo terminal (n) o aumenta
Modelos de Computación I– p.33/54
al menos en 1 la longitud (n 1))

Forma Normal de Chomsky

Todas las producciones tienen la forma

A BC A a
donde A B C V, a T.

El algoritmo se aplica a gramáticas sin producciones


nulas ni unitarias
Hay dos operaciones básicas:
Eliminar terminales en producciones que no sean A a:
Ca a B Ca BCc
B ×aBc Cc c E Ca BECd
E ×aBEd
Cd d
Modelos de Computación I– p.34/54
Bases (2)
Eliminar producciones con una longitud en la parte derecha
mayor de 2:
A BEFG

A BD1 D1 EFG

D1 ED2 D2 FG

Modelos de Computación I– p.35/54


Algoritmo

1. Para cada producción A α1 αn αi V T n 2







2. Para cada αi , si αi es terminal: αi a T


3. Se añade la produccion Ca a


4. Se cambia αi por Ca en A α1 αn


5. Para cada produccion de la forma A B1 Bm m 3





6. Se añaden m 2 variables D1 D2 Dm 2



(distintas para cada produccion)
7. La produccion A B1 Bm se reemplaza por



A B 1 D1 D1 B 2 D2 Dm 2 B m 1 B m






Modelos de Computación I– p.36/54
Ejemplo

S bA S aB A bAA A AS
A a B aBB B bS B b

S Cb A S Ca B A Cb AA A AS
A a B Ca BB B Cb S B b
Ca a Cb b

Modelos de Computación I– p.37/54


Ejemplo (II)

S Cb A S Ca B A Cb AAA Cb AA A AS
A a B Ca BB B Cb S B b
Ca a Cb b A Cb D1 D1 AA

Modelos de Computación I– p.38/54


Ejemplo (II)

S Cb A S Ca B A AS
A a B Ca BBB Ca BB B Cb S B b
Ca a Cb b A Cb D1 D1 AA
B Ca E1 E1 BB

Resultado:

S Cb A S Ca B A AS
A a B Cb S B b
Ca a Cb b A Cb D1 D1 AA
B Ca E1 E1 BB
Modelos de Computación I– p.39/54
Forma Normal de Greibach

Todas las producciones tienen la forma

T α


A aα a V

Condiciones para aplicar el algoritmo

Todas las producciones tienen la forma:

– A T α V .


aα a
α α α


– A


V 2.


Modelos de Computación I– p.40/54


Dos operaciones básicas:

A Bα B β1 B β2 B β3
Concentramos las dos reglas en una:

A Bα β2 α


Pasamos a:
A β1 α A β2 α A β3 α
B β1 B β2 B β3

ELIMINA1 (A Bα)
1. Eliminar A Bα
2. Para cada produccion B β
3. Añadir A βα
Modelos de Computación I– p.41/54
Segunda Operación

A Aα1 A Aα2 A Aα3


A β1 A β2 A β3
A A
A α1 β3 BA
A α3 α1 BA
A α1 α3 BA
β3 α1
A β1 A β2 A β3
A β 1 BA A β 2 BA A β 3 BA
Queda:
BA α1 BA α2 BA α3
BA α 1 BA BA α 2 BA BA α 3 BA Modelos de Computación I– p.42/54
Segunda Operación: Algoritmo

ELIMINA2 (A)
1. Añadir una nueva variable BA
2. Para cada produccion A Aα
3. Añadir BA α y BA αBA
4. Eliminar A Aα
5. Para cada produccion A β, β no empieza por A
6. Añadir A βBA .

Modelos de Computación I– p.43/54


Primera parte

Objetivo: todas las producciones (Bk variable que se


añade al eliminar Ak con ELIMINA2 (Ak ).

– A T α V .


aα a
– Ai A jα iα V .


j
– Bj Ai α α


V

1. Para cada k 1 m
2. Para cada j 1 k 1
3. Para cada produccion Ak A j α
4. ELIMINA1 (Ak A j α)
5. Si existe alguna produccion de la forma Ak Ak α
6. ELIMINA2 (Ak ) Modelos de Computación I– p.44/54
Segunda parte

1. Para cada i m 1 1
2. Para cada produccion de la forma Ai A jα j i
3. ELIMINA1 (Ai A j α)
4. Para cada i 1 2 m
5. Para cada produccion de la forma B j Ai α.
6. ELIMINA1 (B j Ai α)

Modelos de Computación I– p.45/54


Ejemplo

A1 A2 A3 A2 A3 A1 A2 b

A3 A1 A2 A3 a

Aplicamos ELIMINA1 a A3 A1 A2
Se elimina esta producción y se añade: A3 A2 A3 A2
Queda:

A1 A2 A3 A2 A3 A1 A2 b
A3 a A3 A2 A3 A2

Modelos de Computación I– p.46/54


Ejemplo

A1 A2 A3 A2 A3 A1 A2 b

A3 a A3 A2 A3 A2
Aplicamos ELIMINA1 a A3 A2 A3 A2
Se elimina esta producción y se añaden:
A3 A3 A1 A3 A2 A3 bA3 A2
Queda:

A1 A2 A3 A2 A3 A1 A2 b
A3 a A3 A3 A1 A3 A2 A3 bA3 A2

Modelos de Computación I– p.47/54


Ejemplo

A1 A2 A3 A2 A3 A1 A2 b A3 a
A3 A3 A1 A3 A2 A3 bA3 A2
Aplicamos ELIMINA2 a A3
Se añade B3 y las producciones
B3 A1 A3 A2 B3 A1 A3 A2 B3
Se elimina A3 A3 A1 A3 A2 .
Se añaden las producciones: A3 aB3 A3 bA3 A2 B3
Queda:

A1 A2 A3 A2 A3 A1 A2 b A3 a
A3 bA3 A2 B3 A1 A3 A2 B3 A1 A3 A2 B3 A3 aB3
A3 bA3 A2 B3
Modelos de Computación I– p.48/54
Ejemplo

A1 A2 A3 A2 A3 A1 A2 b A3 a
A3 bA3 A2 B3 A1 A3 A2 B3 A1 A3 A2 B3 A3 aB3
A3 bA3 A2 B3

Se aplica ELIMINA1 a A2 A3 A1
Se elimina esta producción y se añaden:

A2 aA1 A2 aB3 A1 A2 bA3 A2 B3 A1 A2 bA3 A2 A1

Modelos de Computación I– p.49/54


Ejemplo

A1 
A2 A3 A2 b A2 aA1 A2 aB3 A1





A2 bA3 A2 B3 A1 A2 bA3 A2 A1 A3 a A3 bA3 A2






B3 A1 A3 A2 B3 A1 A3 A2 B3 A3 aB3 A3 bA3 A2 B3






Se aplica ELIMINA1 a A1 A2 A3 :


Se elimina esta producción y se añaden:

A1 bA3 A1 aA1 A3 A1 aB3 A1 A3








A1 bA3 A2 B3 A1 A3 A1 bA3 A2 A1 A3





Modelos de Computación I– p.50/54


Ejemplo

A2 b A2 aA1 A2 aB3 A1






A2 

bA3 A2 B3 A1 A2 bA3 A2 A1 A3 a





A3 bA3 A2 B3 A1 A3 A2 B3 A1 A3 A2 B3






A3 aB3 A3 bA3 A2 B3 A1 bA3






A1 aA1 A3 A1 aB3 A1 A3 A1 bA3 A2 B3 A1 A3






A1 bA3 A2 A1 A3


Se aplica ELIMINA1 a B3 A1 A3 A2 Se elimina esta producción




y se añaden:

B3 bA3 A3 A2 B3 aA1 A3 A3 A2 B3 aB3 A1 A3 A3 A2








B3 bA3 A2 B3 A1 A3 A3 A2 B3 aB3 A1 A3 A3 A2


Modelos de Computación I– p.51/54





Ejemplo

A2 b A2 aA1 A2 aB3 A1



A2 bA3 A2 B3 A1 A2 bA3 A2 A1 A3 a


A3 bA3 A2 

B3 A1 A3 A2 B3 A3 aB3


A3 bA3 A2 B3 A1 bA3 A1 aA1 A3



A1 aB3 A1 A3 A1 bA3 A2 B3 A1 A3 A1 bA3 A2 A1 A3



B3 bA3 A3 A2 B3 aA1 A3 A3 A2 B3 aB3 A1 A3 A3 A2



B3 bA3 A2 B3 A1 A3 A3 A2 B3 aB3 A1 A3 A3 A2



Se aplica ELIMINA1 a B3 A1 A3 A2 B3 . Se elimina esta producción y
se añaden:

B3 bA3 A3 A2 B3 B3 aA1 A3 A3 A2 B3 B3 aB3 A1 A3 A3 A2 B3





B3 bA3 A2 B3 A1 A3 A3 A2 B3 B3 aB3 A1 A3 A3 A2 B3 Modelos de Computación I– p.52/54



Ejemplo: Resultado

A2 b A2 aA1 A2 aB3 A1



A2 bA3 A2 B3 A1 A2 bA3 A2 A1 A3 a



A3 bA3 A2 A3 aB3 A3 bA3 A2 B3



A1 bA3 A1 aA1 A3 A1 aB3 A1 A3



A1 bA3 A2 B3 A1 A3 A1 bA3 A2 A1 A3 B3 bA3 A3 A2



B3 aA1 A3 A3 A2 B3 aB3 A1 A3 A3 A2 B3 bA3 A2 B3 A1 A3 A3 A2



B3 aB3 A1 A3 A3 A2 B3 bA3 A3 A2 B3 B3 aA1 A3 A3 A2 B3



B3 aB3 A1 A3 A3 A2 B3 B3 bA3 A2 B3 A1 A3 A3 A2 B3 B3 aB3 A1 A3 A3 A2 B3


Modelos de Computación I– p.53/54


El problema de la pertenencia(III)

Problema: Dada G en forma normal de Greibach y u de longitud n,


¿pertenece u a L G ?

α1 α2 α3

β1 β2 β3 β4 β5
Si la palabra no es generada, ¿Hasta qué profundidad tenemos que
generar para convencernos de que no se puede? n (en cada paso o
sacamos al menos un nuevo símbolo terminal (n)) Además suele haber
menos ramificación.
Modelos de Computación I– p.54/54

Você também pode gostar