Lenguajes Independientes del Contexto Teora del Autmata AFD

  • Slides: 50
Download presentation
Lenguajes Independientes del Contexto Teoría del Autómata

Lenguajes Independientes del Contexto Teoría del Autómata

AFD como generadores Un AFD (o AFN) puede verse como un aceptador de cadenas

AFD como generadores Un AFD (o AFN) puede verse como un aceptador de cadenas o como un generador de cadenas. Acepta a(a* b*)b a q 0 a q 2 q 4 q 1 b Como productor haciendo las transiciones q 0 - q 1 - q 2 - q 5. Genera: aaaab q 3 b b

Las cadenas están formadas por a seguidas por otra parte. Podemos representarlo como S

Las cadenas están formadas por a seguidas por otra parte. Podemos representarlo como S a. E, lo que sigue pueden ser cadenas de aes o bes, de E podemos ir a generar aes mediante A y bes mediante B, es decir, E A o E B. Las aes se producen con A a. A y las bes con B b. B, eventualmente A y B producirán b, es decir A b y B b. En suma: S a. E E A E B A a. A B b. B A b B b

Las reglas anteriores pueden escribirse como se muestra: S a. E E A|B A

Las reglas anteriores pueden escribirse como se muestra: S a. E E A|B A a. A | b B b. B | b Donde | significa “o”. Una derivación es una serie de sustituciones de el símbolo de la derecha de las producciones por las cadenas de la izquierda hasta obtener una cadena de símbolos terminales. Ejemplo La siguiente es una derivación para la cadena aaab. S a. E aa. A aaab

Gramáticas regulares Una gramática es un cuarteto (N, , S , P) donde: N

Gramáticas regulares Una gramática es un cuarteto (N, , S , P) donde: N es un conjunto de símbolos llamados no terminales. es un conjunto finito y no vacío de símbolos terminales. S N es el símbolo inicial P es una colección, de reglas de sustitución, llamadas producciones, que son de la forma A w, donde A N y w es una cadena sobre N que satisface lo siguiente: 1 w contiene un no terminal como mucho. 2 si w contiene un no terminal se encuentra al extremo derecho de la cadena

Ejemplo La siguiente es una gramática = {a, b}, N = {S, A}, S

Ejemplo La siguiente es una gramática = {a, b}, N = {S, A}, S b. A, A aa. A | b | Genera cadena de la forma ba 2 nb o ba 2 n. L(G) = b(aa)*(b) Las producciones se pueden representar como pares ordenados de N (N ). P = {(S, b. A), (A, aa. A), (A, b), (S, )}

Ejercicios Sea S a. S | b. T y T aa Derivar abaa, aaabaa.

Ejercicios Sea S a. S | b. T y T aa Derivar abaa, aaabaa. Probar que deriva akba 2, k >= 1. S aaa. S … ak. S akb. T akbaa Obtener gramaticas para a*b b*a (a*b b*a)*

