• No se han encontrado resultados

Interpretes Compiladores e

N/A
N/A
Protected

Academic year: 2021

Share "Interpretes Compiladores e"

Copied!
67
0
0

Texto completo

(1)

Compiladores e Interpretes

Autómatas Finitos Deterministas (DFA)

Autómatas Finitos No Deterministas (NFA)

UNET 2012

(2)

Definición formal de un autómata finito determinista (DFA)

Los autómatas con un número finito de estados, que tienen un único estado inicial, y para cada estado una, y solo una transición para cada símbolo, se denominan autómatas finitos deterministas y para

poderlo definir se requiere conocer:

Cuál es el conjunto de estados.

Cuál de estos estados es su estado inicial.

Cuáles son los estados aceptadores.

Cuál es el alfabeto de la palabra que se escribe en la cinta.

Una manera de determinar el nuevo estado en función del símbolo

leído y del estado actual.

(3)

Definición formal de un autómata finito determinista (DFA)

(4)

Definición formal de un autómata finito determinista (DFA)

Como ejemplo de esta definición consideraremos el

siguiente autómata sobre ∑ = {a,b}

(5)

Definición formal de un autómata finito determinista (DFA)

Ejercicio para la casa: escribir el Algoritmo en lenguaje C

para este autómata finito, que lea una palabra carácter

por carácter indicando si la palabra es aceptada o no

(6)

Lenguajes regulares y lenguajes reconocidos por los DFA

El lenguaje regular y el reconocido por un DFA son expresiones sinónimas, pero es

importante tener en cuenta que un lenguaje

es regular, si y sólo si, existe un DFA que lo

reconozca.

(7)

Lenguajes regulares y lenguajes reconocidos por los DFA

Muchos lenguajes son reconocidos como regulares, pero para demostrar que un lenguaje es regular basta con exhibir un autómata que lo reconozca

Pero es preciso asegurarse que el lenguaje reconocido por el

autómata es exactamente el que dice que es.

(8)

Lenguajes regulares y lenguajes reconocidos por los DFA

A continuación se presentan algunos ejemplos de lenguajes

regulares, sobre ∑={a,b} y su DFA correspondiente.

(9)

Lenguajes regulares y lenguajes reconocidos por los DFA

Ejercicio:

Cree el DFA correspondiente a los siguientes lenguajes:

(10)

Lenguajes regulares y lenguajes reconocidos por los DFA

Solución:

(11)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

1. L = {abba}

1

(12)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

2. L = {abba,ababba}

2

(13)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

3. L = {a}*={a

n

|n ≥ 0 } = { w | |w|

b

= 0}

3

(14)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

4. L = {a}

+

4

(15)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

5. L = { w | |w| ≥ 3}

5

(16)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

6. L = { w | |w| < 4}

6

(17)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

7. L = { w | |w|

a

= 3}

7

(18)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

8. L = { w | |w|

b

= 4n, n ≥ 0 }

8

(19)

Ejercicios

Encontrar un DFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

9. L = { w | |w|

b

= 4n, n > 0 }

9

(20)

Lenguajes No Regulares

No todos los lenguajes son regulares

De hecho estos últimos representan una minoría (infinita) entre todos los lenguajes, es por esto que debemos razonar sobre la existencia de lenguajes que no son regulares

Es decir lenguajes que no pueden ser reconocidos por ningún DFA.

Concretamente nos podemos conseguir con lenguajes que para ser

reconocidos necesitarían autómatas con un número infinito de estados,

como por ejemplo:

(21)

Lenguajes No Regulares

Para comprender este problema hay que situarnos en el hecho de que una palabra que sea reconocida como perteneciente a este lenguaje requiere tener la misma cantidad de as y bs.

Por lo tanto es indispensable recordar el número de símbolos a,

para verificar el número de símbolos b, pero ¿Cómo puede un

autómata finito recordar algo?

(22)

Lenguajes No Regulares

¿Qué tendría que hacerse para que aceptara la palabra aaaabbbb.?

(23)

Autómatas finitos Indeterministas

¿Qué es un autómata finito indeterminista (NFA)?

Son una forma especial de autómatas finitos que facilitan la tarea de construcción de los DFA.

