Está en la página 1de 34

Semana 1

LENGUAJES
AUTÓMATAS
Unidad 1
INTRODUCCIÓN A LA
TEORÍA DE LENGUAJES
FORMALES
Unidad 2
Expresiones regulares
Material compilado con fines
académicos, se prohíbe su
Unidad 3
reproducción total o parcial sin
la autorización de cada autor.
Autómatas finitos
Temario
Unidad 1.
Introducción a la teoría de lenguajes formales
1.1. Alfabeto
1.2. Cadenas
1.3. Lenguajes
1.4. Tipos de lenguajes
1.5. Herramientas computacionales ligadas con lenguajes
1.6. Estructura de un traductor
1.7. Fases de un compilador

Unidad 2.
Expresiones regulares
2.1. Definición formal de una ER
2.2. Operaciones
2.3. Aplicaciones en problemas reales

Unidad 3.
Autómatas finitos
3.1. Definición formal
3.2. Clasificación de AF
3.3. Conversión de un AFND a AFD
3.4. Representación de ER usando AFND
3.5. Minimización de estados en un AF
3.6. Aplicaciones (definición de un caso de estudio)

2
UNIDAD 1
INTRODUCCIÓN A LA TEORÍA DE LENGUAJES FORMALES

Un lenguaje puede ser visto como un sistema adecuado para expresar ciertas ideas,
hechos y conceptos. Ahora bien, para formalizar la noción de un lenguaje se deben
cubrir todas las variedades como los lenguajes naturales y los de programación.

Veamos algunos rasgos comunes entre los lenguajes:

• Un lenguaje es una colección de frases.


• Una frase es una secuencia de palabras.
• Una palabra es una combinación de sílabas.

Por lo tanto, si se considera un idioma y su escritura, entonces es posible observar


que una palabra es una secuencia de símbolos de su alfabeto subyacente.

Con estas líneas introductorias que resaltan algunas ideas sobre el lenguaje, el
alfabeto y la palabra comenzamos la introducción al tema. Además de abordar con
más detalle estos conceptos, se mencionan algunas herramientas computacionales
que se relacionan con los lenguajes, se discute la estructura de un traductor y se
examinan las fases de un compilador.

1.1.
Alfabeto

De manera general, según de Castro (2004), podemos decir que “la computación es
la manipulación de secuencias de símbolos” (p. 5). Sin embargo, de Castro (2004)
argumenta que para que esto sea posible, desde el punto de vista teórico, se
necesita que el conjunto de símbolos (inputs/outputs) pueda ser identificado en
tiempo finito. Por lo tanto, el conjunto de símbolos debe ser finito y, a su vez, que sus
secuencias tengan una longitud finita.

Asimismo, Cueva Lovelle (2001) explica que los símbolos antes mencionados se
entienden como una entidad abstracta que normalmente son “letras (a, b, c, …,
z), dígitos (0, 1, 2, …,9) y otros caracteres (+, -, *, /, ?, ¡, …)” (p. 3). En este sentido,
Cueva Lovelle (2001) plantea que un conjunto finito de símbolos conforma lo que se
denomina un alfabeto, por ende, un conjunto no vacío. Un alfabeto arbitrario se
denota con la letra ∑. Un alfabeto también se conoce como vocabulario (V).

3
Es común definir a los alfabetos al enumerar los símbolos que contienen. A continua-
ción se muestran ejemplos de alfabetos:

