Vous êtes sur la page 1sur 19

Teora de Autmatas y Lenguajes Formales (curso 2011/12)

Ejercicios de Autmatas a Pila


Complemento de la clase de la semana 14-15 de noviembre

Introduccin
En este ejercicio vamos a trabajar con el lenguaje que describe expresiones matemticas con enteros y llamadas a funcin (que supuestamente devuelven nmeros enteros). Algunos ejemplos de sentencia contenida en este lenguaje son: (4; 5 2) 3 + 5; 2 (1); (0)

8 Este lenguaje puede ser descrito mediante una gramtica de nivel 2 en la jerarqua de Chomsky gramticas independientes del contextocomo por ejemplo = { , , , }, donde: = {, (, ), +, , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ; }, diecisis smbolos: la letra f, apertura y cierre de parntesis, operadores ms y menos, dgitos del 0 al 9 y el separador punto y coma. = {, , , , , } ntese que, a excepcin del axioma , los smbolos son mnemotcnicos para uncin, xpresin, ista (de parmetros), armetro y mero = Reglas de produccin : o = | o = () o = ; | o = | o = | + | o = 0|1|2|3|4|5|6|7|8|9| (nota: a fin de cuentas, una funcin produce un nmero) Nuestro objetivo va a ser generar sendos Autmatas a Pila por vaciado y por estado final que reconozcan el lenguaje descrito por la gramtica.

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 = ; | Pg. 1

Teora de Autmatas y Lenguajes Formales (curso 2011/12) o = | + | o = 0|1|2|3|4|5|6|7|8|9| 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.

Autmata a Pila por vaciado


Para generar un autmata a pila por vaciado (APV), es necesario en primer lugar transformar la gramtica a Forma Normal de Greibach (GNF). El proceso para obtener el APV a partir de la gramtica GNF es sencillo.

Forma Normal de Greibach


El proceso para transformar una gramtica G2 a GNF consta de los pasos descritos a continuacin, que deben ser ejecutados en este orden: La recursividad a izquierdas describe reglas del tipo = . En nuestra gramtica se da en = ; = + = Para eliminar la recursividad, se suele hacer uso de un smbolo no-terminal intermedio. El ejemplo que se os proporciona en la teora es parecido a: = 1 | 2 | 1 | 2 Como el smbolo conflictivo es , debemos tomar todas las reglas en la que aparece como precedente para ver el sublenguaje que produce. Podemos observar que genera cadenas encabezadas por 1 o 2 seguidas de un chorro de betas. Se propone eliminar esta recursin a izquierdas de la siguiente forma: = 1 | 2 | 1 | 2 = 1 | 2 | 1 | 2

Eliminar recursividad a izquierdas

Pg. 2

Teora de Autmatas y Lenguajes Formales (curso 2011/12) En nuestro ejemplo, aplicar la misma frmula quedara como: = | = + | | = + | | + | = | = ; | = ; | ; 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| El siguiente paso es establecer relacin de orden parcial entre smbolos no-terminales, donde un no-terminal es mayor que otro ( > ) cuando existe una regla del tipo = . El hecho de que el orden sea parcial indica que dos no-terminales cualesquiera de la gramtica no tienen que estar necesariamente relacionados el uno con el otro, es decir, puede darse que , ( ) ( ) ( > ) ( > ) Un no-terminal debe ser mayor que otro cuando una regla con en el antecedente tiene un consecuente que comienza por , es decir, = ; , , . En nuestra gramtica, las reglas que fuerzan estas relaciones son (resaltadas): = | = () = ; | = | + | = 0|1|2|3|4|5|6|7|8|9 = Por lo que el orden debera respetar: > > > > > Un ejemplo de orden vlido es {, , , , } de mayor a menor prioridad. Puede suceder que dos smbolos deban ser mayores a la vez entre ellos, porque tenemos bucles en la gramtica de tipo: = y = . En ese caso, decidir un orden cualquiera para los smbolos implicados, intentando violar la regla el menor nmero de veces.

Establecer relacin de orden