El mismo se da cuando se cumple algunas de estas tres condiciones:

1.

Tiene más de un estado inicial.

2.

Tiene transiciones definidas de forma múltiple.

3.

Tiene transiciones no definidas.

(24)

Autómatas finitos Indeterministas

Por ejemplo:

Y si es una b

(25)

Aceptación de una palabra en los Autómatas finitos Indeterministas

Es similar al de los DFA, pero teniendo en cuenta las siguientes

consideraciones:

(26)

Aceptación de una palabra en los Autómatas finitos Indeterministas

Por ejemplo si consideramos la palabra abaabb y el NFA:

Vemos que si ante el primer símbolo se opta hacia el estado b, no habrá transición definida, por el contrario si se opta por quedarse en el estado a, la palabra puede evolucionar hasta su aceptación.

Por esto debemos concluir que la palabra es aceptada por el

autómata porque como mínimo, hay una secuencia de transiciones

que lo llevan hacia un estado aceptador.

(27)

Autómatas finitos Indeterministas

Ejemplos paradigmáticos.

(28)

Autómatas finitos Indeterministas

Ejemplos paradigmáticos.

(29)

Autómatas finitos Indeterministas

Ejemplos paradigmáticos.

(30)

Autómatas finitos Indeterministas

Ejemplos paradigmáticos.

(31)

Autómatas finitos Indeterministas:

Definición formal

(32)

Ejercicios

Encontrar un NFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

1. L = {abba}

1

(33)

Ejercicios

Encontrar un NFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

2. L = {abba,ababba}

2

(34)

Ejercicios

Encontrar un NFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

3. L = { w | Ǝ x , y Є ∑* (w=xy ˄ Ǝz Є ∑

2

(y=az)) } = ∑*{a}{a,b}

2

,

=

es decir las palabras cuyo antepenúltimo símbolo es una a

3

(35)

Ejercicios

Encontrar un NFA que reconozca los siguientes lenguajes definidos en el alfabeto ∑={a,b}:

4. Como se podría convertir el NFA del ejercicio 1 en un DFA.

1

4

(36)

Diferencias Autómatas finitos

Indeterministas y Deterministas

1. El DFA tiene un único estado inicial, mientras que en un NFA puede tener más de uno.

2. En un DFA, la función de transición

determina un nuevo estado para cada pareja estado-símbolo, mientras que en un NFA,

para cada pareja estado símbolos tenemos

un conjunto de estados.

(37)

Diferencias Autómatas finitos

Indeterministas y Deterministas

Ejemplo:

(38)

Coincidencias Autómatas finitos Indeterministas y Deterministas

Los lenguajes reconocidos por los autómatas finitos deterministas son los llamados lenguajes regulares.

Los lenguajes que los autómatas finitos indeterministas pueden reconocer son exactamente los mismos que los deterministas, los lenguajes regulares.

Un hecho importante es que con un proceso especial conocido

como determinización, ser puede convertir un NFA en un DFA.

(39)

Determinización de autómatas no deterministas

• Un DFA y un NFA se pueden considerar equivalentes:

• Por un lado los DFA pueden considerarse un caso particular de los NFA.

• Por otro lado, cualquier NFA puede convertirse en un DFA que acepta el mismo lenguaje mediante un procedimiento algorítmico denominado determinización.

• Y aunque son equivalentes por un lado, por otro no son equivalentes en todos los sentidos:

• La construcción de NFA es más simple.

• El indeterminismo es una cualidad poco deseable.

• Por estas razones la mayoría de autómatas se crean

indeterministas, se determinizan, y se utiliza su versión

determinada.

(40)

Determinización de autómatas no deterministas

• La clave del proceso de determinización es la siguiente: Cada estado de un autómata determinista se corresponde con un subconjunto de los estados del autómata indeterminista. Concretamente:

• El estado inicial del autómata determinista es el conjunto de los estados iníciales del indeterminista (I).

• Los estados aceptadores del determinista son aquellos que contienen algún aceptador del indeterminista.

• La función de transición del determinista tiene en consideración todas las transiciones definidas para cada uno de los estados del autómata indeterminista que componen un estado del autómata determinista.

