Compiladores - Automatas Finitos

14
UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES Autómatas Finitos Gustavo Alexander Alvarez Alvarez

description

introducción al tema de Autómatas Finitos entre los cuales tenemos 2 tipos, los AFD y los AFND.

Transcript of Compiladores - Automatas Finitos

Page 1: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO

COMPILADORES Autómatas Finitos

Gustavo Alexander Alvarez Alvarez

Page 2: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

2

AUTÓMATAS FINITOS

1. INTRODUCCIÓN: Los autómatas son mecanismos formales para las gramáticas y lenguajes. En 1936 Turing desarrollo lo que se puede llamar primer autómata: la “máquina de Turing”. Podría visualizársele como un tocacintas sofisticado con una cinta arbitrariamente infinita. La cinta se marca en secciones de tal manera que en cada sección se puede almacenar un bit de información. La cabeza es un mecanismo que se mueve a través de la cinta con la capacidad de leer o escribir sobre está. Cuenta también con un mecanismo de control colocado en la cabeza de la cinta, que informa qué acciones tomar dependiendo de la lectura de cada bit de información. Sus características y conducta de la máquina de Turing la calificaron como lo que se le llegó a conocer una Máquina de Estados Finitos (MEF), también se le podría concebir como un Autómata Finito (AF). Este artefacto es asombrosamente simple y asume que nuestro universo es granular; es decir, que se mueve en pasos discretos de tiempo aun cuando éstos pudieran ser imaginados tan pequeños como se quisiera, incluso en miles de millonésimas de segundo. Durante cualquiera de esas instancias, un AF se encontraría en un cierto estado describible. La descripción podría ser extremadamente intrincada o sumamente simple; la única limitación consistía en que debería encontrarse necesariamente dentro de un conjunto finito de estados posibles (Esté número podrá ser muy elevado, pero no infinito). Entre el instante inicial y el siguiente paso de tiempo discreto, el AF, usando cualquier tipo de información sensorial que cualquier máquina particular pudiera tener disponible, tomaría nota del mundo externo. Acto seguido, refiriéndose a la 'tabla de reglas' que controla la conducta, el AF consideraría tanto la información sensorial como su propio estado interno para determinar tanto la conducta que la máquina debería exhibir como el estado interno que debería asumir en ese instante. Turing probó que una máquina tal, la máquina universal de Turing, sería también una computadora universal (Se realizó una prueba matemática específica que determinó esta cualidad). Esto significa que, dado el tiempo suficiente, podría emular cualquier máquina cuya conducta fuera susceptible de ser descrita de esta suerte. Turing y su colaborador, el filósofo Alonzo Church, presentaron posteriormente la ‘Hipótesis Física Church-Turing’, donde planteaban que tal máquina podría duplicar no sólo las funciones de las máquinas matemáticas, sino también las funciones de la naturaleza. Como en el campo de la lógica se comprobó que todas las computadoras digitales eran el equivalente de la máquina de Turing, se les calificó entonces como computadoras universales.

2. AUTÓMATAS FINITOS: Un autómata finito o máquina de estado finito es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. En los trabajos anteriores quedó establecido, que un analizador léxico reconocía tokens, mediante un monitoreo de izquierda a derecha del programa fuente. Para hacer esta tarea

Page 3: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

3

menos difícil, utilizábamos las expresiones regulares para la especificación de los patrones o reglas que cumplen los tokens. Los autómatas finitos son las herramientas empleadas como reconocedores de tokens.

Figura 1. a) Análisis Léxico b) Interior del Analizador Léxico

Un autómata finito es capaz de reconocer un conjunto regular, es decir, un conjunto de cadenas denotado por cualquier expresión regular. Recordemos que una expresión regular denota a un lenguaje regular. Un autómata finito es un reconocedor para un lenguaje, su programación no es una tarea compleja, su entrada es una cadena x y responde “si” si x es una sentencia del lenguaje, “no” de otra manera.

Figura 2. Entrada y Salida de un autómata finito

2.1 CLASIFICACIÓN: Formalmente, un autómata finito (AF) puede ser descrito como una 5-tupla

0, , , ,Q S F .

Existen tres tipos de autómatas finitos:

A. Autómata Finito Determinístico Es un modelo matemático que consiste de: Un conjunto de estados, denominado S. Un conjunto (alfabeto) de símbolos de entrada, denominado ∑. Una función de transición move que mapea un par P ( s , a ) a un estado t.

