Академический Документы
Профессиональный Документы
Культура Документы
Pasos previos
Lo primero es limpiar la gramtica de smbolos inaccesibles, reglas superfluas y reglas que no ayuden a generar palabras del lenguaje. La gramtica propuesta se encuentra en un estado bastante aceptable. No obstante, podemos ver que el axioma y el smbolo son equivalentes, por lo que podemos sustituir uno de los dos por el otro. Vamos a cambiar por , resultando la gramtica = { , , = , }. Nuevo conjunto de reglas de produccin : o = | o = () o = ; | o = | + | o = 0|1|2|3|4|5|6|7|8|9|
Pg. 1
Teora de Autmatas y Lenguajes Formales (curso 2013/14) Tambin se deben eliminar las reglas de redefinicin. Por ejemplo tenemos que = , pero tambin: = = = Estas redefiniciones introducen pasos superfluos a la hora de operar con la gramtica, y a veces introducen smbolos no necesarios, y adems produce ambigedad. Para eliminar las redefiniciones, se aplica una especie de regla de la cadena que elimina el paso intermedio. Es decir, si tenemos que = y que = (), entonces es evidente que = (). No es absolutamente necesario procesar la gramtica de esta forma, aunque en el caso del autmata por vaciado nos ahorrar trabajo durante la transformacin a Forma Normal de Greibach. Tras eliminar las redefiniciones, la gramtica resultante es = { , , = , }: Nuevo conjunto de reglas de produccin : o = () | + | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 o = ; | () | + | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 o = + | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | () o = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | () NOTA IMPORTANTE: en los ejemplos vamos a trabajar sobre la gramtica para apreciar las diferencias entre crear los autmatas partiendo de una gramtica completamente limpia y otra que no lo est.
Pg. 2
Teora de Autmatas y Lenguajes Formales (curso 2013/14) = | = + | | { = + | | + | = | = ; | { = ; | ; Nota: es importante ver que existen otras soluciones particulares. En concreto, en el caso de , es posible solucionar el problema sin introducir smbolos intermedios, simplemente sustituyendo la regla = ; por = ; . Algo parecido puede hacerse para , cambiando = + | por = + | . En este ejemplo, vamos a utilizar la segunda forma para evitar complicar ms el ejercicio En este punto, la gramtica es = { , , , }, donde: Reglas de produccin : o = | o = () o = ; | o = | + | o = 0|1|2|3|4|5|6|7|8|9|
Teora de Autmatas y Lenguajes Formales (curso 2013/14) = ; , , > , 3. G3 reglas cuyo consecuente comienza por un no-terminal que precede al antecedente segn la relacin de orden establecida = ; , , > , Para nuestro ejercicio: = () = 0 = 1 = 2 = 3 = 4 Grupo 1 = 5 = 6 = 7 = 8 = 9 = = = ; = Grupo 2 = = + = = Grupo 3 Nuestro prximo objetivo ser transformar todas las reglas a otras equivalentes que estn en el grupo 1. Para ello nos valdremos de la tcnica de sustituir el primer smbolo del consecuente por todas sus posibles expansiones.
Pg. 4
Teora de Autmatas y Lenguajes Formales (curso 2013/14) Y por lo tanto la regla = se eliminara del grupo 2, y se introducira = () en el grupo 1. El desarrollo completo para nuestro ejemplo es: Regla = hay que sustituir la o Reglas que tienen en el antecedente: = 0|1|2| |9 (estas 10 reglas estn en el grupo 1) = () o Sustituir: = 0 | 1 | 2 | | 9 = () o Eliminamos la regla = del grupo 2, e insertamos las 11 nuevas reglas en el grupo 1 Regla = + desarrollo similar al anterior (abreviado) o Introducimos en el grupo 1 las siguientes 11 reglas: = 0 + | 1 + | 2 + | | 9 + = () + Regla = desarrollo similar (abreviado) o Introducimos en el grupo 1 las siguientes 11 reglas: = 0 | 1 | 2 | | 9 = () Regla = sustituir la o Reglas que tienen en el antecedente. Incluye todas las generadas en los pasos anteriores: = () | () | () + = 0 | 1 | 2 | | 9 = 0 + | 1 + | 2 + | | 9 + = 0 | 1 | 2 | | 9 o Sustituir la de la regla = por todos los consecuentes de las reglas recopiladas: = () | () | () + = 0 | 1 | 2 | | 9 = 0 + | 1 + | 2 + | | 9 + = 0 | 1 | 2 | | 9 o Eliminamos la regla = e introducimos las 33 reglas del punto anterior. Si nos fijamos, lo que hemos hecho en este paso es eliminar una regla de redefinicin. Si hubisemos usado la gramtica limpia , = no existira puesto que las reglas con en el antecedente habran sido las siguientes desde el comienzo: = () | + | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Aun as habra que haber ejecutado el algoritmo para pasar las reglas = + | del grupo 2 al grupo 1. El resultado final es el mismo, y el trabajo a realizar es incluso superior si la gramtica est completamente limpia desde el principio. Continuando con nuestra transformacin de reglas del G2 al G1: Regla = sustituir la o Abreviando, sustituiramos = por = (), pero esta regla ya existe en virtud del paso anterior Regla = y = ; sustituir la o Lo mismo que hicimos en el paso anterior (eliminar redefinicin). o Reglas con en el antecedente: = () | () | () + = 0 | 1 | 2 | | 9 = 0 + | 1 + | 2 + | | 9 + Pg. 5
Teora de Autmatas y Lenguajes Formales (curso 2013/14) = 0 | 1 | 2 | | 9 o Sustituimos los consecuentes de estas 33 reglas de produccin en las dos reglas cuyo consecuente comienza por : = () | () | () + = 0 | 1 | 2 | | 9 = 0 + | 1 + | 2 + | | 9 + = 0 | 1 | 2 | | 9 = (); | () ; |() + ; = 0 ; | 1 ; | 2 ; | | 9 ; = 0 + ; | 1 + ; | 2 + ; | | 9 + ; = 0; | 1; | 2; | | 9; Y con esto ya tendramos todas las reglas en el grupo 1, quedando la gramtica 1 = { , , , 1 }, donde: = {, , , , } Reglas de produccin 1 : o = () | () | () + o = 0 | 1 | 2 | | 9 o = 0 + | 1 + | 2 + | | 9 + o = 0 | 1 | 2 | | 9 o = () | () | () + o = 0 | 1 | 2 | | 9 o = 0 + | 1 + | 2 + | | 9 + o = 0 | 1 | 2 | | 9 o = (); | () ; |() + ; o = 0 ; | 1 ; | 2 ; | | 9 ; o = 0 + ; | 1 + ; | 2 + ; | | 9 + ; o = 0; | 1; | 2; | | 9; o = () | () | () + o = 0 | 1 | 2 | | 9 o = 0 + | 1 + | 2 + | | 9 + o = 0 | 1 | 2 | | 9 Donde los smbolos y ya no aparecen en ninguna de las reglas y han sido, por tanto, eliminados. Tambin se puede apreciar que el smbolo y el son equivalentes, por lo que podramos eliminar todo lo referente a , y dejar como axioma. La } gramtica queda como 1 = { , , , 1 : = {, } Reglas de produccin 1 : o = () | () | () + o = 0 | 1 | 2 | | 9 o = 0 + | 1 + | 2 + | | 9 + o = 0 | 1 | 2 | | 9 o = () | () | () + o = 0 | 1 | 2 | | 9 o = 0 + | 1 + | 2 + | | 9 + o = 0 | 1 | 2 | | 9 o = (); | () ; |() + ; o = 0 ; | 1 ; | 2 ; | | 9 ; o = 0 + ; | 1 + ; | 2 + ; | | 9 + ; o = 0; | 1; | 2; | | 9;
Pasos finales
Pg. 6
Teora de Autmatas y Lenguajes Formales (curso 2013/14) Finalmente, slo queda efectuar unos cambios triviales para lograr que el consecuente de cada regla est formado por un nico terminal seguido de entre cero y n noterminales, es decir: = , , Por desgracia, esto implica cambiar casi todas las reglas de produccin de 1 . A continuacin mostramos la lista de las que son afectadas por este paso final: = () | () | () + = | | | | = + | + | + | | + = 0 | 1 | 2 | | 9 = () | () | () + = | | | | = + | + | + | | + = 0 | 1 | 2 | | 9 = (); | () ; |() + ; = ; | ; | ; | | ; = + ; | + ; | + ; | | + ; = ; | ; | ; | | ; En los consecuentes de muchas de estas reglas podemos ver smbolos terminales intercalados: "0 " el smbolo de resta no puede estar ah "5 + " lo mismo para el smbolo suma "(); " tanto la apertura de parntesis como el cierre y el punto y coma no deberan estar ah La forma ms fcil de transformar adecuadamente estas reglas encontrar grupos de smbolos de tipo GNF (es decir, un terminal de varios no terminales) que se repitan con frecuencia. En nuestro ejemplo es fcil detectar los siguientes: o para esta secuencia crearemos el smbolo (menmotcnico de esta) o Introducimos la regla = o + para esta secuencia, introduciremos el no-terminal (de sua) o Introducimos la regla = + o ; este grupo de smbolos ser sustituido por (de ola de lista) o Introducimos la regla =; o ( en la declaracin de funcin, siempre se repite esta cadena. Sustituimos por (de pertura) o Introducimos la regla = ( o ) despus de la declaracin aparece este smbolo. Sustituimos por (como contraposicin a la apertura ) o Como el cierre de parntesis no aparece seguido de un no-terminal, introducimos la regla = ) La gramtica quedara como: = { , , , }: = {, , , , , , } Reglas de produccin 1 : o = + o = o =; o = ( o = ) o = | | o = 0 | 1 | 2 | | 9 o = 0 | 1 | 2 | | 9 Pg. 7
Pg. 8
Teora de Autmatas y Lenguajes Formales (curso 2013/14) Por cada regla de la gramtica generaremos una transicin. Como estn en FNG, todas las reglas tienen la forma = mencionada anteriormente, los huecos se rellenarn de la siguiente forma: Primer hueco: antecedente Segundo hueco: terminal del consecuente, Tercer hueco: la cadena de no-terminales o En el caso de tener una regla = (sin no-terminales), = por lo que en el tercer hueco se escribir el smbolo lambda o Si se tienen varios no-terminales (digamos, una regla de tipo = ), insertar esta cadena es decir, en el tercer hueco escribiremos directamente , donde es el smbolo que queda en la cima (lo cual equivale a insertar de uno en uno los smbolos desde el final: primero , luego y por ltimo ). A continuacin se incluye una tabla con todas las reglas de la gramtica y sus transiciones equivalentes para el autmata: = + : (, "+", ) (, ) = : (, " ", ) (, ) =; : (, "; ", ) (, ) = ( : (, "(", ) (, ) = ) : (, ")", ) (, ) = | | : (, "", ) (, ) : (, "", ) (, ) : (, "", ) (, ) = 0 | 1 | 2 | | 9 : (, "0", ) (, ) : (, "1", ) (, ) : (, "2", ) (, ) : (, "3", ) (, ) : (, "4", ) (, ) : (, "5", ) (, ) : (, "6", ) (, ) : (, "7", ) (, ) : (, "8", ) (, ) : (, "9", ) (, ) = 0 | 1 | 2 | | 9 : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) = 0 | 1 | 2 | | 9 : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) = | | : (, "", ) (, ) : (, "", ) (, ) : (, "", ) (, ) = 0 | 1 | 2 | | 9 : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) = 0 | 1 | 2 | | 9 : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) = 0 | 1 | 2 | | 9 : (, "0", ) (, ) Pg. 9
= | |
= 0 | 1 | 2 | | 9
= 0 | 1 | 2 | | 9
= 0 | 1 | 2 | | 9
: (, "1", ) (, ) : (, "9", ) (, ) : (, "", ) (, ) : (, "", ) (, ) : (, "", ) (, ) : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, )
Pg. 10
Teora de Autmatas y Lenguajes Formales (curso 2013/14) una , indicando que ahora debera venir una nueva expresin. (4; (3 4; 5) + 3) (0) Tenemos tres opciones: (, "", ) (, ) (, "", ) (, ) (, "", ) (, ) Las tres insertan en la pila el dueto , que representa la apertura de parntesis, el contenido y el cierre, pero difieren en lo que sigue. En nuestro caso, despus de esta funcin nos encontraremos con (0), por lo que deberemos escoger (, "", ) (, ) Sacamos el smbolo , consumimos la e introducimos los 3 smbolos en la pila, quedando la en la cima (recordad: el smbolo en la cima es lo que esperamos leer a continuacin, que en nuestro caso es la pertura de parntesis) (4; (3 4; 5) + 3) (0) Aplicamos regla (, "(", ) (, ) 4; (3 4; 5) + 3) (0) Aplicamos regla (, "4", ) (, ), que quiere decir que consumimos un 4, y que a continuacin continuamos con la lista de parmetros de la funcin ; (3 4; 5) + 3) (0) (, "; ", ) (, ) sirve para consumir los puntos y coma. Aplicamos esta regla (3 4; 5) + 3) (0) A continuacin nos viene otra declaracin de funcin, seguida de una suma. Usamos (, "", ) (, ) (3 4; 5) + 3) (0) Apertura de parntesis. Aplicamos regla (, "(", ) (, ) 3 4; 5) + 3) (0) Comenzamos una resta, que vendr seguido de ms parmetros de la funcin. Aplicamos (, "3", ) (, ) 4; 5) + 3) (0) Reflexionemos sobre lo que tenemos en la pila en este momento. Leyendo de cima (derecha) a base (izquierda) nos encontramos que todava queda por procesar, en este orden: R Una resta que puede tener ms operaciones detrs o no C Ms parmetros de la funcin B Cierre de parntesis M Una suma, que puede tener ms operaciones detrs o no B Otro cierre de parntesis R Una resta, que puede tener ms operaciones detrs o no Con este ejemplo podemos ver cmo la pila sirve para que el autmata recuerde detalles sobre la estructura que debe tener la palabra, tiempo despus de haber encontrado la evidencia que la sugiri por ejemplo, que cuando abres un parntesis al final vas a tener que cerrarlo, independientemente de la cantidad de elementos que tengas entre medias. Seguimos. Aplicamos (, " ", ) (, ) 4; 5) + 3) (0) Aqu aplicaremos (, "4", ) (, ). De esa forma no introducimos ningn nuevo smbolo y por tanto damos por terminada la evaluacin de este parmetro ; 5) + 3) (0) La pila nos indica que tenemos ms parmetros. Consumimos el punto y coma con (, "; ", ) (, ) 5) + 3) (0) Pg. 11
El ltimo parmetro es nicamente un nmero, por lo que usamos (, , "5") (, ) ) + 3) (0) El smbolo en la pila indica que tenemos pendiente un cierre de parntesis. Si en este punto el siguiente smbolo de la entrada no fuese dicho cierre, el autmata fallara y la palabra no sera reconocida. Usamos (, ")", ) (, ) +3) (0) Aplicamos (, " + ", ) (, ) 3) (0) (, Mismo caso que hace unos pasos. Aplicamos "3", ) (, ) ) (0) Volvemos a consumir cierre de parntesis. El nmero y posicin de las en la pila indica el nmero exacto de cierres pendientes, as como su ocurrencia. Para una persona es posible ver la regla que hay que usar en cada caso, porque antes de decidir puede observar la entrada que resta por procesar. Para poder hacer esto de adecuadamente de forma automtica, se necesitara generar un autmata determinista. Este documento contiene ciertas consideraciones al respecto, en la seccin correspondiente. Aplicamos (, ")", ) (, ) (0) Resta. Usamos (, " ", ) (, ) para consumir el smbolo de resta e introducir en la pila el smbolo que indica que debemos reconocer una expresin (0) Aplicamos (, "", ) (, ) (0) Apertura de parntesis. Consumimos y aplicamos (, "(", ) (, ) 0) (, (, Acabamos con el nico parmetro mediante "0", ) ) ) Terminamos consumiendo el ltimo parntesis pendiente con (, ")", ) (, ) La entrada est totalmente consumida, y la pila est vaca. Por ello, la palabra ha sido correctamente reconocida. Se deja al lector procesar las siguientes entradas: ( (((5))))) Incorrecta. Sobra el ltimo cierre de parntesis 5 + ((2)) Incorrecta. La gramtica no reconoce una apertura de parntesis que no est precedida por la letra
Pg. 13
Teora de Autmatas y Lenguajes Formales (curso 2013/14) Consumir un smbolo terminal de la entrada, que es el primer componente de la expansin del elemento que haba en la pila. Introducir en la pila los smbolos que describen lo que nos queda por leer del smbolo inicial. En los autmatas por estado final, sin embargo, operaremos de forma distinta. Se diferencian dos tipos de accin diferentes: Expandir el smbolo no-terminal que se encuentra en la cima de la pila. Consumir un smbolo terminal de la entrada cuando se corresponde con el que hay en la cima de la pila. Para cada regla de la gramtica, se genera una regla de transicin del autmata de las que se incluyen en el primer grupo, de la siguiente forma: Vamos a rellenar el molde ( , , ) ( , ) Dada una regla = ; , es decir, es una cadena de entre 0 y N smbolos tanto terminales como no terminales. Se genera la regla ( , , ) ( , ), que quiere decir que NO consumimos smbolos en la cadena de entrada, y sustituimos la cima de la pila por otro conjunto de smbolos, equivalentes desarrollar o expandir la cima. El otro tipo de reglas se genera a partir del conjunto de elementos terminales: El molde es, ahora, ( , , ) ( , ) Por cada smbolo terminal , Se generar la regla ( , "", ) ( , ), que quiere decir que si en la cima de la pila tenemos un terminal, y el siguiente elemento de la entrada coincide con l, consumimos ambos. Por lo tanto, para nuestra gramtica, el conjunto de reglas de transicin ser:
Pg. 14
Elemento regla = = = () = ; =
que
origina
la
de de
= = + = = 0|1|2|3|4|5|6|7|8|9
( , , ) ( , ) ( , "", ) ( , ) ( , "(", () ( , ) ( , ")", )) ( , ) ( , "+", +) ( , ) ( , " ", ) ( , ) ( , "0", 0) ( , ) ( , "1", 1) ( , ) ( , "2", 2) ( , ) ( , "3", 3) ( , ) ( , "4", 4) ( , ) ( , "5", 5) ( , ) ( , "6", 6) ( , ) ( , "7", 7) ( , ) ( , "8", 8) ( , ) ( , "9", 9) ( , ) ( , ";", ; ) ( , )
Pg. 15
P E E E N 5 f ( L P E N 4 f ( L P E E N 3
Ilustracin 1 rbol de derivacin para la expresin + (; ( ; ) + ) () , usando la gramtica
N F L ; f ) P E E N F L ; ) P E N N 4 5 + N 3 (
N F L P E N 0 )
Pg. 16
Teora de Autmatas y Lenguajes Formales (curso 2013/14) La siguiente tabla refleja el proceso paso a paso, donde alternativamente se muestra el estado del autmata, se explica lo que se hace, y se vuelve a mostrar el estado resultante. Entrada restante Estad Pila (cima a la derecha) o 5 + (4; (3 4; 5) + 3) (0) Al inicio, siempre habr que aplicar la regla ( , , ) ( , ) 5 + (4; (3 4; 5) + 3) (0) Como regla general: el proceso de reconocimiento en un AP por estado final viene dirigido a efectos prcticos por el elemento en la cima de la pila. Como aqu es el no-terminal , ejecutaremos una regla de expansin, que sustituye el smbolo por el consecuente de una de las reglas que lo tiene en el antecedente. Si hacemos trampa y miramos la expresin completa (o mejor an, el rbol de derivacin), veremos que tenemos que reconocer una xpresin, por lo que habr que usar la regla de transicin originada por = , es decir, ( , , ) ( , ) 5 + (4; (3 4; 5) + 3) (0) El paso adecuado es ahora aplicar ( , , ) ( , ), originada por la regla de la gramtica = 5 + (4; (3 4; 5) + 3) (0) La se corresponde con la suma 5 + (4; (3 4; 5) + 3), por lo que tendremos que aplicar ( , , ) ( , + ) que sale de la regla = + de la gramtica 5 + (4; (3 4; 5) + 3) (0) + Expandimos la , que se corresponde con el nmero 5, usando ( , , ) ( , ) que sale de la regla = de la gramtica 5 + (4; (3 4; 5) + 3) (0) + Y a continuacin ( , , ) ( , 5) de = 5 5 + (4; (3 4; 5) + 3) (0) + 5
En este punto, si nos fijamos en la equivalencia entre las reglas de transicin aplicadas y su equivalente en reglas de la gramtica, se ve que hemos hecho algo similar a, partiendo del axioma P, aplicar las siguientes transformaciones: = = (tenemos ) = + (tenemos + ) = (nos deja + ) = 5 (resultado actual: 5 + ) O lo que es lo mismo, el siguiente rbol parcial de derivacin (parte del rbol completo de la figura anterior):
Pg. 17
P E E E N 5
Que como se puede observar, se corresponde con el contenido de la pila del autmata. Ahora, podemos aplicar una regla de reduccin, puesto que el smbolo en la cima de la pila es un terminal. Aplicamos regla ( , "5", 5) ( , ), con lo que consumimos el primer smbolo de la cadena de entrada +(4; (3 4; 5) + 3) (0) + Hacemos lo propio con el smbolo de suma, aplicando ( , " + ", +) ( , ) (4; (3 4; 5) + 3) (0) Y en este punto volvemos a expandir no-terminales. Ejecutamos dos pasos de golpe, aplicando ( , , ) ( , ) y luego ( , , ) ( , ()) (que salen de las reglas de la gramtica = y = ()) (4; (3 4; 5) + 3) (0) ) ( Y consumimos los dos terminales aplicando de forma secuencial ( , "", ) ( , ) y ( , "(", () ( , ) 4; (3 4; 5) + 3) (0) ) El smbolo se corresponde con la lista completa de parmetros de la funcin, por lo que expandimos usando ( , , ) ( , ; ) 4; (3 4; 5) + 3) (0) ) ; Y como slo son dos parmetros, podemos ejecutar ahora ( , , ) ( , ) 4; (3 4; 5) + 3) (0) ) ; La primera P se corresponde con el 4. Debemos ejecutar tres acciones consecutivas, para lograr la transformacin 4 (como se ve en el rbol de derivacin). En concreto son ( , , ) ( , ), ( , , ) ( , ), ( , , ) ( , 4) 4; (3 4; 5) + 3) (0) ) ; 4 el resto del ejercicio se deja al lector. Como se puede apreciar, aunque la construccin del autmata es ms sencilla y el nmero de reglas mucho ms reducido, su empleo es ms engorroso por la cantidad de pasos requeridos.
Conclusiones
Pg. 18
Teora de Autmatas y Lenguajes Formales (curso 2013/14) Los autmatas generados tienen varias similitudes, pero en esencia son muy distintos. Como hemos podido comprobar, los autmatas por vaciado requieren un mayor esfuerzo de generacin, causado por tener que transformar la gramtica a GNF. Los autmatas de estado final, aunque son ms fciles de generar, suelen necesitar una pila de mayor tamao y requieren de ms pasos para procesar la entrada completa. Aunque esto pueda parecer una tontera, pensemos en una aplicacin real donde tamao de pila es memoria consumida y nmero de pasos es uso de CPU. Por ejemplo, si estamos usando un compilador para tareas muy pesadas, la seleccin de una tcnica adecuada puede significar la diferencia entre usar 200 MB o 4 GB de memoria RAM, y tardar 2 minutos en lugar de media hora.
Pg. 19