Dividir reglas en grupos


Distribuir las reglas de produccin en 3 grupos: 1. G1 reglas que comienzan por un smbolo terminal = ; , , Pg. 3

Teora de Autmatas y Lenguajes Formales (curso 2011/12) 2. G2 reglas cuyo consecuente comienza por un no-terminal precedido por el antecedente segn la relacin de orden establecida = ; , , > , 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.

Transformar reglas G3G2 y G2G1


Es relativamente sencillo ver que el grupo 3 contiene reglas nicamente cuando no es posible establecer la relacin de orden sin contradicciones respecto de lo que indican las reglas de produccin. A pesar de que no tenemos reglas en el grupo 3, su eliminacin sigue el mismo procedimiento que vamos a usar para pasar las de tipo 2 al grupo 1: Paso preliminar: ordenar las reglas del grupo 2 segn el orden de su antecedente (de menor a mayor). = = = + = Grupo 2 ordenado = = = = ; A continuacin, por cada regla (ejemplo con = ): Paso 1. Tomar el primer smbolo del consecuente () Paso 2. Tomar todas las reglas que tienen en el antecedente ( = ())

Pg. 4

Teora de Autmatas y Lenguajes Formales (curso 2011/12) Paso 3. Sustituir los consecuentes de las reglas del paso anterior en el 1er smbolo del consecuente de la regla del paso 2 ( = = ()) 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: = () | () | () + Pg. 5

Teora de Autmatas y Lenguajes Formales (curso 2011/12) = 0 | 1 | 2 | | 9 = 0 + | 1 + | 2 + | | 9 + = 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 2011/12) 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

Teora de Autmatas y Lenguajes Formales (curso 2011/12) = 0 | 1 | 2 | | 9 = | | = 0 | 1 | 2 | | 9 = 0 | 1 | 2 | | 9 = 0 | 1 | 2 | | 9 = | | = 0 | 1 | 2 | | 9 = 0 | 1 | 2 | | 9 = 0 | 1 | 2 | | 9

o o o o o o o o o

Definicin del autmata

Una vez tenemos la gramtica transformada a GNF, podemos empezar con la generacin propiamente dicha del autmata a pila por vaciado. Recordemos que un autmata a pila se define como: = , , , 0 , 0 , , Donde: es el conjunto de smbolos terminales es el conjunto de smbolos que pueden meterse en la pila Q es el conjunto de estados del autmata A0 es el smbolo inicial que tiene el autmata en la pila 0 es el estado inicial describe las reglas de transicin del autmata es el conjunto de estados finales Un autmata por vaciado acepta una palabra cuando la pila est vaca al terminar. Por lo tanto, no tiene ningn estado final (dado que, de lo contrario, si se acabase de procesar una palabra estando el autmata en el estado final, se aceptara la palabra aunque la pila no estuviese vaca). El algoritmo que usaremos, adems, requiere de nicamente un estado que llamaremos , por lo que cuando generemos un SIEMPRE se dar que: = {} slo un estado 0 = como slo hay un estado, ese ser el estado inicial = no hay estados finales El resto de elemento depender de la gramtica con la que estemos trabajando: Los smbolos terminales son los mismos que los de la gramtica: = o En nuestro caso = {, (, ), +, , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ; } Los smbolos que pueden ir en la pila son los no-terminales de la gramtica en
GNF: = o En nuestro caso = {, , , , , , } El smbolo inicial de la pila es el axioma: 0 = o En nuestro caso 0 = La funcin de transicin del autmata se saca a partir de la gramtica, una transicin por cada regla de produccin. Las reglas de transicin tienen la siguiente notacin: : , , ( , ), , , Que quiere decir: Si estando el autmata en el estado y teniendo en la cima de la pila el smbolo me encuentro con un al leer la palabra de entrada, entonces [saco de la pila el smbolo ] transito al estado y meto en la pila la cadena de smbolos Como el autmata tiene un nico estado, todas las reglas van a tener la siguiente forma: ) (, ) : (, ,

Pg. 8

Teora de Autmatas y Lenguajes Formales (curso 2011/12) 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

Teora de Autmatas y Lenguajes Formales (curso 2011/12) : (, "1", ) (, ) : (, "9", ) (, ) : (, "", ) (, ) : (, "", ) (, ) : (, "", ) (, ) : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, ) : (, "0", ) (, ) : (, "1", ) (, ) : (, "9", ) (, )