(41)

Determinización de autómatas no deterministas

Por ejemplo, consideremos el autómata indeterminista y veamos su

determinización paso a paso:

(42)

Determinización de autómatas no deterministas

En primer lugar, el estado inicial del autómata determinista se

corresponderá con los estados iníciales del indeterminista {A,D}:

(43)

Determinización de autómatas no deterministas

La función de transición del estado {A,D} con el símbolo a debe recoger las transiciones tanto del estado A como del estado D con este símbolo.

Concretamente, la transición para A con a es hacia el estado B (δ(A,a)={B}) y, para D con a no esta definido (δ(D,a)={ɸ}).

Así la transición para {A,D} con a es hacia el estado {B} U {ɸ} = {B}:

(44)

Determinización de autómatas no deterministas

Para el estado A,D y el símbolo b se procede de la misma forma δ(A,b)={ɸ}

y

(δ(D,b)={E}).

Así la transición para {A,D} con b hacia el estado {ɸ} U {E} = {E}

(45)

Determinización de autómatas no deterministas

El mismo proceso que se seguido con el estado {A,D} se debe seguir con los nuevos estados que han aparecido {B} y {E}:

En relación con {B}, tenemos que δ(B,a)={B}

y que

δ(B,b)={B,C}

(46)

Determinización de autómatas no deterministas

Del mismo modo, para {E} tenemos que δ(E,a)={E,F}

y que

δ(E,b)={E}

(47)

Determinización de autómatas no deterministas

• El mismo proceso se repite para los estados {B,C} y {E,F} por lo que tenemos que:

δ(B,a)={B} y δ(C,a)={ɸ}, así la transición para {B,C} con a es hacia {B}.

δ(B,b)={B,C} y δ(C,b)={ɸ}, así la transición para {B,C} con b es hacia {B,C}.

δ(E,a)={E,F} y δ(F,a)={ɸ}, así la transición para {E,F} con a es hacia {E,F}.

δ(E,b)={E} y δ(F,b)={ɸ}, así la transición para {E,F} con b es hacia {E}.

(48)

Determinización de autómatas no deterministas

Detalles Finales:

• Como ya no queda ningún nuevo estado por considerar, el autómata resultante es la versión determinista del autómata indeterminista original.

• Se debe prestar atención a que {B,C} y {C,F} han sido

marcados como estados aceptadores, siendo esto así porque

contienen estados aceptadores del autómata indeterminista

(C,F).

(49)

Determinización de autómatas no deterministas

Generalmente la determinación no se hace construyendo gráficamente el autómata determinista resultante, lo

más habitual es construir la tabla de función de transición del DFA a partir

del NFA.

(50)

Determinización de autómatas no deterministas

Por ejemplo, veamos la determinación del autómata que vemos a continuación:

que posee la tabla:

(51)

Determinización de autómatas no deterministas

Iniciamos la construcción de la tabla del DFA a partir de lo que será su estado inicial: el estado unión de los estados iníciales del NFA:

Y solo ha sido necesario “unir” las filas correspondientes al

estado A y al estado D:

(52)

Determinización de autómatas no deterministas

Han aparecido dos nuevos estados {B,E} y {C,F}, por lo que es necesario incorporarlos a la tabla de función de transición del DFA y calcular sus

transiciones:

(53)

Determinización de autómatas no deterministas

El estado {A, D, G} resultante de la unión de las transiciones de los estados C y F con el símbolo a, no ha aparecido antes en la tabla, por lo que lo incorporamos y obtenemos:

Observemos {A,D,G} es un estado final, porque contiene a

G, que es un estado final del NFA.

(54)

Determinización de autómatas no deterministas

El proceso de incorporación de estados nuevos a la tabla y calcular sus transiciones a partir de las transiciones de la tabla del NFA se repite hasta que ya no aparece ninguno nuevo

más.

NFA

DFA

(55)

Determinización de autómatas no deterministas

¿Cuál es el precio que se debe pagar por la determinización de un autómata indeterminista?

• La respuesta es simple, tomando en cuenta que cada estado del determinista es un conjunto de estados del

indeterminista.

• En otras palabras cada estado del determinista es un

