Escolar Documentos
Profissional Documentos
Cultura Documentos
enfoque prctico
15 de abril de 2012
2
ndice general
1. Introduccin 5
1.1. Marco histrico de la teora de la computacin . . . . . . . . . . . . . . . . . . 5
1.2. Conceptos bsicos: Alfabeto, Palabra o Cadena, Lenguaje y Problema . . . . . 7
1.3. Jerarqua de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4. Los problemas en la Teora de la Computacin . . . . . . . . . . . . . . . . . . 10
1.5. Preguntas y respuestas, ejercicios resueltos y propuestos . . . . . . . . . . . . . 11
2. Lenguajes Regulares y autmatas nitos 15
2.1. Autmatas de estados nitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1. Autmatas nitos determinista (AFD) . . . . . . . . . . . . . . . . . . . 15
2.1.2. Autmatas nitos no determinista (AFND) . . . . . . . . . . . . . . . . 19
2.1.3. Autmatas nitos no determinista con transiciones nulas (AFND-) . . 23
2.1.4. Herramientas, implementacin y uso de Lenguajes regulares . . . . . . . 29
2.1.5. Preguntas y respuestas, ejercicios resueltos y propuestos . . . . . . . . . 32
3
4 NDICE GENERAL
Captulo 1
Introduccin
La teora de la Computacin es un poco ms antigua que las computadoras electrnicas.
Uno de sus pioneros, Alan Turing, pudo anticipar el poder de las computadoras a travs de
un modelo conceptual en 1936. Otras disciplinas como la matemtica, losofa, lingstica,
biologa e ingeniera elctrica intervienen para completar sus teoras. Las teoras de bases son
dos: Teora de Autmatas y Teora de los Lenguajes Formales. En general, la Teora de la
Computacin facilita la comprensin de muchas reas de la ciencia de la computacin (como
los compiladores), adems:
1. Se utiliza en el diseo y construccin de aplicaciones importantes de software y hardware.
2. Ayuda a comprender que esperar del software.
3. Permite deducir si es posible resolver un problema (determinar los lmites de la compu-
tacin).
Adems, la comprensin de estas teoras representa en la prctica un conjunto de herramientas
muy tiles como alternativas simples y ecientes para resolver problemas.
5
6 CAPTULO 1. INTRODUCCIN
En 1930, el matemtico checo Kurt Gdel prueba que las matemticas no pueden ser
completas y consistentes al mismo tiempo (teorema de la Incompletitud).
En ese mismo ao 1936, el matemtico ingls Alan Turing da una respuesta tambin
negativa a esa tercera cuestin, sus resultados son ms consistentes que los obtenidos
por Church. La demostracin de Turing se basa en principios completamente bsicos
y elementales. Turing enuncia el problema de decisin de la siguiente forma: "Buscar
un algoritmo para determinar si una conclusin particular puede derivarse de ciertas
premisas con el uso de reglas de prueba". Da una nocin precisa del concepto de algoritmo,
como aquello que pueda ser realizado por una mquina abstracta, la Mquina de Turing.
De este modo, Alan Turing con su mquina universal capaz de realizar el trabajo de
cualquier otra mquina, mediante la lectura de su descripcin en una cinta, delinea el
diseo de un computardor.
En 1969, S. Cook extiende el estudio de Tuning. Cook separa aquellos problemas que
pueden ser solucionados de aquellos que en principio pueden ser solucionados pero que
en la prctica toman demasiados recursos (Complejidad computacional).
En 1956, Moore publica el primer estudio riguroso sobre autmatas. Con anterioridad,
debido al desarrollo de los primeros computadores, se haban estudiado diversos mtodos
para la sntesis de circuitos secuenciales (Human en 1954 y Mealy en 1955). En los aos
60 es donde se realizan la mayor parte de trabajos sobre la teora de los autmatas nitos.
Ejemplo:
Dados los conjuntos A = {1,2} y B = {2,3}, se realizan las siguientes operaciones sobre
conjuntos:
A B = {1, 2, 3}
A B = {2}
A - B = {1}
A B = {(1,2),(1,3),(2,2),(2,3)}
2A = A = {,{1},{2},{1,2}}
1
Nota: es un smbolo que puede ser utilizado por algunos autores para denotar a la cadena vaca.
8 CAPTULO 1. INTRODUCCIN
el + = {}
e ) Sujo, Prejo: cualquier cadena al nal o comienzo respectivamente de la cadena.
Por ejemplo para la cadena w=abca, formada de = {a, b, c}, se tiene:
Los prejos de w= , a, ab, abc, abca
Los sujos de w= , a, ca, bca, abca
f ) Prejo (Sujo) propio, es cualquier Prejo (Sujo) que no sea la misma cadena.
3. Lenguaje: Conjunto de cadenas de smbolos del mismo alfabeto. El lenguaje formado
por toda las cadenas posibles de un alfabeto se denota por (Sigma asterisco).
es el lenguaje vaco, es un lenguaje para cualquier alfabeto.
{} es un lenguaje formado por la cadena vaca. Es un lenguaje para cualquier
alfabeto .
Por Ejemplo: 1 = {0, 1}, 2 = {00, 1} 2
1 = {, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, ... }
2 = {, 00, 1, 001, 100, 0000, 11, 00001, 00100, 10000, 1001, 0011, 111, 000000,...
}
Las cadenas formadas con 2 al aplicarle la cardinalidad: |001| = 2 y |1100| = 3
1.3. JERARQUA DE CHOMSKY 9
2
Los smbolos del alfabeto pueden ser de diferentes tamaos
10 CAPTULO 1. INTRODUCCIN
decisin que motiv a Turing y a Church a dar origen a la Teora de la Computacin en 1936.
Un ejemplo tpico de este tipo de problema es la siguiente pregunta: Es primo un nmero
entero dado?, y una instancia de este problema sera: Es 17 un nmero primo?. Se trata de
entender al 17 como un elemento del conjunto de todos los nmeros enteros y se quiere saber
si pertenece al conjunto de los nmeros primos.
Lo anterior lleva a la pregunta de si realmente es posible reducir o redenir todos los problemas
a la forma de un problema de decisin. Para lo cual le sugiero platearse ejemplos e investigar
esta posibilidad, pues es en base a esta generalizacin de problemas sobre la cual funciona la
Teora de la Computacin. Esto puede parecer una desventaja, como lo menciona Hopcroft [2]:
poderosa en la medida que soluciona problemas sin importar como lo hace (no importa
la eciencia en tiempo y recursos, sino su efectividad en lograr resolver el problema). En
los trminos del paradigma, si una mquina reconce lenguajes ms complejos ser ms
podedora, segn la Jerarqua de Chomsky la mquina que reconoce el lenguaje tipo 0 es
la ms poderosa.
Ejercicios resueltos
1. Diferencia entre el operador clausura de Kleene aplicado sobre un conjunto y sobre un
alfabeto. Por ejemplo: El conjunto A = {a,b} cul es el A* y para el alfabeto B = {a,b}
cul es B*.
La diferencia se debe a que el operador estrella o clausura de Kleene es polimrco.
Aunque A y B son el mismo conjunto, se interpretan de forma diferente para el operador.
En el caso de A es un conjunto de elementos y A* es el conjunto de todos sus subconjuntos,
A es nito y A* tambin, A* = {, {a}, {b}, {a, b}}. En el caso de B, es interpretado
como un alfabeto, es decir un conjunto nito de smbolos. Aplicando el mismo operador
a B nos d un conjunto innito, B* = {, a, b, aa, ab, ba, bb, aaa, aab, aba, ... } (se
est formando el conjunto de todas las cadenas, incluyendo la cadena vaca, que se puede
formar con el alfabeto B).
2. Considere el proceso de compilacin de un programa escrito en un lenguaje de pro-
gramacin. Identique el alfabeto, cadena, lenguaje y problema segn la Teora de la
Computacin.
El problema de la compilacin de un programa escrito en algn lenguaje de programacin
puede ser visto a travs del paradigam de lenguajes formales que contiene la Teora de
la Computacin. El compilador no es ms que un sistema que es capaz de ver si una en-
trada (el cdigo fuente) esta bien escrito y sigue las reglas del lenguaje de programacin
que est reconociendo. Es decir, el compilador es una mquina reconocedora de textos
(cdigos fuente) que pertenecen al conjunto de todos los cdigos escritos en un lenguaje
de programacin. De esta forma se denen:
El alfabeto : es el conjunto de smbolos que puede escribirse en un teclado de
computador con el cual puede escribirse texto (caracteres alfanumricos, caracteres
especiales, espacio, etc.).
Cadena de entrada w: La entrada del compilador visto como una mquina reco-
nocedora, no es ms que cualquier texto que podamos escribir con el teclado del
computador (es decir con ). Cada cadena w se puede generar concatenando ele-
mentos de , de esta maneras tenemos innitas cadenas (textos)y entonces es
innito.
El lenguaje L: es el subconjunto de formado por las cadenas (texto) que siguen
las reglas de un lenguaje de programacin especco. El compilador reconoce un
lenguaje L innito pues las reglas de un lenguaje de programacin (aunque son
nitas) permiten escribir innitos programas que formaran parte de L.
El problema P: El compilador resuelve un problema de decisin al determinar si un
texto de entrada compila o no. Decir que un texto compila signica que pertenece
al lenguaje L de todas los posibles e innitos cdigos que pueden escribirse en
1.5. PREGUNTAS Y RESPUESTAS, EJERCICIOS RESUELTOS Y PROPUESTOS 13
Ejercicios propuestos
1. Qu es un lenguaje formal?, Diferencia con los lenguajes naturales
2. Contestar verdadero (V) o falso (F):
a ) es un lenguaje formado por el alfabeto.
b ) La clausura de Kleene sobre el alfabeto puede ser en algunos alfabetos un
conjunto nito.
c ) Dado
el alfabeto = {a,b} y = {0,1}, la cadena w = a1b0 pertenece al alfabeto
d ) Segn la Jerarqua de Chomsky un lenguaje esta asociado un nivel de clasicacin
de problemas asociado a una mquina
e ) Un algoritmo es el conjunto de instrucciones que puede calcular
f ) No existe un lenguaje innito L en el alfabeto = {a,b} para el cual L sea diferente
a L* (L = L*)
3. Sea A, B y C lenguajes de un alfabeto . En cada una de los tems siguientes se indican la
expresin de 2 lenguajes. Seale si son siempre iguales y justique (indique contraejemplos
en caso de ser apropiado)
a ) A (B C) y AB AC
b ) A*B* y (AB)*
4. Enumere al menos 5 lenguajes (que no sean lenguajes de programacin o idiomas) que
haya utilizado. Para cada uno de ellos identique el alfabeto y de ejemplo de una cadena
del lenguaje, describa el lenguaje.
14 CAPTULO 1. INTRODUCCIN
Captulo 2
15
16 CAPTULO 2. LENGUAJES REGULARES Y AUTMATAS FINITOS
En los AFD debe cumplirse que: Para toda a que esta en existe exactamente una transicin
de salida de cada estado, es decir la funcin de transicin dado un estado y un valor de entrada
se obtiene como resultado siempre un solo valor (estado).
Las siguientes son las tres formas para expresar y representar la funcin de transicin, las
cuales son equivalentes entre si, cualquiera de ellas es suciente para completar el diseo del
AFD:
2. Funcin de transicin: representada a travs de una funcin. Una funcin asigna a cada
elemento de un conjunto (Conjunto Dominio) un elemento de otro conjunto (Conjunto
Rango o Codominio). As la funcin f se denota f : A B, siendo A el dominio y B
el rango. Por ejemplo, la siguiente funcin f(x)= x2 , se dene f: N N, donde N es el
conjunto de los nmeros naturales.
Los tipos de funciones son:
Estados Estados
Figura 2.2: Ejemplo de AFD: cadenas binarias que comienzan con cero
1
Dada f:A B, la funcin inversa f 1 :B A, se dene como f 1 (b) = {x | x en A y f(x) = b } para todo
b en B
18 CAPTULO 2. LENGUAJES REGULARES Y AUTMATAS FINITOS
2. Funcin de transicin
(q0 , 0) = q1
(q0 , 1) = q2
(q1 , 0) = q1
(q1 , 1) = q1
(q2 , 0) = q2
(q2 , 1) = q2
Las tres representaciones del AFD son equivalentes y cada una de ellas es suciente para
expresar el modelo. Sin embargo, debe enterderse la relacin entre ellas aunque se seleccione
solo una de ellas para representar al autmata.
1. Caso base para la cadena vaca : Para todo q en Q, b(q,) = q. Esto quiere decir que
desde cualquier estado la cadena vaca no cambia el estado del AFD.
Por ejemplo: Dado el AFD anterior que reconoce el lenguaje sobre = {0, 1} y L = {x | x en
y x comienza con 0}, pruebe si las cadenas w1 = 010 y w2 = 101 estn en el lenguaje L:
1. b(q0 ,010)
= ((qb 0 ,01),0)
= (((qb 0 ,0),1),0)
= ((((qb 0 , ),0),1),0)
(((q0 , 0), 1), 0) ((q1 , 1), 0) (q1 , 0) = q1 Se acepta al terminar de procesar
la cadena 010 y quedar en un estado de aceptacin b(q0 ,010) = q1 (q1 est en F)
2.1. AUTMATAS DE ESTADOS FINITOS 19
2. b(q0 ,101)
= ((qb 0 ,10),1)
= (((qb 0 ,1),0),1)
= ((((qb 0 , ),1),0),1)
(((q0 , 1), 0), 1) ((q2 , 1), 0) (q2 , 0) = q2 No se acepta al terminar de pro-
cesar la cadena 101 y quedar en un estado que no es de aceptacin b(q0 ,101) = q2 (q2 no
est en F)
Cuadro 2.3: Tabla de transicin: Lenguaje de las cadenas binarias que terminan en 01
0 1
q0 {q0 , q1 } {q0 }
q1 {q2 }
* q2
1. Caso base para la cadena vaca : b(q,) = {q}. Es desde cualquier estado del autmata
la cadanea vaca no cambia de estado.
2. Paso recursivo para cadenas de cardinalidad mayor que 1: b(q,xa) = { r | para algn p
en b(q,x), (p,a) = r }. Sea w de la forma w = xa donde a es el smbolo nal (sujo de
longitud 1) de w y x el restode w.
b(q,x) = {p1 , p2 , ..., pn } sea ki=1 (pi ,a) = {r1 , r2 , ..., rn }
Entonces b(q,x) = (b(q,x),a) = {r1 , r2 , ..., rn }, ver gura 2.4.
La extensin para b de Q x:
b((P,w) = qenP b(q,w), para todo conjunto de estados P en Q
b 0 ,w)
L(M) = { w | w en y (q F = }
Es el conjunto de cadenas pertenecientes a tal que ejecutar el AFND desde el estado inicial
b 0 ,w) contiene al menos un estado de
q0 con la cadena w, la funcin de transicin extendida (q
aceptacin (es diferente del vaco la interseccin con F).
Teorema 1. Si L es aceptado por un AFND entonces existe un AFD que acepta L (es decir,
ambos aceptan la misma clase de lenguaje: lenguajes regulares).
Algoritmo para la Construccin de Subconjuntos:
Este algoritmo permite a partir de un AFND obtener un AFD equivalente que reconoce el
mismo lenguaje. Su nombre se debe a que se intenta construir todos los subconjuntos del
conjunto de estados del AFND.
AFN N = (QN , , N , q0 , FN )
AFD D = (QD , , D , {q0 } , FD )
Tal que L(N) = L(D) (el lenguaje reconocido por el autmata N sea el mismo que el lenguaje
22 CAPTULO 2. LENGUAJES REGULARES Y AUTMATAS FINITOS
Cuadro 2.4: Tabla de transicin N : Lenguaje de las cadenas binarias que terminan en 01
N 0 1
q0 {q0 , q1 } {q0 }
q1 {q2 }
* q2
Ejemplo: Dado el AFDN de la gura 2.5 y el cuadro 2.4 denotado como N = (QN , , N , q0 ,
FN ), con = {0,1} y QN = {q0 , q1 , q2 }, FN = {q2 }. Obtener D un AFD tal que L(N) = L(D)
a travs del algoritmo de construccin de subconjuntos.
Figura 2.6: Relacin AFDN y AFD: construccin de subconjunto sobre el AFND de la gura
2.5
1. = {0, 1}
2. D = (QD , , D , {q0 }, FD )
3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q0 , q2 }, {q1 , q2 }, {q0 , q1 , q2 }} (Conjunto de todos los
subconjuntos de Q)
2.1. AUTMATAS DE ESTADOS FINITOS 23
D (D (D (D (D ({q0 },1),0),1),0),1)
= D (D (D (D (D ({q0 },1),0),1),0),1)
= D (D (D (D ({q0 },0),1),0),1)
= D (D (D ({q0 , q1 },1),0),1)
= D (D ({q0 , q2 },0),1) = D ({q0 , q1 },1) = {q0 , q2 }
Se acepta la cadena porque {q0 , q2 } esta en FD
La demostracin de este algoritmo se encuentra en el libro de Hopcroft [2] : Se demuestra
por induccin sobre el tamao de w, donde el caso base c c
N (q0 , ) = N ({q0 }, ) y para el caso
inductivo c c
N (q0 ,w) = N ({q0 },w).
-clausura(q1 ) = {q1 , q2 }
-clausura(q2 ) = {q2 }
L(E)= { w | w en , b(q0 ,w) F = }
2.1. AUTMATAS DE ESTADOS FINITOS 27
Ejemplo: Dado el AFND- E de la gura 2.8, encontrar un AFD equivalente que reconozca
el mismo lenguaje.
E = (Q, , , q0 , F), donde Q = {q0 , q1 , q2 }, = {0, 1, 2} y F = {q2 }. Se obtiene el AFD D
= (QD , , D , q0D , FD ), aplicando el algorimos de construccin de subconjuntos de :
1. = {0, 1, 2}
2. q0D = -clausura(q0 ) = {q0 , q1 , q2 }
3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q1 , q2 }, {q0 , q2 }, {q0 , q1 , q2 }}
4. FD = {{q2 }, {q1 , q2 }, {q0 , q2 }, q0 , q1 , q2 }
5. Clculo de D : (ver cuadro 2.7)
Para el estado inicial {q0 , q1 , q2 } se aplica ladenicinpara todos los elementos de :
* D ({q0 , q1 , q2 },0) = -clausura(E (q0 , 0) E (q1 , 0) E (q2 , 0)) = -clausura({q0 } )
= -clausura({q0 }) = -clausura(q0 ) = {q0 , q1 , q2 }
* D ({q0 , q1 , q2 },1) = -clausura(E (q0 , 1) E (q1 , 1) E (q2 , 1)) = -clausura( {q1 } )
= -clausura({q1 }) = -clausura(q1 ) = {q1 , q2 }
* D ({q0 , q1 , q2 },2) = -clausura(E (q0 , 2) E (q1 , 2) E (q2 , 2)) = -clausura( {q2 })
= -clausura({q2 }) = -clausura(q2 ) = {q2 }
Para el estado {q1 , q2 } se aplica la denicin
para todos los elementos
de :
* D ({q1 , q2 },0) = -clausura(E (q1 , 0) E (q2 , 0)) = -clausura( ) = -clausura()
=
* D ({q1 , q2 },1) = -clausura(E (q1 , 1) E (q2 , 1)) = -clausura({q1 } ) = -
clausura({q1 }) = -clausura(q1 ) = {q1 , q 2}
* D ({q1 , q2 },2) = -clausura(E (q1 , 2) E (q2 , 2)) = -clausura( {q2 }) = -
clausura({q2 }) = -clausura(q2 ) = {q2 }
Para el estado {q2 } se aplica la denicin para todos los elementos de :
* D ({q2 },0) = -clausura(E (q2 , 0)) = -clausura() =
* D ({q2 },1) = -clausura(E (q2 , 1)) = -clausura() =
* D ({q2 },2) = -clausura(E (q2 , 2)) = -clausura({q2 }) = -clausura(q2 ) = {q2 }
Hay dos formas de interpretar la construccin de subconjuntos-, una para crear un AFD y
otra AFND. La idea es llegar a un AF ms fcil de implementar (es decir obtener un AFD).
AFD: Se toma cada estado como un conjunto de etiquetas. Ver gura 2.12
AFND: Se interpreta el contenido de la etiqueta de cada estado. Ver gura 2.13
2.1. AUTMATAS DE ESTADOS FINITOS 29
Figura 2.12: AFD equivalente del AFND- de la gura 2.8 a travs de la Construccin de
subconjuntos
Figura 2.13: AFND equivalente del AFND- de la gura 2.8 a travs de la Construccin de
subconjuntos
FIN
Funcin transicion (Estado q, Smbolo a): Estado
Estado S
Seleccin
q = q0 y a = 0: S = q1
q = q0 y a = 1: S = q2
q = q1 y a = 0: S = q1
q = q1 y a = 1: S = q1
q = q2 y a = 0: S = q2
q = q2 y a = 1: S = q2
fin Seleccin
Retornar S
fin Funcin
Donde se asume que se tiene los siguientes tipos de datos: Conjunto (paramtrico por el
tipo de elemento), Estado, Simbolo. Para ellos se tiene las siguientes operaciones:
LeerSimboloCadena() que permite obtener desde la entrada estndar un Smbolo de la
cadena de entrada w (desde el comienzo, secuencialmente uno a uno)
Imprimir(CadenaCaracter) funcin que permite imprimir la salida del autmata, si
acepta o no la cadena de entrada
Pertenece(Estado A, Conjunto B[Estado]), es una operacin del tipo de dato Con-
junto que determina si el elemento A (del tipo Estado) pertenece al Conjunto de Estados
B.
Una posible implementacin del algoritmo anterior en lenguaje C se muestra a continuacin:
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
enum estados { q0, q1, q2 };
void transicion(enum estados *estado, char a) // funcin de transicin
{
switch(*estado) {
case q0:
if(a == '0') {
2.1. AUTMATAS DE ESTADOS FINITOS 31
putchar(a);
*estado = q1;
}
else {
if(a == '1') {
putchar(a);
*estado = q2;
}
}
break;
case q1:
if(a == '0' || a == '1') {
putchar(a);
*estado = q1;
}
break;
case q2:
if(a == '0' || a == '1') {
putchar(a);
*estado = q2;
}
break;
}
}
int main()
{
char c;
string cad;
enum estados state = q0;
cout << "AFD que reconoce todas las cadena binarias que comienzan con 0" << endl;
cout << "Estado inicial: " << state << endl;
c = getchar();
cad = c;
while((c == '0') || (c == '1')) {
transicion(&state, c);
cout << " Estado actual: " << state << endl;
c = getchar();
if ((c == '0') || (c == '1')) cad = cad + c;
}
if (state == q1) cout << "La cadena " << cad << " SI esta en el lenguaje" << endl;
else cout << "La cadena " << cad << " NO esta en el lenguaje" << endl;
return 0;
}
32 CAPTULO 2. LENGUAJES REGULARES Y AUTMATAS FINITOS
son diferentes en todo sentido y por tanto no son iguales. Sin embargo, estos autmatas
diferentes, M1 = M2 , son capaces de procesar cadenas de y reconocer el mismo
lenguaje L (todas y cada una de las cadenas que forman a L, ni una ms ni una menos),
en ese caso son llamados autmatas equivalentes, es decir L(M1 ) = L(M2 ).
Ejercicios resueltos
1. Determine las diferencias entre un AFD y un AFND. Ver el cuadro 2.8
2. Aplicaciones de la vida real que pueden ser vistos como AF. Algunas aplicaciones intere-
santes de los AF estn referidas al almacenamiento de diccionarios como los usados en
los celulares, en la que se utilizan sus caractersticas para hacer bsquedas, inserciones o
modicaciones rpidas. As como tambin para mejorar el ordenamiento y bsqueda en
otros tipos de aplicaciones como los circuitos digitales, texto, secuencias lgicas de fun-
cionamiento (como la maquinaria industrial, robtica) y otras. Tambin son tiles para
el modelado de aquellos casos en los que a partir de una accin anterior se puede llegar a
un conjunto determinado de destinos, pero no se tiene certeza anticipada de cul de ellos
es el indicado, utilizados para modelar protocolos de comunicacin, sistemas distribuidos,
planicacin, etc.
Existen palabras propias del lenguaje (palabras reservadas) que no pueden ser usadas
como identicadores ej: if, do, while, etc. Cmo puede modicar el AF anterior para no
considerar como identicadores a las palabras reservadas del lenguaje.
34 CAPTULO 2. LENGUAJES REGULARES Y AUTMATAS FINITOS
Se plantea como ejercicio pensar cmo puede modicar el AF de la gura 2.15 para reconocer
lo siguiente: cambiar el uso del punto para que en su lugar la coma (,) se utilice para separar
enteros y decimales, y el punto (.) se emplee como separador de las unidades decimales (co-
menzando desde el lado derecho de tres en tres). Por ejemplo, partes enteras de las literales
numricas como: 1.300 o 35.413 o 38 o 23.300.080, etc.
Ejercicios propuestos
1. Para = {0,1} construya un AFD que acepte los siguientes lenguajes:
a ) El conjunto de cadenas que tiene 011 como subcadena.
b ) El conjunto de todas las cadenas cuyo tercer elemento desde el extremo izquierdo
sea un 1.
c ) El conjunto de cadenas en las que el nmero de ceros es divisible por 3.
d ) El conjunto de cadenas que terminan con 01.
e ) El conjunto vaco.
f ) El conjunto de la cadena vaca.
2. Constuya un AF para los siguientes lenguajes:
a ) El conjunto de cadenas basadas en ={a,b,c} cuyo ltimo smbolo no haya apare-
cido antes en la misma entrada.
36 CAPTULO 2. LENGUAJES REGULARES Y AUTMATAS FINITOS
39