0% encontró este documento útil (0 votos)
31 vistas12 páginas

Autómatas Finitos

El documento describe los autómatas finitos, tanto deterministas (AFD) como no deterministas (AFND), y sus componentes, incluyendo diagramas de transición y el Teorema de Kleene que establece la equivalencia entre lenguajes regulares y autómatas. También se abordan las expresiones regulares, su construcción, y su relación con los autómatas, así como los métodos para convertir entre ellos. Finalmente, se mencionan las aplicaciones de los autómatas y expresiones regulares en la validación de textos y en compiladores.

Cargado por

hache Guty
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
31 vistas12 páginas

Autómatas Finitos

El documento describe los autómatas finitos, tanto deterministas (AFD) como no deterministas (AFND), y sus componentes, incluyendo diagramas de transición y el Teorema de Kleene que establece la equivalencia entre lenguajes regulares y autómatas. También se abordan las expresiones regulares, su construcción, y su relación con los autómatas, así como los métodos para convertir entre ellos. Finalmente, se mencionan las aplicaciones de los autómatas y expresiones regulares en la validación de textos y en compiladores.

Cargado por

hache Guty
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Autómatas finitos

Autómatas finitos determinas


Un AFD es un sistema que, dado un símbolo de entrada, sabe exactamente a qué estado
debe ir. Esto significa que no hay ambigüedad: por cada estado y símbolo de entrada, hay
una sola transición posible.

Componentes:

Un AFD se define por 5 elementos:

• Q: Conjunto finito de estados.

• Σ: Alfabeto de entrada (símbolos que puede leer).

• δ: Función de transición (reglas de cambio de estado).

• q₀: Estado inicial (donde comienza).

• F: Conjunto de estados de aceptación (estados finales que indican que la cadena


fue aceptada).

Diagrama de transiciones de un autómata

Un diagrama de transiciones, es una colección finita de círculos, los cuales se pueden


rotular para fines de referencia, conectados por flechas que reciben el nombre de arcos.
Cada uno de estos arcos se etiqueta con un símbolo o categoría de símbolos que podría
presentarse en la cadena de entrada que se analizar. Uno de los círculos se designa con
un apuntador, y representa una posición inicial. Además, por lo menos uno de los círculos
se representa como un círculo doble; estos círculos dobles designan posiciones del
diagrama en las cuales se ha reconocido una cadena valida.
Decimos que una cadena de símbolos es aceptada por un diagrama de transiciones si los
símbolos que aparecen en la cadena (de izquierda a derecha) corresponden a una
secuencia de arcos rotulados que conducen del círculo designado por el apuntador a un
círculo doble. Los círculos de un diagrama de transiciones representan posiciones, o
estados, donde nos podemos encontrar al evaluar una cadena de símbolos. Es común
llamar estados a los círculos de un diagrama de transiciones. Él circulo de partida se llama
estado inicial y los círculos dobles, estados de aceptación.

Donde:

• q1: Es el estado inicial

• q3: Es el estado final

• De q1 a q3 se genera una letra

• De q3 a q3 se genera un bucle del símbolo letra, que se puede repetir de 0(cero) a


más veces.

• De q3 a q3 se genera un bucle del símbolo digito, que se puede repetir de 0(cero) a


más veces.

• Un bucle se representa de manera escrita con un asterisco (*) y se llama estrella de


kleene.

• De q1 a q2 se genera un digito, sin embargo, no se considera en el lenguaje que se


genera, ya que el lenguaje que genera un diagrama de transiciones se considera
todas las cadenas que se pueden formar durante el recorrido desde un estado inicial
a un estado final.

• Considerando la nota de la viñeta anterior, las cadenas generadas por el diagrama


de transiciones son: letra, letraletra*, letradigito*.
Diseño de autómatas
El diseño de autómatas es una rama de la computación que se encarga de crear modelos
llamados autómatas finitos, que sirven para reconocer patrones o procesar cadenas de
símbolos. Estos modelos simulan el comportamiento de sistemas que toman decisiones
paso a paso, como si fueran una máquina que lee letra por letra y cambia de estado según
reglas predefinidas.

Diseñar un autómata significa construir un sistema capaz de aceptar o rechazar cadenas


basándose en ciertas condiciones.

¿Para qué se diseña un autómata?

El diseño de autómatas se usa para:

• Verificar si una cadena pertenece a un lenguaje.

• Simular procesos lógicos.

• Construir analizadores léxicos en compiladores.

• Automatizar tareas repetitivas.

• Modelar sistemas digitales y redes.

Autómatas finitos no deterministas


Un autómata finito no determinista (abreviado AFND) es un autómata finito que, a
diferencia de los autómatas finitos deterministas (AFD), posee al menos un estado q ∈ Q,
tal que para un símbolo a ∈ Σ del alfabeto, existe más de una transición δ(q,a) posible. Todo
AFND puede ser convertido en un AFD equivalente.

