Sie sind auf Seite 1von 40

GRAMATICA DE CONTEXTO LIBRE Gram atica de contexto libre G = (VN , VT , P, S ) que genera oraciones copulativas: VN = { <oraci on>, <sujeto>,

<verbo>, <atributo>, <adjetivo> } VT = {el, la, hombre, ni na, es est a, parece, alto, bella, inteligente} S VN Conjunto de producciones: P = (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) { < oraci on >< sujeto >< verbo >< atributo > < sujeto >< art culo >< nombre > < art culo > el < art culo > la < nombre > hombre < nombre > ni na < verbo > es < verbo > est a < verbo > parece < atributo >< adjetivo > < adjetivo > alto < adjetivo > bella < adjetivo > inteligente }

Se pueden agrupar las reglas que tienen la misma parte izquierda: < art culo > < nombre > < verbo > < adjetivo > el | la | un | una hombre | ni na es | est a | parece alto | bella | inteligente | amable

DERIVACIONES Derivaci on de una oraci on < oraci on > < sujeto >< verbo >< atributo >
1

< art culo >< nombre >< verbo >< atributo >
2

el < nombre >< verbo >< atributo >


3

el hombre < verbo >< atributo >


5

el hombre es < atributo >


7

el hombre es < adjetivo >


10

el hombre es alto
11

o abreviadamente < oraci on > el hombre es alto Derivaci on de una oraci on que es sem anticamente incorrecta < oraci on > < sujeto >< verbo >< atributo >
1 +

< art culo >< nombre >< verbo >< atributo >
2

la < nombre >< verbo >< atributo >


4

la hombre < verbo >< atributo >


5

la hombre parece < atributo >


9

la hombre parece < adjetivo >


10

la hombre parece bella


12

APLICACIONES DE LAS GRAMATICAS DE CONTEXTO LIBRE Las gram aticas de contexto libre son utilizadas para establecer las reglas sint acticas de los lenguajes de programaci on. Gram atica que genera asignaciones de expresiones aritm eticas. P = (1) (2) (3) (4) (5) (6) (7) (8) { < asignaci on > identicador =< expresi on > < expresi on >< expresi on > + < sumando > < expresi on >< sumando > < sumando >< sumando > < f actor > < sumando >< f actor > < f actor > n umero < f actor > identicador < f actor > (< expresi o n >) }

Haciendo uso de esta gram atica, se puede generar una sentencia de asignaci on como la siguiente: < asignaci on > identicador = < expresi on >
1

identicador = < expresi on > + < sumando >


2

identicador = < sumando > + < sumando >


3

identicador = < sumando > < f actor > + < sumando >
4

identicador = < f actor > < f actor > + < sumando >
5

identicador = n umero < f actor > + < sumando >


6

identicador = n umero identicador + < sumando >


7

identicador = n umero identicador + < f actor >


5

identicador = n umero identicador + n umero


6

o abreviadamente < asignaci on > identicador = n umero identicador + n umero


+

FORMAL DE GRAMATICA DEFINICION DE CONTEXTO LIBRE Una gram atica de contexto libre G se dene como G = (VN , VT , P, S ) donde VN es un conjunto nito de s mbolos que se denomina alfabeto no terminal y tambi en puede ser denotado por N o N . VT es un conjunto nito de s mbolos que se denomina alfabeto terminal y tambi en puede ser denotado por T o T , S VN y es el axioma o s mbolo inicial o distinguido de la gram atica y P es el conjunto de reglas de reescritura o de producci on. Se verica que VN VT = V VN VT = V es el alfabeto o vocabulario de la gram atica y tambi en suele ser denotado por . El conjunto de producciones P se dene como P = {(A, )|A VN , V = (VN VT ) } El par (A, ) suele ser denotado por A siendo A la parte izquierda de la regla de producci on y la parte derecha.

EJEMPLO: PAL INDROMO IMPAR Una gram atica formal establece las reglas que permiten generar palabras de un lenguaje. Sea G una gram atica de contexto libre compuesta por el siguiente conjunto de reglas de producci on: P = (1) (2) (3) (4) (5) { S aAa A aAa A bBb B bBb B c }