Σ = {a, b, c, d, e, f,…,x, y, z}
Σ = {a, b, c, d, 0, 1, 2, 4,*,#,+}
Σ = {0, 1}
Σ = {if,t hen, begin, end, else,;,= >}

A partir de lo anterior, el tercer ejemplo expone un alfabeto binario, el cual se


retomará en el siguiente subtema. Ahora bien, el cuarto ejemplo expresa que un
símbolo también puede estar formado por varias letras o caracteres, lo cual denota
las palabras reservadas de un lenguaje de programación.

Para entender mejor qué representa este concepto y poder ligarlo claramente con los
lenguajes formales necesitamos comprender el término cadenas, el cual se abordará
en la siguiente sección.

1.2.
Cadenas

De Castro (2004) manifiesta que “una cadena (o palabra) sobre un alfabeto ∑ es


cualquier sucesión o secuencia finita de elementos de ∑” (p. 5). Retomando el
alfabeto del ejemplo 3, Σ= {0,1}, De Castro (2004) revela que “las cadenas sobre este
alfabeto son secuencias finitas de ceros y unos, llamadas secuencias binarias” (p. 6).
Los siguientes ejemplos ilustran algunas cadenas que se pueden construir a partir
de este alfabeto binario:

• 001
• 1011
• 0101011100
• 00011110001

Un concepto asociado a la cadena es su longitud, la cual se define simplemen-


te como el número de símbolos que contiene. La notación utilizada es |cadena| =
longitud. Para los ejemplos anteriores, las longitudes de las cadenas son las
siguientes:

4
|001|=3
|1011|=4
|0101011100|=10
|00011110001|=11

Existe además una cadena especial, la cual se llama cadena vacía pues no
contiene ningún símbolo, generalmente esta cadena se denota a través de
la letra λ, y su longitud se expresa como: |λ|=0 (de Castro, 2004).

La concatenación es una operación que se puede realizar en las cadenas, tomando


en cuenta dos cadenas α y β ; la concatenación de ambas genera una nueva cadena
αβ que se constituye por los símbolos de la cadena α seguidos por los de la cadena
β. Como propiedad especial de la concatenación de cadenas, la concatenación de
cualquier cadena α con la cadena vacía λ siempre generará la cadena α. Es decir,
αλ = λα= α

Otras operaciones que se pueden llevar a cabo con cadenas se pueden consultar
en la siguiente lectura:

Escanea el código QR para ver el documento relacionado


o da clic aquí.

De Castro Korgi, R. (2004). Teoría de la computación: lenguajes, autómatas, gra-


máticas (pp. 3-19). Bogotá: Universidad Nacional de Colombia.

Continuando con los conceptos asociados a una cadena, tenemos el conjunto de


todas las cadenas que se pueden formar con los símbolos de un alfabeto ∑, inclu-
yendo la cadena vacía. Se denomina universo del discurso de ∑ y se denota por ∑*

5
(Cueva Lovelle, 2001). Por ejemplo, si consideramos al alfabeto ∑ = {a}, es decir, un
alfabeto con una sola letra, entonces su universo de discurso es (que contiene infi-
nitas cadenas):

∑*= {λ, a,aa,aaa,aaaa,…}

Hasta este punto ya conocemos los conceptos relacionados con el concepto cadena:
los símbolos y el alfabeto. Por lo tanto, es viable continuar con la siguiente sección
que aborda el tema de los lenguajes.

1.3.
Lenguajes

El siguiente concepto relacionado con el término alfabeto es el lenguaje. Para fines


prácticos diremos que un lenguaje L sobre un alfabeto ∑ es un subconjunto de ∑*.
Desde el punto de vista de Cueva Lovelle (2001), “un lenguaje también se puede
definir como un conjunto de palabras de un determinado alfabeto” (p. 5).

Dos casos especiales son el lenguaje vacío y el lenguaje de todas las cadenas sobre
∑, los cuales se expresan de la siguiente manera:

L=
L= ∑*

Asimismo, Cueva Lovelle (2001) afirma que “el lenguaje vacío no debe confundirse
con un lenguaje que contenga una sola cadena y que esta sea la cadena vacía (λ)” (p.
6). La diferencia se puede ver en la cardinalidad (número de elementos) del lenguaje,
como se observa a continuación:

|{ }|=0
|{λ}|=1

Para ilustrar mejor el concepto de lenguaje se presentan algunos ejemplos sobre


los alfabetos especificados:

∑={a,b,c},L={a,aba,aca,abb}
∑={a,b,c},L={a,aa,aaa,…}

6
Ahora bien, también se pueden definir operaciones, considerando el hecho de que
“los lenguajes sobre ∑ son subconjuntos de ∑*. Es decir, las operaciones usuales
entre conjuntos también son válidas entre lenguajes” (de Castro, 2004, p. 11). Por
ejemplo, como plantea de Castro (2004, p. 11), si consideramos que A y B son len-
guajes sobre ∑, entonces los siguientes también son lenguajes sobre ∑:

Figura 1. Lenguajes sobre ∑. Fuente: de Castro (2004, p. 11).

De acuerdo con de Castro (2004), “estas operaciones entre lenguajes se llaman


operaciones conjuntistas o booleanas para de distinguirlas de las operaciones
lingüísticas (concatenación, potencia, inverso, clausura) que son extensiones a
los lenguajes de las operaciones entre cadenas” (p. 11) (presentadas en la sección
anterior).

Para finalizar este tema, de Castro (2004) aclara lo siguiente:

El concepto abstracto de “lenguaje”, tal como se ha definido, no es exac-


tamente la misma noción utilizada en la expresión “lenguaje de progra-
mación”. Para precisar la relación entre estos conceptos, consideremos
el alfabeto ∑ de los caracteres ASCII. Un programa en C o en Pascal, por
ejemplo, es simplemente una cadena de símbolos de ∑ y, por lo tanto, un
conjunto de programas es un lenguaje (en el sentido formal definido en
esta sección) (p. 11).

1.4.
Tipos de lenguaje

De manera general, la Universidad Politécnica de Madrid (s.f.) manifiesta que los


lenguajes se pueden clasificar en dos grandes categorías: naturales y formales. Por

7
sus características, los primeros quedan fuera del alcance de esta materia. Nos en-
focaremos en los segundos, es decir, en los lenguajes formales.

Peinado (2010) plantea que un lenguaje formal es “un conjunto (finito o infinito) de
cadenas finitas de símbolos primitivos […] Dichas cadenas se constituyen gracias a
un alfabeto ∑ y a una gramática” (p. 1). Antes de continuar, según Peinado (2010) es
importante mencionar que la gramática es “un conjunto finito de reglas para formar
cadenas finitas juntando símbolos del alfabeto” (p. 1).

El concepto de gramática es el que nos permite enunciar los diferentes tipos de


lenguajes. Chomsky (citado por Peinado, 2010, p. 2), lingüista del MIT, clasifica las
gramáticas formales de forma subordinada, lo cual genera lenguajes formales:

Tipo 3: Gramáticas regulares que generan lenguajes regulares.


Tipo 2: Gramáticas incontextuales que generan lenguajes incontextuales.
Tipo 1: Gramáticas contextuales que generan lenguajes contextuales.
Tipo 0: Gramáticas libres que generan lenguajes sin ningún tipo de restricción.

Si deseas profundizar en la definición de cada tipo de gramática, revisa el siguiente


recurso:

Escanea el código QR para ver el documento relacionado


o da clic aquí.

Alfonseca Cubero, E., Alfonseca Moreno, M. y Moriyón Salomón. R. (2007). Teoría de autóma-
tas y lenguajes formales (pp. 153-160). Madrid: McGraw-Hill / Interamericana de España.

Finalmente, el tipo de lenguaje que nos interesa analizar en esta materia es el lengua-
je regular, el cual se distingue por presentar las siguientes características (Peinado,
2010, p. 3):

8
• Puede ser descrito mediante una expresión regular (expresar de forma com-
pacta cómo son todas las cadenas de símbolos que le pertenecen).
• Puede ser generado mediante una gramática regular (obtener todas las ca-
denas de símbolos que le pertenecen).
• Puede ser reconocido mediante un autómata finito (saber si una cadena de
símbolos pertenece a él o no).

1.5.
Herramientas computacionales ligadas con lenguajes

Cueva Lovelle (2001) explica que algunas de las herramientas computacionales que
se vinculan a los lenguajes son los traductores, los preprocesadores, los compilado-
res y los intérpretes. En esta sección, los describiremos brevemente.

Traductores

Gálvez y Mora (2005) argumentan que un traductor es “un programa que traduce o
convierte desde un texto o programa escrito en un lenguaje fuente hasta un texto
o programa escrito en un lenguaje destino produciendo […] mensajes de error. Los
traductores engloban tanto a compiladores como a intérpretes” (p. 2). La figura 2
ejemplifica el esquema básico que constituye a un compilador/intérprete.

Figura 2. Esquema preliminar de un traductor. Fuente:

Preprocesadores

Pérez y Monroy (s.f.) indican que los preprocesadores “son un caso particular de
traductor en el cual se traduce un lenguaje de alto nivel a otro, cuando el primero
no puede pasar a lenguaje máquina directamente”.

9
Compiladores

Gálvez y Mora (2005) mencionan que un compilador “es aquel traductor que tiene
como entrada una sentencia en lenguaje formal y como salida un fichero ejecutable,
es decir, realiza una traducción de alto nivel a código máquina” (p. 3). La figura 3
ejemplifica un compilador.

Figura 3. Esquema base de un compilador. Fuente: Barzana (s.f.).

Intérpretes

Citando a Barzana (s.f.):

Los intérpretes traducen lenguaje de alto nivel a lenguaje máquina; se en-


cargan de traducir cada instrucción, una por una (o cada línea de instruccio-
nes), contenida en un programa escrito en cualquier lenguaje de alto nivel a
instrucciones en código binario, que sea comprensible por los ordenadores
y la ejecución se da de inmediato.

La figura 4 muestra el esquema de un intérprete.

Figura 4. Esquema base de un intérprete. Fuente: Barzana (s.f.).

Estas son algunas de las herramientas ligadas a los lenguajes. No obstante, se


exhorta a analizar las fuentes mencionadas al inicio de esta sección para conocer
otras herramientas relacionadas.

10
Si deseas profundizar en el tema, revisa los siguientes videos sobre compiladores
e intérpretes:

Escanea el código QR para ver el video relacionado


https://player.vimeo.com/video/545224784

Aprende conmigo (06 de abril de 2020). Traductores de lenguajes: compiladores e intérpretes

Escanea el código QR para ver el video relacionado


https://player.vimeo.com/video/545224749

Cárcamo Cárdenas, J. (27 abril de 2016). 04-Compilación e interpretación

1.6.
Estructura de un traductor

El concepto de traductor lo abordamos previamente y en la figura 2 se muestran


sus componentes básicos. Gálvez y Mora (2005) afirman que “un traductor divide
su labor en dos etapas: una que analiza la entrada y genera estructuras intermedias
y otra que sintetiza la salida a partir de dichas estructuras” (p. 11). Tanto el análisis
como la síntesis se realizan considerando los siguientes aspectos:

11
Figura 4. Aspectos de análisis y síntesis de un traductor. Fuente: elabo-
ración propia con información de Gálvez y Mora (2005).

De manera resumida, los objetivos de la fase de análisis son controlar la corrección


del programa fuente y generar estructuras necesarias para comenzar la síntesis, a
través de los tres tipos de análisis enunciados. Por otro lado, el objetivo de la síntesis
es construir el programa objeto deseado a partir de las estructuras generadas por la
fase de análisis. Para ello, realiza las tres tareas indicadas en el gráfico.

A continuación se presentan las fases de análisis y síntesis de un traductor:

Figura 5. Esquema por etapas de un traductor. Fuente: Gálvez y Mora (2005, p. 11).

Ahora bien, según Gálvez y Mora (2005), “cualquiera de las fases del proceso
de análisis puede emitir mensajes de error, derivados de fallos cometidos por el
programador en la redacción de los textos fuente” (p. 12). Cabe mencionar que tanto
el análisis como la síntesis son etapas que acompañan a un compilador, tema que
se abordará en la siguiente sección.

12
1.7.
Fases de un compilador

Recordemos que un compilador no es más que un tipo de traductor. En este sentido,


los componentes del traductor mostrados en la figura 5 nos sirven para enunciar las
fases de un compilador. De esta manera, un compilador se divide también en dos
fases: una parte que analiza la entrada y genera estructuras intermedias y otra parte
que sintetiza la salida.

Como ya se indicó, las fases se denominan en función de su agrupación. Como


expresan Gálvez y Mora (2005), “con frecuencia, las fases anteriores se agrupan en
una etapa inicial (front-end) y una etapa final (back-end)” (p. 12).

Asimismo, Gálvez y Mora (2005) explican cómo se desarrolla la primera fase:

La etapa inicial comprende aquellas fases, o partes de fases, que dependen


exclusivamente del lenguaje fuente y que son independientes de la máqui-
na para la cual se va a generar el código. En la etapa inicial se integran los
análisis léxicos y sintácticos, el análisis semántico y la generación de código
intermedio. La etapa inicial también puede hacer cierta optimización de có-
digo e incluye, además, el manejo de errores correspondiente a cada una
de esas fases (p. 12).

Por otro lado, Gálvez y Mora (2005) detallan el proceso de la segunda fase:

La etapa final incluye aquellas fases del compilador que dependen de la má-
quina destino y que, en general, no dependen del lenguaje fuente sino solo
del lenguaje intermedio. En esta etapa se encuentran aspectos de la fase de
generación de código, además de su optimización, junto con el manejo de
errores necesario y el acceso a las estructuras intermedias que haga falta.

La figura 6 resume las etapas o fases de un compilador y las actividades que eng-
loba.

13
Figura 6. Fases y tareas que engloba un compilador.

En resumen, hemos visto que un alfabeto permite generar cadenas (finitas o


infinitas) y desarrollar lenguajes. Además, que los lenguajes formales nos interesan
por su relación con las expresiones regulares y los autómatas. Por otro lado, los
traductores son herramientas computacionales que se emplean en los lenguajes y son
la base de los compiladores e intérpretes. Cada fase en los traductores tiene objetivos
específicos en función de la tarea que realizará.

14
UNIDAD 2
EXPRESIONES REGULARES

Las expresiones regulares desempeñan un papel importante en diversas aplicacio-


nes. En las especificaciones sintácticas de los lenguajes de programación describen
identificadores léxicos y en la manipulación de texto representan patrones textuales
que desencadenan acciones de procesamiento.

Las expresiones regulares proporcionan una notación apropiada a los lenguajes


regulares en las interfaces de usuario basadas en texto, mientras que los autómatas
finitos son estructuras de datos internas que se usan con fines de programación.
Podrás notar con mayor claridad la diferencia antes indicada al finalizar la revisión
del tema 2. Expresiones regulares y el tema 3. Autómatas finitos.

2.1.
Definición formal de una ER

En el subtema 1.4. Tipos de lenguajes se analizó brevemente el concepto de


expresión regular (ER). Ahora bien, desde el punto de vista de la Universidad Don
Bosco (2019), una expresión regular es “una serie de caracteres que forman un
patrón, normalmente representativo de otro grupo de caracteres mayor, de tal
forma que podemos comparar el patrón con otro conjunto de caracteres para ver
las coincidencias” (p. 2).

Si bien, la definición intuitiva de una ER nos puede ayudar a entender mejor


el concepto, es importante conocer la definición formal pues será esta la
que nos permitirá definir las operaciones sobre una expresión formal. Citan-
do a Gómez y Pardo (2015), “sea ∑ un alfabeto finito. Llamaremos expresión
regular sobre el alfabeto ∑ a toda palabra sobre el alfabeto ∑1 definido por
la siguiente igualdad” (p. 26):

15
Gómez y Pardo (2015, p. 26) manifiestan que deben tomarse en cuenta las siguientes
reglas:

• Las siguientes son expresiones regulares:

• El símbolo ' ' es una expresión regular,


• el símbolo 'λ' es una expresión regular y
• el símbolo a es una expresión regular, para cualquier símbolo a en el
alfabeto ∑,

Si α y β son expresiones regulares, también lo son las construidas mediante las


siguientes reglas:

(α+β) es una expresión regular,


(α ∙β) es una expresión regular y
(α)* es una expresión regular.

Es común que en la escritura de una ER se omitan los paréntesis y el símbolo de


producto (∙), a menos que exista alguna ambigüedad y se considere necesario su
uso. En este contexto, el símbolo * se denomina estrella o clausura de Kleene, la
cual hace referencia a todas las concatenaciones posibles de todos los elementos
disponibles (de Castro, 2004).

A continuación presentaremos algunos ejemplos de expresiones regulares y expli-


caremos casos en los que no existe una ER.

Si consideramos el alfabeto Σ = {a,b}, las siguientes serían expresiones regulares:

a) El lenguaje A de todas las cadenas que tienen una a:

b) El lenguaje B de todas las cadenas que comienzan con b:

Ahora bien, si tomamos en cuenta el alfabeto del ejemplo anterior, la siguiente


expresión no es una expresión regular, dado que no sigue las propiedades de una
ER enunciada en su definición formal. En otras palabras, la siguiente expresión no
es una ER, pues no se construye con ninguna de las tres operaciones básicas de
una ER (ver subtema 2.2.).

16
c)

Finalmente, de Castro (2004) aclara que “la representación de un lenguaje por


medio de expresiones regulares no es única. Es posible que haya varias expresiones
regulares diferentes para el mismo lenguaje” (p. 20).

2.2.
Operaciones

De Castro (2004) revela que las operaciones básicas que se pueden definir sobre
las expresiones regulares son las siguientes:

• Concatenación
• Unión
• Clausura de Kleene

Por ejemplo, si α y β son expresiones regulares sobre Σ, la concatenación de α y β


se denota por: (αβ), la cual también es una ER. De manera similar, la unión de α y β
se muestra como α U β. Finalmente, la clausura de Kleene (estrella de Kleene) se
denota por β*. En los ejemplos de los incisos a) y b) de la sección anterior se puede
observar el empleo de estas tres operaciones básicas. Existen otras operaciones
sobre las expresiones regulares, por ejemplo, la derivación de expresiones regulares,
la cual puedes consultar en la siguiente lectura:

Escanea el código QR para ver el documento relacionado


o da clic aquí.

Gómez Pérez, D. y Pardo Vasallo, L. M. (2015). Teoría de autómatas y lenguajes formales (p. 28). España:
Universidad de Cantabria. Recuperado de: https://personales.unican.es/pardol/Docencia/TALF2012.pdf

17
2.3.
Aplicaciones en problemas reales

Las expresiones regulares pueden aplicarse en problemas reales. En esta sección


solo se mostrarán algunas de ellas, sin embargo, no se debe perder de vista el
potencial que tienen las ER. Según Pérez, Fernández, Gutiérrez y Martínez (2011):

En tareas de procesamiento de lenguaje natural (PLN) es muy frecuente la


utilización de expresiones regulares para la detección de patrones en texto
para su posterior análisis y tratamiento. […] La tarea del reconocimiento de
entidades tradicionalmente está compuesta por dos subtareas: la detección
o identificación y la clasificación de las entidades. En la detección de las
entidades es donde tiene lugar la utilización de expresiones regulares, pues
permiten codificar las estructuras que marcan los patrones detectados en el
texto. Para cada patrón o grupo de patrones que se intente detectar, existirá
al menos una regla que lo defina (p. 881).

Otra aplicación en esta área es la comprobación vía ER, la cual, empleando las pa-
labras de BBVA (2016):

Determina si los datos llenados por los usuarios en un formulario son correc-
tos o no. Alguien puede utilizar un breve formulario para recabar el nombre,
los apellidos y el teléfono de contacto de sus clientes, y darse el caso de que
alguno de ellos no agregue la información correcta en alguno de los cam-
pos. La forma rápida de comprobarlo es a través de una expresión regular.