En un AFND puede darse cualquiera de estos dos casos:

• Que existan transiciones del tipo δ(q,a)=q1 y δ(q,a)=q2, siendo q1 ≠ q2;

• Que existan transiciones del tipo δ(q, ε), siendo q un estado no-final, o bien un
estado final pero con transiciones hacia otros estados.

Cuando se cumple el segundo caso, se dice que el autómata es un autómata finito no


determinista con transiciones vacías o transiciones ε (abreviado AFND-ε). Estas
transiciones permiten al autómata cambiar de estado sin procesar ningún símbolo de
entrada. Considérese una modificación al modelo del autómata finito para permitirle
ninguna, una o más transiciones de un estado sobre el mismo símbolo de entrada.
Teorema de Kleene
¿Qué dice el Teorema de Kleene?

El Teorema de Kleene establece que:

"Un lenguaje es regular si y solo si puede ser aceptado por un autómata finito."

Esto significa que hay una equivalencia entre:

• Los lenguajes regulares (definidos por expresiones regulares), y

• Los lenguajes aceptados por autómatas finitos (AFD o AFND).

¿Qué implica?

Este teorema tiene dos partes importantes:

1. De expresión regular a autómata: Si tienes una expresión regular, puedes


construir un autómata finito (AFND o AFD) que acepte el mismo lenguaje.

2. De autómata a expresión regular: Si tienes un autómata finito, puedes construir


una expresión regular que describa todas las cadenas que acepta.

¿Para qué sirve el Teorema de Kleene?

• Demostrar que un lenguaje es regular.

• Convertir entre autómatas y expresiones regulares.

• Fundamento teórico para el diseño de analizadores léxicos en compiladores.


Lenguajes y expresiones regulares

Lenguajes regulares
Un lenguaje regular es un conjunto de cadenas (palabras) que pueden ser reconocidas o
generadas por:

• Una expresión regular, o

• Un autómata finito (determinista o no determinista).

Son los lenguajes más simples dentro de la teoría de lenguajes formales y sirven como
base para la programación, compiladores y el análisis léxico.

Ejemplos de lenguajes regulares

1. Cadenas que solo contienen a y b.

2. Cadenas que terminan en 01.

3. Cadenas que tienen un número par de 0.

4. El conjunto vacío: ∅.

5. El lenguaje que contiene solo la cadena vacía: {ε}.

6. (a|b)* → todas las cadenas posibles formadas con a y b.

Propiedades de los lenguajes regulares

Los lenguajes regulares son cerrados bajo varias operaciones, es decir, si aplicas estas
operaciones entre lenguajes regulares, el resultado también es regular:

• Unión: Si L₁ y L₂ son regulares, entonces L₁ ∪ L₂ también lo es.

• Concatenación: L₁ · L₂ también es regular.

• Estrella de Kleene: L* es regular.

• Intersección y complemento.

• Diferencia de lenguajes.
Expresiones regulares
Una expresión regular (ER) es una forma de describir patrones de cadenas usando
símbolos y reglas especiales. Se utilizan para definir lenguajes regulares, es decir,
conjuntos de cadenas formadas por símbolos de un alfabeto.

Para qué sirven?

• Validar textos (como correos, contraseñas, números de teléfono).

• Buscar y reemplazar texto automáticamente.

• Definir reglas en analizadores léxicos de compiladores.

• Diseñar autómatas finitos que reconozcan ciertos patrones.

Símbolos básicos de las expresiones regulares

Símbolo Significado Ejemplo

a El símbolo “a” literal a acepta solo "a"

` ` Alternativa (o)

* Cero o más repeticiones a* acepta "", "a", "aa", "aaa", etc.

+ Una o más repeticiones a+ acepta "a", "aa", etc. (no acepta "")

? Cero o una ocurrencia a? acepta "" o "a"

() Agrupar símbolos (ab)* acepta "", "ab", "abab", etc.

. Cualquier carácter a.b acepta "aab", "acb", "a1b", etc.

[abc] Uno de los símbolos entre corchetes acepta "a", "b", o "c"

[^abc] Cualquier símbolo excepto los indicados no acepta "a", "b" o "c"
Operadores
Los operadores son símbolos especiales que se utilizan para construir expresiones
regulares. Sirven para combinar, repetir o seleccionar patrones dentro de un lenguaje.

Principales operadores

Símbolo Nombre Significado / Ejemplo

· Concatenación ab acepta "ab", une dos símbolos seguidos.

` ` Unión (alternativa)

* Cierre de Kleene a* acepta cero o más repeticiones: "", "a", "aa".

+ Una o más repeticiones a+ acepta "a", "aa", "aaa", etc. (no acepta "")

? Opción (cero o una vez) a? acepta "" o "a".

