Está en la página 1de 31

Desarrollo temático de la unidad

1. Expresiones gramaticales y autómatas finitos.


Los lenguajes de programación se rigen por reglas de sintaxis y semántica más complejas
y definidas que los lenguajes naturales, dado que, los seres humanos podemos ser más
flexibles a modismos, regionalismos, neologismos, abreviaturas y otras variaciones que
no distorsionan el mensaje; los computadores, son más rígidos en la aceptación de
cadenas con gramática definida.
1.1. Tipos de lenguajes: Los lenguajes se clasifican en cuatro tipos, según la jerarquía
de Chomsky (Birchenall & Müller, 2014). La jerarquía es acumulativa y cada nivel
se relaciona con un tipo de autómata diferente, el más básico, es el tipo 3 y el más
completo es el tipo 0.

Ilustración 1 Tipos de lenguajes y autómatas

Elaboración propia

1.1.1. Tipo 3. Lenguajes regulares: Generan cadenas básicas simples o unidas


con operadores lógicos como la intersección, la unión, la negación, o la
concatenación, una cantidad finita de veces. Pueden ser reconocidos por
autómatas finitos deterministas. Por ejemplo, pueden aceptar cadenas como anbr,
que podría ser a3b2 o sea “aaabb”. Hay que especificar el valor de “n” y de “r”
explícitamente. Además de reconocer cadenas de texto, los autómatas finitos se
usan para generar máquinas secuenciales (Birchenall & Müller, 2014).
1.1.2. Tipo 2. Lenguajes libres de contexto: Son los que requieren de una unidad
de memoria para poder ser reconocidos. Pero la memoria puede usarse solamente
una vez. Por ejemplo, anbn. que podría ser a2b2, o sea “aabb”. Solamente se
especifica el valor de “n”, por lo tanto, después de reconocer la subcadena an,
debe almacenar en una memoria la cantidad de veces que leyó la letra “a” para
poder verificar que la cantidad de veces que lee “b” sí sea la misma. Otros
ejemplos: anb(n+2), anb(2n), etc. Los lenguajes libres de contexto pueden ser leídos
por los autómatas de pila, “Push-Down” (Birchenall & Müller, 2014).
1.1.3. Tipo 1. Lenguajes dependientes del contexto: Pueden ser leídos por un
autómata acotado lineal, que viene siendo una máquina de Turing no determinista
con una cantidad finita de posiciones. En lugar de una pila, tienen una cinta que
se puede desplazar a ambos lados o quedarse inmóvil en cada paso, según el
algoritmo que está corriendo. Este autómata puede usarse como una unidad de
memorias múltiples y reutilizables. El alfabeto de entrada incluye dos símbolos
especiales # y $, que son las marcas fin de cinta, izquierda y derecha
respectivamente. La cabeza del autómata no puede desplazarse fuera de los
límites izquierdo y derecho de la cinta, y no puede imprimir otro símbolo sobre # y
$. Puede reconocer cadenas como anb(n+1)c(n+2)d(n+3) (Cueva, y otros, 2003).
1.1.4. Tipo 0. Lenguajes sin restricción: Puede ser leído por una máquina de
Turing. El lenguaje aceptado o reconocido por una máquina de Turing, es el
conjunto de palabras que hace que la máquina de Turing se pare al alcanzar un
estado final.
La cinta desplazable que usa la máquina de Turing puede usarse como una unidad
de memorias múltiples y reutilizables. Permite cambiar de posición cualquier
símbolo de la cadena, lo cual, se puede usar para ejecutar todo tipo de algoritmos
lógicos y matemáticos. A diferencia del tipo 1, la máquina de Turing puede cambiar
los símbolos de los extremos y puede extenderse fuera de ellos (Cueva, y otros,
2003).
Aunque la máquina de Turing fue creada para resolver una operación concreta, el
mismo Alan Turing aseguró que puede resolver todos los problemas matemáticos
que pueden expresarse mediante un algoritmo (número 531 de la revista Historia
y Vida).
1.2. Autómata finito: Reconocen cadenas de lenguajes tipo 3, es decir, lenguajes
regulares. Un autómata finito se define en función de los siguientes cinco puntos,
conocidos como la quíntupla del autómata:

Ilustración 2 Autómata finito 1 Pantallazo de JFLAP


Q: Conjunto finito de estados. En el autómata finito 1, Q = q0, q1, q2 y q3.
Σ: Alfabeto, siempre debe ser finito y no puede ser vació. En el autómata finito 1,
Σ = a, b, c, d. La letra λ indica que se puede pasar de q2 a q3 sin necesidad
de leer algún carácter. Es una transición vacía.
S: Estado inicial. S ∈ Q. Siempre debe existir un solo estado inicial. En el autómata
finito 1, es S = q0.
F: Estado final o estados finales. F ⊆ Q. En el autómata finito 1, solamente hay
un estado final F = q3.
Δ: Transición. En la transición, el autómata lee un carácter del alfabeto, ya sea
para permanecer en el mismo estado o para pasar a otro.