El lenguaje que genera la gramatica G puede ser expresado como: L(G) = {ai bj cbj ai |i, j 1} = {abcba, abcba, abbcbba, . . . , aacaa, aabbcbbaa, . . . } Este lenguaje se denomina pal ndromo impar porque cada una de las palabras del lenguaje se puede leer igual de izquierda a derecha que de derecha a izquierda y tiene un elemento central que divide a la palabra. La derivaci on que genera la palabra aabbcbbaa es la siguiente: S aAa
1

aaAaa
2

aabBbaa
3

aabbBbbaa
4

aabbcbbaa
5

DE LAS GRAMATICAS CONVENIOS DE NOTACION FORMALES 1. S mbolos terminales, es decir, pertenecientes a VT : Primeras letras min usculas del alfabeto latino: {a, b, c, . . . } Operadores arim eticos, l ogicos, relacionales: {+, -, *, /, , , <, >, , . . . } Cifras num ericas: {0, 1, . . . , 9} S mbolos especiales: {[, ], (, ), ;, . . . } Palabras en negrita: {if, else, entonces, para, . . . } 2. S mbolos no terminales, es decir, pertenecientes a VN : Primeras letras may usculas del alfabeto latino: {A, B, C, . . . } Palabras en cursiva o encerradas entre < y >: {t ermino, <t ermino>, . . . } La parte izquierda de la primera producci on ser a el s mbolo inicial, salvo que se indique lo contrario. Generalmente, el s mbolo inicial ser a el s mbolo S . 3. S mbolos gram aticales terminales y no terminales, es decir, pertenecientes a V = VN VT : Ultimas letras may usculas del alfabeto latino, salvo la letra S : {. . . , X, Y, Z }
4. Cadenas de s mbolos gram aticales terminales (pertenecientes a VT )