s y t son estados contenidos en S, a es un símbolo de entrada. Un estado de inicio, denotado por s0. Un conjunto de estados de aceptación (finales), denotado por F.

Page 4: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

4

Además, un autómata finito determinístico AFD debe cumplir con las siguientes características: a) No hay transiciones etiquetadas por Î. b) Para cada estado s y un símbolo de entrada a, existe a lo más un arco etiquetado

por a saliendo de s.

Ejemplo: El AFD que reconoce al token “id” identificador en Pascal es mostrado en la FIG. 3. La definición regular es:

Figura 3. AFD para el token “id” en Pascal

Un autómata es una representación gráfica que muestra el proceso de reconocimiento de una cadena de entrada. La simbología utilizada es simple mostrada en la Fig 4:

Figura 4. Simbología para Autómatas

De acuerdo a la notación anterior, obtendremos los componentes del AFD: El conjunto de estados del autómata AFD es : S = { 0 , 1 } El conjunto o alfabeto de símbolos de entrada, se obtiene de los arcos a del AFD.

Es decir el alfabeto ∑ es el conjunto de las letras mayúsculas y minúsculas, unidas a los dígitos y el símbolo de subrayado ( _ ).

Page 5: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

5

La función de transición move es realmente una tabla de transición, donde los renglones son los estados y las columnas son símbolos de entrada.

La construcción de la tabla de transición -función move- se inicia identificando los estados que tienen al menos un arco que “salga” de ellos. Para nuestro ejemplo el estado 0 (cero) tiene un arco etiquetado por Letra que “sale” de él, y el estado 1 tiene 3 arcos: Letra, Dig y Sub. Los estados que tengan esta característica son añadidos como los renglones en la tabla. En las columnas debemos ubicar a todos los posibles símbolos del alfabeto que pueden ocurrir, al efectuar una lectura en la entrada (cadena). En nuestro caso son: Letra, Dígito y Subrayado.

Las características que además debe cumplir el AFD son: a) No arcos Î. Si se cumple, dado que no existe un solo arco etiquetado Î con en el

diagrama del AFD. b) De los estados 0 y 1, se observan sólo arcos etiquetados en forma única. Nunca

se repite una etiqueta para dos o más arcos saliendo de un estado.

B. Autómata Finito No Determinístico

Un autómata finito no determinístico es un modelo matemático que consiste de: Un conjunto de estados, S. Un conjunto de símbolos de entrada, ∑ (alfabeto). Una función de transición denominada move, que mapea pares, p (s, a) hacia un

conjunto de estados. s es un estado y a es un símbolo en la entrada. Un estado de inicio denotado por s0. Un conjunto de estados de aceptación, denotado por F.

Además, un AFND tiene como característica que lo diferencia de un AFD, permitir el uso de arcos etiquetados por el símbolo Îcomo se muestra en la Fig 4.

Figura 4. Autómata para un AFND

Page 6: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

6

La característica de donde toma el nombre un AFND, consiste en que su función de transición move, mapea los pares p ( s , a ) hacia un conjunto de estados a diferencia q un AFD mapea los pares p(s,a) a un sólo estado. ¿ Qué significa lo anterior ?. Significa que un AFND que se encuentra en un estado s y para un símbolo en la entrada a, pueden existir más de un arcos etiquetados con el símbolo a saliendo del estado s, Fig 5. Por lo tanto no está determinada la transición.

Figura 5. AFND para a+b+

En la Fig 5 se muestra el AFND para la expresión regular a b . La función move (1, a) se define como:

move ( 1 , a ) = { 1 , 2 } y move ( 2 , b ) = { 2 , 3 }

Los componentes del AFND de la Fig .5 son: El conjunto de estados S = {1, 2, 3} Estado inicial s0 = 1 y sólo hay un estado de aceptación F = { 3 }. El alfabeto de entrada es ∑ = {a, b}. S, s0, F y ∑ son obtenidos directamente del diagrama que representa el AFND. La tabla de transición es:

Page 7: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

7

3. EQUIVALENCIA ENTRE UN AFND Y UN AFD La equivalencia entre autómatas AFD y AFND, siempre es posible, y esto significa que siempre se podrá dado uno de ellos obtener su equivalente. Por lo tanto, se podrá asegurar que ambos, AFD y AFND reconocerán el mismo lenguaje.

Conversión de AFD a AFND: Es fácil ver que los AFD son una particularización de los AFND, ya que: por un lado no existirán transiciones-λ y por otro lado, las transiciones siempre producirán un estado determinado. Así tendremos que:

No existirán transiciones-λ por lo tanto: f” (q, λ) = ф. | f (p,a)| = 1 ; Siempre se transita a un solo estado

Conversión de AFND a AFD: Vamos a construir un AFD partiendo de un AFND, donde:

AFND = ( ∑ , Q, q0, F, f )

AFD = ( ∑ , Q ,́ q0 ,́ F ,́ f ́)

Donde para la conversión se tendrá en cuenta:

Q ́= P(Q) q0 ́= f” (q0, λ); El nuevo estado inicial, se obtiene en forma directa de T*. F ́= { c / c ε Q ́ Si existe q ε c y q ε F } Un estado perteneciente al nuevo conjunto de

estados será de finalización o aceptación, solo si esta constituido por estados que eran de aceptación en el autómata en el AFND de origen.

f´(c,a) = { c / c ε Q ́= ∪ q c f ” (q,a) Lo que se hará primero es calcular q0 ́ y luego se irán calculando los demás estados Q´ obtenidos a partir de P(Q) a medida que van presentando en el proceso de conversión.

Ejemplo:

Dado: AFND1 = ( { 0 , 1 }, { p, q , r, s , t }, p, { r }, f ) , donde:

Page 8: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

8

Obtendremos ahora el AFD equivalente.

T = {(p,t) , (t,s) , (p,p) , (q,q) , (r,r) , (s,s) , (t,t) } T* = {(p,t) , (p,s) , (p,p) , (q,q) , (r,r) , (s,s) , (t,t), (t,s) }

Nuevo estado inicial c0 = f “ ( p, ) ; lo obtendremos de T* c0 = { t , s , p}

Para el estado 0 t C :

"( , ) { , } de *"( , ,0) "( ,0)

( , ) de funcion { , , , }"( ,0) { , }

"( , ,0, ) { , , , } de *

f t t s Tf t f t

p r f t s p rf s p r

f t t s p r T

Para el estado 0 s C :

"( , ) { } de *

"( , ,0) "( ,0) { , } ( , ) de funcion { , , , }

"( , ,0, ) { , , , } de *

f s s T

f s f s p r p r f t s p r

f s t s p r T

Para el estado t ε c0 :

"( , ) { , , } de *"( , ,0) "( ,0)

"( ,0) { , } ( , ) de funcion { , , , }"( ,0) { }

"( , ,0, ) { , , , } de *

f p t s p Tf p f t

f s p r p r f t s p rf p r

f p t s p r T

De esta manera:

0'( ,0) { ( , )}f C ⓐ,ⓑ ⓒ

Por lo tanto: 0 1'( ,0) { , , , }f C t s p r C

De igual manera calcularemos a c0 pero ahora con entrada 1, pero simplificando la representación de los pasos y nos queda:

Page 9: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

9

Ahora debemos para cada uno de los estados que vaya apareciendo, como se va comportando ante ambas entradas. Tomamos ahora el estado 1 { , , , }C t s p r

Ahora tomamos c2 = { t, s}, y vemos como se comportará la función de transición f ´ ante nuevas entradas 0 y 1, respectivamente.

Page 10: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

10

Vemos ahora que no se ha creado ningún nuevo estado, por lo tanto hemos terminado el proceso de construcción de la función f ́y de el conjunto Q .́

Nuevo estado Q ´ P(Q)

c0 { t,s,p } c1 { t, s, p, r} c2 { s , t }

Ahora estamos en condición de formalizar el AFD equivalente al AFND1: AFD = ( { 0 , 1 }, { c0 , c1, c2 }, c0 , { c1 }, f )́ , donde: Los estados finales de aceptación en el ADND, es el conjunto F = { r }, por lo tanto F ́estará conformada por todos los nuevos estados que incluyan a dicho estado. Entonces el estado c1

será estado de aceptación del nuevo autómata. Donde la función de transición será:

Page 11: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

11

Y el grafo del AFD quedará:

4. AUTÓMATAS FINITOS Y EXPRESIONES REGULARES. Existen algoritmos que relacionan la especificación de tokens -expresiones regulares-, con el reconocimiento de éstos -autómatas finitos-. Es posible dada una expresión regular obtener el AFD que reconozca las cadenas del lenguaje denotado por la expresión regular. También es posible obtener el AFND que reconozca el lenguaje representado por dicha expresión regular. El algoritmo que permite construir el autómata finito determinístico está fuera del alcance de estas notas. Sin embargo, el algoritmo utilizado para la construcción del autómata finito no determinístico AFND, es relativamente sencillo de aplicar, ya que se basa en reglas simples. Existen muchas variantes de este algoritmo denominado “Algoritmo de Thompson”.

Este algoritmo es dirigido por sintáxis, es decir, usa la estructura sintáctica de la expresión regular para guiar el proceso de construcción del autómata AFND. En la FIG.6 se muestra la carta Entrada-Proceso-Salida (EPS) para el algoritmo de construcción de Thompson.

FIG 6. Algoritmo de construcción de Thompson.

Page 12: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

12

Las reglas a las que hace mención el algoritmo de Thompson son las siguientes:

A. Para el símbolo Î, construir el AFND :

Donde: i es el nuevo estado inicial, y f es el nuevo estado de aceptación. Este AFND reconoce a { Î }.

B. Para cualesquier símbolo a del alfabeto ∑, construir el AFND :

De nuevo, i es el nuevo estado inicial, y f es el nuevo estado de aceptación. Este autómata reconoce {a}.

C. Supongamos que N(s) y N(t) son AFND’s para las expresiones regulares s y t,

respectivamente. a) Para la expresión regular s | t (alternancia), construir el siguiente AFND,