= | |

= 0 | 1 | 2 | | 9

= 0 | 1 | 2 | | 9 = 0 | 1 | 2 | | 9

El ejemplo con el que vamos a trabajar es una sentencia vlida: 5 + (4; (3 4; 5) + 3) (0) 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) El autmata comienza con el smbolo en la pila, lo cual significa que tiene que leer una xpresin (si recordamos el mnemotcnico). Los APs generados usando el algoritmo descrito arriba tienen el problema de que pueden ser no-deterministas. Aqu podemos ver que podramos seleccionar varias reglas como: (, "5", ) (, ) (, "5", ) (, ) (, "5", ) (, ) La diferencia estriba en qu es lo que introducimos en la pila. El significado de introducir algo en la pila es que la cosa que estbamos empezando a leer con esta regla todava no se ha terminado. Cada smbolo en la pila es una parte independiente de lo que tendremos que leer a continuacin. La primera regla significa que la expresin actual comenzaba por un 5 que est seguido de una esta, en el segundo se esperar continuar con una sua y en el tercero no se introducir smbolo indicando que hemos terminado con la expresin inicial. En este caso, tendramos que elegir la regla (, "5", ) (, ), puesto que lo que vendr a continuacin es una suma. Sacamos el smbolo de la pila, consumimos el 5 encontrado a la entrada, e introducimos el smbolo en la pila. +(4; (3 4; 5) + 3) (0) Ahora la nica regla que aplica es (, " + ", ) (, ). Sacamos la , consumimos el smbolo ms de la entrada e introducimos de nuevo Pg. 10

Ejemplo de reconocimiento de palabras usando el autmata

Teora de Autmatas y Lenguajes Formales (curso 2011/12) 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