subconjunto de estados del indeterminista, si el NFA tiene N estados, el determinista puede llegar a 2

N

. Por lo que el

crecimiento en el número de estados puede ser exponencial, y este es el precio a pagar por eliminar el indeterminismo.

(56)

Minimización de estados de un DFA

La versión mínima de un DFA es otro DFA que reconoce

exactamente el mismo lenguaje que el primero pero lo hace con el menor número de estados posibles.

La idea de la minimización es que existen grupos de DFA que se comporten de la misma manera, y cuando uno de estos sea encontrado se puede reducir a un único estado.

Una característica importante es la unicidad del autómata mínimo que no es otra cosa que: dado un lenguaje regular, el autómata mínimo que lo reconoce es único.

Si desea profundizar en el tema debe:

Investigar autómata cociente y como sirven para la minimización de estados de un DFA.

(57)

Repasando: Autómatas finitos

Son un manera matemática para describir clases particulares de algoritmos (o “máquinas”), en nuestro caso específicamente los mismos se utilizan para describir el proceso de reconocimiento de patrones en cadenas de entrada, y de este modo se pueden usar para construir analizadores léxicos.

Sus principales componentes son: los estados, las transiciones, el estado inicial y los estados de aceptación.

Existen dos tipos principales de autómatas finitos:

Los determinísticos (DFA).

Los no determinísticos (NFA).

(58)

Implementación de autómatas finitos en código fuente:

• Existen diversas maneras de implementar un DFA o NFA en código, sin embargo todos los métodos no serán útiles para implementar un analizador léxico.

• Consideremos nuestro ejemplo de un DFA que acepte identificadores compuestos de una letra seguido por una secuencia de letras o números, en su versión corregida.

1 2

+

letra

dígito

letra [Otro] 3

ID de retorno

(59)

Implementación de autómatas finitos en código

Primera forma de implementación

Es la más sencilla y es la siguiente:

{iniciando en el estado 1}

If el siguiente carácter es una letra then avanza en la entrada;

{Ahora en el estado 2}

while el siguiente carácter es una letra o dígito do avanza en la entrada;

{permanece en estado 2}

end while;

{ir al estado 3 sin avanzar en la entrada}

aceptar;

else

{error u otros casos}

end if;

Comentarios:

• Se usa la posición en el código para mantener el estado implícitamente.

• Útil si no hay

demasiados estados.

• Cada DFA se tiene que implementar de forma diferente.

•La complejidad

aumenta a medida que se eleva el número de estados.

(60)

Implementación de autómatas finitos en código

Ejercicio para la casa PRIMERA FORMA DE IMPLEMENTACION

Lleve a cabo la implementación del autómata de las constantes numéricas en notación científica mediante el uso de Java .

2 digito

3

+

digito 1

+

- digito

4 5

+

digito

. digito

7 digito

8

+

digito 6

+

- digito E

E

(61)

Implementación de autómatas finitos en código

Segunda forma de implementación

Esta forma usa una variable para mantener el estado actual y escribe las transiciones como una sentencia case doblemente anidada dentro de una iteración, donde la primera sentencia case prueba el estado actual y el segundo nivel anidado prueba el carácter de entrada, lo que da el estado.

estado := 1; {inicio}

while estado = 1 o 2 do case estado of

1: case carácter de entrada of letra: avanza en la entrada;

estado:=2;

else estado:= … {error u otro estado}

end case;

2: case carácter de entrada of

letra, dígito: avanza en la entrada;

{innecesario realmente} estado:=2;

else estado:= 3;

end case;

end case;

end while;

If estado=3 then aceptar else error;

Comentarios:

• Refleja el DFA de manera directa, las transiciones corresponden con la asignación de un nuevo estado a la variable estado y avanza en la entrada,

excepto en el caso de transiciones que no

consumen por ejemplo del estado 2 al 3.

•Se puede cambiar el case exterior para que tenga los caracteres de entrada y los internos basados en el estado actual.

(62)

Ejercicio para la casa SEGUNDA FORMA DE IMPLEMENTACION

Lleve a cabo la implementación del autómata de las constantes numéricas en notación científica mediante el uso de Java .

Implementación de autómatas finitos en código