1.3. Tipos de transiciones: Las transiciones más comunes son:


Tabla 1 Tipos de transiciones

a*Significa que la letra “a” puede omitirse,


o leerse una vez o varias veces. En el
autómata finito 1 es la transición de q0 a
q0.

b+: Significa que la letra b debe leerse al


menos una vez. En el autómata finito 1 es
la transición de q0 a q1 y luego de q1 a q1
cualquier cantidad de veces.

c | d: Se lee “c” o “d”. Leyendo una letra


“c” o una letra “d” pasa de q1 a q2.

ef: Se lee “e” y “f”. Para pasar de q0 a q2,


debe leer ambas letras en el orden en que
están escritas. Cada letra debe estar
definida en el alfabeto. Por ejemplo:
Σ = e, c, h, o ≠ Σ = e, ch, o
λ: Transición vacía. Significa que puede
pasar a otro estado sin necesidad de leer
algún carácter.

Expresiones regulares que acepta el Expresiones regulares que rechaza


autómata finito 1: el autómata finito 1:
bc, bd, abc, abd, aaacb, aaabd, bbbc, ac, ad, bac, cba, dba, aabb, aadd,
abbbc, abbbd, aaabbbc, aaabbbd,etc. aaacbbb, aaadbbb, abccc, bdd, etc.

1.4. Autómata finito deterministas y no deterministas AFD & AFND: Un autómata


finito es determinista si para cada transición, hay solamente un estado siguiente. El
autómata finito 1 de la ilustración 2 es un AFD.
Un autómata finito es no determinista si para alguna de las transiciones, hay más de un
estado siguiente, es decir, la decisión es indeterminada.
Tabla 2 Ejemplos de autómatas no deterministas

Con la letra “a”, se puede salir de q0 Con la letra “a” puede permanecer en el

para q1 o para q2. estado q0 o puede salir hacia q1.


1.4.1. Convertir una AFND en AFD: Todo autómata finito no determinista se puede
convertir en determinista. Es probable que cambie la cantidad de nodos o de
transiciones. Ambos deben aceptar las mismas cadenas.

Tabla 3 Convertir AFND en AFD

AFND AFD convertido con el simulador JFLAP


1.4.2. Minimizar un autómata finito: Un autómata finito determinista con transiciones
redundantes, se puede minimizar, de modo que acepte las mismas cadenas que el
original.

Tabla 4. Minimizar autómatas

Autómata finito Autómata finito minimizado


con el simulador JFLAP

Expresión regular es: [(a|b)(a|b)]+

El autómata original tiene dos estados finales.

Expresión regular es: (a|b)(a|b) [(a|b)(a|b)(a|b)]*


1.5. Entrenamiento con autómatas finitos: A partir de la siguiente expresión regular,
resolver los siguientes puntos.

1. Dada la expresión gramatical regular 01*(001*)*, resolver los siguientes


puntos:

a. Construir el autómata finito que pueda reconocer la expresión gramatical.


b. Construir la quíntupla del autómata.
c. Construir la tabla de transiciones.
d. Comprobar mínimo 5 cadenas que cumplan la gramática y sean aceptadas por el
autómata y 5 cadenas que no cumplan la gramática y sean rechazadas por el
autómata.

Solución:

En primer lugar, hay que entender cada símbolo de la expresión.

• El primer asterisco indica que el primer “1” se puede omitir o repetir cuantas
veces se quiera, pero sólo el “1”.

• El segundo asterisco indica que el “1” dentro del paréntesis también se puede
omitir o repetir cuantas veces se quiera, pero sólo el “1”.

• El tercer asterisco indica que todo lo que hay dentro del paréntesis, se puede
omitir o repetir cuantas veces se quiera, o sea “001*”.

En segundo lugar, hay que escribir algunas cadenas que cumplan con la gramática
para que el autómata las acepte.
• 0 • 0001
• 01 • 0001001001
• 000 • 01001110011100111
• 011111 • 01111001001001001
• 0000000 • 01001
• 0100 • 0001001001
• 010000 • 0001110011100111

En tercer lugar, hay que escribir algunas cadenas que no cumplan la gramática para
que el autómata las rechace.
• 1 • 011101110111
• 0101 • 001
• 10110 • 0001110
• 01001110 • 01001001010
• 101010 • 11

a. Se construye el autómata correspondiente a la expresión regular.

Ilustración 3 Autómata finito, 01*(001*)*

b. La quíntupla de este autómata es:


Q = {q0, q1}
Σ = {0, 1}
S = q0
F = {q1}
Δ = {(q0, 0, q1), (q1, 0 q0), (q1, 1, q1)}
c. Las transiciones también se pueden expresar en una tabla de esta forma:
Tabla 5 transición Autómata finito, 01*(001*)*

Transicione
q0 q1
s
q0 - 0
q1 0 1