Ultimas letras min usculas del alfabeto latino:{. . . x, y, z } 5. Los s mbolos y suelen denotar a la palabra vac a. 6. Cadenas de s mbolos gram aticales, es decir, compuestas por s mbolos terminales y no terminales (pertenecientes a V = (VN VT ) . Letras min usculas del alfabeto griego, excepto y :{, , . . . } 7. Agrupamiento de reglas: si existen dos o m as reglas que tienen la misma parte izquierda, como, por ejemplo: A 1 A 2 A n entonces se pueden agrupar como A 1 | 2 | | n

EJEMPLO: EXPRESIONES ARITMETICAS Gram atica de contexto libre G = (VN , VT , P, S ) que genera expresiones aritm eticas: VN = {S, E }, VT = {identicador, =, +, , (, ), n umero}, S VN y el conjunto de producciones es: P = (1) (2) (3) (4) (5) (6) { S identicador = E E E + E E E E E ( E ) E identicador E n umero }

EJEMPLO: EXPRESIONES ARITMETICAS Derivaci on de una expresi on aritm etica S identicador = E


1

identicador = E + E
2

identicador = E + E E
3

identicador = E + n umero E
6

identicador = E + n umero identicador


5

identicador = identicador + n umero identicador


5

Arbol sint actico asociado a la derivaci on.


S

identificador

identificador

nmero

identificador

DERIVACIONES POR LA IZQUIERDA Y POR LA DERECHA Derivaci on por la izquierda: S identicador = E


1

identicador = E + E
2

identicador = identicador + E
5

identicador = identicador + E E
3

identicador = identicador + n umero E


6

identicador = identicador + n umero identicador


5

Derivaci on por la derecha: S identicador = E


1

identicador = E + E
2

identicador = E + E E
3

identicador = E + E identicador
5

identicador = E + n umero
6 5

identicador

identicador = identicador + n umero identicador

AMBIGUEDAD DE LAS GRAMATICAS La gram atica anterior es ambigua porque puede generar la cadena identicador = identicador + n umero * identicador mediante dos derivaciones por la izquierda diferentes. Primera derivaci on por la izquierda: S identicador = E
1

identicador = E + E
2

identicador = identicador + E
5

identicador = identicador + E E
3

identicador = identicador + n umero E


6

identicador = identicador + n umero identicador


5

Segunda derivaci on por la izquierda: S identicador = E


1

identicador = E E
3

identicador = E + E E
2

identicador = identicador + E E
5

identicador = identicador + n umero E


5

identicador = identicador + n umero identicador


5

AMBIGUEDAD DE LAS GRAMATICAS Arboles de derivaci on diferentes para una misma cadena.
S

identificador

identificador

nmero

identificador

identificador

identificador nmero

identificador

EJEMPLO: GRAMATICA NO AMBIGUA Conjunto de reglas de producci on de una gram atica no ambigua que puede generar expresiones aritm eticas

= (1) (2) (3) (4) (5) (6) (7) (8)

{ S identicador = E E E + T E T T T F T F F ( E ) F identicador F n umero }

La derivaci on por la izquierda de la cadena identicador = identicador + n umero * identicador utilizando esta gram atica es la siguiente: S identicador = E
1

identicador = E + T
2

identicador = T + T
3

identicador = F + T
5

identicador = identicador + T
7

identicador = identicador + T F
4

identicador = identicador + F F
5

identicador = identicador + n umero F


8

identicador = identicador + n umero identicador


7

EJEMPLO: GRAMATICA NO AMBIGUA


S

identificador

identificador

identificador nmero

EL PROBLEMA DEL ELSE DANZANTE (1) S if C S (2) S if C S else S (3) S I donde S genera sentencias de control, C genera expresiones condicionales e I genera otras sentencias, por ejemplo, de asignaci on. Esta gram atica es ambigua porque la sentencia if C if C S else S puede ser generada mediante dos derivaciones que tienen dos arboles sint acticos diferentes: 1. Primera derivaci on: S if C S
1

if C if C S else S
2

2. Segunda derivaci on: S if C S else S


2

if C if C S else S
1

EL PROBLEMA DEL ELSE DANZANTE Arboles correspondientes a la primera y a la segunda derivaci on.

if

if S

else

if

else

if

Puesto que el lenguaje C asosia el else al if m as cercano, la derivaci on correcta es la primera.

EL PROBLEMA DEL ELSE DANZANTE Afortunadamente, se puede reescribir la gram atica para que tenga en cuenta este criterio sem antico: (1) (2) (3) (4) (5) (6) S S S1 S1 S2 S2 S1 S2 if C S1 else S1 I if C S if C S1 else S2

donde S1 genera la sentencia if emparejada mientras que S2 genera la sentencia if no emparejada. La derivaci on de la cadena anterior es la siguiente: S S2
2

if C S
5

if C S1
1 3

if C if C S1 else S2
S

S2

if

S1

if

S1

else

S2

Arbol sint actico asociado a una derivaci on que asocia el else al if m as cercano.

AMBIGUEDAD Lenguajes intr nsecamente ambiguos El siguiente lenguaje es un lenguaje de contexto libre intr nsecamente ambiguo porque todas las gram aticas de contexto libre que lo generan son ambiguas: L = {ai bi cj |i, j 1} {ai bj cj |i, j 1} Este lenguaje es de contexto libre porque puede ser generado por una gram atica de contexto libre como la siguiente: P = (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) { S AC S BD A aAb A ab C cC C c B aB B a D bDc D bc }

AMBIGUEDAD Esta gram atica es ambigua porque puede derivar la cadena abc utilizando dos derivaciones por la izquierda diferentes: 1. Primera derivaci on: S AC
1

abC
4

abc
6

2. Segunda derivaci on: S BD


2

aD
8

abc
10

b
(a)

b
(b)

Arboles de derivaci on diferentes de la cadena abc correspondientes a (a) la primera y a (b) la segunda derivaci on.

GRAMATICAS RECURSIVAS POR LA IZQUIERDA Ejemplos de gram aticas recursivas por la izquierda: Parte izquierda de una sentencia de asignaci on m ultiple en el lenguaje C: dado el siguiente conjunto de producciones P = (1) (2) (3) (4) { S LE L L identicador = L identicador = E E + T }

se puede generar la siguiente derivaci on recursiva S LE


1

L identicador = E
2

L identicador = identicador = E
2

identicador = identicador = identicador = E


3

Lista de par ametros de un procedimiento o funci on: P = { S identicador (L) L L, identicador L identicador } Componente de un array de varias dimensiones: P = { S identicador D D D [n umero] D [n umero] }

GRAMATICAS RECURSIVAS POR LA IZQUIERDA Eliminaci on de la recursividad inmediata por la izquierda Entrada: G = (VN , VT , P, S ) gram atica de contexto libre con reglas recursivas por la izquierda.
Salida: G = (VN , VT , P , S ) gram atica sin reglas de producci on recursivas por la izquierda.

[1] inicio [2] P [3] para cada A VN hacer [4] si A no tiene producciones recursivas [5] entonces se a naden a P las producciones de A [6] si no [7] si A A1 |A2 | |Ap |1 |2 | |q P [8] donde i = i {1, 2, . . . , p} [9] y j no empieza por A j {1, 2, . . . , q } [10] entonces [11] se a naden a P las producciones [12] A j |j A i {1, 2, . . . , q } [13] A i |iA j {1, 2, . . . , p} [14] donde A es un nuevo s mbolo no terminal [15] n si [16] n si [17] n para [18] n

GRAMATICAS RECURSIVAS POR LA IZQUIERDA Consid erese el conjunto de producciones de la siguiente gram atica: P = { S identicador = E E E + T | T F | ( E ) | identicador | n umero T T F | ( E ) | identicador | n umero F ( E ) | identicador | n umero } Paso 1: La producci on de S no es recursiva por la izquierda y, por tanto, se a nade a P . Paso 2: El s mbolo E tiene una regla recursiva por la izquierda y cuatro m as que no lo son. Las nuevas reglas que se a naden a P son: E E T F | ( E ) | identicador | n umero | T F E | ( E ) E | identicador E | n umero E + T | + T E

Paso 3: El s mbolo T tiene una regla recursiva por la izquierda y tres m as que no lo son. Las nuevas reglas que se a naden a P son: T T ( E ) | identicador | n umero | ( E ) T | identicador T | n umero T F | F T

Paso 4: El s mbolo F no posee reglas recursivass. Por tanto, todas ellas se a naden a P El conjunto de producciones resultante es: P = { S identicador = E E T F | ( E ) | identicador | n umero | T F E | ( E ) E | identicador E | n umero E E + T | + T E T ( E ) | identicador | n umero | ( E ) T | identicador T | n umero T T F | F T F ( E ) | identicador | n umero }

GRAMATICAS RECURSIVAS POR LA IZQUIERDA Para comprobar que las dos gram aticas son equivalentes, consid erense las siguientes derivaciones. La primera derivaci on se ha generado utilizando la gram atica original con producciones recursivas por la izquierda: S identicador identicador identicador identicador = = = = E E + T identicador + T identicador + identicador

La segunda derivaci on genera la misma cadena que la anterior pero utiliza las producciones de la nuevas gram atica sin recursividad por la izquierda: S identicador identicador identicador identicador = = = = E identicador E identicador + T identicador + identicador

GRAMATICAS RECURSIVAS POR LA IZQUIERDA Eliminaci on de la recursividad general por la izquierda Entrada: G = (VN , VT , P, S ) gram atica de contexto libre propia, es decir, sin ciclos, sin producciones ni s mbolos in utiles.
Salida: G = (VN , VT , P , S ) gram atica sin recursividad por la izquierda.

[1] inicio [2] P [3] Ord enense los s mbolos no terminales de la gram atica: {A1 , A2 , . . . , An } [4] para i de 1 a n hacer [5] para j de 1 a i 1 hacer [6] si Ai Aj P [7] entonces [8] A nadir a P las producciones [9] Ai 1 | | k [10] donde [11] Aj 1 | | k [12] son las producciones actuales de Aj [13] n si [14] n para [15] Eliminar la recursividad inmediata por la izquierda [16] de las producciones de Ai . [17] n para [18] n

GRAMATICAS RECURSIVAS POR LA IZQUIERDA Eliminaci on de la recursividad general por la izquierda Consid erese la siguiente gram atica recursiva por la izquierda: P = (1) (2) (3) (4) (5) (6) (7) { S A B S c A B b A S d A a B S b B A a }

Ordenamiento de los s mbolos no terminales: {S, A, B } Paso exterior 1: Producciones de S Paso interior 1: S no tiene ninguna producci on que comience por un s mbolo con un n umero de orden inferior al suyo. Eliminaci on de la recusividad inmediata: S no tiene recursividad inmediata por la izquierda. Paso exterior 2: Producciones de A Paso interior 1: Sustituci on de las producciones de A que comienzan por S : la regla n umero (4) A S d se sustituye por las reglas A A B d | c d quedando las reglas de A de la siguiente forma: A A B d | B b | c d | a Eliminaci on de la recusividad inmediata: se sustituyen las producciones de A por las siguientes producciones: A B b | c d | a | B b A | c d A | a A A B d | B d A

Paso exterior 3: Producciones de B Paso interior 1: Sustituci on de las producciones de B que comienzan por S : la regla n umero (6) B S b se sustituye por las reglas B A B b | c b quedando las reglas de B de la siguiente forma: B A B b | c b | A a Paso interior 2: Sustituci on de las producciones de B que comienzan por A: las regla B A B b se sustituye por las reglas B B b B b | c d B b | a B b | B b A B b | c d A B b | a A B b y la regla B A a se sustituye por las reglas B B b a | c d a | a a | B b A a | c d A a | a A a quedando las reglas de B de la siguiente forma: B B c b c b B b | B b A B b | B b a | B b A a | d B b | a B b | c d A B b | a A B b | a | c d a | a a | c d A a | a A a | b

Eliminaci on de la recusividad inmediata: se sustituyen las producciones de B por las siguientes producciones: B c d B b | a B b | c d A B b | a A B b | b a | c d a | a a | c d A a | a A a | c b | c d B b B | a B b B | c d A B b B | a A B b B | b a B | c d a B | a a B | c d A a B | a A a B | c b B b B b | b A B b | b a | b A a | b B b B | b A B b B | b a B | b A a B

POR LA IZQUIERDA NECESIDAD DE LA FACTORIZACION Consid erense las siguientes producciones: S si E entonces S si no S n si | si E entonces S n si Al leer el componente l exico si no se sabe a un qu e producci on elegir para expandir la sentencia S . Sin embargo, se puede posponer esta decici on si se utilizan las siguientes reglas de producci on. S si E entonces S S S si no S n si | n si En general, si A 1 | 2 son dos producciones de A y la entrada a analizar comienza por una cadena no vac a derivada a partir de , no se sabe si expandir A a 1 o a 2 . Para ello, las producciones se transforman en las siguientes producciones: A A A 1 | 2

POR LA IZQUIERDA FACTORIZACION Algoritmo de Factorizaci on por la izquierda Entrada: G = (VN , VT , P, S ) gram atica de contexto libre propia.
Salida: G = (VN , VT , P , S ) gram atica factorizada por la izquierda.

[1] inicio [2] para cada s mbolo no terminal A hacer [3] mientras A tenga dos producciones actuales [4] con el mismo prejo [5] hacer [6] si es el prejo m as largo de dos o m as [7] alternativas de A y = [8] entonces [9] Sustituir todas las producciones [10] A 1 | | p | 1 | | q [11] donde i no empieza por i {1, 2, . . . , q } [12] por las producciones [13] A A | 1 | | q [14] A 1 | | p [15] n si [16] n mientras [17] n para [18] n

POR LA IZQUIERDA FACTORIZACION Consid erese el siguiente conjunto de producciones de una gram atica de contexto libre: P = { S A B c | A B d e | A B d f | A B S A a B b } Paso 1: 1 = ABd es el prejo m as largo de dos producciones de S . Por tanto, las reglas de S se sustituyen por las siguientes: S A B d S | A B c | A B S S e | f La cadena 2 = AB es ahora el prejo m as largo de tres producciones actuales de S . Por tanto, las reglas de S se sustituyen por las siguientes: S A B S S d S | c | S S e | f Pasos 2 y 3: Las producciones de A y B no requieren factorizaci on.

POR LA IZQUIERDA RECURSIVIDAD INMEDIATA Y FACTORIZACION Eliminaci on de la recursividad inmediata por la izquierda y factorizaci on por la izquierda Entrada: G = (VN , VT , P, S ) gram atica de contexto libre con reglas recursivas por la izquierda.
Salida: G = (VN , VT , P , S ) gram atica sin reglas de producci on recursivas por la izquierda y factorizada por la izquierda.

[1] inicio [2] P [3] para cada A VN hacer [4] si A no tiene producciones recursivas [5] entonces se a naden a P [6] las producciones de A factorizadas [7] si no [8] si A A1 |A2 | |Ap |1 |2 | |q P [9] donde i = i {1, 2, . . . , p} [10] y j no empieza por A j {1, 2, . . . , q } [11] entonces [12] se a naden a P las producciones [13] A j A j {1, 2, . . . , q } [14] A i A | i {1, 2, . . . , p} [15] donde A es un nuevo s mbolo no terminal [16] n si [17] n si [18] n para [19] n

POR LA IZQUIERDA RECURSIVIDAD INMEDIATA Y FACTORIZACION Sea la gram atica sin reglas unitarias que genera las expresiones aritm eticas P = { S identicador = E E E + T | T F | ( E ) | identicador | n umero T T F | ( E ) | identicador | n umero F ( E ) | identicador | n umero } La aplicaci on del algoritmo que factoriza y elimina la recurisividad inmediata por la izquierda genera la la siguiente gram atica: P = { S identicador = E E T F E | ( E ) E | identicador E | n umero E E + T E | T ( E ) T | identicador T | n umero T T F T | F ( E ) | identicador | n umero }

FORMA NORMAL DE CHOMSKY Se dice que una gram atica de contexto libre est a en la forma normal de Chomsky (F.N.C.) si sus reglas son de una de estas dos formas: A B C A a donde A, B, C VN y a VT Sea una gram atica en la forma normal de Chomsky con el siguiente conjunto de producciones: P = (1) (2) (3) (4) (5) { S A B A A B A a B B B B b }

Derivaci on generada por una gram atica en la forma normal de Chomsky: S A B


1

A B B
2

a B B
3

a B B B
4

a b B B
5

a b b B
5

a b b b
6

FORMA NORMAL DE CHOMSKY Arbol binario correspondiente a la derivaci on anterior:


S

FORMA NORMAL DE CHOMSKY Algoritmo para obtener la forma normal de Chomsky: 1. Generaci on de una gram atica G1 = (VN1 , VT , P1 , S ) donde las reglas de P1 son de la forma A B1 B2 Bk A a veric andose que L(G) = L(G1 ). 2. A partir de la gram atica G1 obtenida en el paso anterior, se genera otra gram atica G2 que estar a en la forma normal de Chomsky y que ser a equivalente a G, es decir, L(G) = L(G2 ). Paso 1: Sea A X1 X2 Xk P : 1. Si k = 1 entonces la regla es simplemente A X1 , donde X1 VT , porque la gram atica no tiene reglas unitarias al ser una gram atica propia. En este caso, la regla A X1 se a nade a P1 . 2. Si k 2 entonces se a nade a P1 la regla A B1 B2 Bk donde Bi = Xi si Xi VN o Bi es un nuevo s mbolo no terminal si Xi = ai VT , en cuyo caso, tambi en se a nade a P1 la regla Bi Xi . Se verica que L(G1 ) = L(G) {}. Paso 2: Para generar las reglas de P2 se han analizar las reglas de P1 : 1. Si la regla de P1 es de la forma A a entonces se a nade a P2 . 2. Si A B1 B2 Bk P1 entonces se pueden presentar dos casos: a ) Si k = 2 entonces la regla est a en la forma normal de Chomsky y se a nade a P2 . b ) Si k 3 entonces se a naden a P2 el siguiente conjunto de reglas: A B1 C1 C1 B2 C2 Ck1 Bk2 Ck2 Ck2 Bk1 Bk G2 est a en la forma normal de Chomsky y L(G2 ) = L(G1 ) = L(G) {}. donde k 2