AFD a gramática regular A partir de un AFD dado por M = (Q,

AFD a gramática regular A partir de un AFD dado por M = (Q, , s, F, d) definiendo la gramática por G = (N, , S, P) con N=Q = S=s P = {(q, ap)| d(q, ap) = p} {(q, )| q F}

a q 1 a, b b q 2 a, b q 1 aq 1

a q 1 a, b b q 2 a, b q 1 aq 1 | bq 2 q 1 aq 3 | bq 3 | q 1 aq 3 | bq 3

Tarea Obtener la expresión regular para la siguiente gramática regular. S b. A |

Tarea Obtener la expresión regular para la siguiente gramática regular. S b. A | a. B | A aba. S B bab. S

Gramática regular a AFD Sea G una gramática regular, G = (N, , S,

Gramática regular a AFD Sea G una gramática regular, G = (N, , S, P). Definimos M = (Q, , s, F, D) de la siguiente manera Q=N {f} s=S F={f} 1. Si A 1… n. B es una producción, añada a Q los estados q 1, …, qn y las transformaciones siguientes D(A, 1… n) = D(q 1, 2… n) = D(qn– 1, n) = B 2. Si A 1… n. B es una producción, añada a Q los estados q 1, …, qn y las transiciones siguientes D(A, 1… n) = D(q 1, 2… n) = D(qn– 1, n) = f

Ejemplo S b. A | a. B | A aba. S B bab. S

Ejemplo S b. A | a. B | A aba. S B bab. S a b s q 1 a q 1 q 4 b q 5 a q 6 b a q 2 b q 3

Ejercicios Obtener AFNs para la siguientes gramáticas regulares. S a. S | b. B

Ejercicios Obtener AFNs para la siguientes gramáticas regulares. S a. S | b. B | b B c. C C a. S S ab. A | B | ba. B | A b. S | b B a. S

Gramáticas Libres del contexto La siguiente es una gramática S a. B | b.

Gramáticas Libres del contexto La siguiente es una gramática S a. B | b. A A a | a. S | b. AA B b | b. S | a. BB No tiene las restricciones de una gramática regular. Las producciones permiten más de un no terminal en el lado derecho.

Definición Una gramática libre del contexto (GIC) es un cuarteto (N, , S ,

Definición Una gramática libre del contexto (GIC) es un cuarteto (N, , S , P) donde: N es un conjunto de símbolos llamados no terminales. es un conjunto finito y no vacío de símbolos terminales. S N es el símbolo inicial P es una colección, de reglas de sustitución, llamadas producciones, que son de la forma A w, donde A N y w es una cadena sobre ( N)*. Es decir, las producciones pueden tener cero, uno o más no terminales que aparezcan en cualquier lugar del lado derecho. El lenguaje generado es conocido por Lenguaje independiente del contexto (LIC).

Ejemplo Sea la gramática S a. Sb | Esta gramática genera el lenguaje (anbn

Ejemplo Sea la gramática S a. Sb | Esta gramática genera el lenguaje (anbn | n>=0} que no es regular.

Ejercicios Sea la gramática S AA A AAA | a | b. A |

Ejercicios Sea la gramática S AA A AAA | a | b. A | Ab Obtener derivaciones para b 2 aba 2 ba. Probar como puede obtenerse una derivación para Para todo n > 0 y m 1, m 2, …, m 2 n+1 >= 0

Ejercicios Obtener gramáticas independientes del contexto para los siguientes lenguaje (ambn | m >=

Ejercicios Obtener gramáticas independientes del contexto para los siguientes lenguaje (ambn | m >= n} (w {a, b}*| w tiene el doble de aes que de bes} (ambn | n <= m <= 2 n} S a. Sb | aa. Sb | (ambncpdq | m+n >= p+q} S a. S | a. Sd | A | B | C A b. A | b. Ac | B a. Bc | a. B | A | C b. Cd | b. C | A |

Árboles de derivación Considere la siguiente es una gramática S AB A a. A

Árboles de derivación Considere la siguiente es una gramática S AB A a. A | a B b. B | b La cadena aabbb se puede derivar mediante S AB Abbb aabbb S El árbol de derivación es B A a B b b B b

La cadena aabbb se puede derivar también mediante las siguientes derivaciones S AB aa.

La cadena aabbb se puede derivar también mediante las siguientes derivaciones S AB aa. BBB aabb. B aabbb S AB a. Abbb aabbb El árbol de derivación es el mismo que el anterior Considere la siguiente es una gramática S Sb. S | Sc. S | a Las siguientes derivaciones son para abaca S Sb. Sca Sbaca abaca S Sc. S Sb. Sc. S abaca Los árboles de derivación se muestran a continuación

S Sb. Sca Sbaca abaca S S S b S a S c a

S Sb. Sca Sbaca abaca S S S b S a S c a a S Sc. S Sb. Sc. S abaca S S S a c S b a S a

Ejemplos S → x | y | z | S + S | S

Ejemplos S → x | y | z | S + S | S – S | S *S | S/S | (S) S S + S*S S + S*(S) S + S*(S – S) x + y*(S – S) x + y*(z – y) Dibujar el árbol de derivación, ¿es ambiguo?

Una gramática libre de contexto para un lenguaje consistente en todas las cadenas que

Una gramática libre de contexto para un lenguaje consistente en todas las cadenas que se pueden formar con las letras a y b, habiendo un número diferente de una que de otra, sería: S→U|V U → Ta. U | Ta. T V → Tb. V | Tb. T T → a. Tb. T | b. Ta. T | ε T genera todas las cadenas con la misma cantidad de letras a que b, U genera todas las cadenas con más letras a, y V todas las cadenas con más letras b.

Otro ejemplo para un lenguaje es {anbncm+n | n>=0 , m>=0} puede ser generado

Otro ejemplo para un lenguaje es {anbncm+n | n>=0 , m>=0} puede ser generado por la siguiente gramática libre de contexto. S → a. Sc | B B → b. Bc | ε Es ambiguo?

Simplificación de gramáticas independientes del contexto Sea G = (N, , S, P) una

Simplificación de gramáticas independientes del contexto Sea G = (N, , S, P) una gramática independiente del contexto. Transformaremos G en G'= (N', , S, P') de forma que L(G') = L(G), y para todo A N' se obtenga que A * w para algún w *.

Algoritmo 1. Eliminación de no terminales que no deriven cadenas terminales. 1. Iniciar N'

Algoritmo 1. Eliminación de no terminales que no deriven cadenas terminales. 1. Iniciar N' con todos los no terminales de A para los que A w, es una producción de G, con w *. 2. Inicializar P' con todas las producciones A w para las cuales A N y w *. 3. Repetir Añadir a N ' todos los no terminales A para los cuales A w, para algún w (N ' *) que sea una producción de P y añadirla P '. hasta que no puedan añadir más no terminales a N '.

Ejemplo S Aa | B | D B b A a. A | b.

Ejemplo S Aa | B | D B b A a. A | b. A | B C abc C es una producción inútil 1 er paso: N’ = {B, C} 2 o paso: P = {B b} 3 er paso: N’ = {B, C, A, S}

Ejemplo S a. Ab | c. EB | CE A d. BE | ee.

Ejemplo S a. Ab | c. EB | CE A d. BE | ee. C B ff | D C g. FB | ae D h

Algoritmo 2. Elimina aquellos terminales y no terminales que no aparezcan en las cadenas

Algoritmo 2. Elimina aquellos terminales y no terminales que no aparezcan en las cadenas que se deriven a partir de S. Sea G = (N, , S, P) una gramática independiente del contexto. Transformaremos G en G '= (N', , S, P ') de forma que L(G ') = L(G), y para todo X N ' ', se tenga que S a. Xb para las cadenas a y b de (N ' ')*.

Algoritmo 2. (cont. ) 1. Inicializar N ' de forma que contenga el símbolo

Algoritmo 2. (cont. ) 1. Inicializar N ' de forma que contenga el símbolo inicial S, e inicializar P ' y ' a . 2. Repetir Para A N ', si A w es una producción de P, entonces 1. Introducir A w en P '. 2. Para todo no terminal B de w, introducir B en N '. 3. Para todo terminal de w, introducir en '. hasta que no se puedan añadir nuevas producciones

Algoritmo 3 Identifica el conjunto N, de todos los no terminales anulables en una

Algoritmo 3 Identifica el conjunto N, de todos los no terminales anulables en una gramática independiente del contexto. 1. Inicializar N con todos los no terminales A para los cuales existe una producción , A . 2. Repetir Si B w para algún w (N )* y todos los símbolos de w están en N, añadir B a N. hasta que no se añadan más no terminales a N.

Algoritmo 3 (cont. ) Una vez identificados los no terminales anulables, se modifican las

Algoritmo 3 (cont. ) Una vez identificados los no terminales anulables, se modifican las reglas de producción con el fin de eliminar la producciones . Esto se realiza sustituyendo producciones de la forma B X 1 X 2…Xn por las producciones que se formen al eliminar los subconjuntos de Xi que son anulables.

Algoritmo 3 (cont. ) Se crea un nuevo conjunto de producciones P’ como sigue:

Algoritmo 3 (cont. ) Se crea un nuevo conjunto de producciones P’ como sigue: Si B X 1 X 2…Xn es una producción de P, entonces en P’ introduciremos todas las producciones de la forma B Y 1 Y 2…Yn, donde las Yi satisfagan: Yi = Xi si Xi no es anulable Yi = Xi o si Xi es anulable Yi no es para toda i (es decir, no se introduce en P’ ninguna producción de la forma B ) En una gramática que contenga , se pueden eliminar todas las producciones y después añadir la producción S .

Ejemplo N = {B, C, D} S AB | A A a. A |

Ejemplo N = {B, C, D} S AB | A A a. A | ab. B | a. Ca A a. A | ab. B | ab | a. Ca | aa B b. A | BB | B C D d. B | d | BCB | BC | CB | BB D d. B | BCB B|C Con 1: S AB abb. A abbaab. B abbaab Con 2: S A ab. B abb. A abbaab

Eliminación de producciones unitarias Producciones de la forma A B se conocen como unitarias.

Eliminación de producciones unitarias Producciones de la forma A B se conocen como unitarias. Para A N se define Unitario(A) = {B N | A * B usando solamente producciones unitarias} Las producciones unitarias agregan pasos inútiles al proceso de derivación de cadenas de terminales. El siguiente algoritmo elimina todas las producciones unitarias de una gramática G. Sea G = (N, , S, P) se obtendrá G’, tal que G’ = (N, , S, P’) no contiene producciones unitarias como sigue:

Eliminación de producciones unitarias (cont. ) 1. Inicializar P’ de forma que contenga todos

Eliminación de producciones unitarias (cont. ) 1. Inicializar P’ de forma que contenga todos los elementos de P. 2. Para cada A N, obtener el conjunto Unitario(A). 3. Para cada A para el cual Unitario(A) {A}. Para cada B Unitario(A). Para cada producción no unitaria B w de P Añadir A w a P’ 4. Eliminar todas las producciones unitarias que haya en P’.

S A | Aa Unitario(S) = {S, A, B, C, D} A B Unitario(A)

S A | Aa Unitario(S) = {S, A, B, C, D} A B Unitario(A) = {A, B, C, D} B C | b Unitario(B) = {B, C, D} C D | ab Unitario(C) = {C, D} D b Unitario(D) = {D} Se introducen las producciones: S b | ab, A b | ab, B b | ab, C b | ab Se eliminan las unitarias y resulta: S b | ab | Aa C b | ab A b | ab D b B b | ab

Forma normal de Chomsky Una gramática independiente del contexto esta en forma normal de

Forma normal de Chomsky Una gramática independiente del contexto esta en forma normal de Chomsky si no contiene producciones y todas las producciones son de la forma A a para a , o de la forma A BC, donde B y C son no terminales. Para transformar una gramática independiente del contexto a la forma normal de Chomsky, primero se eliminan todas las transformaciones , los símbolos inútiles y las producciones unitarias de G. Si se tiene una producción de la forma A w, con |w| > 1, donde w = X 1 X 2…Xn. Si Xi es un símbolo terminal , sustituimos Xi por un nuevo no terminal C y añadimos la producción C . De esta forma A w contendrá solo no terminales.

Forma normal de Chomsky (cont. ) La producción tendrá la forma A B 1

Forma normal de Chomsky (cont. ) La producción tendrá la forma A B 1 B 2…Bn, esta se puede reemplazar por las producciones A B 1 D 1 B 2 D 2 … Dn-2 Bn-1 Bn donde los Di son nuevo no terminales.

S b. A | a. B A b. AA | a. S | a

S b. A | a. B A b. AA | a. S | a B a. BB | b. S | b Después de la primera transformación: Después de la segunda transformación: S Cb. A | Ca. B A Cb. AA | Ca. S | a A Cb. D 1 | Ca. S | a B Ca. BB | Cb. S | b D 1 A A Ca a B Ca. D 2 | Cb. S | b Cb b Ca a Cb b D 2 BB

Propiedades de los lenguajes independientes del contexto Se puede probar mediante inducción que, si

Propiedades de los lenguajes independientes del contexto Se puede probar mediante inducción que, si se puede derivar w y | w | >0, la derivación tiene 2 | w | etapas en una gramática en forma normal de Chomsky. En el nivel m del árbol de derivación hay, como máximo, 2 m nodos padre, por tanto, el camino más largo en un árbol de derivación consta de m + 2 nodos, entonces 2 m es la longitud máxima de la cadena derivada.

Lema del bombeo para GIC Sea L un LIC que no contiene . Existe

Lema del bombeo para GIC Sea L un LIC que no contiene . Existe un entero k para el cual, si z L y | z | > k, entonces z se puede volver a escribir como z = uvwxy con las propiedades siguientes: 1. | vwx | k. 2. Al menos o v o x no es . 3. uviwxiy L para todo i 0. Demostración. Sea G = (N, , S, P) con L = L(G) y sea n el número de no terminales de N y k = 2 n. Supongamos z L con | z | > k.

Lema del bombeo para GIC (cont. ) El camino más largo de derivación debe

Lema del bombeo para GIC (cont. ) El camino más largo de derivación debe contener n + 2 nodos, n + 1 serán no terminales, por tanto, algún no terminal se repite. Entonces S * u. Ay * uv. Axy * uvwxy = z por tanto | vwx | 2 n. Puesto que A * v. Ax, debemos tener A * vi. Axi para algún i 0. Por tanto S * uviwxiy para todo i 0. Como A * v. Ax, se debe tener que A BC * v. Ax * vwx. Entonces B * v y C * Ax o si no B * v. A y C * x. En el primer caso | v | 1 y en el segundo | x | 1, con lo que o v o x no es .

Ejemplo Considerar el lenguaje L = {aibj | j = i 2}. Si z

Ejemplo Considerar el lenguaje L = {aibj | j = i 2}. Si z L, z = akbk^2, por el lema del bombeo z = uvwxy. Si v = arbs, vi = (arbs)i y por tanto no pertenece a L. Igualmente si x = arbs. Las únicas posibilidades son v = ar y x = as v = br y x = bs v = ar y x = bs. En el primer caso tenemos: uv 2 wx 2 y = ak+r+sbk^2 En el segundo caso tenemos: uv 2 wx 2 y = akbk^2+r+s En el tercer caso tenemos: uv 2 wx 2 y = ak+(i– 1)rbk^2+(i– 1)s Los cuales no pertenecen a L.

Lema Sea G = (N, , S, P) una GIC que no tiene producciones

Lema Sea G = (N, , S, P) una GIC que no tiene producciones y que está en forma normal de Chomsky. Sea x una cadena de *. Se puede determinar, para cada A N y para cada subcadena w de x, si A * w. Demostración. Sea n = | x | y sea wij la subcadena que comienza en la posición i y tiene j caracteres. Probaremos el lema con inducción sobre j. Si j = 1, entonces A * w si y solo si existe la producción A wij esta en P, por tanto se puede determinar lo enunciado en el lema.

Lema Ahora supongamos que se cumple para cadenas de longitud menor que j con

Lema Ahora supongamos que se cumple para cadenas de longitud menor que j con j > 1. Observe que A wij si y solo si A BC para algunos B y C, los cuales B * wik y C * wk+1, j-k para k entre 1 y j - 1. Entonces tanto wik como wk+1, j-k tiene longitud menor que j y se puede determinar si B * wik y si C * wk+1, j-k. De lo anterior, si j = n entonces se puede determinar si S * w 1, j = w 1, n = x. Es decir si x L(G) para cada x *.

Algoritmo CYK (Cocke, Younger y Kasami) Sirve para determinar si x L(G). 1. Para

Algoritmo CYK (Cocke, Younger y Kasami) Sirve para determinar si x L(G). 1. Para cada i = 1, 2, …, n, sea Ni 1 = {A | A wi 1} Es decir, Ni 1 es el subconjunto de todos los no terminales que producen el i-ésimo símbolo de x. 2. Para cada j = 2, 3, …, n, hacer lo siguiente: Para cada i = 1, 2, …, n - j + 1, hacer lo siguiente: a. Iniciar Nij = b. Para cada k = 1, 2, …, j - 1, añadir a Nij todos los no terminales A para los cuales A BC, con B Nik y C Ni+k, j-k. 3. Si S N 1 n, entonces x L(G).

Ejemplo de CYK Sea la gramática Para la cadena bbab se genera la siguiente

Ejemplo de CYK Sea la gramática Para la cadena bbab se genera la siguiente tabla S AB | BC j = 2, i = 1. . 3 y k = 1, Nij Ni+k, j–k = N 12 N 21, N 22 N 31, N 32 N 41, A BA | a B CC | b C AB | a j = 3, i = 1. . 2 y k = 1. . 2 Nij Ni+k, j–k = N 13 N 22, N 13 N 31, N 23 N 32, N 23 N 41, Para la cadena bbab se genera la siguiente tabla j = 4, i = 1 y k = 1. . 3 Nij Ni+k, j–k = N 14 N 23, N 14 N 32, N 14 N 41, b j=1 b j=2 a j=3 j=4 b j=1 j=2 B B A, C B B A, S S, C j=3 j=4 A S, C

Demostrar que bba, babba pertenecen al lenguaje anterior

Demostrar que bba, babba pertenecen al lenguaje anterior

Algunos teoremas Teorema. Si L 1 y L 2 son lenguajes independientes del contexto,

Algunos teoremas Teorema. Si L 1 y L 2 son lenguajes independientes del contexto, entonces L 1 L 2 es un lenguaje independiente del contexto. Teorema. Si L es un lenguaje independiente del contexto, entonces L* es un lenguaje independiente del contexto. Teorema. La concatenación de lenguajes independientes del contexto es independiente del contexto. Los lenguajes independientes del contexto no son cerrados respecto a la intersección ni el complemento.