d. Después de tener el autómata finito, puedes verificar que se acepten las


cadenas que cumplen con la gramática.
En este ejemplo, se usó el simulador JFLAP, en la opción de autómatas finitos, usando
la siguiente ruta:
Ilustración 4 Ruta para simulación múltiple

Tabla 6 Resultado de la simulación múltiple

El resultado de las cadenas que debe aceptar: Las cadenas que debe rechazar:

Te invito a ingresar al siguiente OVA, donde encontrarás casos resueltos debidamente


explicados y ejercicios de aprendizaje.
OVA 1
Autor: Bernardo León Hoyos Espinosa
Título: Entrenamiento de Autómatas, gramáticas y lenguajes
URL:

Anexo_1_OVA
Si ya comprendiste los ejercicios del OVA 1, llegaste a otro nivel y estás en capacidad
de resolver ejercicios con varias condiciones conectadas con operadores lógicos.

1.6 Autómatas finitos con operadores lógicos


Es necesario que tengas clara la teoría de conjuntos y las tablas de verdad de álgebra
booleana para resolver autómatas con más de una condición.
Te invito a ingresar al siguiente reto formativo donde encontrarás ejercicios que te
ayudarán a entender mejor los autómatas.
Reto formativo 1. Autómatas finitos con operadores lógicos
Planteamiento:

La teoría de conjuntos enseña la base de los operadores lógicos


usados en álgebra booleana. Los operadores lógicos más usados son:

En español Conjuntos Álgebra Programación


Intersección / Y ∩ ˄ &&
Unión / O Ս ˅ ||
Negación A’ ≠ ~ !
Comparadores ≤, ≥, <, >

Los autómatas, a veces deben reconocer cadenas que cumplan dos o


más condiciones que están conectadas con operadores lógicos. Los
autómatas cambian radicalmente dependiendo del operador lógico que
las enlaza.

Instrucciones:

Encontrarás diez enunciados y diez autómatas que deben ser


apareados. Podrás ayudarte viendo el video de cada punto con la
explicación y el paso a paso de la solución.

Desarrollo del reto o preguntas:

URL
Reto formativo 1 autómatas con operadores lógicos
Anexo_Reto_Formativo_1

El reto formativo de operadores lógicos es una herramienta que te abre la mente y te da


un nivel muy avanzado en la lógica de los algoritmos. Si ya entendiste todos y cada de
los puntos, felicitaciones.
Ahora que conoces la importancia de la gramática en los lenguajes de programación y
conoces algoritmos que aceptan o rechazan cadenas de texto según las reglas
gramaticales dadas, podrás aprender un tipo de autómata más avanzado que los vistos
en el primer tema de esta unidad, llamado autómata de pila. La diferencia es que estos
últimos tienen una unidad de memoria y permite llevar la cuenta de algunas operaciones
que no sería posible con los autómatas finitos.

Ya estás en capacidad de resolver la evidencia de aprendizaje 1 sobre expresiones


regulares y autómatas finitos.
Anexo _2_ EA1_Expresiones_Regulares
Anexo_3_Rúbrica_EA1

Desarrollo temático de la unidad

2. Autómatas de Pila y Lenguajes Libres de Contexto.


Los lenguajes independientes del contexto, o libres del contexto (LC), son importantes
porque sirven como mecanismo formal para expresar la gramática de lenguajes de
programación o los semiestructurados. Por ejemplo, la popular “Backus-Naur form” es
esencialmente una gramática libre del contexto. Similarmente, los DTDs usados para
indicar el formato permitido en documentos XML, son esencialmente gramáticas que
describen lenguajes LC.
Los lenguajes LC también se usan en biología computacional para modelar las
propiedades que se buscan en secuencias de ADN o proteínas. El estudio de este tipo
de lenguajes, deriva en la construcción semiautomática de parsers (reconocedores)
eficientes, los cuales son esenciales en la construcción de compiladores e intérpretes,
así como para procesar textos semiestructurados. Una herramienta conocida para esta
construcción semiautomática es lex/yacc en C/Unix, y sus distintas versiones, para otros
ambientes. Estas herramientas reciben esencialmente una especificación de un lenguaje
LC y producen un programa que escanea tal lenguaje. (Navarro, 2016)
En términos teóricos, los lenguajes LC son interesantes porque van más allá de la limitada
memoria de los regulares, pudiendo almacenar una cantidad arbitraria de información
sobre el pasado, siempre que esta información se acceda en forma de pila. Es interesante
ver los lenguajes que resultan de esta restricción. (Navarro, 2016)

2.1 Autómata de pila: En inglés, Push Down Automaton PDA. Son autómatas finitos
con un poder adicional de operación porque tienen unidades de memoria. La
memoria de estos autómatas se llama pila debido a que se pueden agregar datos
solamente en el tope de la lista y se pueden extraer los datos solamente desde dicho
tope.
Ilustración 5 Autómata de pila

Elaboración propia