Finalmente, la expresión regular está ligada con los autómatas. Es decir, para toda
ER hay un autómata que acepta el lenguaje simbolizado por esa expresión. Por lo
tanto, Hopcroft, Motwani y Ullman (2008) sostienen que las expresiones regulares
definen “una notación estructural que permite describir los mismos patrones que se
pueden representar mediante los autómatas finitos. Se emplean en muchos tipos de
software, incluyendo herramientas para la búsqueda de patrones, por ejemplo, en
textos o en nombres de archivo” (p. 29).

En conclusión, las expresiones regulares no son más que cadenas de un alfabeto


que cumplen las reglas enunciadas en su definición. En este sentido, las operacio-
nes básicas sobre ER son similares a las operaciones entre cadenas y lenguajes.
Además, las aplicaciones que las ER tienen en problemas reales son diversas, una
de ellas está asociada con los autómatas, los cuales son el objeto de estudio de la
siguiente sección.

18
UNIDAD 3
AUTÓMATAS FINITOS

Las gramáticas regulares, como dispositivos generadores de lenguaje, están desti-


nadas a generar lenguajes regulares: la clase de lenguajes que están representados
por expresiones regulares. Los autómatas finitos, como dispositivos de aceptación
del lenguaje, son herramientas importantes para entender mejor los lenguajes re-
gulares.

3.1.
Definición formal

Citando a Cueva Lovelle (2001), la palabra autómata evoca

algo que pretende imitar las funciones propias de los seres vivos, especial-
mente relacionadas con el movimiento, por ejemplo, el típico robot antropo-
morfo. En el campo de los traductores, los procesadores, los compiladores
y los intérpretes, lo fundamental no es la simulación del movimiento, sino la
simulación de procesos para tratar información (p. 34).

Siguiendo esta misma línea, Hopcroft et al. (2008) señalan que “la teoría de autóma-
tas es el estudio de dispositivos de cálculo abstractos, es decir, de las “máquinas”
(p. 1).

Antes de presentar la definición formal de autómata finito se hace la siguiente acla-


ración: el término autómata finito hace referencia a la variedad determinista (autó-
mata finito determinista, AFD). Como se verá en la siguiente sección, hay dos tipos
de autómatas: los deterministas y los no deterministas. Por ende, la definición formal
que se enunciará enseguida corresponde a la de un AFD.

Jurado Málaga (2008, p. 40) afirma que un autómata finito determinista es una tupla
AFD=(∑,Q,f,q0,F), donde:

19
Si bien, Hopcroft et al. (2008) argumentan que “especificar un AFD utilizando esta
quíntupla es lo ideal, el dar una descripción detallada de la función de transición re-
sulta una tarea tediosa y complicada de leer. Por ello, hay disponibles dos notaciones
para describir a los autómatas” (p. 40), es decir, mediante un diagrama de transiciones
(diagrama de Moore) o una tabla de transiciones.

Para los fines de esta materia, el empleo de ambas notaciones se presenta en el


siguiente ejemplo.

Consideremos un AFD que acepte únicamente todas las cadenas de ceros y unos
que contengan la secuencia 01 en cualquier posición de la cadena (ver figura 7):

Figura 7. Diagrama de transiciones del AFD que acepta todas las cadenas que con-
tienen la subcadena 01. Fuente: Hopcroft et al. (2008, p. 40).

El diagrama anterior no es más que un grafo en el que los estados se representan


como vértices etiquetados con su nombre en el interior y las aristas dirigidas repre-
sentan las transiciones. Como dicen Hopcroft et al. (2008):

En este diagrama podemos ver los tres nodos correspondientes a los tres
estados. Hay una flecha etiquetada como Inicio que entra en el estado
inicial, q0, y un estado de aceptación, q1, representado mediante un doble
círculo. De cada estado sale un arco etiquetado con 0 y otro con 1 (aunque
los dos arcos se han combinado en uno con una doble etiqueta en el caso
de q1) (p. 40).

Si se representara el AFD anterior mediante una tabla de transiciones, según Hop-


croft et al. (2008), “las filas de la tabla corresponderían a los estados y las columnas
a las entradas” (p. 40). Además, Hopcroft et al. (2008) explican que “el estado inicial
se marcaría mediante una flecha y los estados de aceptación mediante un asterisco”
(p. 41). La figura 8 muestra la tabla de transiciones generada para este autómata en
particular.

20
Figura 8. Tabla de transiciones del AFD. Fuente: Hopcroft et al. (2008, p. 41).

Un autómata presenta una primera aproximación a las máquinas de Turing,


ya que procesa listas y va corrigiendo la palabra dada. Si al final del proceso el
autómata alcanza una configuración final aceptable, se debe a que la palabra en la
configuración inicial era correcta. En caso contrario, la rechaza. Todos estos son
conceptos que se retomarán en el siguiente bloque.

3.2.
Clasificación de AF

La clasificación de los autómatas, como se anticipaba en la sección anterior, presen-


ta dos categorías, los autómatas finitos deterministas (AFD) y los autómatas finitos
no deterministas (AFND). Hopcroft et al. (2008) explican las diferencias entre un
autómata finito determinista y un autómata finito no determinista:

Un autómata finito determinista es aquel que solo puede estar en un único


estado después de leer cualquier secuencia de entradas. El término “deter-
minista” hace referencia al hecho de que para cada entrada solo existe uno
y sólo un estado al que el autómata puede hacer la transición a partir de su
estado actual Por el contrario, un autómata finito “no determinista” puede
estar en varios estados a la vez (p. 38).

Por su parte, Jurado Málaga (2008) plantea las distinciones entre los autómatas de-
terministas y no deterministas:

En los autómatas deterministas sabemos exactamente cuál es la transición