FORMA NORMAL DE CHOMSKY Sea el siguiente conjunto de producciones de una gram atica de contexto libre propia P = { S a A B A a B b A a B b b } Paso 1: Se genera el siguiente conjunto de producciones: P1 = { S B1 A B A B1 B B2 A a B B2 B2 B1 a B2 b } Paso 2: P2 = { S B1 C1 A A B1 C2 B A a B B2 B1 a B2 b }

C1 B C2 B2 B2

FORMA NORMAL DE GREIBACH Se dice que una gram atica de contexto libre est a en la forma normal de Greibach (F.N.G.) si sus reglas son de la forma: A a
donde A VN , a VT y VN

Si G = (VN , VT , P, S ) es una gram atica de contexto libre que est a en la forma normal de Chomsky, se va a construir otra gram atica que estar a en la forma normal de Greibach mediante la aplicaci on de los siguientes pasos: 1. Aplicaci on del algoritmo que elimina la recursividad general por la izquierda. 2. Transformaci on de las reglas de los s mbolos no terminales de la gram atica original. 3. Transformaci on de las reglas de los s mbolos no terminales obtenidos al eliminar la recursividad inmediata.

FORMA NORMAL DE GREIBACH Paso 1: Aplicaci on del algoritmo que elimina la recursividad general por la izquierda. Las reglas de producci on resultantes ser an de la forma: Ai Aj j > i i, j {i, 2, . . . , n} Ai a Ai donde Ai , Aj VN , a VT , los s mbolos Ai (i {1, 2, . . . , m}) han sido generados al eliminar la recursividad inmediata por la izquierda y (VN {A1 , A2 , . . . , An }). En particular, la reglas del s mbolo An ser an de la forma An a y ya estar an en la forma normal de Greibach.

