Los autómatas finitos deterministas (AFD) son un tipo de máquina abstracta que se utiliza para reconocer o generar cadenas de caracteres. Se les llama deterministas porque, dado un estado inicial y una cadena de entrada, siempre existe una única transición que se puede realizar.
Son máquinas finitas: tienen un número finito de estados.
Son deterministas: dado un estado inicial y una cadena de entrada, siempre existe una única transición que se puede realizar.
Son autómatas: pueden reconocer o generar cadenas de caracteres.
Los AFD están formados por los siguientes elementos:
Estados: Representan las condiciones en las que se puede encontrar el autómata.
Transiciones: Representan las acciones que realiza el autómata al leer un símbolo de entrada.
Estado inicial: Representa el estado en el que se encuentra el autómata al inicio de la ejecución.
Estados finales: Representan los estados en los que el autómata reconoce la cadena de entrada.
Consideremos el siguiente AFD que reconoce las cadenas de caracteres que empiezan por "a" y terminan por "b":
Estados: q0, q1
Transiciones:
q0 -> q1 | a
q1 -> q1 | b
El estado inicial es q0. El autómata comienza en este estado y, al leer el símbolo "a", se transfiere al estado q1. Al leer el símbolo "b", el autómata reconoce la cadena de entrada y se detiene en el estado final q1.
Los AFD funcionan de la siguiente manera:
El autómata comienza en el estado inicial.
El autómata lee el siguiente símbolo de entrada.
El autómata se transfiere al estado correspondiente a la transición que existe entre el estado actual y el símbolo de entrada leído.
El autómata repite los pasos 2 y 3 hasta que llegue al final de la cadena de entrada.
Si el autómata llega a un estado final al final de la cadena de entrada, entonces la cadena de entrada es reconocida por el autómata. Si el autómata no llega a un estado final al final de la cadena de entrada, entonces la cadena de entrada no es reconocida por el autómata.
Los AFD tienen una variedad de aplicaciones, entre las que se incluyen:
Análisis léxico: Los AFD se utilizan para analizar el código fuente de un programa para identificar los tokens que lo componen.
Reconocimiento de patrones: Los AFD se utilizan para reconocer patrones en datos, como por ejemplo, números de teléfono o direcciones de correo electrónico.
Control de flujo: Los AFD se utilizan para controlar el flujo de ejecución de un programa.