que debemos llevar a cabo ante una determinada situación. Sin embargo, en
los no deterministas podemos encontrarnos con varias opciones e, incluso,
con λ-transiciones que se realizan sin considerar el correspondiente símbolo
de la cadena de entrada (pp. 47-48).

21
Al igual que con los AFD, enseguida se presenta un ejemplo de un AFND, conside-
rando una tabla y un diagrama de transición (ver figuras 9 y 10).

Figura 9. Representación de un AFND a través de una tabla de


transición. Fuente: Jurado Málaga (2008, p. 49).

Figura 10. Representación de un AFND por medio de un diagra-


ma de transición. Fuente: Jurado Málaga (2008, p. 49).

Existen otras clasificaciones de autómatas finitos, por ejemplo, AF conexos o AF con


pila, los cuales quedan fuera de los alcances de esta materia. No obstante, si deseas
profundizar en el tema, te recomiendo que analices la siguiente lectura:

Escanea el código QR para ver el documento relacionado


o da clic aquí.

Hopcroft, J. E., Motwani, R. y Ullman, J. D. (2008). Introducción a la teoría de au-


tómatas, lenguajes y computación (pp. 31-68). Madrid: Pearson Educación. Re-
cuperado de: https://elibro.net/es/ereader/ieu/52537?page=49

22
3.3.
Conversión de un AFND a AFD

Como lo hace notar Jurado Málaga (2008):

Los AFND y los AFD tienen el mismo poder computacional (esto no ocurre
en otros niveles de la jerarquía de los autómatas), es decir, pueden resolver
los mismos problemas. Por lo tanto, dado un AFND siempre es posible en-
contrar un AFD que sea equivalente a él (p. 52).

La idea general de esta conversión requiere que tanto el alfabeto Σ como


el estado inicial q0 se mantengan sin cambios al pasar de un autómata fini-
to no determinista a un autómata finito determinista. La conversión implica
pasar por un AFD intermedio con estados y transiciones redundantes que,
al no ser accesibles a partir del estado inicial, son eliminados para obtener
el AFD definitivo.

Consideremos el AFND dado por la quíntupla A=(∑,Q_N,f,q_0,F_N). Nótese que aquí


el subíndice N nos sirve para indicar que se trata de los estados de un AFND. Ahora
bien, en la opinión de Padilla (s.f., p. 36), para delimitar el AFD intermedio se deben
seguir los siguientes pasos:

• Redefine el conjunto de estados QN= {q0,q1,…,qm} original que se constituye


por todos los subconjuntos de QN. Los nuevos estados finales serán todos
aquellos estados que contengan a alguno de los estados finales originales.
• Posteriormente, redefine el conjunto de transiciones original, por transiciones
del tipo δD (S,a), donde a Σ, y S es la unión de todos los estados q de QN
para los que existía la transición δN=(q,a).
• Por último, se eliminan los estados inaccesibles o inalcanzables (junto con
sus transiciones de salida), en otras palabras, aquellos a los que no se puede
acceder a partir del estado inicial. Luego de esta depuración, se obtiene el
AFD final.

23
Una descripción más detallada de este proceso se puede encontrar en Jurado Má-
laga (2008, pp. 52-55), que además de ejemplificar la conversión de un AFND a un
AFD, este último es minimizado. El tema de minimización de estados de un AFN se
verá en el subtema 3.5. Para ejemplificar el proceso de conversión descrito consi-
deremos el AFND a partir del diagrama de transiciones de la figura 11, cuyo estado
inicial es q0 = A y estado final es qm = E :

Figura 11. Diagrama de transición para un AFND. Fuente: Jurado Málaga (2008, p. 53).

Al aplicar el proceso de conversión, el autómata finito determinista que se origina


es el siguiente (figura 12):

Figura 12. AFD equivalente al AFND de la ilustración previa. Fuente: Jurado Málaga (2008, p. 54).

24
En ocasiones, la conversión de un autómata finito no determinista a un autómata
finito determinista puede resultar complejo, sin embargo, contar con un AFD, dado
un estado inicial, nos permite tener solamente un estado para moverse, lo cual, sim-
plifica en gran medida las decisiones sobre el autómata.

3.4.
Representación de ER usando AFND

En secciones anteriores se destacó que, empleando las palabras de Jurado Málaga


(2008), “las gramáticas regulares generan lenguajes regulares que pueden ser re-
presentados mediante expresiones regulares. A su vez, estos lenguajes pueden ser
reconocidos por un autómata finito (p. 55).

En esta sección se mostrarán algunas expresiones regulares y su representación a


través de un autómata finito no determinista. El objetivo es conocer su estructura
básica para que se pueda ensamblar y construir una ER más compleja posteriormente
mediante un AFND.

La primera ER es el conjunto vacío:

Figura 13. Conjunto vacío. Fuente: Jurado Málaga (2008, p. 59).



ER = cadena vacía:

Figura 14. Cadena vacía. Fuente: Jurado Málaga (2008, p. 59).

25
ER = un elemento del alfabeto:

Figura 15. Elemento del alfabeto. Fuente: Jurado Málaga (2008, p. 59).

Unión de ER:

Figura 16. Unión de expresión regular. Fuente: Jurado Málaga (2008, p. 59).

Concatenación de ER:

Figura 17. Concatenación de expresión regular. Fuente: Jurado Málaga (2008, p. 59).

Potencia de una ER:

Figura 18. Potencia de expresión regular. Fuente: Jurado Málaga (2008, p. 59).

26
A partir de las expresiones regulares básicas es posible obtener los dia-
gramas asociados con los AFND y, como se mencionaba al inicio, construir
ER más complejas.

3.5.
Minimización de estados en un AF

Jurado Málaga (2008) explica cómo se minimiza un autómata finito determinista:

En ocasiones, nos encontramos con autómatas que tienen algunos estados


equivalentes, en estos casos esos estados se pueden agrupar de manera
que se consigue un autómata, equivalente al primero, pero con un menor
número de estados. Se dice que el autómata ha sido minimizado (p. 43).

