Teoría de Autómatas y Lenguajes Formales.Prácticas Introducción a JFLAP Teoría de Autómatas y Lenguajes Formales Prácticas Introducción a JFLAP Autores: Araceli Sanchis de Miguel Agapito Ledezma Espino Jose A. Iglesias Martínez Beatriz García Jiménez Juan Manuel Alonso Weber * Algunos ejercicios están basados en enunciados del siguiente libro: • Susan H. Rodger and Thomas W. Finley. JFLAP: An Interactive Formal Languages and Automata Package. Jones & Bartlett Publishers, Sudbury, MA (2006). 1 Teoría de Autómatas y Lenguajes Formales. Prácticas Introducción a JFLAP JFLAP (del inglés, Java Formal Language and Automata Package) es un software que permite experimentar de forma gráfica con los conceptos relativos a la teoría de autómatas y lenguajes formales. Permite diseñar, evaluar y realizar distintas transformaciones y comprobaciones sobre autómatas finitos, gramáticas, autómatas a pila, máquinas de Turing, y otros elementos adicionales que no forman parte del contenido de este curso. Para la realización de estas prácticas se requiere la descargar de la herramienta libre JFLAP de su sitio web (http://www.jflap.org/). Además es necesario consultar el tutorial on-line de la herramienta (http://www.jflap.org/tutorial/), o el siguiente libro guía: Susan H. Rodger and Thomas W. Finley. JFLAP: An Interactive Formal Languages and Automata Package. Jones & Bartlett Publishers, Sudbury, MA (2006). NOTA IMPORTANTE: Para los ejercicios de limpieza y bien formación de gramáticas, se debe tener en cuenta la siguiente correspondencia entre la nomenclatura y orden de pasos de la explicación teórica y ejercicios, y el proceso utilizado en la herramienta JFLAP, acorde a la siguiente tabla. Algoritmo Reglas innecesarias Símbolos inaccesibles Reglas superfluas JFLAP Unit production removal Useless production removal (2ª parte) Useless production removal (1ª parte) Useless production removal (1ª parte) Explicación teórica Eliminación de Reglas innecesarias Eliminación de símbolos inaccesibles Eliminación de reglas superfluas Eliminación de símbolos no generativos Diferencia No hay Comentarios ----- No hay ----No hay ----En clase se proporciona un algoritmo distinto. Poner el presunto símbolo no generativo como axioma: si se obtiene lenguaje vacío, entonces es no generativo No hay No hay ----El símbolo no generativo, si está en la parte derecha de una regla de gramática G2, G3 puede eliminarse tratando esta regla como superflua. ----- Símbolos no generativos Reglas no generativas Reglas de redenominación λ−production removal Unit production removal Eliminación de reglas no generativas Eliminación de Reglas de redenominación 2 3.2.Teoría de Autómatas y Lenguajes Formales. Palabras de prueba 0 00 00.1 3. Crear una gramática G que genere números reales.2 9.0}. N. C}. Palabras de prueba 0 00 001 123 1234 12345 9212 43. con el derivador por fuerza bruta simple (opción Input → Brute Force Parse).9. Escribe las siguientes gramáticas en el editor de JFLAP.7.5. c) da una descripción del lenguaje que representan.23 9.6..” para separar la parte entera y la fraccionaria. Obtención de Lenguajes. y para cada una de ellas haz: a) una lista de 5 palabras que son aceptadas. Comprobad qué secuencias de las siguientes son palabras del lenguaje L(G) y determinar el motivo. b) una lista de 5 palabras que son rechazadas.1. 1) 2) 3) 3 . con “. Prácticas Introducción a JFLAP 1. P) P = { N ::= CN | C. C ::= 0|1|2|3|4|5|6|7|8|9 } Comprobad con el derivador múltiple por fuerza bruta (opción Input → Multiple Brute Force Parse) qué secuencias son palabras del lenguaje L(G) y determinar el motivo. Dada una gramática para generar números naturales: G = ({0. Anotad las observaciones que realicéis en cada caso.4.1 9. d) indica el tipo de gramática en la jerarquía de Chomsky.1 3445 1. {N.21.8.34 2. Anotad las observaciones que realicéis en cada caso. .S.C}.{S.. con el consiguiente gasto en tiempo de procesamiento... Eficiencia del Derivador por Fuerza Bruta.8 y apunta el número de nodos generados. 5.8 y apunta el número de nodos generados. ¿Sabes cuál es el motivo de la diferencia? (c) Añadiéndolo al cambio anterior. El algoritmo que emplea el Derivador por Fuerza Bruta consiste en generar un árbol de búsqueda en el que cada nodo es una Forma Sentencial (la inicial es el axioma) y cada rama es la aplicación de alguna de las producciones. Proporciona dos árboles de derivación diferentes para esta palabra y anota el orden de producciones empleado.b}.B. por lo que para que el árbol cambie. Considerar la siguiente gramática ambigua y la palabra ababab.. ¿Sabes cuál es el motivo de las diferencias? 4 . Gramáticas ambiguas.. Compara los resultados con los del apartado (a).A...P).. Compara los resultados con los de los apartados (a) y (b). cambia la producción A→AA a A→aA. Para la siguiente gramática y las cadenas de la forma anbb: G = ({a.Teoría de Autómatas y Lenguajes Formales.. Ejecuta el brute force parser para n=2.. El algoritmo de JFLAP ejecuta siempre las producciones en el orden en el que están escritas en el editor.. ¿Qué observación puedes hacer acerca del número de nodos generados? ¿Y del tiempo que ha tardado? ¿Sabes el motivo? (b) Elimina la producción S →SS y ejecuta de nuevo el brute force parser para n=2.8 y apunta el número de nodos. donde P={ S -> AC C -> AB B -> CC A -> a C -> b S -> SS A -> AA } (a) Ejecuta el brute force parser para n= 2. Prácticas Introducción a JFLAP 4. hay que cambiar el orden de las producciones en el editor. S -> abS S -> Sab S -> aSb S -> SS S -> λ Ejecuta el derivador de fuerza bruta de JFLAP para esta palabra. La búsqueda suele ser exhaustiva y para problemas de tamaño relativamente pequeño generan árboles de tamaño considerable. El método busca generar una sucesión de Formas Sentenciales que conduzcan a la palabra buscada. o bien convirtiendo la gramática a un autómata finito y comprobando si el AF acepta la palabra.Teoría de Autómatas y Lenguajes Formales.d. El padre decide hacer que una nota f. cuente como dos d’s.b. ¿Por qué este lenguaje no puede ser expresado con una gramática lineal derecha? 7. El estudiante Carlos quiere que sus padres le compren un coche. utilizando JFLAP. Carlos fue capaz de discutir satisfactoriamente con su padre. Transformar las siguientes gramáticas regulares lineales derechas a su correspondiente Autómata Finito. (b) La reacción inicial de Carlos fue de realizar una súplica. Modifica la gramática para que tenga en cuenta este cambio. Su padre plantea un criterio simple: si Carlos recibe menos que 4 d’s. Su padre genera una secuencia en la que transcribe todas las notas que Carlos ha recibido en su vida. no lo tendrá. tendrá el coche. Prácticas Introducción a JFLAP 6. Su padre te pide que diseñes una gramática lineal derecha donde la gramática genere la secuencia de trascripción sí y sólo si Carlos consigue el coche. (c) Con un poco más de tacto. 1) S ::= aA S ::= bB B ::= bS B ::= λ A ::= aS A ::= λ 2) S ::= aS S ::= aA A ::= bB A ::= cC B ::= bS B ::= b C ::= cS C ::= λ 3) S ::= bS S ::= aA S ::= bB S ::= bC A ::= aS B ::= bC B ::= b C ::= cS C ::= c 5 .c. Nota: Puedes probar si una gramática lineal derecha genera una palabra con el derivador de fuerza bruta. y de otra forma. y una f es la nota más baja. llegando al acuerdo de que una nota de sobresaliente a. abogando indirectamente a la noción que la diferencia generacional entre el padre y el hijo pudo haber conducido al padre a ser injustamente duro. Una f cuenta igual que una d. Una a es un sobresaliente. para que su padre adoptase métodos menos draconianos. debería mitigar un suspenso d. una larga cadena hecha con los símbolos de ∑ = {a.f} sin un orden particular. (a) Diseña una gramática lineal derecha con las especificaciones anteriores. b. Eliminar las reglas superfluas y símbolos inaccesibles usando JFLAP en la gramática G. anota la producción no generativa que vas a eliminar y las producciones nuevas que vas añadiendo). Anota los pasos de transformación y la gramática obtenida.{S.A. Eliminar las reglas no generativas de la gramática G con JFLAP.S.c}.P) P={ S ::= Ac | BaA A ::= B | a B ::= bB | λ } 10.S. Prácticas Introducción a JFLAP 8. G=({a.b.B}. 1) 2) 3) 9.B}.A.c}. utilizando JFLAP. Edita los siguientes autómatas finitos en JFLAP y transfórmalos a sus correspondientes gramáticas. Anota los pasos de transformación y la gramática obtenida (para cada paso. G=({a.P) P={ S ::= aSB | b A ::= a | aA B ::= AaC | bA C ::= cCc} 6 .{S.Teoría de Autómatas y Lenguajes Formales. 9. Prácticas Introducción a JFLAP SOLUCIONES 1.4. 7 .Teoría de Autómatas y Lenguajes Formales. P) P = { N ::= CN | C.1. {N. C ::= 0|1|2|3|4|5|6|7|8|9 } Comprobad con el derivador múltiple por fuerza bruta (opción Input → Multiple Brute Force Parse) qué secuencias son palabras del lenguaje L(G) y determinar el motivo. Dada una gramática para generar números naturales: G = ({0.0}. con el derivador por fuerza bruta simple (opción Input → Brute Force Parse).”).2.8.6. N. aplicando el derivador por fuerza bruta simple (opción Input → Brute Force Parse).34 Las anotaciones de las observaciones para cada palabra.34 * * * No se deriva. porque contiene un símbolo que no pertenece al alfabeto (“.5. C}. Anotad las observaciones que realicéis en cada caso.7. Palabras de prueba Solución: Aplicando el derivador múltiple por fuerza bruta (opción Input → Multiple Brute Force Parse) obtenemos: 0 00 001 123 1234 12345 9212 43. junto con el resultado de aceptación o no con JFLAP son las siguientes: Palabra de prueba Aceptada Nodos generados 0 Si 3 00 Si 9 001 Si 23 123 Si 25 1234 Si 74 12345 Si 229 9212 Si 65 43.3. N.1 3445 1. {N. X}.1 9.1 Si 95 8 3445 Si 127 1. junto con el resultado de aceptación o no con JFLAP son las siguientes: 0 00 00. P) P = { N ::= XCX | X.4.23 9.1 NO 118 9. C.2 9. } Las anotaciones de las observaciones para cada palabra.8. Comprobad qué secuencias de las siguientes son palabras del lenguaje L(G) y determinar el motivo.9. Prácticas Introducción a JFLAP 2.}.7.1.” para separar la parte entera y la fraccionaria.. Crear una gramática G que genere números reales. X ::= DX | D D ::= 0|1|2|3|4|5|6|7|8|9 C ::= .0.21. con “..2.21.6.. Palabras de prueba Solución: Una posible gramática sencilla que genera números reales sería la siguiente: G = ({0.2 * * 9.23 Si 92 9.1 ** ** .Teoría de Autómatas y Lenguajes Formales.5.3.1 Palabras de prueba Aceptada Nodos generados 0 Si 4 00 Si 10 00. Anotad las observaciones que realicéis en cada caso. D. Si se cambia esta palabra por otra más reducida. con sólo un punto decimal.1”. como hace la gramática sencilla propuesta. Cabe destacar que también se pueden diseñar gramáticas más detalladas. Por lo que la existencia de dos puntos decimales influye bastante en la cantidad de memoria necesaria.Teoría de Autómatas y Lenguajes Formales. 9.21. las observaciones sobre el comportamiento de JFLAP ante la lista de palabras del enunciado podría variar. En esos casos. Prácticas Introducción a JFLAP * ** “Out of Memory”. porque hay un símbolo que no pertenece al alfabeto (coma en vez de punto). que incluyan comprobaciones sobre la existencia de dígitos no significativos a izquierda y derecha del punto decimal. Error. podría no reconocerla en lugar de aceptarla. 9 . se acepta en 92 nodos. por el incremento de posibilidades a evaluar. Por ejemplo. para la palabra “00. 1) 2) 3) Solución: 3. aabbbb. aaaaaabb b) Palabras rechazadas: ab.1: a) Palabras aceptadas: aabb. Obtención de Lenguajes. ba. Prácticas Introducción a JFLAP 3. aabbb. Escribe las siguientes gramáticas en el editor de JFLAP.Teoría de Autómatas y Lenguajes Formales. aaabb. m>1} d) Tipo gramática: 2 10 . aaaabb. b) una lista de 5 palabras que son rechazadas. c (“c” no es un terminal) c) L = {(aa)nbm | n>0. aab. y para cada una de ellas haz: a) una lista de 5 palabras que son aceptadas. d) indica el tipo de gramática en la jerarquía de Chomsky. c) da una descripción del lenguaje que representan. babaabab. babaaba. Prácticas Introducción a JFLAP 3. babaabaabab b) Palabras rechazadas: bababb. bababa. bbaa c) L = {b(aba)nbm | n>0.Teoría de Autómatas y Lenguajes Formales. babab. abab.2: a) Palabras aceptadas: baba. b. m ∈ [0.1]} d) Tipo gramática: 0 (regla compresora B → λ) 11 . babaaa b) Palabras rechazadas: bbb.q ∈ [0. Prácticas Introducción a JFLAP 3. lo que resulta en las 4 combinaciones dadas: aba-aba.1] } O L = {(aa)n (ambam (aa)p aqbaq )s (abba)t (aa)r | | n. De la última posible cadena de derivaciones se obtiene una estructura diferente (abba. aaaabb. en S y en A: S → (aa)* aba A → (aa)* aba (aa)* aba B → → (aa)* aba (aa)* b B → → (aa)* b A → (aa)* b (aa)* aba B → → (aa)* b (aa)* b B → → (aa)* abba B → (aa)* aba (aa)* aba (aa)* (aa)* aba (aa)* b (aa)* (aa)* b (aa)* aba (aa)* (aa)* b (aa)* b (aa)* (aa)* abba (aa)* Se puede observar que las 4 primeras posibles derivaciones siguen la estructura (aa)* x (aa)* y (aa)*.q. sin (aa)* intermedio). aba-b. babab.Teoría de Autómatas y Lenguajes Formales. s+t =1} (ver desarrollo a continuación) d) Tipo gramática: 0 (regla compresora B → λ) c) Desarrollo: S → (aa)* S | → (aa)* aba A | → (aa)* b A | → (aa)* abba B A → (aa)* A | → aba B | →bB B → (aa)* B | →λ Sustituyendo A en S: S → (aa)* aba A → (aa)* aba (aa)* aba B → (aa)* aba (aa)* b B → (aa)* b A → (aa)* b (aa)* aba B → (aa)* b (aa)* b B → (aa)* abba B Sustituyendo B. 12 .t ∈ [0. aa.p.1]. abaaba. baabb.r ≥ 0.s. m.3: a) Palabras aceptadas: aabb. abaaab. b-aba y b-b. pudiendo tomar x e y los valores “b” o “aba”. abaaa c) L = {(aa)n [ambam (aa)p aqbaq | abba ] (aa)r | | n.r ≥ 0. m.p. El algoritmo de JFLAP ejecuta siempre las producciones en el orden en el que están escritas en el editor.Teoría de Autómatas y Lenguajes Formales. 1ª. En ambos casos se emplean 657 nodos. Gramáticas ambiguas. por lo que para que el árbol cambie. 5ª b) Cambiando el orden de las dos primeras producciones. Proporciona dos árboles de derivación diferentes para esta palabra y anota el orden de producciones empleado. 1ª. 5ª 13 . Con dos árboles de derivación diferentes para una misma palabra es suficiente para demostrar la ambigüedad de la gramática. 1ª. S -> abS S -> Sab S -> aSb S -> SS S -> λ Ejecuta el derivador de fuerza bruta de JFLAP para esta palabra. hay que cambiar el orden de las producciones en el editor. el árbol de derivación obtenido es simétrico al anterior. Considerar la siguiente gramática ambigua y la palabra ababab. Prácticas Introducción a JFLAP 4. Solución: a) Con el orden de producciones indicado el árbol de derivaciones que se obtiene es: S → ab S S → Sa b S → aS b S → SS S → λ Orden de producciones: 1ª. 1ª. S S S S S Sab abS aSb SS λ → → → → → Orden de producciones: 1ª. Teoría de Autómatas y Lenguajes Formales. En este caso. 1ª. 2ª. 2ª. y con las demás en cualquier orden. 5ª d) Una opción más sería poner S → SS como la primera producción. Prácticas Introducción a JFLAP c) Otro opción sería colocar S → aSb como la primera producción. 1ª. obteniendo un tercer árbol de derivación diferente para la misma palabra. S S S S S aSb Sab abS SS λ → → → → → Orden de producciones: 2ª. se emplean 760 nodos. Por ejemplo. saldrán distintos árboles para la misma palabra. 5ª. 2ª. 5ª. se emplean 4613 nodos con la siguiente gramática. 2ª. árbol de derivación y orden de producciones: S S S S S SS aSb abS Sab λ → → → → → Orden de producciones: 1ª. 5ª 14 . 15 . También se puede observar que dependiendo de la potencia de cómputo del ordenador.) Tiempo (aprox.8 y apunta el número de nodos. disminuyendo al incrementarse la potencia. cambia la producción A→ AA a A→ aA. El método busca generar una sucesión de Formas Sentenciales que conduzcan a la palabra buscada.8 y apunta el número de nodos generados.5 s <1 s 2. Compara los resultados con los del apartado (a)..A..8 y apunta el número de nodos generados. con el consiguiente gasto en tiempo de procesamiento.B... pasando incluso de no poder verificar la generación de una palabra a sí hacerlo (como sucede para n=9)..{S..C}. La búsqueda suele ser exhaustiva y para problemas de tamaño relativamente pequeño generan árboles de tamaño considerable..5 s <1 s 9s 6s 11 s 8s 35 s El tiempo y el número de nodos aumentan según se incrementa el valor de “n”.Teoría de Autómatas y Lenguajes Formales.) CPU antigua CPU más reciente 0s <1 s 0s <1 s 1s <1 s 1.b}. Para la siguiente gramática y las cadenas de la forma anbb: G = ({a. Ejecuta el brute force parser para n=2. ¿Sabes cuál es el motivo de las diferencias? Solución: Palabras de la forma: anbb a) Tam.S.. Compara los resultados con los de los apartados (a) y (b)... El algoritmo que emplea el Derivador por Fuerza Bruta consiste en generar un árbol de búsqueda en el que cada nodo es una Forma Sentencial (la inicial es el axioma) y cada rama es la aplicación de alguna de las producciones. Nodos n=2 n=3 n=4 n=5 n=6 n=7 n=8 n=9 75 182 382 782 1328 16855 33019 59733 Tiempo (aprox. donde P={ S -> AC C -> AB B -> CC A -> a C -> b S -> SS A -> AA } (a) Ejecuta el brute force parser para n= 2. los tiempos pueden variar. ¿Qué observación puedes hacer acerca del número de nodos generados? ¿Y del tiempo que ha tardado? ¿Sabes el motivo? (b) Elimina la producción S → SS y ejecuta de nuevo el brute force parser para n=2.P).. Palabra Num. Eficiencia del Derivador por Fuerza Bruta. Esto es debido a que jflap tiene que aplicar cada vez más producciones para generar las palabras más largas.. ¿Sabes cuál es el motivo de la diferencia? (c) Añadiéndolo al cambio anterior. Prácticas Introducción a JFLAP 5. La producción eliminada S → SS es una producción que no es necesaria para derivar las palabras del tipo anbb. se puede prescindir de ella obteniendo dichas palabras. menos en el último. con lo que los procesos de búsqueda son más rápidos. pero ahora es menor que en el caso anterior. para los tres casos. con cada transformación. al realizar la búsqueda.Teoría de Autómatas y Lenguajes Formales. utilizando las reglas de derivación disponibles. Palabra Num. En general. No obstante. en todas las palabras. Nodos 43 98 222 556 1077 3632 7282 17017 Tiempo (aprox. Tam. pero prescindimos de una recursividad.) Tiempo (aprox. donde el tiempo invertido es bastante más elevado. Palabra n=2 n=3 n=4 n=5 n=6 n=7 n=8 n=9 Num. 16 . La única forma de convertir una A en un terminal es sustituirla por una a. c) Sin S → SS y cambiar A→ AA por A→ aA.5 s 6s 4s 28 s El tiempo sigue aumentando con la longitud de la palabra. Nodos Tiempo (aprox. Sustituyendo A→ AA por A → aA (dado que existe la producción A → a) obtenemos una gramática equivalente.) Tiempo (aprox.5 s <1 s 3s 2.) CPU antigua CPU más reciente 0s 0s 0s 0s 0s 0s 1s <1 s 1. Prácticas Introducción a JFLAP b) Sin S → SS Tam. el proceso de derivación es mucho más rápido. se intenta aplicar esa producción por lo que el número de nodos de búsqueda generados es mayor que si se prescinde de ella.) CPU antigua CPU más reciente n=2 34 0s 0s n=3 78 0s 0s n=4 136 0s 0s n=5 205 0s 0s n=6 749 1. con respecto a los anteriores.5 s <1 s n=7 1148 2s 1s n=8 8888 22 s 17 s n=9 15121 40 s La derivación es instantánea en casi todos los casos. Su padre plantea un criterio simple: si Carlos recibe menos que 4 d’s.X. {S. Nota: Puedes probar si una gramática lineal derecha genera una palabra con el derivador de fuerza bruta. S.b. Carlos fue capaz de discutir satisfactoriamente con su padre.Teoría de Autómatas y Lenguajes Formales. o bien convirtiendo la gramática a un autómata finito y comprobando si el AF acepta la palabra. (b) La reacción inicial de Carlos fue de realizar una súplica. llegando al acuerdo de que una nota de sobresaliente a.f} sin un orden particular.c. Su padre te pide que diseñes una gramática lineal derecha donde la gramática genere la secuencia de trascripción sí y sólo si Carlos consigue el coche. y una f es la nota más baja. Cada uno de los símbolos del alfabeto representa una de las calificaciones que puede obtener Carlos.Z}. (c) Con un poco más de tacto. Pb) Pb={ S ::= aS | bS | cS | dX | fY| a | b | c X ::= aX | bX | cX | dY | fZ | λ 17 . ¿Por qué este lenguaje no puede ser expresado con una gramática lineal derecha? Solución: Con el mismo alfabeto ∑ = {a. no lo tendrá. Modifica la gramática para que tenga en cuenta este cambio.d. cuente como dos d’s.c. debería mitigar un suspenso d.c. Pa) Pa={ S ::= aS | bS | cS | dX | fX | a | b | c | d | f X ::= aX | bX | cX | dY | fY | a | b | c | d | f Y ::= aY | bY | cY | dZ | fZ | a | b | c | d | f Z ::= aZ | bZ | cZ | a | b | c } S genera sentencias sin ningún suspenso (d ó f).b.f} para los diferentes apartados del ejercicio. y de otra forma.d.f}.d. (a) Diseña una gramática lineal derecha con las especificaciones anteriores.Z}. S. X genera sentencias con 1 suspenso (d ó f). Y genera sentencias con 2 suspensos (d ó f). tendrá el coche.b.f}.b. El padre decide hacer que una nota f. Su padre genera una secuencia en la que transcribe todas las notas que Carlos ha recibido en su vida.X. Una f cuenta igual que una d. Una a es un sobresaliente. Z genera sentencias con 3 suspensos (d ó f).Y.Y. b) Gb = ({a.d. a) Ga = ({a.c. Prácticas Introducción a JFLAP 6. abogando indirectamente a la noción que la diferencia generacional entre el padre y el hijo pudo haber conducido al padre a ser injustamente duro. El estudiante Carlos quiere que sus padres le compren un coche. para que su padre adoptase métodos menos draconianos. {S. una larga cadena hecha con los símbolos de ∑ = {a. etc.Teoría de Autómatas y Lenguajes Formales. y no se pueden establecer infinitas reglas para almacenar todos los casos posibles (1 a y 0 d’s. se salta de S a Y (0 a 2 suspensos).eliminar Y ::= fZ c) Porque el número de sobresalientes no está limitado. Ya que en las gramáticas regulares se necesita un símbolo No Terminal (con su conjunto de reglas asociado). 2 a’s y 1 d. Prácticas Introducción a JFLAP } Y ::= aY | bY | cY | dZ | λ Z ::= aZ | bZ | cZ | λ otro conjunto de reglas equivalente.). y cuando se está en Y (2 suspensos) ya no se permiten f’s (2 + 2 > 3 suspensos permitidos). 18 . 2 a’s y 0 d’s.cambiar S::= fX por S::= fY . para almacenar cada situación que requiera almacenar un valor concreto “en la memoria” del proceso de derivación. sin reglas de producción con λ sería: P’b={ S ::= aS | bS | cS | dX | fY| a | b | c | d | f X ::= aX | bX | cX | dY | fZ | a | b | c| d | f Y ::= aY | bY | cY | dZ | a | b | c | d Z ::= aZ | bZ | cZ | a | b | c } Ahora cuando aparece una f. y de X a Z (1 a 3 suspensos). Estos cambios afectan a las siguientes producciones: .cambiar X::= fY por S::= fZ . 1 a y 1 d. Prácticas Introducción a JFLAP 7. Transformar las siguientes gramáticas regulares lineales derechas a su correspondiente Autómata Finito.Teoría de Autómatas y Lenguajes Formales. utilizando JFLAP. 1) S ::= aA S ::= bB B ::= bS B ::= λ A ::= aS A ::= λ 2) S ::= aS S ::= aA A ::= bB A ::= cC B ::= bS B ::= b C ::= cS C ::= λ 3) S ::= bS S ::= aA S ::= bB S ::= bC A ::= aS B ::= bC B ::= b C ::= cS C ::= c Solución: 1) Por pasos: Convert → Convert Right-Linear Grammar to FA 19 . Teoría de Autómatas y Lenguajes Formales. Prácticas Introducción a JFLAP Pulsar sucesivamente: Show all Done? Export 20 . Prácticas Introducción a JFLAP 2) 3) 21 .Teoría de Autómatas y Lenguajes Formales. Teoría de Autómatas y Lenguajes Formales. 2) 22 . Show All. What’s Left. Export. Edita los siguientes autómatas finitos en JFLAP y transfórmalos a sus correspondientes gramáticas. utilizando JFLAP. 1) 2) 3) Solución: 1) Por pasos: Convert → Convert to Grammar. Prácticas Introducción a JFLAP 8. Teoría de Autómatas y Lenguajes Formales. Prácticas Introducción a JFLAP 3) 23 . A].{S. Eliminar las reglas no generativas de la gramática G con JFLAP.A.P) P={ S ::= Ac | BaA A ::= B | a B ::= bB | λ } Solución: En JFLAP. opción Convert → Transform Grammar: a) Seleccionar (en la pantalla de la izquierda) los no terminales que generan lambda: [B.S. 24 .Teoría de Autómatas y Lenguajes Formales. Prácticas Introducción a JFLAP 9. G=({a. y desaparece de la gramática resultado. anota la producción no generativa que vas a eliminar y las producciones nuevas que vas añadiendo). B por B::= λ A por A ::= B y B::= λ b) Eliminar y añadir producciones: Eliminar: B ::= λ.c}.b. seleccionar en la pantalla de la derecha y pulsar Delete. En JFLAP. Anota los pasos de transformación y la gramática obtenida (para cada paso.B}. desde la que poder realizar nuevas operaciones (transformaciones. ir seleccionando la producción origen y pulsar Complete Selected. con A= λ) (por S::=BaA.Teoría de Autómatas y Lenguajes Formales. pulsar Export. con A= λ y B= λ) (por S::=BaA. con A= λ) (por S::=BaA. para obtener la nueva gramática sin producciones no generativas en una pantalla nueva. Prácticas Introducción a JFLAP Añadir: S::=c S::=a S::=Ba S::=aA B::=b (por S::=Ac. con B= λ) En JFLAP. etc. guardar. verificar la generación de palabras. con B= λ) (por B::=bB. para generar la nueva producción considerando A y/o B con valor λ: A continuación.): 25 . Prácticas Introducción a JFLAP 26 .Teoría de Autómatas y Lenguajes Formales. c}.Teoría de Autómatas y Lenguajes Formales.A. G=({a.b. como el terminal ‘c’ no son accesibles. c) En este grafo se determina que tanto el no terminal ‘C’. incluyendo las que son los que sí pueden generar palabras: dependencias (o transiciones) a mano.S. o pulsando en Do Step. porque también son prescindibles. Las producciones en las que intervienen ambos son las reglas superfluas. los nodos (no terminales).{S. opción Convert → Transform Grammar: a) Seleccionar no terminales que derivan en b) Se construye el grafo de dependencias entre terminales (producciones marcadas en azul).B}. Prácticas Introducción a JFLAP 10. Pulsando Export finalizamos el proceso: 27 .P) P={ S ::= aSB | b A ::= a | aA B ::= AaC | bA C ::= cCc} Solución: En JFLAP. Eliminar las reglas superfluas y símbolos inaccesibles usando JFLAP en la gramática G. por lo que se puede prescindir de ellos. Anota los pasos de transformación y la gramática obtenida.