Esta forma de agregar o quitar datos del tope de una lista, obedece a un sistema LIFO
(LAST IN, FIRST OUT). El último que entra es el primero que sale y da origen a lo que
se conoce como “arreglo” o vector en programación.
Son autómatas que reconocen cadenas de lenguajes tipo 2, es decir, lenguajes libres de
contexto. Un autómata de pila, a diferencia de los finitos, tiene tres símbolos en cada
transición: El primero es el símbolo que lee en la cadena de texto, igual que en un
autómata finito; después de una coma, está el símbolo que encuentra en el tope de la
pila; luego de un punto y coma, está el símbolo que deja en el tope de la pila. Los tres
escenarios que se pueden presentar son:
Tabla 7 Tope de pila

a) Cambiar dato en el b) Quitar dato del tope c) Agregar dato al tope

tope de la pila de la pila de la pila.

Para pasar de q0 a q1,


debe leer una “a” en la Para pasar de q0 a q1,
Para pasar de q0 a q1,
cadena de texto y debe leer una “a” en la
debe leer una “a” en la
encontrar una “X” en el cadena de texto y adiciona
cadena de texto y
tope de la pila. Entonces una “Y” sin importar qué
encontrar una “X” en el
quita la “X”. El símbolo λ hay en el tope de la pila.
tope de la pila. Entonces
significa no adicionar. La La pila queda con un dato
cambia la “X” por la “Y”.
pila queda con un dato más.
menos.
Un autómata de pila se define en función de los siguientes siete puntos, conocidos como
la séptupla del autómata:
Q: Conjunto finito de estados. En los ejemplos de la tabla 7 hay dos estados, Q =
q0 y q1.
Σ: Alfabeto de la cadena de texto, siempre debe ser finito y no puede ser vació. En
los ejemplos de la tabla 7, Σ = a. También acepta transiciones vacías, como en
los autómatas finitos.
S: Estado inicial. S ∈ Q. Siempre debe existir un solo estado inicial. En los ejemplos
de la tabla 7, S = q0.
F: Estado final o estados finales. F ⊆ Q. En los ejemplos de la tabla 7, solamente
hay un estado final, F = q1.
Τ: (Tau). Alfabeto de la pila. Siempre debe ser finito y no puede ser vació.
Δ: Transición. En la transición el autómata lee un carácter del alfabeto, lee el tope
de la pila y asigna el nuevo valor del tope de la pila, ya sea para permanecer en
el mismo estado o para pasar a otro.
Z0: Indica que la pila está vacía. Es el símbolo inicial de la pila.

Los autómatas de pila, terminan exitosamente el proceso cuando se cumplen estas tres
condiciones:
● Lee toda la cadena.
● Llega a un estado final.
● La pila queda vacía.

También puede darse el caso de un


algoritmo que deba detenerse cuando
termine de leer la cadena de texto sin
llegar a un estado final determinado.
Razón por la cual, el simulador da la
opción de detenerse de ambas formas.

En ambos casos, la pila debe quedar Ilustración 6 Opciones del Autómata de pila
vacía y la cadena debe llegar al final.
2.2 Entrenamiento para expresiones gramaticales libres de contexto. A
continuación, encontrarás algunos ejercicios resueltos.

1. A partir de la siguiente expresión libre de contexto 0n1n resolver los


siguientes puntos:

a. Construir un autómata de pila que pueda reconocer la expresión gramatical.


b. Construir la séptupla (siete parámetros) del autómata.
c. Construir la tabla de transiciones.
d. Comprobar mínimo 5 cadenas que cumplan la gramática y sean aceptadas por
el autómata y 5 cadenas que no cumplan la gramática y sean rechazadas por
el autómata.

Solución:

A pesar de lo simple de la expresión 0n1n, no puede ser reconocida por un autómata


finito, pues este podría leer la primera parte, 0n, pero luego no sabría cuántas veces
debe leer 1n, para aceptarla. Por eso, se requiere el autómata de pila.

Algunas cadenas que usaremos para probar el autómata de pila, son.


Debe aceptar Debe rechazar
• 01 • 0
• 0011 • 1
• 000111 • 001
• 00001111 • 0111
• 0000011111 • 1100
a. Autómata de pila:

Ilustración 7 El autómata correspondiente a la expresión regular 0n1n


Tabla 8 Paso a paso de reconocimiento con la cadena “000111”

Inicialmente, se encuentra en q0 y la pila está vacía, como


indica la “Z”.

Ya leyó el primer cero y agregó un “X” a la pila. El estado


sigue siendo q0.

Leyó el segundo cero y agregó otra “X” a la pila. Continúa en


el estado q0.

Leyó el tercer cero y agregó la tercera “X” a la pila. Note que


por cada cero que ha leído, ha agregado una “X” a la pila.
Aún se encuentra en q0.

Como acaba de leer el primer uno en la cadena, quitó una “X”


del tope de la pila y el estado cambió a q1.

Leyó el segundo uno de la cadena de texto y quitó otra “X” de