Ahora bien, Jurado Málaga (2008) argumenta que la minimización no se debe con-
fundir con el concepto de simplificar, el cual “consiste en eliminar estados muertos
o inaccesibles” (p. 43). Antes de presentar el algoritmo para minimizar un autómata
finito determinista, debemos aclarar el concepto de estado equivalente:

El objetivo principal de este algoritmo consiste en agrupar estados equi-


valentes. Consideraremos que dos estados son equivalentes cuando las
transiciones que parten de ellos, para cada uno de los símbolos del alfabe-
to, llevan al mismo estado o a estados que también son equivalentes entre
sí. Todos los estados que sean equivalentes entre sí se unirán en un único
estado en el autómata resultante (Jurado Málaga, 2008, pp. 43-44).

A continuación se presenta el algoritmo de minimización de un AFD. Jurado Málaga


(2008) plantea que “inicialmente se construye una partición de Q formada por dos
únicos elementos: los estados de aceptación y los que no lo son” (p. 44). Dicha par-
tición se refinará en cada iteración.

27
Figura 19. Minimización de un AFD Fuente: Jurado (2008, p. 44).

Como se mencionó en el subtema 3.3., el AFD obtenido a través de un AFND no es


un autómata mínimo. Por lo tanto, para concluir esta sección se presenta la minimi-
zación de los estados del AFD de la figura 12.

Por ende, consideremos la siguiente partición:

Figura 20. Partición. Fuente: Jurado Málaga (2008, p. 54).

Asimismo, las tablas muestran el análisis del comportamiento de todos los estados
con a y b:

Figura 21. Estados de G1 y G2. Fuente: Jurado Málaga (2008, p. 54).

28
Como puedes observar, los estados de G_1, a diferencia de los estados de G_2, to-
dos son equivalentes y este comportamiento genera la siguiente partición:

Figura 22. La nueva partición. Fuente: Jurado Málaga (2008, p. 54).

Por lo tanto, el AFD mínimo que se obtuvo a partir del AFD del ejemplo de la figura
12 es el siguiente:

Figura 23. Diagrama de transición del AFD mínimo. Fuente: Jurado Málaga (2008, p. 55).

En resumen, este ejemplo nos ayuda a comprender dos situaciones importantes:


la primera es que al convertir un AFND a un AFD, el autómata resultante puede
contener estados irrelevantes o inaccesibles, razón por la cual es recomendable
realizar la minimización de los estados del AFD resultante de la conversión.

3.6.
Aplicaciones (definición de un caso de estudio)

Los autómatas tienen diversas aplicaciones en diferentes problemas. Primero por su


relación con las expresiones regulares, como se indicó al final del tema 2. En este
subtema presentaremos algunas aplicaciones de los autómatas finitos.

• El primer ejemplo de aplicación es un caso de estudio sobre los AF, desarro-


llado por Salas Rueda (2016), donde implementa una interfaz web accesible
para el proceso de enseñanza-aprendizaje superior. En esta investigación, el
objetivo principal fue diseñar, implementar y evaluar el desempeño de una

29
interfaz web accesible que presenta los contenidos audiovisuales sobre los
autómatas finitos, ante un grupo de 20 alumnos en la materia Matemáticas
computacionales, de una universidad de la Ciudad de México. Si deseas pro-
fundizar en el tema, lee el siguiente artículo:

Escanea el código QR para ver el documento relacionado


o da clic aquí.

Salas Rueda, R. A. (2016). Implementación de una interfaz web accesible para el proce-
so de enseñanza-aprendizaje superior. Un caso de estudio sobre los autómatas de esta-
do finito. Revista Iberoamericana de Producción Académica y Gestión Educativa, 3 (5). Re-
cuperado de: https://www.pag.org.mx/index.php/PAG/article/view/439/478

• El segundo ejemplo de aplicación, creada por Delgado, Valdez y Guevara


(2011), utiliza un modelo autómata finito determinista para mostrar una repre-
sentación alternativa de las trayectorias de un vehículo evasor de obstáculos
(VEO). La forma de emplear los autómatas finitos es la siguiente: el vehículo
posee dos motores de corriente continua y puede evadir obstáculos al ob-
tener información del medio que lo rodea. La salida de esta información es
procesada e interpretada digitalmente para elaborar una serie de trayectorias
posibles del vehículo, por ejemplo, girar a la izquierda, girar a la derecha,
avanzar, retroceder, etc. Al examinar estos estados posibles a través de la
teoría de AF, el modelado descriptivo del VEO puede simplificarse e, incluso,
representarse gráficamente mediante el diagrama de transiciones.

30
Escanea el código QR para ver el documento relacionado
o da clic aquí.

Delgado Reyes, G., Valdés Martínez, J. S. y Guevara López, P. (2011). Autómatas finitos: su aplicación para
describir la trayectoria de un vehículo evasor de obstáculos. Revista de Divulgación Científica y Tecno-
lógica: Aleph Zero, 16 (60). Recuperado de: https://www.researchgate.net/publication/287432309_Auto-
matas_finitos_su_aplicacion_para_describir_la_trayectoria_de_un_vehiculo_evasor_de_obstaculos

• Este último caso de estudio no es exactamente una aplicación de los autó-


matas finitos, pues se enfoca en definir qué herramientas existen para com-
prender los autómatas finitos. Sosa y de Sande (2005) presentan un tutorial
online para teoría de autómatas y lenguajes formales (ToTalf), el cual ha sido
diseñado como una herramienta de apoyo para realizar las prácticas de la
asignatura Teoría de autómatas y lenguajes formales de la Universidad de La
Laguna. La razón de incluir esta última fuente es que describe varias aplicacio-
nes, por ejemplo, JFLAP y ABCEZ (Applet Based Computability Enlightenment
Zone), así como casos de estudio de las diferentes herramientas disponibles
para aprender la teoría de autómatas.