2 digito

3

+

digito 1

+

- digito

4 5

+

digito

. digito

7 digito

8

+

digito 6

+

- digito E

E

(63)

Implementación de autómatas finitos en código

Tercera forma de implementación

Es posible expresarlo también como una estructura de datos y entonces escribir un código “genérico” que tomara sus

acciones de la estructura de datos (ej. Tabla de transición)

Caracteres en el alfabeto ∑ (c)

Estados s

Estados representando

transiciones T(s,c)

(64)

Implementación de autómatas finitos en código

Tercera forma de implementación

El DFA para identificadores entonces se puede

representar como la tabla de transiciones, donde los espacios en blanco representan transiciones que no se muestran en el DFA (a estados de error u otros procesamientos)

Carácter de Entrada Estado

letra digito otro

1 2

2 2 2 3

3

(65)

Implementación de autómatas finitos en código

Tercera forma de implementación

Si a la tabla de transiciones, agregamos la información acerca de cuales estados son aceptadores y cuales transiciones no

consumen sus entradas en esta misma estructura obtenemos:

Carácter de Entrada Estado

letra digito otro aceptación

1 2 No

2 2 2 [3] No

3

(66)

Implementación de autómatas finitos en código

Tercera forma de implementación

Ahora podemos escribir el código en una forma que implementara cualquier DFA, dadas las entradas y estructuras de datos apropiadas, el siguiente ejemplo supone que las transiciones se mantienen en un arreglo de transición T, indexado por

estados y caracteres de entrada, que aquellas que hacen avanzar la entrada (sin [ ]) están dadas por el arreglo booleano avanzar, indexado también por estados y

caracteres de entrada; y que los estados de aceptación están dados por el arreglo booleano Aceptar indexado por estados:

estado:=1;

ch:= siguiente carácter de entrada;

while not Aceptar[estado] and not error(estado) do nuevoestado:=T[estado,ch];

if Avanzar[estado,ch] then ch:= siguiente carácter de entrada;

estado := nuevoestado;

end while;

If Aceptar[estado] then aceptar;

Comentarios:

•Se denomina algoritmo controlado por tabla.

•El tamaño del código se reduce.

•Servirá el mismo código para muchos DFA diferentes

•En DFA grandes tienden a ser poco eficientes.

(67)

Expresiones Regulares

Todo esto nos ha traído hacia un tipo de expresiones que

proporcionan una manera simple, sencilla y precisa de un lenguaje regular y las cuales son conocidas como expresiones regulares.

Tarea Casa: Buscar en internet información relacionada con las expresiones regulares, su funcionamiento, principales usos, etc.

Mínimo leer articulo de wikipedia sobre el tema.

Referencias

Documento similar

Després d’una dècada, es torna a reeditar esta en- tranyable història sobre l’amistat i la natura, ideal per als lectors més menuts (entre els 8 i els 12 anys).. Un llibre, a més

Esta asignatura se sitúa, por tanto, en el nivel básico dentro del plan de formación de los grados en Ingeniería Informática y en Tecnologías de la Información y desarrolla

1. LAS GARANTÍAS CONSTITUCIONALES.—2. C) La reforma constitucional de 1994. D) Las tres etapas del amparo argentino. F) Las vías previas al amparo. H) La acción es judicial en

del cuadro de &#34;La boda campesina&#34;, reflejo de este proceso histórico en el espejo de la conciencia, expresión y obra del ojo crítico de Pieter Brueghel, el Viejo, sirve de

Buscá en Pilas Bloques la serie de ejercicios “Autómatas, comandos, procedimientos y repetición” y resolvé el desafío “El recolector de estrellas” para crear la mejor

Para conectar a cumplir con tres meses de reciclaje local de anfibios como de vapor de ser efectuado lejos de control distinto al reducir barreras visuales entre albergues para

Los datos de la seguridad de Spikevax en adolescentes se han recogido de un estudio clínico en curso en fase 2/3, aleatorizado, controlado con placebo y con enmascaramiento para

La seguridad nacional relacionada al mar, parece depender de nuestra capacidad para proteger los intereses económicos relacionados al mar, que permitan un crecimiento económico y