la pila y continúa en q1.

Leyó el tercer uno de la cadena de texto y quitó la tercera “X”


de la pila. Observa que la pila volvió a su estado “Z”. Aún está
en el estado q1.

El último paso verifica que efectivamente la pila esté vacía.

Para pasar de q1 a q2, que es el estado final, debe leer λ en


la cadena de texto, “Z” en la pila y dejar la misma “Z”. Aunque
no leyó parte de la cadena ni realizó cambios en la pila, este
paso es importante para verificar que la pila efectivamente
esté vacía. El simulador colorea la ventana de un verde más
intenso para indicar que la cadena fue aceptada.
Tabla 9 Cadenas rechazadas por el simulador

El simulador JFLAP indica el rechazo coloreando la ventana de un color rojizo:

Esta cadena la rechaza desde el primer paso, pues para


pasar de q0 a q1, leyendo un uno, debe desmontar una “X”
de la pila, pero la pila está vacía.

Esta cadena la rechaza en el cuarto paso, después de leer


tres ceros, ha agregado tres “X” a la pila. Como no hay unos
para leer en la cadena, no puede quitar las “X” de la pila. La
rechaza porque la pila no quedó vacía.

Si hay más ceros que unos, la pila no queda vacía.

Agregó tres “X” cuando leyó los tres ceros, pero solamente
desmontó dos “X” y se terminó la cadena de texto.

Si hay menos ceros que unos, la cadena no queda vacía.

A pesar de quedar vacía la pila, la cadena no lo está. Para


comprobar que no hay más caracteres para leer en la cadena
de texto, el autómata debe leer “λ” que indica vacío o
ausencia de caracteres.

b. La séptupla de este autómata es:


Q = {q0, q1, q2}
Σ = {0, 1}
S = q0
F = {q2}
Δ = {(q0, 0, λ, X, q0), (q0, 1, X, λ, q1), (q1, 1, X, λ, q1), (q1, λ, Z, Z, q2)}
Τ = {X}
Z0 = Z
c. Las transiciones también se pueden expresar en una tabla de esta forma:
Tabla 10 Transición de la expresión 0n1n

Transiciones q0 q1 q2
q0 0, λ, X 1, X, λ -
q1 - 1, X, λ λ, Z, Z
q2 - - -

d. Simulación.
Después de tener el autómata de pila, puedes verificar que se acepten las cadenas que
cumplen con la gramática. En este ejemplo, se usó el simulador JFLAP, en la opción de
“Push Down”, usando la siguiente ruta:

Ilustración 8 Ruta del simulador múltiple Push Down

Tabla 11 Reconocimiento de cadenas

Cadenas que debe aceptar: Las cadenas que debe rechazar:


2. A partir de la siguiente expresión libre de contexto anb2n para n > 0.

a. Construir el autómata de pila que pueda reconocer la expresión


gramatical dada.

Ilustración 9 Autómata de la expresión anb2n

Análisis del autómata:


• Si n > 0, debe leer al menos una “a” para pasar de q0 a q1.
• Por cada “a” que lea, agrega una “X” a la pila.
• De q1 a q2, lee una “b” pero no hace cambios en la pila. Al regresar de q2 a q1,
lee otra “b” y desmonta una “X” de la pila.”. Este paso obliga a desmontar una “X”
por cada dos “b” que lea. Es decir, la pila quedará vacía cuando la cantidad de
“b” leída, sea el doble que la cantidad de “a”.
• La transición de q1 a q3, “λ, Z, Z”, asegura que la cadena de texto haya
finalizado y que la pila quede vacía.

b. Construir la séptupla del autómata.


Q = {q0, q1, q2, q3}
Σ = {a, b}
S = q0
F = {q3}
Δ = {(q0, a, X, λ, q0), (q0, a, X, λ, q1), (q1, b, X, λ, q2), (q2, b, λ, λ, q1)}, {q1, λ, Z, Z, q3}
Τ = {X}
Z0 = Z
c. Construir la tabla de transiciones.
Tabla 12 Transición de la expresión anb2n

Transiciones q0 q1 q2 q3
q0 a, X, λ, a, X, λ - -
q1 - - b, X, λ λ, Z, Z
q2 - b, λ, λ - -
q3 - - - -

d. Comprobar mínimo 5 cadenas que sean aceptadas por el autómata y 5 que


sean rechazadas.
Tabla 13 Simulación múltiple de la cadena anb2n

3. A partir de la expresión libre de contexto anb3n resolver los siguientes puntos:

a. Construir un autómata de pila que pueda reconocer la expresión gramatical.

El autómata lee la letra “a” n veces y


por cada “a” monta una “X” en la pila.
El recorrido por q1-q2-q3-q1, lee tres
veces la letra “b” pero solamente
quita una “X” en cada ciclo.

Cuando la pila esté vacía, habrá leído