Paso 2: Transformaci on de las reglas de los s mbolos no terminales de la gram atica original mediante la aplicaci on del siguiente algoritmo: Transformaci on de las reglas de los s mbolos no terminales de la gram atica original [1] inicio [2] para i de n 1 a 1 hacer [3] para j de i + 1 a n hacer [4] para cada producci on actual de Ai [5] de la forma Ai Aj [6] hacer [7] si Aj a1 1 | a2 2 | | ap p [8] son las producciones actuales de Aj [9] entonces Ai a1 1 | a2 2 | | ap p [10] pasan a ser producciones actuales de Ai [11] n si [12] n para [13] n para [14] n para [15] n Las reglas de producci on resultantes ser an de la forma: Ai a Ai En particular, todas la reglas de los s mbolos no terminales originales estar an en la forma normal de Greibach.

Paso 3: Aplicaci on del siguiente algoritmo para transformar las reglas de los s mbolos no terminales obtenidos al eliminar la recursividad inmediata: Transformaci on de las reglas de los s mbolos obtenidos al eliminar la recursividad inmediata [1] inicio [2] para i de 1 a m hacer [3] para j de 1 a n hacer [4] para cada producci on actual de Ai [5] de la forma Ai Aj [6] hacer [7] si Aj a1 1 | a2 2 | | ap p [8] son las producciones actuales de Aj [9] entonces Ai a1 1 | a2 2 | | ap p [10] pasan a ser producciones actuales de Ai [11] n si [12] n para [13] n para [14] n para [15] n Las reglas de producci on resultantes ser an de la forma: Ai a Ai a Por tanto, todas la reglas estar an en la forma normal de Greibach.