Escanea el código QR para ver el documento relacionado


o da clic aquí.

Sosa, R. y de Sande, F. (2005). Una herramienta de apoyo en la enseñanza de teoría de autó-


matas y lenguajes formales. Actas del Simposio Nacional de Docencia en la Informática, 181-
188. Recuperado de: http://bioinfo.uib.es/~joemiro/aenui/ProcSindi/P2005/1266.pdf

31
En conclusión, Jurado Málaga (2008) afirma que “el estudio de los autómatas finitos
se utiliza para modelar el comportamiento de dispositivos mecánicos y también de
sistemas naturales. Concretamente, permite estudiar procesos que dependen de una
historia, es decir, sistemas cuyo comportamiento actual depende del pasado” (p. 40).

32
Referencias.
Barzana (s.f.). IATEI II. Herramientas de análisis del corpus. Recuperado de: https://www.um.es/docencia/
barzana/TEI/Informatica-Aplicada-a-la-Traduccion-Herramientas-de-analisis-del-corpus.html

BBVA (11 de agosto de 2016). Expresiones regulares en programación: ejemplos


prácticos para JavaScript. Recuperado de: https://bbvaopen4u.com/es/actualidad/
expresiones-regulares-en-programacion-ejemplos-practicos-para-javascript

Cueva Lovelle, J. (2001). Lenguajes, autómatas, gramáticas. España: Universidad de Oviedo.


Recuperado de: http://www.reflection.uniovi.es/ortin/publications/automata.pdf

De Castro, R. (2004). Teoría de la computación, lenguajes, autómatas, gramáticas. Universidad


Nacional de Colombia. Recuperado de: http://ciencias.bogota.unal.edu.co/fileadmin/
Facultad_de_Ciencias/Publicaciones/Archivos_Libros/Libros_Matematicas/_Teoria_de_
la_Computacion___lenguajes__automatas__gramaticas._/teoriacomputacion.pdf

Delgado Reyes, G., Valdés Martínez, J. S. y Guevara López, P. (2011). Autómatas finitos: su aplicación
para describir la trayectoria de un vehículo evasor de obstáculos. Revista de Divulgación Científica y
Tecnológica: Aleph Zero, 16 (60). Recuperado de: https://www.researchgate.net/publication/287432309_
Automatas_finitos_su_aplicacion_para_describir_la_trayectoria_de_un_vehiculo_evasor_de_obstaculos

Gálvez Rojas, S. y Mora Mata, M. Á. (2005). Java a tope: traductores y compiladores


con Lex/Yacc, Jflex/Cup y Javacc. España: Universidad de Málaga. Recuperado
de: http://www.lcc.uma.es/~galvez/ftp/libros/Compiladores.pdf

Gómez Pérez, D. y Pardo Vasallo, L. M. (2015). Teoría de autómatas y lenguajes formales. España:
Universidad de Cantabria. Recuperado de: https://personales.unican.es/pardol/Docencia/TALF2012.pdf

33
Hopcroft, J. E., Motwani, R. y Ullman, J. D. (2008). Introducción a la teoría de autómatas, lenguajes y
computación. Madrid: Pearson Educación. Recuperado de: https://elibro.net/es/ereader/ieu/52537

Jurado Málaga, E. (2008). Teoría de autómatas y lenguajes formales (pp. 39-52). España:
Universidad de Extremadura: Servicio de Publicaciones / Pedro Cid. Recuperado de:
http://dehesa.unex.es/bitstream/10662/2367/1/978-84-691-6345-0.pdf

Peinado, F. (2010). Repaso: lenguajes formales. Recuperado de: http://www.fdi.ucm.


es/profesor/fpeinado/courses/compiling/repaso-lenguajesformales.pdf

Pérez Martínez, A., Fernández Orquín, A., Gutiérrez Vázquez, Y. y Martínez, Y. (2011).
Generación de expresiones regulares para la creación de reglas en aplicaciones de PLN.
Conference: XII Simposio Internacional de Comunicación Social. Santiago de Cuba, Cuba.
Recuperado de: https://www.researchgate.net/publication/233844159_Generacion_de_
expresiones_regulares_para_la_creacion_de_reglas_en_aplicaciones_de_PLN

Pérez Pérez, I. y Monroy Cedillo, J. J. (s.f.). Autómatas y compiladores: apuntes digitales.


México: Universidad Autónoma del Estado de Hidalgo / Instituto de Ciencias Básicas e
Ingeniería. Recuperado de: http://www.lcc.uma.es/~galvez/ftp/libros/Compiladores.pdf

Padilla, J. (s.f.). Autómata infinito. Recuperado de: http://docshare01.docshare.tips/files/16343/163431012.pdf

Salas Rueda, R. A. (2016). Implementación de una interfaz web accesible para el proceso
de enseñanza-aprendizaje superior. Un caso de estudio sobre los autómatas de estado
finito. Revista Iberoamericana de Producción Académica y Gestión Educativa, 3 (5).
Recuperado de: https://www.pag.org.mx/index.php/PAG/article/view/439/478

Sosa, R. y de Sande, F. (2005). Una herramienta de apoyo en la enseñanza de teoría de autómatas


y lenguajes formales. Actas del Simposio Nacional de Docencia en la Informática, 181-188.
Recuperado de: http://bioinfo.uib.es/~joemiro/aenui/ProcSindi/P2005/1266.pdf

Universidad Don Bosco (2019). Compiladores. Guía IV. El Salvador: Universidad Don Bosco. Recuperado de:
http://www.udb.edu.sv/udb_files/recursos_guias/informatica-ingenieria/compiladores/2019/ii/guia-4.pdf

Universidad Politécnica de Madrid (s.f.). Lenguajes naturales y lenguajes formales. Recuperado


de: https://hopelchen.tecnm.mx/principal/sylabus/fpdb/recursos/r91608.PDF

34

También podría gustarte