Ilustración 10 Autómata de la expresión anb3n el triple de “b” que de “a”.
b. Construir la séptupla del autómata.
Q = {q0, q1, q2, q3, q4}
Σ = {a, b}
S = q0
F = {q4}
Δ = Para autómatas con muchas transiciones, es preferible recurrir a la tabla.
Τ = {X}
Z0 = Z
c. Construir la tabla de transiciones.

Tabla 14 Transiciones anb3n

Transiciones q0 q1 q2 q3 q4
q0 a, λ, X a, λ, X - - -
q1 - - b, λ, λ - λ, Z, Z
q2 - - - b, λ, λ -
q3 - b, X, λ - - -
q4 - - - - -

d. Comprobar mínimo 5 cadenas que sean aceptadas por el autómata y 5 que


sean rechazadas por la cadena anb3n.

Ilustración 11 Pantallazo del simulador con la cadena a nb3n


4. A partir de la siguiente expresión libre de contexto a 4nbn resolver el autómata
correspondiente y comprobar expresiones que cumplan y expresiones que no
cumplan.

Solución 1: Por cada cuatro “a” que lee, monta una “X” a la pila. Por cada “b” que lee,
quita una “X” de la pila. Una vez lea la primera “b”, no puede volver a leer otra “a”.

Ilustración 12 Solución 1 con la cadena a 4nbn

Solución 2: Existe otra solución, que, aunque funciona como autómata en la simulación,
podría presentar problemas a la hora de escribir un código, debido a que no es lo mismo
tener un arreglo con cuatro posiciones y en cada una de ellas la variable “X”, o sea, P=
[“X”, “X”, “X”, “X”], que una variable P= “XXXX”.

Ilustración 13 Solución 2 con la cadena a 4nbn


Es mejor la solución 1 porque el alfabeto de su expresión gramatical es Σ = {a, b} y el
alfabeto de la pila Τ = {X}. Mientras que la solución 2, necesita que el alfabeto Τ = {X,
XXXX}. Es preferible que la pila sea un arreglo al cual se le van agregando o quitando
elementos y no una palabra a la cual se le van concatenando o eliminando letras.

2.3 Palíndromos. Un palíndromo es una palabra o frase que se lee igual de derecha a
izquierda que de izquierda a derecha.

Algunos ejemplos de palabras palíndromos: Algunos ejemplos de frases palíndromos:


• OJO • A TI NO, BONITA
• OSO • AJÍ TRAGA LA LAGARTIJA
• SERES • ANITA LAVA LA TINA
• ARENERA • LUZ AZUL
• SOMETEMOS • YO HAGO YOGA HOY
• SOMOS • AMAN A PANAMÁ
• ANILINA, etc. • ALLÍ VES SEVILLA

El reconocimiento de palíndromos, se hace con autómatas de pila porque debe ir


guardando la cantidad de veces que lee cada letra en la primera mitad de la cadena y de
esta manera poder reconocer la segunda mitad.

Ejemplo 1 de palíndromos: Dado un alfabeto de lenguaje Σ= {a, b} y un alfabeto de pila


Τ= {A, B}, resolver un autómata de pila que reconozca las cadenas: aba, aabbaa,
abababbbababa, aaabbaaa, aaaabbbabbbaaaa.

Solución:

Ilustración 14 Solución de un palíndromo con Σ={a, b}


Después de leer la primera mitad de la cadena, debe desmontar la pila en el orden inverso
que se formó. La transición de q0 a q1, marca la mitad del proceso. Si la cantidad de
letras del palíndromo es par, en la mitad lee λ, λ, λ. Pero si la cantidad de letras es impar,
en la transición de q0 a q1, lee la letra que hay en toda la mitad de la palabra. En la
simulación se observa que las palabras que no son palíndromos fueron rechazadas.

Ejemplo 2 de palíndromos: Dado un alfabeto de lenguaje Σ= {a, b, c} y un alfabeto de pila


Τ= {A, B, C}, resolver un autómata de pila que reconozca las cadenas: acbca, aabccbaa,
abcabcabccbacbacba, aaabcccbaaa, aaccbbbcbbbccaa.

Solución:

Ilustración 15 Solución de un palíndromo con Σ={a, b, c}

El autómata para leer palíndromos siempre será el mismo, solamente cambia la cantidad
de elementos de los dos alfabetos. Debe haber un elemento del alfabeto de la pila por
cada elemento del alfabeto del lenguaje.

En la programación de software, los palíndromos son de gran importancia, pues, tanto


para programar como para hacer operaciones matemáticas, los signos de agrupación
deben comportarse como palíndromos. En lugar de letras, se puede tener un alfabeto
como:

Σ= (), o Σ= [], () o Σ= {}, [], (). El palíndromo obliga a cerrar todos los paréntesis, corchetes
o llaves que se abren y en el orden correcto. Pero se puede tener palíndromos
compuestos, es decir, un palíndromo seguido de otro y el autómata debe poder
reconocerlos, por ejemplo, (())().