Teora de Autmatas y Lenguajes Formales (curso 2011/12) 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) (, "3", ) (, ) Mismo caso que hace unos pasos. Aplicamos ) (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

En este caso podemos generar directamente el autmata a partir de la gramtica inicial. Vamos a trabajar sobre la gramtica , donde no se haban eliminado las reglas de redefinicin. De esta forma se reduce el nmero de reglas del autmata, como veremos a continuacin, aunque a la hora de trabajar con el autmata pueden requerirse acciones adicionales. La gramtica es = { , , = , } = {, , , , } Pg. 12

Autmata a pila por estado final

Teora de Autmatas y Lenguajes Formales (curso 2011/12) : = | = () = ; | = | + | = 0|1|2|3|4|5|6|7|8|9|

o o o o o

Definicin del autmata

Si se ha consumido toda la entrada y en la pila encontramos el smbolo Z, indica que hemos alcanzado el final de lo que el autmata espera leer 3. Proceso: estas reglas seran las mismas que implementamos para el autmata por vaciado. Explicamos a continuacin su funcionamiento de forma intuitiva, y proporcionamos las reglas para su generacin. Si nos acordamos, en un AP por vaciado cada una de las reglas cumpla las siguientes funciones: Sacar de la cima de la pila el smbolo que nos indica qu es lo que esperamos leer (posiblemente un conjunto de varios smbolos). o

El resto de elemento depender, una vez ms, de la gramtica con la que estemos trabajando: Igual que en el , los smbolos terminales son los mismos que los de la gramtica: = o En nuestro caso = {, (, ), +, , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ; } Los smbolos que pueden ir en la pila combinan los terminales, los no terminales, y un smbolo adicional que nos inventamos para marcar el fondo de la pila: = ; , o = {, , , , , , , , (, ), +, , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ; , } El smbolo inicial de la pila es el smbolo inventado: 0 = En este tipo de autmata tenemos tres categoras de reglas: 1. Inicializacin: es una nica regla, siempre la misma, que no consume elementos de la entrada, aade a la cima de la pila el axioma de la gramtica y transita al estado de reconocimiento. o : ( , , ) ( , ) o Ntese que el smbolo se mantiene en la base de la pila. Lo necesitaremos para saber cundo transitar al estado final. 2. Terminacin: una nica regla con la que pasaremos al estado final cuando hayamos terminado de procesar la entrada completa o : , , ( , )

En los autmatas por estado final algunos elementos se definen distinto que en el caso anterior. Recordemos la definicin genrica de un autmata a pila: = , , , 0 , 0 , , En este caso, una palabra se acepta cuando el autmata est en un estado final al terminar de procesar la entrada (independientemente de lo que quede en la pila). Por ello, vamos a comenzar definiendo tres estados: el inicial, el final, y el de reconocimiento. Este ltimo es el equivalente al nico que usbamos en el AP por vaciado, y representa que estamos todava procesando la entrada. Por lo tanto, cuando generemos un SIEMPRE se dar que: = , , estados inicial, de procesamiento y final 0 = el inicial = un nico estado final

Pg. 13

Teora de Autmatas y Lenguajes Formales (curso 2011/12) 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

Teora de Autmatas y Lenguajes Formales (curso 2011/12)

Tipo Inicial Final

Elemento regla = = = = () = ; =

que

origina

la

Regla(s) generada(s) ( , , ) ( , ) , , ( , ) , , ( , ) , , ( , )

, , ( , )

, , ( , ()) , , ( , ; ) , , ( , ) , , , 0 , , , 1 , , ( , 9) , , ( , + ) , , , , , ( , )

Reglas procesamiento expansin

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 ( , ) , ";", ; ( , )

Reglas procesamiento reduccin

de de

0 1 2 3 4 5 6 7 8 9 ;

, "+", + ( , )

, " ", ( , )

Ejemplo de reconocimiento de palabras usando el autmata

Trabajaremos sobre la misma sentencia usada anteriormente: 5 + (4; (3 4; 5) + 3) (0) Antes de mostrar la tabla, es recomendable fijarse en el rbol de derivacin de la expresin (mostrado a continuacin). Los autmatas a pila por estado final van generando el rbol de derivacin. En cada instante de tiempo, la pila almacena las hojas del rbol disponible, siendo la cima el elemento de ms a la izquierda esta afirmacin se explicar ms adelante.

Pg. 15

Teora de Autmatas y Lenguajes Formales (curso 2011/12)

P E E E N 5 f ( L P E N 4 f ( L P E E N 3 N 4 E N F L ; ) P E N 5 + N F L ; f ) P E + N 3 ( N F L P E N 0 )

Ilustracin 1 rbol de derivacin para la expresin + (; ( ; ) + ) () , usando la gramtica

Pg. 16

Teora de Autmatas y Lenguajes Formales (curso 2011/12) 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

Teora de Autmatas y Lenguajes Formales (curso 2011/12)

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 2011/12) 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.

Consideraciones sobre los autmatas


Las tcnicas aqu explicadas generan autmatas no deterministas, por lo que no siempre ser posible trasladarlas de forma evidente a una implementacin software. Sera mucho mejor disponer de un autmata determinista capaz de hacer lo mismo. Aunque esto es posible en algunos casos, no todas las gramticas L2 pueden reconocerse con un autmata a pila determinista, sino nicamente un subconjunto de ellas. Esto es especialmente importante, puesto que la inmensa mayora de lenguajes de programacin pueden describirse mediante una gramtica L2 y por lo tanto los compiladores deben incluir una herramienta capaz de reconocerla. No obstante, para crear un compilador eficiente, es recomendable que la gramtica sea de las que puede procesarse con un AP determinista. Los detalles se estudian en la asignatura de Procesadores del Lenguaje, optativa de tercer curso del Grado de Ingeniera Informtica.

Pg. 19

Vous aimerez peut-être aussi