() Agrupación (ab)* repite "ab" cualquier cantidad de veces.

[] Conjunto de símbolos [abc] acepta "a", "b" o "c".

[^ ] Negación [^0-9] acepta cualquier cosa que no sea número.

. Cualquier carácter a.b acepta "aab", "acb", "a1b", etc.

{n} Exactamente n repeticiones a{3} acepta "aaa".

{n,} Al menos n veces a{2,} acepta "aa", "aaa", "aaaa", etc.

{n,m} Entre n y m veces a{2,4} acepta "aa", "aaa", o "aaaa".


Construcción de expresiones regulares
La construcción de expresiones regulares consiste en crear una fórmula simbólica que
describe un patrón de cadenas. Se hace combinando símbolos, operadores y agrupaciones
según ciertas reglas.

Una expresión regular representa un lenguaje regular, y puede ser reconocida por un
autómata finito.

Pasos para construir una expresión regular

1. Analiza el patrón que deseas aceptar. Ejemplo: cadenas que terminan en 01.

2. Define el alfabeto (Σ) Por ejemplo: {0,1}.

3. Identifica las partes fijas y repetitivas del patrón. Ejemplo: cualquier cantidad de
0 y 1, luego 01.

4. Elige los operadores correctos:

• * para repetir.

• | para opciones.

• () para agrupar.

• . para cualquier carácter.

• [ ] para rangos o conjuntos.

5. Escribe la expresión regular.

Ejemplos de construcción

1. Cadenas que contienen solo a y b:

• Expresión: (a|b)*

• Significado: cualquier cantidad de "a" o "b" (incluso ninguna).

2. Cadenas que terminan en 01:

• Expresión: (0|1)*01

• Significado: cualquier combinación de 0s y 1s que termine en 01.

3. Cadenas con exactamente tres dígitos:

• Expresión: [0-9]{3}

• Significado: solo tres números.

4. Cadenas que empiezan con “a” y terminan en “b”:

• Expresión: a(a|b)*b
Precedencia de los operadores en las expresiones regulares
La precedencia indica qué operador se evalúa primero cuando hay varios en una misma
expresión regular. Esto es similar a las reglas de los signos en matemáticas (por ejemplo:
multiplicar antes que sumar).

Orden de precedencia (de mayor a menor)

1. Cierre de Kleene, positivo y opcional:

o * (cero o más repeticiones)

o + (una o más repeticiones)

o ? (cero o una vez)

o Mayor precedencia, se aplican primero.

2. Concatenación:

o No tiene símbolo visible (por ejemplo, ab significa "a seguido de b").

o Se aplica después de los repetidores.

3. Unión o alternativa:

o | (alternativa entre símbolos o subexpresiones).

o Tiene la menor precedencia, se evalúa al final.


Conversión de un AFD en una expresión regular
Es el proceso de transformar un autómata finito determinista (AFD) que reconoce un
lenguaje, en una expresión regular que describe exactamente ese mismo lenguaje.

Para qué sirve?

• Para resumir el funcionamiento de un autómata en una sola expresión.

• Para validar cadenas sin tener que usar diagramas o tablas.

• Para generar patrones reutilizables en programación, validaciones, compiladores,


etc.

MÉTODOS PARA CONVERTIR AFD → Expresión Regular

Método 1: Eliminación de estados (más común)

Paso a paso:

1. Dibuja el AFD completo. Incluye estado inicial, finales y transiciones.

2. Agrega un nuevo estado inicial y un nuevo estado final, con transiciones ε.

3. Elimina estados uno por uno, combinando sus transiciones usando operadores
regulares (·, |, *).

4. Repite hasta que quede solo el nuevo estado inicial y el nuevo estado final.

5. La expresión regular será la etiqueta del camino entre ellos.

Conversión de una Expresión Regular a un Autómata


Es el proceso de transformar una expresión regular en un autómata finito (generalmente un
AFN con transiciones ε), que acepta exactamente las mismas cadenas que describe la
expresión.

¿Por qué es importante?

Gracias al Teorema de Kleene, sabemos que:

Para cada expresión regular existe un autómata finito que acepta el mismo lenguaje.

Esto permite que un patrón descrito con símbolos se pueda representar como una máquina
de estados.

Pasos para convertir una expresión regular en un autómata

Método clásico: Construcción de Thompson

La construcción de Thompson convierte una expresión regular en un AFN con transiciones


ε (vacías). Cada operador tiene una estructura base.
Ejemplo completo

Expresión regular: (a|b)*abb

Paso 1: Construir el autómata de (a|b)*

• Repite cualquier combinación de a o b.

Paso 2: Concatenar con a, b, b

• Une con transiciones nuevas para cada letra.

Resultado: Un AFN que acepta cadenas como: abb, aabb, babb, abababb, etc.

También podría gustarte