Ejemplo 3 de palíndromos: Se tiene el alfabeto de lenguaje Σ= (, ) y el alfabeto de pila Τ=


P. Resolver un autómata de pila que reconozcan cadenas compuestas por uno o varios
palíndromos consecutivos formados con paréntesis.
Solución: Todos los paréntesis que se abre, deben cerrarse.

Ilustración 16 Solución de palíndromos consecutivos con paréntesis

Las dos primeras cadenas son palíndromos simples. Las tres siguientes son cadenas
compuestas de varios palíndromos consecutivos. El cierre correcto de los distintos
niveles de paréntesis se garantiza cada vez que la pila queda vacía.

Ejemplo 4 de palíndromos: Resolver un autómata de pila que reconozca cadenas


compuestas por uno o varios palíndromos consecutivos formados con paréntesis y
corchetes.

Varios niveles de paréntesis pueden estar dentro de corchetes, pero los corchetes no
pueden estar dentro de los paréntesis.

Un palíndromo puede tener varios niveles de paréntesis sin usar corchetes.

Un palíndromo puede tener varios niveles de corchetes, pero debe tener al menos un
juego de paréntesis en el interior. Es decir, no acepta palíndromos que solamente tengan
corchetes.
Ilustración 17 Solución de palíndromos consecutivos con paréntesis y corchetes

Puedes observar que las cadenas [([])] y ([]), son palíndromos. Sin embargo, los rechaza
porque contienen corchetes dentro de paréntesis.

Te invito a ingresar al siguiente RETO AAA donde encontrarás un taller de entrenamiento.


Actividad AAA Autómatas de pila.
Planteamiento:

Resuelve los siguientes retos de autómatas de pila y podrás entender


los algoritmos que usa tu computador cuando te arroja un mensaje
diciendo que tienes un paréntesis o un corchete o una llave sin cerrar
adecuadamente.

Instrucciones:

A partir de una expresión gramatical y unas especificaciones, construir


el autómata de pila correspondiente y probarlo con cadenas que
acepte y con cadenas que rechace.
1. Construir el autómata que reconozca la expresión gramatical
libre de contexto anb(n+2) con n>0.

Debe aceptar las cadenas: abbb, aabbbb, aaabbbbb.

Debe rechazar las cadenas: aabb, bbbaaa, aabbb.

Probar el autómata con otras tres cadenas que acepte y otras 3


que rechace.

2. Construir el autómata que reconozca la expresión gramatical


libre de contexto (ab)2n(cd)(n+1) con n>0.

Debe aceptar las cadenas: ababcdcd, ababababcdcdcd,


ababababababcdcdcdcd.

Debe rechazar las cadenas: abababcdcdcd, abababcdcd,


cdcdabab.

Probar el autómata con otras dos cadenas que acepte y otras


dos que rechace.

3. Construir el autómata que reconozca un palíndromo, dado el


alfabeto de lenguaje libre de contexto {a, b, c, d, e}.

Debe aceptar las cadenas: abcdedcba, aabbcccbbaa, dbacabd.

Debe rechazar las cadenas: abcdedcb, aabbccccbba,


abacadacab.

Probar el autómata con otras tres cadenas que acepte y otras


tres que rechace.

4. Resolver un autómata de pila que reconozca cadenas


compuestas por uno o varios palíndromos consecutivos
formados con el alfabeto de lenguaje {A, B, a, b}.

Las letras minúsculas pueden estar dentro de las mayúsculas,


pero las mayúsculas no pueden estar dentro de las minúsculas.
Un palíndromo puede tener varias cadenas de minúsculas sin
usar mayúsculas.

Un palíndromo puede tener varias cadenas de mayúsculas,


pero debe tener al menos una minúscula en el interior de cada
palíndromo. Es decir, no acepta palíndromos que solamente
tengan mayúsculas.

Debe aceptar las cadenas: AaaaA, ABaabbaaBA, ababbaba,.

Debe rechazar las cadenas: AabB, AaBaA, abAABBAAba.

Probar el autómata con otras tres cadenas que acepte y otras


tres que rechace.

Después de solucionar todos los puntos del reto formativo 1, descarga


la solución en el enlace (anexo) (Solución Actividad AAA Autómatas de
pila). Si tienes una solución distinta, compártela con tu profesor y tus
compañeros en la AAA.

Anexo_Solución al Actividad AAA Autómatas de pila

Te invito a realizar la EA2 sobre autómatas de pilas para ponerte a prueba sobre
lo aprendido respecto al concepto de memoria en un algoritmo.
Anexo_4_EA2_Automátas_Pilas
Anexo_5_Rúbrica_EA2

Cierre
Nota: Una vez terminado el desarrollo de la Unidad, escriba un párrafo que
invite al estudio de la siguiente unidad. Si es la última unidad, escriba un párrafo de
cierre de la asignatura o módulo. Que sea motivacional y que los invite a aplicar lo
aprendido en su contexto.