FORMA NORMAL DE GREIBACH Se va a obtener la gram atica en la forma normal de Greibach equivalente a la siguiente gram atica, que ya est a en la forma normal de Chomsky: P = (1) (2) (3) (4) (5) { S A B A S B A a B B A B d }

Paso 1: Aplicaci on del algoritmo de la recursividad general por la izquierda: 1. La regla de S no necesita transformarse. 2. Se sustituye S por su alternativa en la regla A S B generando la regla: A A B B 3. Eliminaci on de la recursividad por la izquierda de las reglas de A. Las reglas actuales de A son A A B B | a y las reglas que se generan al eliminar la recursividad inmendiata son: A a | a A A B B |B B A 4. No se tiene que sustituir ning un s mbolo en las reglas de B . 5. Eliminaci on de la recursividad por la izquierda de las reglas de B . Las reglas actuales de B son B B A | d y las reglas que se generan al eliminar la recursividad inmendiata son: B d | d B B A | A B

P1 = { S A B A a | a A B d | d B A B B |B B B B A | A B } Paso 2: Transformaci on de las reglas de los s mbolos no terminales originales. 1. Las reglas de B ya est an en la forma normal de Greibach. 2. Las reglas de A ya est an en la forma normal de Greibach. 3. Se sustituye A por sus alternativas en la regla S A B generando las siguientes reglas de S : S a B | a A B Paso 3: Transformaci on de las reglas de los s mbolos no terminales generados al eliminar la recursividad inmediata por la izquierda. 1. Trasformaci on de las reglas de A : A B B | B B A . Se sustituye B por sus alternativas, gener andose las siguientes reglas de A : A d B | d B A | d B B | d B B A 2. Transformaci on de las reglas de B : B A | A B . Se sustituye A por sus alternativas, gener andose las siguientes reglas de B: B a | a A | a B | a A B 3. Las reglas de B no requieren ninguna sustituci on. El conjunto de producciones de la gram atica en la forma normal de Greibach es: P2 = { S a B | a A B A a | a A B d | d B A d B | d B A | d B B | d B B A B a | a A | a B | a A B }

Das könnte Ihnen auch gefallen