N(s|t) :

Donde: i es el nuevo estado inicial, y f es el nuevo estado de aceptación. Se añade una transición Î desde i hacia los estados de inicio de N(s) y de N(t). Además, se añade una transición Î desde los estados de aceptación N(s) y de N(t) hacia el nuevo estado de aceptación f. Los estados de inicio y de aceptación de N(s) y de N(t) no son los estados de inicio y de aceptación del autómata N(s|t). Este AFND reconoce, L(s) U L(t).

b) Para la expresión regular st (concatenación), construir el AFND, N(st) :

Page 13: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

13

Donde: El estado de inicio de N(s) es ahora el estado de inicio para el AFND N(st), y el estado de aceptación de N(t) se vuelve el estado de aceptación del AFND, N(st). El estado de aceptación de N(s) es mezclado con el estado inicial de N(t); esto significa que todas las transiciones, desde el estado inicio de N(t) son ahora arcos o transiciones desde el estado de aceptación de N(s). El nuevo estado que resulta de esta mezcla, pierde su estatus de estado de inicio o aceptación para el nuevo AFND. El AFND así construido, reconoce el lenguaje L(s) L(t).

c) Para la expresión regular s*, construir el AFND, N(s*) :

DONDE: i es un nuevo estado inicial, y f es un nuevo estado de aceptación. Con el nuevo AFND se reconoce el lenguaje ( L(s) ) *.

5. CONCLUSIONES La ventaja de las expresiones regulares, es que basta con una sola expresión para describir

un lenguaje, frente a tablas de transiciones o reglas de reescritura.

Respecto a los AFN podemos tener una adecuación de la estructura del autómata a la estructura del L (a la e.r. que lo caracteriza) y un menor número de estados frente al AF correspondiente.

De un AFND se puede construir siempre uno equivalente que cumpla el determinismo, evitando ramificaciones y retrocesos, pero lo que no se puede es mejorar las técnicas basadas en AFD.

Existen conjuntos de cadenas que no pueden ser identificados por los autómatas finitos

deterministas, y por lo tanto nuestras técnicas de análisis léxico no pueden reconocerlos.

Page 14: Compiladores - Automatas Finitos

UNIVERSIDAD NACIONAL DE TRUJILLO COMPILADORES

14

6. REFERENCIAS BIBLIOGRÁFICAS [1] J. Glenn Brookshear. Theory of Computation. Formal Languages, Automata, and

Complexity The Benjamin/Cummings Publishing Company, Inc. 1989 [2] J. E. Hopcroft, R. Motwani, J. D. Ullman. Introducción a la Teoría de Autómatas,

Lenguajes y Computación Addison Wesley Longman, Pearson Education Company, Segunda Edición 2001.

[3] John C. Martin. Introduction to Languages and the theory of Computation

WCB/McGraw-Hill, Second Edition. 1996. [4] Michael Sipser. Introduction to the theory of Computation PWS Publishing Company,

1997. [5] Dean Kelly.Teoría de Autómatas y Lenguajes Formales Prentice-Hall, 1998. [6] Pedro García, Tomás Perez, etc.Teoría de Autómatas y Lenguajes Formales.

Alfaomega Grupo Editor. 2001