¡Felicitaciones, has finalizado con éxito el recorrido por la Unidad 1!


Los autómatas que vimos en la unidad 1, son algoritmos en forma de grafos para
reconocimiento de cadenas de texto. Con ellos, puedes usar los lenguajes de
programación con las ayudas que te alertan acerca de algunos errores, como los de
sintaxis o en caso de no cerrar las llaves o los corchetes o los paréntesis correctamente
cuando estás escribiendo código. También aprendiste cómo se implementa el concepto
de memoria en los autómatas de pila.
Estás invitado a continuar con la segunda unidad, que te ayudará a subir a otro nivel,
pues los autómatas conocidos como máquinas virtuales, no solamente pueden reconocer
cadenas de texto, sino que permiten ejecutar operaciones lógicas y matemáticas que
pueden resolver todos, absolutamente todos los algoritmos computacionales que existen.
Las Máquinas de Mealy y Máquinas de Moore, son usadas ampliamente en procesos de
automatización industrial y en robótica; la máquina de Turing, podría decirse que es el
algoritmo para hacer algoritmos y es la base misma de la programación computacional.
Referencias de imágenes
Escriba las referencias de las imágenes que utilizó para el desarrollo de contenidos de
acuerdo con las normas APA Séptima Edición. Ejemplo:
Artenot & Istock. (2014). Set of director character in different poses - Ilustration.
Recuperada de http://www.istockphoto.com/vector/set-of-director-character-in-
different-poses-gm505445537-44839390?st=5a2d208 (imagen publicada bajo
licencia Estándar de acuerdo a http://www.istockphoto.com/help/licenses).

Ver: Anexo_ BibliotecaImagenesAutómatas 1

Bibliografía
Escriba las referencias que utiliza en el desarrollo de contenidos de la unidad, de
acuerdo con las normas APA Séptima Edición. Ejemplo:
Duart, J. M. (2002). Educar en valores en entornos virtuales de
aprendizaje: realidades y mitos. Revista Apertura, (2), 58-64. Disponible
enhttp://www.udgvirtual.udg.mx/apertura/index.php/apertura4/article/viewFi
le/738/457

Escribe aquí las referencias la bibliografía

Amaya, J. M. (2015). Autómatas y Lenguajes Formales.


Duitama, Boyacá, Colombia.

Cueva Lovelle, J.M; Izquierdo Castanedo, R; Luengo Díez, M. C; Ortín Soler, F; Labra
Gayo, J.E. (2003) Lenguajes, Gramáticas y Autómatas en Procesadores de Lenguaje.
Ed. SERVITEC. Universidad de Oviedo.

Acevedo Juárez, A. (2006) Teoría de la computación. Instituto Tecnológico de Celaya.


Tesis de grado.

Jurado Málaga, E (2008) Teoría de autómatas y lenguajes formales. Espacio Europeo


Educación Superior (E.E.E.S.) Universidad de Extremadura.
Chacón, J. L. (2005). Lenguajes y Autómatas finitos. Recuperado de:
https://openlibra.com/es/book/download/lenguajes-y-automatas-finitos

Huertas, M., (2011). Teoría de conjuntos básica. Recuperado de:


https://openlibra.com/es/book/teoria-de-conjuntos-basica

Hopcroft, J., & Ullman, J. (1969). Their Formal Languages Relation to Automata.
Recuperado de: https://openlibra.com/es/book/formal-languages-and-their-relation-to-
automata

Hurtado, J. A., & Kantor, R., & Luna, C., & Sierra, L., & Zanarini, D. (2014). Temas de
Teoría de la Computación . Recuperado de:
https://openlibra.com/es/book/download/temas-de-teoria-de-la-computacion

Ivorra, C. (2010). Teoría Descriptiva de Conjuntos I. Recuperado de:


https://www.uv.es/Ivorra/Libros/Descriptiva2I.pdf

Ivorra C. (2011). Lógica y Teoría de Conjuntos. Recuperado de:


https://openlibra.com/es/book/download/logica-y-teoria-de-conjuntos.

Navarro, G. (2017). Hacia Teoría de la Computación: Lenguajes Formales,


Computabilidad y Complejidad . Recuperado de: https://openlibra.com/es/book/teoria-
de-la-computacion-lenguajes-formales-computabilidad-y-complejidad

Ortega, J. L. (2004). Breves Notas sobre Autómatas y Lenguajes. Recuperado de:


https://openlibra.com/es/book/download/breves-notas-sobre-automatas-y-lenguajes

Proyecto Latín. (2016). Temas de Teoría de la Computación. Tomo 1. Recuperado de:


https://openlibra.com/es/book/temas-de-teoria-de-la-computacion

Lecturas y recurso complementario


Puede ubicar otros enlaces de interés del tema, referencias bibliográficas, juegos,
interactivos, software, entre otros. A continuación, se muestra un ejemplo de cómo se debe
presentar estos recursos.

Escribe aquí las referencias la bibliografía

También podría gustarte