You are on page 1of 68

NOTAS SOBRE LA TEORIA DE

AUTOMATAS FINITOS,
EXPRESIONES REGULARES y
GRAMATICA FORMAL

Alfonso Abarca
Departamento de Electrnica e Informtica
San Salvador, enero de 2002

INDICE

Introduccin
Seccin 1: Importancia de la teora de autmatas,
expresiones regulares y gramtica formal

i
1

Seccin 2: Definiciones bsicas

Seccin 3: Autmatas finitos determinsticos

13

Seccin 4: Una primera aproximacin a la clasificacin


de los lenguajes

23

Seccin 5: Autmatas finitos no determinsticos

33

Seccin 6: Expresiones regulares

43

Seccin 7: Gramtica formal

53

Referencias bibliogrficas

65

Introduccin
La intencin con la que se elaboran estas notas sobre autmatas finitos, expresiones
regulares y gramtica formal, es la de proporcionar material de apoyo para la materia de
teora de lenguajes de programacin.
La experiencia al impartir esta materia en los ltimos aos me ensea que el estudiante
de Licenciatura en Computacin se enfrenta de pronto y sin previo aviso a una teora
para la que no estaba preparado, ya sea por los formalismos de la matemtica que se
usan, por el grado de rigurosidad con que se enfoca la teora o por que al principio no
comprende el rol que los autmatas jugarn posteriormente en la teora de lenguajes de
programacin.
Por supuesto que existe una extensa y excelente bibliografa sobre estos temas, de
lectura obligatoria para todo principiante en la materia, pero de nuevo la experiencia
indica que el terreno resulta arduo para el estudiante de computacin cuyas bases
matemticas son dbiles o que dispone de poco tiempo para asimilar los conceptos
bsicos.
Decimos que el estudiante dispone de poco tiempo para asimilar los conceptos bsicos
no en razn de su disponibilidad horaria para el estudio, sino ms bien, por el hecho de
que la teora de autmatas es solo la introduccin a la teora de lenguajes de
programacin, y de pronto, estos conceptos antes desconocidos (junto con la gramtica
formal), se vuelven pilar fundamental en el desarrollo temtico de la materia.
En el desarrollo de este trabajo me apoyar en las notas escritas para cursos de Teora
Matemtica de la Computacin y Teora de la Compilacin que he impartido en el
transcurso de los ltimos 15 aos, pero no debe presuponerse absoluta originalidad,
puesto que en muchos lugares me he basado en la bibliografa existente y en algunas
oportunidades se parafrasea a los grandes investigadores de estos temas.
En cada seccin de estas notas, los conceptos ha estudiar se apoyan con ejemplos, y por
supuesto, al final de cada seccin se encontrarn ejercicios de refuerzo que el estudiante
deber de realizar para ampliar su dominio sobre estos conceptos.
Al final de estas notas se hace referencia a la bibliografa, de modo que el estudiante no
sustituya la lectura de los libros clsicos por estas sencillas notas de apoyo.
El enfoque es formal, por lo menos en el sentido que se necesita que el estudiante
maneje medianamente bien los conceptos matemticos bsicos que le fueron
proporcionados en los primeros aos de la carrera. Solo he omitido la demostracin de
algn teorema cuando he considerado que est ms all de los conocimientos
matemticos promedio del estudiante que cursa la materia de teora de lenguajes de
programacin.
Aunque estas notas se escriben como material de apoyo a la materia de teora de
lenguajes de programacin, otros lectores interesados en el tema tambin podran
encontrar secciones que despierten su inters o refuercen sus conceptos sobre estos
temas.
iii

Seccin 1
Importancia de la Teora de Autmatas,
Expresiones Regulares y Gramtica Formal
Es un hecho empricamente comprobado que la mayora de personas (estudiantes o no)
cundo escuchan la frase Ciencias de la Computacin, inmediatamente piensan en una
computadora. Esto de ninguna manera es incorrecto, pues este instrumento llamado
Computadora forma ahora parte de nuestra vida cotidiana y por asociatividad todos
tenemos la tendencia a pensar en una computadora al escuchar la palabra computacin.
Si lo pensamos con un poco ms de detenimiento, tambin podra asociarse a la frase
Ciencias de la Computacin el trmino Computar. Esto pareciera solo un juego de
palabras si no fuese por el hecho que detrs del trmino computar se encuentran las
nociones ms profundas y fundamentales de las Ciencias de la Computacin.
Las preguntas : Qu es computar? , Cul es la nocin de problema computable?,
Son todos los problemas computables? son de capital importancia en computacin y de
hecho las respuestas que se dan a ellas definen los fundamentos de toda esta ciencia.
Sorprendentemente estas preguntas y sus respuestas se vienen estudiando desde mucho
antes de la invencin de la computadora. El desarrollo formal del concepto computar y
mquina de cmputo es resultado de los trabajos del matemtico ingls Alan Turing
(19121954) que se remontan hasta el ao 1936.
Tal como escribe Guillermo Levine en (1): "Como resultado de las investigaciones de
Turing ahora sabemos cules son algunas limitantes, inherentes a nuestro sistema de
pensamiento, de los mecanismos mentales para averiguar la estructura formal del
mundo. Estos estudios inauguran la teora matemtica de la computacin, de la cual las
computadoras son tan solo un aspecto, el ms visible sin duda".
La formalizacin de estos conceptos da a luz algunos modelos y nociones matemticas
que forman, digmoslo as, un valioso instrumental para el estudio de problemas de
fondo en las ciencias de la computacin.
Los autmatas finitos y las expresiones regulares son pilar de esta teora matemtica de
la computacin y aparecen de una u otra forma de manera reiterada en muchas reas de
las ciencias de la computacin y la electrnica. En particular, para el caso que nos
ocupa, las expresiones regulares sern usadas como metalenguaje para describir las
expresiones que son procesadas por una fase dentro de un compilador. An ms, esta
fase del compilador ser programada en lenguaje C simulando el comportamiento de un
autmata finito.
Si se desea un excelente ejemplo de la aplicacin de los autmatas finitos en
computacin, se invita al lector a revisar la literatura sobre Redes Neuronales, que es
una exitosa e interesante aplicacin de estos modelos matemticos.
4

Si continuamos con nuestro inters de conocer ms sobre la teora de lenguajes de


programacin, centremos ahora nuestra atencin en el problema de la compilacin de
lenguajes de alto nivel.
Un compilador es una pieza de ingeniera de software compleja, cuyo principal objetivo
es leer un programa fuente escrito en algn lenguaje de alto nivel y traducirlo a cdigo
objeto de una computadora. Nos enfrentamos aqu a dos problemas importantes en
computacin: el primero es definir la estructura gramatical del lenguaje a compilar, esto
es, sus reglas, y la segunda es construir un programa que sea capaz de reconocer frases
generadas a partir de las reglas establecidas en el lenguaje.
La interpretacin, reconocimiento y traduccin de lenguajes por el proceso de
compilacin no pueden ser reducidos a un "diccionario" para traducir de un lenguaje a
otro. Todos aquellos que hemos programado alguna vez sabemos el nivel de
expresividad de los lenguajes de programacin modernos y la complejidad de los
programas que pueden escribirse.
En 1956 el lingista Noam Chomsky del Instituto Tecnolgico de Massachussets,
publica un estudio clsico sobre la formalizacin matemtica del concepto de gramtica.
En este estudio se propone el concepto de "Gramtica Formal" que es la base para la
definicin de lenguajes de alto nivel y herramienta fundamental para la construccin de
un compilador y de sus primos los intrpretes.
Si se me permite aqu una reflexin personal, debo de decir que al margen de la
importancia de estos conceptos en computacin, la primera vez que se me presentaron
las nociones de teora de autmatas, expresiones regulares y gramtica formal quede
fascinado por la sencillez y belleza de estas definiciones, y ms adelante, cuando se me
presentaron sus aplicaciones en la teora de la compilacin, arribe a la misma conclusin
que J.R. Pierce al referirse a las ecuaciones del electromagnetismo de Maxwell, en el
sentido de que uno debera de estudiar los fundamentos de la teora matemtica de la
computacin "as sea solamente por el bien de su alma".

Seccin 2
Definiciones bsicas

Alfabeto: Es un conjunto finito de smbolos. No daremos una definicin


de "Smbolo", pues la aceptaremos como una "nocin comn".

Ejemplos de alfabetos son:


A1={A, B, C,..,Z, a, b, c,..., z}
A2=ASCII
A3={, , }
B={0,1}
En estas notas algunas veces usaremos letras griegas para designar a un
alfabeto: ?, ?, etc.

Palabra, Frase o Cadena ("String") : Es una sucesin finita de


smbolos tomados de algn alfabeto.

Ejemplos de palabras son:


ABC, palabra formada del alfabeto A1
$**@@, palabra formada del alfabeto A2
, palabra formada del alfabeto A3
1000, palabra formada del alfabeto B
Si definimos al operador | . | , llamado "longitud de una palabra", como
aquel que al ser aplicado a una palabra nos devuelve el nmero de smbolos
en ella, tenemos para el caso que:
|ABC|=3
|1000|=4
Existe una palabra especial que se puede formar con cualquier alfabeto, la
palabra vaca, simbolizada ?, y es la palabra que carece de smbolos, por
tanto:
| ?|=0.
La existencia de la palabra vaca no debera de provocarnos problemas de
interpretacin, al fin y al cabo, en el idioma espaol o en cualquier otro
idioma, an cuando se pueden formar una enorme cantidad de palabras,
siempre se tiene la posibilidad de no formar ninguna y "guardar silencio".
6

Concatenacin de palabras: La concatenacin de dos palabras x, y


es la palabra resultante al escribir x seguida de y.
La concatenacin se simboliza por medio de un punto entre las palabras por
concatenar, an cuando este punto puede ser omitido.
Ejemplo de concatenacin:
Si x=ABC y y=1000, entonces xy=xy=ABC1000

Prefijo de una palabra : Es cualquier sucesin de smbolos


ordenados iniciales sobre una palabra.

Ejemplos de prefijos:
Si x=ABB1* es una palabra formada sobre algn alfabeto, entonces:
? ,A,AB,ABB,ABB1 y ABB1* son todos los prefijos de la palabra x.
Obsrvese que la palabra vaca es prefijo de toda palabra.
Matemticamente un prefijo se define as:
Si x,y son palabras, entonces:
y prefijo de x si existe una palabra z / yz=x

Sufijo de una palabra : Es cualquier sucesin de smbolos


ordenados terminales (o finales) sobre una palabra.

Ejemplos de sufijos:
Si x=ABB1* es una palabra formada sobre algn alfabeto, entonces:
? ,*,1*,B1*,BB1*,ABB1* son todos los sufijos de la palabra x.
Obsrvese que la palabra vaca es sufijo de toda palabra.
Matemticamente un sufijo se define as:
Si x,y son palabras, entonces:
y sufijo x si existe z / zy=x
Subpalabra: Si x es palabra, una subpalabra de x es cualquier
sucesin consecutiva de smbolos en x.

Ejemplos de subpalabras:
Si x=*abc es una palabra formada a partir de algn alfabeto, entonces
ab, abc, *a y ? son ejemplos de algunas subpalabras de x.

Las definiciones anteriores son bsicas pero de importancia capital en la teora


matemtica de la computacin y en particular, en la teora de lenguajes de
programacin. Obsrvese la forma en la que la matemtica formaliza nociones
lingsticas de uso tan comn, como : palabra, prefijo, sufijo, etc.
Solo con estas definiciones precisas es posible construir un modelo matemtico que nos
permita, sin duda ni ambigedad, referirnos a conceptos computacionales que de otra
forma quedaran vagamente definidos o susceptibles a su interpretacin subjetiva.
Con estas definiciones elementales podemos ahora definir el concepto de Lenguaje, que
sin ninguna duda, es en computacin un trmino importante:
Definicin : Un lenguaje formal es cualquier conjunto de palabras formadas sobre
algn alfabeto. Es decir: L es lenguaje formal sobre el alfabeto ?, si y solamente si L es
un subconjunto de palabras formadas sobre ?.
Ejemplos de lenguajes formales:
Si ?={A,B,*}, entonces:
L1={ABB, BB*, A}
L2={**A, BBBB, AAB, ***, A*}
L3={ ? , A, AA, AAA,....}
L4={}=
L5={ ? }
Son todos lenguajes formales formados a partir de palabras sobre ?.
Obsrvese que los lenguajes pueden tener un conjunto finito o infinito de palabras y
adems, el lenguaje formado por el conjunto vaco es vlido. (Es un lenguaje sin
ninguna palabra).
Obviamente L4 ? L5. Porqu?.

Como ya se mencion antes, debido a la importancia del concepto de lenguaje en las


ciencias de la computacin, no nada ms se debera de dar su definicin y comprobar su
existencia con algunos ejemplos. Probablemente el lector estara interesado en conocer
cuntos lenguajes se pueden formar.
8

Comenzaremos por establecer un teorema que nos ayudar a contar el nmero de


palabras que se pueden formar a partir de un alfabeto.1
Teorema 2.1: Dado un alfabeto ?={a1,a2,...,an}, el conjunto de todas las palabras que se
pueden formar es infinito y numerable.
Comentario: En teora de conjuntos el concepto de infinito tiene una connotacin
ligeramente diferente a la que estamos acostumbrados en anlisis matemtico.
En teora de conjuntos se pueden distinguir varias clases de infinitos, por ejemplo:
conjuntos infinitos numerables, esto es, conjuntos con un numero infinito de elementos
pero en los cuales dichos elementos se pueden ordenar en una sucesin, uno detrs de
otro.
En esta caso el infinito tiene una especie de patrn ordenado. Un ejemplo de conjunto
infinito numerable es N, los nmeros naturales. N es un conjunto infinito, pero sus
elementos se pueden ordenar muy fcilmente: 1,2,3,.....
Por otro lado existen los conjuntos infinitos no numerables. Estos conjuntos tienen un
nmero de elementos infinito, pero no es posible ordenarlos en una sucesin. Por
ejemplo el conjunto R, de los nmeros reales. R es un conjunto infinito, pero sin la
caracterstica del orden sucesivo. (Qu nmero sigue despus de 1.2?).
Si est interesado en el tema de la numerabilidad y en los llamados nmeros transfinitos,
puede consultar (2).
El teorema 2.1 dice que el conjunto de todas las palabras que se pueden formar a
partir de un alfabeto es infinito, pero que estas palabras se pueden ordenar de
forma sucesiva.
Demostracin:
El conjunto de todas las palabras que pueden formarse a partir del alfabeto ?, que
simbolizaremos ?* se puede escribir:
?* = {?} U {x / |x| ? N}, N={1,2,3...}
Es ?* estn todas las palabras de longitud cero que se pueden formar, unidas con todas
las palabras de longitud uno que se pueden formar, unidas con todas las palabras de
longitud dos que se pueden formar, etc. Debe de ser claro entonces que en ?* estn todas
las palabras que se pueden formar a partir de ? y por definicin, ?* es un conjunto
infinito.
Para Mostar que ?* es infinito pero numerable, es decir, que podemos establecer un
orden sobre sus elementos (las palabras), expresaremos ahora a ?* de la siguiente forma:
?
?* ={ x / |x |=0}U{ x / |x |=1}U{ x / |x |=2}U{ x / |x |=3}...= U{ x / |x |=i},

Un teorema es cualquier proposicin susceptible de ser probada usando razonamientos lgicos vlidos.

i=0
Obsrvese que cada conjunto en la unin se puede ordenar, puesto que es finito, luego
podemos formar una sucesin con las palabras de ?* colocando los elementos del primer
conjunto (de hecho es la palabra vaca), seguido de los elementos del segundo conjunto
(que es el mismo alfabeto), seguido de los elementos del tercer conjunto, etc.
A este orden se le conoce como "Orden Lexicogrfico".
(Q.E.D)
Ahora, recordando un poco ms de teora de conjuntos podemos contestar a la pregunta
Cuntos lenguajes se pueden formar a partir de un alfabeto?

Teorema 2.2: El nmero de lenguajes que se pueden formar a partir de un alfabeto es


infinito.
Demostracin:
Por definicin, dado un alfabeto ?, un lenguaje es cualquier subconjunto de ?*.
Esto es : L lenguaje sobre ? si y solamente si L
?*.
El nmero de subconjuntos de ?* no puede ser finito, pues contiene al menos, un
subconjunto formado con cada elemento de ?* (una palabra por subconjunto) y el
teorema anterior prueba que el nmero de elementos en ?* es infinito.
(Q.E.D)

La figura 2.1 ayuda a ilustrar la idea de lenguaje como subconjunto de ?*.

10

?*
L2
*

L1

*
palabras

* * *
*

*
*

*
*
*

L3
*

*
*
*
*
*
*
*
*

Fig. 2.1: L1, L2 y L3 son lenguajes sobre ?


Un hecho sorprendente que no probaremos aqu, es que se puede demostrar que el
nmero de lenguajes que se pueden formar a partir de un alfabeto es adems de infinito,
no numerable, es decir, este infinito no tiene la caracterstica del orden.
Hay entonces suficientes lenguajes como para proceder a estudiar sus caractersticas, por
ejemplo: su nivel de complejidad, patrones, clasificacin, etc.
Comenzaremos ahora a echar un vistazo sobre la estructura misma de los lenguajes y
sobre la manera de describirlos.
Definicin: Un lenguaje finito es aquel que tiene un nmero finito de palabras.
Ejemplo 1. Pregunta: Todo lenguaje finito se puede describir con un nmero finito de
smbolos?
Para contestar esta pregunta recordemos que hemos definido a los lenguajes partiendo
de la teora de conjuntos, por tanto, los problemas de descripcin de un lenguaje debern
de ser remitidos a esta teora.
En teora de conjuntos existen dos formas conocidas para describir conjuntos: por
extensin o enumeracin y por comprensin.

Si el lenguaje es finito es trivial describirlo por extensin, simplemente se enumeran las


palabras de las que consta:
Si L lenguaje finito, entonces, L={primera palabra, segunda palabra, ....,ltima palabra}.

11

Pero tambin hay lenguajes con un nmero infinito de palabras que pueden ser
representados con un nmero finito de smbolos:
Ejemplo 2: Sea ? un alfabeto, y L1 , L2
?* (es decir, L1,L2 son lenguajes formales
sobre ?) con un nmero infinito de palabras, entonces la concatenacin de L1 con L2 se
denota:
L1 . L2 = L1L2 = {xy / x ? L1 y y ? L2}.
Ejemplo 3: Describir al lenguaje de todos los nmeros binarios pares.
El lenguaje de los nmeros binarios es de especial importancia en teora matemtica de
la computacin (y por supuesto en la computacin en general) y la mayora de ejemplos
que seguirn en estas notas, usarn de manera reiterada a este lenguaje.
En este ejemplo describiremos por comprensin al lenguaje de los nmeros binarios
pares L.
No es difcil probar (ver ejercicio #2), que :
Un nmero binario es par si y solamente si termina en cero,
De aqu se sigue inmediatamente que si ?={0,1}, entonces:
L={y0 / y ? ?*}
Ejemplo 4: En el ejemplo anterior se han repetido nmeros binarios. Aunque la palabra
10 y la palabra 010 son distintas, su equivalente numrico es el mismo: ambas
representan al entero 2. De hecho hay infinitas repeticiones para cada par: 10, 010,
0010, etc. Describir al lenguaje de los binarios pares sin repeticin.
El hecho de que existan repeticiones no quiere decir que hallamos cometido un error en
el ejemplo anterior. La descripcin es correcta desde el punto de vista de la
representacin, pero ahora el lenguaje por describir es distinto e indica que debemos
omitir estas repeticiones. Si ?={0,1}, entonces proponemos inicialmente que el lenguaje
de los binarios pares sin repeticin es:
L={1y0 / y ? ?*},
Lo cual elimina la posibilidad de repeticin. Pero debemos de ser ms cuidadosos al
describir por comprensin a un lenguaje. Recuerde que estamos bajo la notacin de la
teora de conjuntos y por tanto la rigurosidad matemtica debe de ser respetada. Un
examen ms minucioso de la representacin propuesta nos indica que NO representa al
lenguaje solicitado. Porqu?.

12

Porqu no contiene a todos las palabras binarias pares!. Se ha omitido al binario par
cero. La justificacin de que solamente un par entre infinitos es el que se ha omitido no
vale en teora de conjuntos. Sencillamente la representacin de arriba es incorrecta.
Considere ahora a: L={1y0 / y ? ?*}U{0},
Esta nueva representacin corrige el error de omisin y soluciona el problema.

13

Ejercicios
1. Sea el alfabeto ?={a1,a2,...,an} :
1.1. Indicar cuntas palabras tienen los siguientes conjuntos
i)
ii)
iii)

?0 = { x / |x|<=0}
?1 = { x / |x|<=1}
?2 = { x / |x|<=2}

1.2. Probar que ?k = { x / |x|<=k} tiene (nk+11)/(n1) palabras.


Sugerencia: Sobre la base de los resultados obtenidos en i, ii y iii, proponga una
expresin para el nmero de palabras en ?k y demustrela por induccin
matemtica.
2. Demostrar que un nmero binario es par si y solamente si termina en cero.
Nota: La doble implicacin de suficiencia y necesidad "si y solo si" significa que
se debe probar que si un nmero binario es par, entonces termina en cero y
tambin que si termina en cero es par.
3. Explicar cul es la diferencia entre los lenguajes L1={} y L2={ ? }.
4. Describir al lenguaje de los nmeros binarios divisibles entre 8.
5. Describir al lenguaje de los nmeros binarios divisibles entre 8, sin repeticin.
6. Sean L1 y L2 lenguajes sobre {0,1}, donde:
L1={x / x empieza con 1, termina con 1 y no tiene 2 unos consecutivos}
L2={1y1 / y no tiene 2 unos consecutivos}.
Es L1=L2? Es decir, Describen ambas expresiones al mismo lenguaje?
Justifique su respuesta.
7. Sea ?={a,b} un alfabeto. Probar que cualquier palabra en ?* de longitud al menos
4, siempre posee 2 subpalabras consecutivas idnticas distintas de la palabra
vaca

14

Seccin 3
Autmatas Finitos Determinsticos
El conteo del nmero de lenguajes que se pueden formar sobre un alfabeto result en el
abrumador infinito. An ms, en un infinito en donde la caracterstica del orden est
ausente.
El estudio de la teora de lenguajes y en particular la de los lenguajes de programacin,
se sustenta fundamentalmente en el conocimiento de la estructura de los lenguajes.
Cmo podemos inferir algo sobre la estructura de los lenguajes si son tantos?
Una primera aproximacin a la estructura de los lenguajes son los Autmatas Finitos
(desde ahora FA de su abreviatura en ingls). Los FA son modelos matemticos que nos
permitirn estudiar una clase de lenguajes importantes.
Los FA no son de uso exclusivo de la teora matemtica de la computacin. Estas
"mquinas" se usan para representar otro tipo de fenmenos que se caracterizan por
pasar siempre de un estado a otro de forma discreta, siendo siempre el nmero de
estados finito (de all el nombre de autmatas finitos).
Por ejemplo: la electrnica usa los FA para diagramar todos los cambios de estado
posibles en componentes que usan lgica digital, muchas otras mquinas como por
ejemplo una sencilla mquina expendedora de chicles puede basar su operacin en un
FA.
Definicin: Un autmata finito determinstico (DFA por sus siglas en ingls) es un
quintuplete (Q, ?, ?, q0, F) donde:
a)
b)
c)
d)
e)

Q es un conjunto finito de estados


? es un conjunto finito de smbolos llamado alfabeto de entrada.
? es una funcin: ?:QX? Q, llamada funcin de transicin del autmata
q0 ? Q es el estado inicial del autmata
F Q es un conjunto llamado estados finales

Antes de entrar a usar de forma operacional el modelo matemtico anterior, podemos


dar una descripcin mecnica del autmata. Recuerde que el DFA es un modelo
matemtico y la visin mecnica que daremos solamente es una ayuda para comprender
su funcionamiento.
En la figura 3.1 hemos representado al DFA como formado por una cinta infinita de
solo lectura, con una palabra en alguna porcin de ella. El DFA adems tiene un control
finito, que es un hardware especial donde se ha codificado un programa (la funcin ?).
El control finito tiene un pequeo foco (led) que es capaz de cambiar de colores en un
rango preestablecido de colores (el conjunto de estados Q).
El control finito tiene una cabeza lectora que siempre se encuentra en el primer smbolo
de la palabra en la cinta e inicia en un color especial llamado el color inicial (el estado
inicial del autmata).
15

...

a1 a

a2

a3

...

a n1

an

...

Direccin de avance
Cabeza lectora

Control
finito
led cambiando de color

Fig. 3.1: Visin mecnica de un autmata finito determinstico


Cuando el control finito lee un smbolo, introduce al programa el color en el que se
encuentra actualmente el led y el smbolo ledo, y el programa acta cambiando de color
al led y avanzando al siguiente smbolo. Observe que para tomar la decisin del nuevo
color se tienen como datos el color actual y el smbolo que se encuentra en la cinta.
Ejemplo 1: Sea M= (Q, ?, ?, q0, F), donde:
Q={qo,q1,q2,q3}
?={0,1}
F={q0},
y la funcin de transicin es como sigue:
?(qo,0) = q1
?(qo,1) = q2
?(q1,0) = qo
?(q1,1) = q3

?(q2,0) = q3
?(q2,1) = q0
?(q3,0) = q2
?(q3,1) = q1

Ntese que el conjunto de estados finales de esta DFA consta solamente del mismo
estado inicial.
De particular importancia es la especificacin de la funcin de transicin. Lo primero
que debe verse es que verdaderamente sea una funcin, es decir, que todo elemento de
su dominio QX? tiene una imagen y ningn elemento de su dominio tiene ms de una
imagen.

16

El dominio de la funcin es el producto cartesiano QX?, as que si usted tiene problemas


para especificar una funcin de transicin debera comenzar por escribir siempre el
producto QX? y de all partir para la especificacin.
Este no es el nico estilo de especificar funciones de transicin. En la literatura y
especialmente en la correspondiente a lgica digital encontrar la funcin escrita en
forma de tabla, para el caso anterior:
?
q0
q1
q2
q3

0
q1
q0
q3
q2

1
q2
q3
q0
q1

Los DFA se pueden especificar sin usar todo el formalismo matemtico de la definicin
de una manera ms intuitiva, usando los llamados diagramas de transicin de estados.
Los diagramas de transicin de estados son grafos en los cuales un estado se simboliza
por un circulo, los estados finales con doble circulo y se dibujan flechas dirigidas para
especificar las transiciones de ?, por ejemplo, para el caso anterior tenemos:
0
qo
1

q1
0

0
q3

q2
0

Con el diagrama de transicin podemos ensayar como funciona el DFA sobre una
palabra cualquiera: 0110.
El DFA siempre comienza a trabajar desde su estado inicial qo, y analizando el primer
smbolo de la palabra, en este caso 0. El diagrama de transicin indica que el DFA
estando en el estado qo y viendo al 0 pasa a q1. Ahora hay que analizar que hace el DFA
estando en el estado q1 y viendo al segundo smbolo de la palabra: 1.
El DFA estando en q1 y viendo a un 1 pasa a q3. Ahora estando en q3 y viendo al tercer
smbolo, el 1, regresa a q1.
Finalmente desde q1 y viendo al ltimo smbolo, un 0, pasa a q0.
El lector puede comprobar que con la palabra: 01010 el DFA termina en q1.
17

La ilustracin del recorrido del DFA anterior ejemplifica claramente la mecnica con la
que se espera operen los autmatas, sin embargo, la funcin ? tal como esta
especificada, no permite que los DFA operen sobre palabras completas a partir del
estado inicial, sino solamente sobre un smbolo desde algn estado (su dominio es QX?).
Por esto definiremos una funcin de transicin extendida a partir de ? que legitime la
operacin de los DFA sobre palabras completas.
Definicin: Dado el DFA M y su funcin de transicin ?, definimos a ?^, la funcin de
transicin extendida de M, as:
?^ :Qx?* Q , tal que:

i)

?^ (qi, ?)

ii)

?^ (qi, aj) = ?(qi, aj) , para todo qieQ y para todo aje?

iii)

?^ (qi, ajx) = ?^ (?(qi, aj),x) , para todo qi ? Q, para todo aj ? ? .


x ? ?*

= qi , para todo qieQ

La funcin ?^ responde a la palabra vaca no haciendo transicin alguna y


responde a las palabras de un solo smbolo como lo hara ?.
En la parte iii de la definicin anterior, que es una funcin recursiva, se define el
comportamiento del DFA frente a una palabra grande.
Ejemplo 2: En el DFA anterior, indicar en que estado finaliza el autmata luego de
examinar la palabra 010100.
Aplicamos ?^, as:
?^ (qo,010100) = ?^ (?(qo,0),10100)= ?^ (q1,10100)= ?^ (?(q1,1),0100)= ?^ (q3,0100)=
?^ (?(q3,0),100)= ?^ (q2,100)= ?^ (?(q2,1),00)= ?^ (q0,00)= ?^ (?(q0,0),0)= ?^ (q1,0)=
?(q1,0)=q0.
Por tanto el DFA termina en q0.
Pasaremos ahora a definir el concepto de aceptacin. La definicin de un DFA incluye
los denominados estados finales que como veremos a continuacin, son estados
distinguidos en el autmata.
Definicin: Decimos que el autmata finito M=(Q, ?, ?, q0, F) acepta a la palabra
xe?* , si M empezando en el estado inicial qo, luego de leer toda la palabra termina en un
estado final.
Matemticamente:
x ? ?* es aceptado por M si y solo si ?^ (qo,x)=qi ? F.

18

Definicin: El lenguaje aceptado por un DFA es el conjunto de todas las palabras


aceptadas por el DFA.
Matemticamente el lenguaje aceptado por un DFA M se denota L(M), y por definicin:
L(M)={ x / x ? ?* y ?^(qo,x)=qi ? F}
Ejemplo 3: En el DFA del ejemplo 1 se tiene que :
01010 ? L(M) puesto que al terminar de leer a la palabra 01010, M finaliza en q1
que no es un estado final.
010100 ? L(M) puesto que al terminar de leer a la palabra 010100, M finaliza en
qo que es un estado final (el nico).
Podra el lector indicar el lenguaje aceptado por M, el DFA del ejemplo 1 ?
No siempre es trivial o sencillo describir al lenguaje aceptado por un DFA. Puede ser un
DFA con muchos estados, adems el DFA puede tener transiciones que no siempre
hagan evidente el conjunto de palabras que alcanzan un estado final.
Para encontrar L(M) en el caso del ejemplo 1, usaremos la observacin aguda del
diagrama de transicin junto con un argumento muy sencillo de teora de grafos:
Volvamos a dibujar el diagrama de transicin, pero ahora coloquemos los ejes X y Y,
como se muestra en la figura siguiente:
Eje Y
0
qo

q1
0

Eje X

0
q2

q3

0 arriba del eje X si ha ledo un nmero par


Obsrvese ahora que M siempre se encuentra
de unos, y tambin, M siempre se encuentra a la izquierda el eje Y si ha ledo un nmero
par de ceros. Luego, el grafo muestra que M siempre se encontrar arriba del eje X y a
la izquierda del eje Y, es decir en su nico estado final, si ha ledo un nmero par de
unos y un nmero par de ceros.
Concluimos entonces que L(M) es el conjunto de todas las palabras binarias que tienen
un nmero par de unos y un nmero par de ceros.

19

Si los autmatas finitos nos servirn para analizar (o aceptar) lenguajes, deberamos
proseguir contando cuntos FA se pueden formar, con la esperanza de que al menos
exista uno que reconozca a cada lenguaje posible sobre un alfabeto.
Comenzaremos por observar que dado un alfabeto ?, el conjunto de todos los
autmatas finitos M= (Q, ?, ?, q0, F) que se pueden forma es infinito. Basta ver que
podemos construir autmatas con cualquier nmero finitos de estados, sin restriccin, es
decir: |Q| ? N. (Dado un nmero natural, siempre se puede construir un FA con ese
nmero de estados).
Esto nos acerca a materializar nuestras esperanzas, puesto que el nmero de lenguajes
que se pueden formar sobre un alfabeto es infinito y el nmero de autmatas tambin.
Sin embargo, existe un hecho que no probaremos aqu, y es que aunque el nmero de
autmatas que se pueden formar es infinito, este infinito es numerable.
Ambos conjuntos, el de los lenguajes sobre un alfabeto, y el de los autmatas con este
alfabeto son infinitos, pero el primero es no numerable y el segundo es numerable.
Aunque al principio parezca sorprendente este hecho, hace que por ms autmatas que
se construyan, nunca se alcancen a cubrir todos los lenguajes.
Ms adelante veremos que los FA no solo son menos que los lenguajes formales, sino
que, tambin son incapaces de aceptar lenguajes con una estructura relativamente
compleja. Esto no debe de desanimarnos en nuestro estudio, porque la clase de lenguajes
aceptados por los FA, aunque pequea, es de mucha importancia en la teora de
lenguajes de programacin. Esta clase de lenguajes aceptados por los FA sirve para
definir los componentes lexicogrficos de los lenguajes de programacin.
En teora matemtica de la computacin, las limitaciones impuestas por los FA se
superan definiendo modelos ms poderosos (mquinas ms poderosas): autmatas de
pila determinsticos, autmatas de pila no determinsticos, mquinas de Turing, etc.
El estudiante interesado puede consultar la bibliografa, en particular (3) para ampliar
sus conocimientos en estos interesantes temas.

Ejemplo 4: Sea ?={0,1}. Considerar L1={ x0 / x ? ?*}.


L1 es el lenguaje de los binarios pares con repeticin.
Encontrar un DFA que acepte a L1.
Definimos a M1=(Q, ?, ?, q0, F) , donde:
Q={qo,q1},
?={0,1},
F={qo}, y las transiciones como se muestran en el diagrama:
20

1
1
q1

q0
0

El autmata M1 acepta a todas las palabras binarias que terminan en cero, pero
L(M1) ? L1, puesto que M1 acepta ms. M1 acepta a ?, la palabra vaca, debido a que
estando en qo, M permanece en qo sin ver ningn smbolo.
Esto es: ?^(q0, ?)

= qo ? F.

Nuevamente se debe de recordar que la teora de autmatas que se ha construido hasta


ahora, fundamenta su formalismo en la teora de conjuntos, y en esta teora dos
conjuntos son iguales si y solamente si tienen todos sus elementos iguales.
Entonces: L(M1)=L1U{ ? } ? L1.
El problema se resuelve fcilmente invirtiendo el estado final:
0

1
0
q0

q1
1

Ahora la palabra vaca es rechazada y L(M1)=L1.


Ejemplo 5: El siguiente ejemplo es muy ilustrativo, en el sentido que muestra una
aplicacin real del concepto de autmata finito a la teora de lenguajes de programacin.
Usted probablemente se ha preguntado antes como un compilador de algn lenguaje de
programacin es capaz de aceptar o rechazar (marcando un error) a los identificadores.
Por ejemplo, en lenguajes como Pascal o C, los identificadores siempre inician con una
letra y pueden seguir con cualquier combinacin de letras o dgitos.2

22

Pueden tener un patrn ms complicado, pero aqu lo especificaremos as por simplicidad.

21

Pues bien, los compiladores poseen un autmata finito codificado que es capaz de
reconocer el lxico definido para los identificadores, y as aceptar o rechazar a los
identificadores. El DFA es como se muestra el diagrama de transicin:
digito
letra

letra
digito

q0

letra

coc
q1
digito

q2
coc

coc

Hemos simplificado las cosas indicando sobre los caminos de las transiciones conceptos
como letra, digito y coc (cualquier otra cosa que no sea letra y digito).
Ms adelante definiremos a otros miembros importantes de la familia de los autmatas
finitos: los autmatas finitos no determinsticos y los autmatas finitos no
determinsticos con movimientos vacos.

22

Ejercicios
1. Considerar a L2={1x0 / x ? ?*}U{0 } , ?={0,1}. L2 es el lenguaje de los binarios
pares sin repeticin. Encontrar un DFA que acepte a L2.
Escribir completamente el formalismo matemtico para este autmata,
incluyendo la escritura de la funcin de transicin como en la definicin y
adems en forma de tabla. Dibuje un diagrama de transicin de estados para el
autmata.
2. Describir por extensin al lenguaje aceptado por el siguiente DFA:
0
1
0,1
1
q0

0
q1

q2

3. Encontrar un DFA que acepte a los binarios divisibles entre 8 sin repeticin.
4. Encontrar un DFA que acepte a los binarios divisibles entre 8 con repeticin.
5. Encontrar autmatas finitos que acepten a los lenguajes siguientes sobre ?={0,1}
a. El conjunto de todas las palabras que terminan en 00
b. El conjunto de todas las palabras con 3 ceros consecutivos.
6. Especificar un DFA que acepte a todas las palabras binarias divisibles entre 3.
7. Demostrar que para todo lenguaje finito siempre se puede construir un DFA que
lo acepte.
8. Sea ? la funcin de transicin para un DFA. Probar que para cualquier par de
palabras de entrada x,y y un estado q se cumple que:
?^ (q,xy)= ?^ (?^ (q,x),y).
Sugerencia: Aplique el axioma de induccin completa sobre |x|
9. Definimos a un nmero real simplificado y sin signo de la siguiente manera:
######.######
donde cada smbolo "#" representa a cualquier dgito entre 0 y 9.
Estos reales simplificados obligatoriamente tienen una parte entera y una parte
decimal, por lo que nmeros como 123. o .123 NO son nmeros reales

23

simplificados y sin signo. Construir un DFA que acepte a los nmeros reales
simplificados y sin signo.
10. Encontrar un DFA que acepte al lenguaje:
L={x / x empieza con 1, termina con 1 y no tiene 2 unos consecutivos}.
11. Sea M=(Q, ?, ?, q0, F) DFA y x,y,z ? ?*, q ? Q.
Probar que si ?^ (q,x)= ?^ (q,y) entonces ?^ (q,xz)= ?^ (q,yz).
12. Elaborar un programa de computadora en lenguaje C que simule a un DFA.
Sugerencia: Puede suponer que en ste caso ? est formado por todos los
caracteres que se pueden generar usando el teclado de la computadora o por
subconjuntos de estos.

24

Seccin 4
Una primera aproximacin a la clasificacin de los lenguajes
Antes de continuar nuestro estudio de los autmatas, es bueno detenerse para intentar
revisar lo que hemos conseguido. Veremos a continuacin que ya tenemos elementos
para brindar alguna clasificacin sobre los lenguajes formales, sin que esta clasificacin
sea muy profunda. Sin embargo y a pesar de todo, lo que antes era el infinito de los
lenguajes formales, se convertir en un todo ms ordenado.
Consideremos una primera clasificacin de los lenguajes, as :
Por su cardinalidad:
i)
ii)

Existen lenguajes infinitos ( con un nmero infinito de palabras), y


Existen lenguajes finitos (con un nmero finito de palabras).

Otra manera de clasificarlos es:


Por su representacin:
i)
ii)

Los lenguajes representables con un numero finito de smbolos, y


Los lenguajes no representables con un nmero finito de smbolos.

No todos los lenguajes posibles formados sobre un alfabeto son representables y esto se
deriva de que su nmero es infinito no numerable. No existe ningn mtodo de
especificacin de lenguajes que sea capaz de definir todos los lenguajes sobre un
alfabeto.
La figura 4.1 muestra la relacin entre las 2 clasificaciones anteriores:

Todos los lenguajes sobre ?


Fig 4.1 : Diagrama de
VennEuler de
clasificacin de los
lenguajes por su
cardinalidad y
representacin.

Lenguajes infinitos
Lenguajes representables
con un nmero finito de
smbolos
Lenguajes
finitos

Antes de proceder a intentar una tercera clasificacin, consideremos las siguientes


definiciones:

25

Definicin: Un procedimiento es un conjunto de instrucciones con las siguientes


caractersticas :
i)
ii)
iii)
iv)

El conjunto de instrucciones es finito


Las instrucciones son bsicas y efectivas
Tienen una entrada
Tienen una salida

Definicin: Un algoritmo es un procedimiento que siempre termina, es decir, tiene las


caractersticas i a iv, y necesariamente una caracterstica v: es finito en tiempo.
Ejemplo 1: Considerar el siguiente segmento de programa en FORTRAN:
10
20
30

GOTO 20
GOTO 10
END

Donde la instruccin GOTO es la segmentacin incondicional del programa hacia la


lnea que indica la etiqueta.
Este es un ejemplo de procedimiento, pues cumple con las condiciones iiv, pero no es
finito en tiempo.
Ahora estamos listos para las siguientes definiciones:
Definicin: Un lenguaje L se dice recursivo si existe un algoritmo que siempre decide si
una palabra pertenece o no al lenguaje.
La fig. 4.2 ilustra el comportamiento de los lenguajes recursivos.
x (palabra)
Entrada

Algoritmo G

Salida
x?L
El lector encontrar la definicin
de lenguaje
x ? Lrecursivo en teora matemtica de la
computacin muy distinta a la clsica definicin de lenguaje recursivo que
probablemente conoci de sus cursos de programacin.

26

All recibi la definicin de lenguaje recursivo como todo aquel en el que se permite
que un procedimiento, mdulo, bloque o funcin se invoque a si mismo. En teora
matemtica de la computacin la acepcin es obviamente diferente, por motivos que no
discutiremos aqu.

Definicin: Un lenguaje L se dice recursivamente numerable si existe un procedimiento


tal que si una palabra pertenece a L el procedimiento se detiene escribiendo SI, pero si
la palabra no pertenece a L puede que el procedimiento se detenga y diga NO o puede
que no se detenga nunca (entrando en un loop infinito).
En la fig. 4.3 se ilustra el comportamiento de un lenguaje recursivamente numerable:

x (palabra) y
pertenece a L

Proc. P

SI

x (palabra) y
no pertenece a L

Proc. P

NO

x (palabra) y
no pertenece a L

Proc. P en un loop
infinito

????
No hay salida

Fig 4.3. Comportamiento de un lenguaje recursivamente numerable

Obsrvese que solo cuando la palabra no pertenece a L se puede presentar el


comportamiento de loop infinito. Cuando la palabra si pertenece a L, el comportamiento
es finito y sin ambigedad: P contesta SI.

27

Teorema 4.1: Todo lenguaje finito es recursivo.


Demostracin:
Si L finito, entonces L tiene un nmero finito de palabras, digamos:
L={p1,p2,...pn}
Sea x una palabra, el algoritmo que siempre decide si x pertenece o no a L, se detalla en
el siguiente pseudocdigo o espaol estructurado:
Algoritmo
Comienza
Lee x
Si x=p1 entonces Escribe SI
Otro Si x=p2 entonces Escribe SI
.
.
.
Otro Si x=pn Escribe SI
Otro Escribe NO
Termina
El algoritmo termina un tiempo finito, a lo ms, luego de n comparaciones.
(Q.E.D.)
Teorema 4.2: Si el lenguaje L es recursivamente numerable y su complemento L
tambin, entonces L es recursivo.
Comentario: El teorema anterior establece que de dos procedimientos asociados con un
lenguaje y su complemento podemos construir un algoritmo para el lenguaje.
Recuerde adems que por definicin: L=?*L.
Demostracin:
Debido a que por hiptesis L y L son recursivamente numerables, tienen asociados los
procedimientos respectivos que llamaremos P y P.

Construimos con ellos el siguiente algoritmo:

28

x Copia
(palabra)
x

Proc. P

Proc. P

Posible Loop

SI

SI

SI
NO
La explicacin del algoritmo construido es como sigue: Dada x palabra la introducimos
al programa quin inicialmente copia x para obtener un duplicado. (Este es un proceso
trivialmente finito en tiempo). Una x se introduce en el procedimiento P y la copia en P.
Supongamos que x ? L, entonces el procedimiento P contestar SI. Ya no importa si P
contesta NO o entra en un loop. Nuestro programa ya contest en un tiempo finito SI.
Ahora supongamos que x ? L, entonces por definicin x ? L y ser el procedimiento P
quin contestar SI, con la operacin de negacin obtenemos NO como respuesta en un
tiempo finito.
Luego nuestro dispositivo siempre decide en un tiempo finito si x ? L.
(Q.E.D.)

Teorema 4.3: Si L es recursivo, entonces L es recursivamente numerable.


29

Demostracin:
Llamemos A al conjunto de algoritmos y P al conjunto de procedimientos, entonces por
definicin A P. Esto es, todo algoritmo es procedimiento.
(Q.E.D.)
Armados con estos nuevos hallazgos, procedemos a ofrecer nuevas clasificaciones para
los lenguajes:
Todos los lenguajes sobre ?

Lenguajes recursivamente numerables

Lenguajes recursivos

Lenguajes
finitos

Teorema 4.4: Todo lenguaje aceptado por un autmata finito determinstico es


recursivo.
Comentario: En realidad no daremos aqu una demostracin formal de este hecho, pero
daremos una razn contundente para justificarlo.
Dado un lenguaje aceptado por un DFA M, la funcin de transicin de M puede
codificarse como un algoritmo de manera que si dada una palabra x, M alcanza un
estado final al terminar de leerla, el algoritmo simula este comportamiento y escribe SI,
y si no alcanza un estado final, el algoritmo escribe NO. En otras palabras, en este caso
el algoritmo buscado es el mismo DFA codificado.
A partir de este resultado podemos dibujar una nueva clasificacin para los lenguajes,
segn la siguiente figura:
30

Todos los lenguajes sobre ?


Lenguajes recursivamente numerables

Lenguajes recursivos

Lenguajes aceptados por algn DFA

Lenguajes
finitos

Ahora una pregunta: Ser cierta la recproca del ltimo teorema?.


Ser todo lenguaje recursivo aceptado por algn DFA?.
De ser la respuesta un "Si", habremos encontrado una equivalencia para los DFA en la
definicin de lenguajes recursivos, y la familia de los DFA quedara caracterizada por la
existencia o no de un algoritmo apropiado.
Como veremos en un momento, la respuesta a esta pregunta es "No".

Pumping lemma El lema del bombeo.


Veremos ahora un resultado por dems importante en toda la teora de autmatas y
expresiones regulares. Este resultado es llamado el "lema del bombeo" que es de enorme
31

utilidad para la comprensin de las limitaciones de los autmatas finitos determintsicos


y como herramienta auxiliar en la prueba de muchos teoremas importantes de esta
teora. Desgraciadamente, no daremos una demostracin formal de este lema, debido a
que a mi juicio, se necesitara un poco ms de las nociones matemticas que hasta el
momento se han presupuesto para el lector promedio de estas notas. Sin embargo,
daremos argumentos intuitivos que le permitirn al lector convencerse de que el lema es
cierto. De hecho, el resultado que propone el lema es muy sencillo de entender sin usar
todo el formalismo necesario para desarrollar una demostracin completa.
Lema del bombeo: Sea L un lenguaje aceptado por algn DFA, esto es, M autmata
finito determinstico, tal que L=L(M), entonces siempre es posible encontrar una palabra
w suficientemente grande que es aceptada por el autmata M y que provoca un loop
en M, es decir, en el anlisis de la palabra w el autmata pasa al menos 2 veces por un
mismo estado.
Interpretacin del lema del bombeo: Este lema debera ser fcil de interpretar de
forma intuitiva. Dado un DFA, por definicin el nmero de estados que posee es finito,
digamos n ? N. Si comenzamos a bombear smbolos desde el estado inicial (una
palabra suficientemente grande), luego de a lo ms n smbolos bombeados se debe de
pasar por un estado que ya se visit, pues el DFA tiene exactamente n estados.
Esto es claro para una palabra cualquiera suficientemente grande, pero el lema va ms
all, establece que esta palabra que hace un loop puede ser escogida dentro de las
aceptadas por el DFA.
En (3) el lector podr encontrar una excelente formulacin del lema del bombeo con su
respectiva demostracin.
Ahora, auxiliados por el lema anterior, formularemos un teorema que nos mostrar una
de las limitaciones ms importantes de los autmatas finitos:
Teorema 4.5: No todo lenguaje recursivo es aceptado por un autmata finito
determinstico.
Comentario: La demostracin formal del teorema anterior hace uso del lema del
bombeo. Debido que solo enunciamos intuitivamente la formulacin de este lema,
tambin comentaremos solo de forma intuitiva la demostracin del teorema 4.5.
Para probar el teorema 4.5 basta mostrar un lenguaje que sea recursivo para el cual sea
imposible construir un DFA.
Definamos a L={ancan / n ? N}. La notacin an significa la aparicin del smbolo a
tantas veces como lo indica la n. Por ejemplo, si n=3, entonces se tiene que
aaacaaa=a3ca3 ? L. El lenguaje L es un lenguaje palindrmico, es decir, sus palabras se
leen igual tanto de derecha a izquierda como de izquierda a derecha. (Como la palabra
OSO en espaol)
32

El lenguaje L es recursivo. El algoritmo que siempre decide si una palabra est o no en


L es conocido desde nuestros cursos de estructura de datos. Es fundamentalmente un
programa que dada una palabra x la lee de izquierda a derecha apilando (push) en un
stack (dispositivo de pila LIFO3) cada a detectada. Al encontrar la marca c, comienza
el proceso inverso, y por cada a leda se desapila (pop) una a. Si al final el stack est
vaco x ? L, en otro caso x ? L. El ejercicio 2 se refiere a la elaboracin de este
programa.
Pero L no es aceptado por ningn DFA. Probaremos esto por contradiccin.
Suponer que existe M con n estados, autmata finito determinstico que acepta a L.
Por el lema del bombeo existe una palabra suficientemente grande que es aceptada por
el autmata y que hace un loop en l. Sea w=apcap, con p ? N esta palabra.
Ahora bien , si w hace un loop para aceptar a apcap puedo usar este loop para que
acepte a ap+1cap (o bien a apcap+1, dependiendo de donde este el loop). Esto contradice
que M acepta a L, pues M acepta a palabras que no estn en L. Vea la figura 4.1.
...

qi

qj
a

...

Fig. 4.1: Si M hace un loop entre qi y qj, podemos usar este loop
para desbalancear a la palabra dando tantas vueltas como se quiera y
luego continuando hacia el estado de aceptacin.

Este teorema tiene consecuencias profundas sobre la capacidad de los autmatas finitos
determinsticos de aceptar lenguajes, confirmndonos lo que ya habamos previsto al
comparar la cantidad de lenguajes formales con la cantidad de autmatas: es imposible
construir un DFA para cada lenguaje formal sobre un alfabeto.
La estructura de esta mquina de estados es tal, que solo puede recordar usando el
mecanismo de pasar de un estado a otro, y esta mecanismo es limitado y finito.

LIFO= Last input First output. Ultimo en entrar primero en salir.

33

Ejercicios
1. Justificar la afirmacin de que todo algoritmo es procedimiento.
2. Sea L={ancan / n ? N} un lenguaje sobre el alfabeto {a,c}.
Elaborar un programa de computadora en lenguaje C que teniendo como entrada
una palabra formada a partir del alfabeto {a,c} indique si la palabra est o no en
L.
3. Demuestre que si existe un lenguaje recursivamente numerable, pero no
recursivo, entonces existe un lenguaje que no es recursivamente
numerable.
4. Sea L={ai bi /i>=0}. Se puede construir un DFA que acepte a L?.
Justifique plenamente su respuesta.
5. Indiquemos que L es recursivo escribiendo Lrec e indiquemos que L es
recursivamente numerable escribiendo Lrec num.
i)
ii)

Como es Lrec U Lrec num ?


Como es Lrec Lrec num ?

6. Demostrar que si L es recursivo entonces su complemento tambin.


7. Una funcin f : N N se dice computable si para todo argumento n ? N de
f, existe un algoritmo para determinar f(n). (Esto es f(n) se puede
"calcular" por algn mtodo). Demostrar que si existe una funcin no
computable, existen infinitas funciones no computables.

34

Seccin 5
Autmatas Finitos No Determinsticos
Reformularemos ahora la definicin de autmata finito determinstico para permitir
cierto nivel de paralelismo en la manera en la que los autmatas funcionan
Recordemos antes una definicin bsica de teora de conjuntos: La nocin de conjunto
potencia.
Definicin: Si A es un conjunto entonces al conjunto de todos los subconjuntos que se
pueden formar a partir de A se le llama el conjunto potencia de A, y se simboliza P(A).
Ejemplo 1: A={1,2,3}, entonces: P(A)={ {},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} }.
Ntese que el conjunto vaco y el subconjunto formado por el mismo conjunto original
estn en el conjunto potencia.
Tambin recordemos que en teora de conjuntos al conjunto vaco se le simboliza con la
letra . Esto es ={}, luego : P(A)={ ,{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} }.
Un resultado importante de teora de conjuntos referente a P(A) es que:
Si el conjunto A tiene n elementos entonces P(A) tiene 2n elementos.
(Ver ejercicio #1 de sta seccin)
Definicin: Un autmata finito no determinstico (NDFA por sus siglas en ingls) es un
quintuplete (Q, ?, ?, q0, F) donde:
i)
ii)
ii)
iv)
v)

Q es un conjunto finito de estados


? es un conjunto finito de smbolos llamado alfabeto de entrada.
? es una funcin: ?:QX? P(Q), llamada funcin de transicin del autmata
q0 ? Q es el estado inicial del autmata
F Q es un conjunto llamado estados finales

Como se observa, la diferencia entre un DFA y un NDFA se encuentra en la definicin


de la funcin de transicin ?. Ahora estando en un estado y leyendo un smbolo
podemos pasar a VARIOS estados. El NDFA tiene ms caminos por recorrer para
aceptar una palabra.
Ntese adems que existe la posibilidad de escribir la siguiente transicin:
? (qi,aj)=

es decir, que el NDFA en el estado qi no posee informacin para efectuar una transicin
si lee al smbolo aj.

Ejemplo 2: Definimos al NDFA M de la siguiente forma:


35

Q={q0,q1,q2},
?={0,1},
F={q2}
y la funcin de transicin de la siguiente manera:
?(qo,0)={q0,q1}
?(qo,1)=
?(q1,0)={q1}
?(q1,1)={qo,q1,q2}
?(q2,0)=
?(q2,1)={q2}
El diagrama de transicin de estados para este NDFA es el siguiente:
0
0
0
1
1
qo
q1
q2
1

En el estado qo no hay transicin para el smbolo 1 y en q1 si se lee al smbolo 1


se pasa simultneamente a 3 estados: qo,q1 y q2. Ambas transiciones son no
determinsticas.
De la misma forma que en el DFA, la funcin de transicin del NDFA debe de ser
extendida para soportar la nocin de leer una palabra completa y luego determinar en
que estado queda el autmata.
Definicin: Dado el NDFA M y su funcin de transicin ?, definimos a ?^, la funcin de
transicin extendida de M, as:
?^ :Qx?* P(Q) , tal que:

i)

?^(q, ?)

ii)

?^(qi, aj) = ?(qi, aj) , para todo qi ? Q y para todo aj ? ?

= { q } , para todo q ? Q

?^ (qi, ax) = U?^ (qj, x) , para todo qi ? Q, para todo a ? ? y x ? ?*


qj??(qi,a)

iii)

36

Ejemplo 3: En el NDFA del ejemplo 1, determinar en donde finaliza el autmata luego


de leer a la palabra 0010.
Tenemos que :
?^(qo,0010)= ?^(qo,010) U ?^(q1,010).
Escribimos lo anterior, puesto que primero determinamos a donde pasa el autmata
estando en qo y leyendo el primer cero de la palabra. Segn el diagrama de transicin M
pasa a dos estados: {qo,q1} (En realidad se queda en qo y pasa a q1).
Ahora debemos analizar las transiciones que siguen con el segundo cero de la palabra a
partir de esos dos estados en los que se encuentra el autmata. Por eso realizamos la
unin.
Ahora:
?^(qo,010) = ?^(qo,10) U ?^(q1,10), y
?^(q1,010) = ?^(q1,10),
luego: ?^(qo,010) U?^ (q1,010) = ?^(qo,10) U ?^(q1,10) U ?^(q1,10) =
?^(qo,10) U ?^(q1,10).
Una vez entendida la forma de operar de la funcin ?^ para el NDFA, escribimos el
desarrollo completo, as:
?^(qo,0010) =

?^(qo,010) U ?^(q1,010)
=
?^(qo,10) U ?^(q1,10) U ?^(q1,10)
=
?^(qo,10) U ?^(q1,10)
=
U ?^(q1,10)
=
?^(q1,10)
=
?^(q0,0) U ?^(q1,0) U ?^(q2,0)
=
?(q0,0) U ?(q1,0) U ?(q2,0)
=
{q0,q1} U {q1} U
=
{q0,q1}

Definicin: Se dice que una palabra x es aceptada por un NDFA M, si qi ? ?^(qo,x) tal
que qi ? F. Esto es, al leer todos los smbolos de la palabra x, el autmata queda en algn
estado final.
Definicin: El lenguaje aceptado por un NDFA es el conjunto formado por todas las
palabras que el NDFA acepta.

37

Enunciaremos y probaremos ahora dos teoremas que muestran la equivalencia de los


DFA y los NDFA.
Teorema 5.1 : Sea L(M) el lenguaje aceptado por un DFA M, entonces existe un NDFA
M que acepta al mismo lenguaje.
Demostracin:
Sea M=(Q, ?, ?, q0, F), entonces definimos al NDFA M: =(Q, ?, ?, q0, F) tal que:
?(qi,aj)= {qk} si y solo si ?(qi,aj)=qk con qi,qk ? Q y aj ? ?
(Q.E.D.)
La demostracin anterior es realmente trivial. Todo lo que dice es que para construir a
partir de un DFA un NDFA equivalente (en el sentido de que acepta el mismo lenguaje),
basta cambiar la especificacin formal del DFA para que la funcin de transicin tenga
como rango un conjunto de estados formado en cada transicin por el conjunto unitario
{qk}.
Teorema 5.2 : Sea L(M) el lenguaje aceptado por un NDFA M, entonces existe un DFA
M que acepta al mismo lenguaje.
Demostracin:
Sea M=(Q, ?, ?, q0, F) un NDFA que acepta a L(M). Definimos a partir de M al DFA
M=(Q, ?, ?, q0, F), tal que:
i) Q esta formado por todos los subconjuntos de Q, esto es: Q=P(Q). Luego el nmero
de elementos en Q es 2|Q|. Denotaremos a un elemento de Q como [q1,q2,...,qn], donde
q1,q2,...,qn ? Q.
ii) F es el conjunto de todos los estados en Q que contienen al menos un estado final
de M.
iii) q0=[qo]
iv) Definimos :
?([q1,q2,...,qi],a)=[ p1,p2,...,pn] , si y solamente si:
? (q1,a)U?(q2,a)U...U? (qi,a)={p1,p2,...,pn }, esto es:

38

? se calcula aplicando la funcin ? sobre cada estado q1,q2,...,qi y luego tomando la


unin resultante. Esta unin sirve para definir un estado en M que es a donde
transiciona el autmata finito determinstico al ver el smbolo a.
Se puede probar (ver ejercicio #2) por induccin sobre la longitud de x ? ?* que :
?(qo,x)= [q1,q2,...,qi] si y solo si ?(qo,x)= {q1,q2,...,qi}.
Si x ? ?* es aceptada por M entonces {q1,q2,...,qi} contiene a algn estado final de M, y
por el resultado anterior esta misma palabra llegar al estado [q1,q2,...,qi] en M, que por
definicin, es un estado final de M. Luego x tambin es aceptada por M.
(Q.E.D.)
Ejemplo 4: Encontrar un DFA equivalente al NDFA definido en el ejemplo 2.
Ya indicamos que equivalente quiere decir que acepta al mismo lenguaje.
La demostracin anterior nos indica el mtodo constructivo para obtener un DFA
equivalente a un NDFA dado.
Tomamos los estados del NDFA del ejemplo 2 y establecemos el dominio del DFA
equivalente:
Q={ [], [qo],[q1],[q2],[qo,q1],[q0,q2],[q1,q2],[q0,q1,q2] }
Ahora establecemos la funcin de transicin del DFA simulando al NDFA, as:
?([],0) = ?([],1)= []

?([qo,q1],0) =[qo,q1]
?([qo,q1],1) =[q0,q1,q2]

?([qo],0) =[qo,q1]
?([qo],1) = []

?([qo,q2],0)
?([qo,q2],1)

=[qo,q1]
=[q2]

?([q1],0) =[q1]
?([q1],1) =[q0,q1,q2]

?([q1,q2],0)
?([q1,q2],1)

=[q1]
=[q0,q1,q2]

?([q2],0) = []
?([q2],1) =[q2]

?([q0,q1,q2],0) =[qo,q1]
?([q0,q1,q2],1) =[q0,q1,q2]

Por definicin F={[q2], [qo,q2], [q1,q2], [q0,q1,q2]}.


Las transiciones han sido construidas de forma que contienen en un estado del DFA,
toda la informacin de las transiciones del NDFA, por ejemplo:
Hemos escrito ?([qo],0) =[qo,q1], puesto que en el NDFA estando en el estado qo y
viendo al smbolo 0, el autmata transiciona a los estados q0 y q1.
Dibujamos ahora un diagrama de transicin:
39

0,1
1

[qo]

[]

[q2]

[qo,q2]

0
0

0
0

[qo,q1]

[qo,q1,q2]

[q1]

[q1,q2]

0
Si se observa detenidamente este diagrama, se observar que los estados [q2], [q1], [qo,q2]
y [q1,q2] no son alcanzables desde el estado inicial [qo]. Luego el DFA puede ser
simplificado para funcionar con menos estados. El siguiente diagrama muestra esta
simplificacin junto con los estados renombrados de manera ms familiar:

0,1
1
q2

qo

0
0
q1

q3
1

0
1 lenguajes aceptados por los
De los dos teoremas anteriores podemos concluir que los
DFA son los mismos que aceptan los NDFA y viceversa. Ningn autmata es ms
poderoso que el otro.

40

Definiremos ahora a un nuevo tipo de autmata que presenta la sensacin de moverse


solo, es decir, que efecta transiciones de un estado a otro sin necesidad de ver
smbolos.
Definicin: Un autmata finito no determinstico con transiciones vacas ( abreviado
NDFA?) es un quintuplete (Q, ?, ?, q0, F) donde:
i)
ii)
iii)
iv)
v)

Q es un conjunto finito de estados


? es el alfabeto de entrada.
? es una funcin: ?:QX(?U{?}) P(Q)
q0 ? Q es el estado inicial del autmata
F Q es un conjunto llamado estados finales

Ejemplo 5: Considerar al NDFA? siguiente:

0
qo

q1
?
0,1

q2

Se tiene que :
Q={qo,q1,q2}, ?={0,1}, F={q1} y :
? (qo,0) ={q1}
? (qo,1) =
? (qo, ?) ={q2}
? (q1,0) ={q1,q2}
? (q1,1) ={q2}
? (q1, ?) =
? (q2,0) ={q0}
? (q2,1) ={q1}
? (q2, ?) ={q1}
En este caso se incluyen cambios de estado sin necesidad de ver un smbolo.
Por ejemplo: la palabra 10 comenzando en q0 alcanza al estado final q1, puesto que
desde qo se llega a q2 sin necesidad de ver ningn smbolo (la transicin se hace por el
camino etiquetado ?), de all se pasa a q1 con el smbolo 1 de la palabra y luego viendo a
un 0 se queda en q1 y pasa q2 (finaliza en ambos estados).
41

Las nociones de palabra aceptada y lenguaje aceptado por un NDFA? son anlogas a
las de un DFA y NDFA desde el punto de vista intuitivo, aunque su definicin
operacional es relativamente ms compleja.
Teorema 5.3: Si M es un NDFA que acepta al lenguaje L(M) entonces existe un
NDFA? que acepta al mismo lenguaje.
En el ejercicio #5 se invita al lector a formular una demostracin de este ltimo teorema.
El siguiente teorema, que se da sin demostracin, completa la equivalencia entre los
NDFAs y los NDFA? :
Teorema 5.4: Si M es un NDFA? que acepta al lenguaje L(M) entonces existe un
NDFA (sin movimientos vacos) que acepta al mismo lenguaje.
Los teoremas 5.3 y 5.4 cierran el ciclo de autmatas finitos, estableciendo la
equivalencia entre los 3 modelos matemticos presentados aqu.
El dibujo que sigue muestra grficamente estas equivalencias:
DFA

NDFA

NDFA?

No exploraremos ms aqu sobre los NDFA? y se remite al lector interesado a (3).


Cerraremos esta seccin con un ejemplo muy ilustrativo del uso de los NDFA?.
Ejemplo 6: Construir un autmata finito que acepte a las palabras binarias divisibles
entre 2 o 3.
Si el planteamiento del problema fuese construir un autmata finito determinstico que
acepte a las palabras binarias divisibles entre 2 o 3, posiblemente no fuese tan sencillo
encontrar el DFA solicitado. (De hecho, probablemente sea un problema muy
complicado).
Con el auxilio de los NDFA?, este problema se resuelve rpidamente y con mucha
elegancia. Basta recordar que en la seccin 3 se present al DFA que acepta a los
binarios pares y en la misma seccin se dej como ejercicio elaborar el DFA que acepta
a los binarios divisibles entre 3. Usando como base ambos DFAs podemos construir al
autmata solicitado:

42

M1

q1

q2

q0

q3
?

1
q5

q6

q4
M2

0
0

El truco se encuentra en que en este NDFA?, de entrada viendo a la palabra vaca se


transita a ambos autmatas determinsticos M1 y M2 , esto es, el NDFA? siempre se
encuentra en dos estados a la vez.
Finalmente debemos de decir que la demostracin del teorema 5.4 es constructiva y por
lo tanto, es posible seguir ciertos pasos para construir a partir del NDFA? anterior un
NDFA y luego usar el teorema 5.2 para obtener un DFA.

43

Ejercicios
Si A es un conjunto con n elementos, probar que P(A) tiene 2n
elementos.

1.
2.

Probar la siguiente afirmacin del teorema 5.2 :


?(qo,x)= [q1,q2,...,qi] si y solo si ?(qo,x)= {q1,q2,...,qi}.

3.

Dado el siguiente NDFA encontrar el DFA equivalente:


0
qo

0
0

0,1

q1
1

1
q2

q3

0,1

4.

Determine si es posible construir un DFA M tal que L(M)={1,4,1,6...}, donde el


conjunto {1,4,1,6...} contiene los dgitos en la expansin decimal del nmero
irracional PI.

5.

Probar el teorema 5.3

44

Seccin 6
Expresiones Regulares

En las secciones anteriores estudiamos a los autmatas finitos y describimos a L(M)


como el lenguaje aceptado por un autmata M. Adems sabemos que no todos los
lenguajes son aceptados por un autmata finito.
Reflexionemos un momento frente a las siguientes preguntas:
Cmo son en general los lenguajes aceptados por los autmatas finitos?, Cules son
estos lenguajes?, Podemos describir de forma general a la clase de lenguajes aceptados
por los autmatas finitos?.
Los lenguajes aceptados por los autmatas finitos son descritos por expresiones simples
llamadas expresiones regulares. Las expresiones regulares son un metalenguaje, esto es,
son un lenguaje que describe a otro lenguaje.
Definicin: Sea L un lenguaje formado sobre algn alfabeto, entonces definimos a la
cerradura de Kleene de L, simbolizada L*, como la unin:
L 0 U L 1 U L 2 U L 3...
donde L i designa a la concatenacin de L consigo mismo tantas veces como lo indique i.
Por definicin L 0={ ?}.
?
Luego : L*=ULi
i=0
Definimos tambin a L+, la cerradura positiva de L, como:
?
L+=L*{ ? }=ULi
i=1
Ejemplo 1: Si L={0}, es decir, L es el lenguaje formado por la nica palabra 0,
entonces: L*={ ?, 0,00,000,0000,...}. En L* se encuentran todas las palabras que se
pueden formar con el smbolo 0, incluyendo a la palabra vaca.
Tenemos que L+={ 0,00,000,0000,...}.
Definicin: Sea ? un alfabeto. Las expresiones regulares sobre ? y los conjuntos que
estas denotan se definen as:
1) El smbolo es una expresin regular y denota al lenguaje ={}
2) ? es una expresin regular que denota al lenguaje { ? }
3) El smbolo ai ? ? es una expresin regular y denota al lenguaje { ai }
para todo ai ? ?
45

4) Si V y S son expresiones regulares que denotan a los lenguajes V y S


respectivamente, entonces:
i)
ii)

V+S es una expresin regular que denota al conjunto formado por VUS
VS es una expresin regular que denota al conjunto formado por VS: la
concatenacin de V con S.
V* es una expresin regular que denota al conjunto formado por la
cerradura de Kleene de V.

iii)

Ejemplo 2: Sea ?={A,B,/,x}, entonces :

?
A
B
/
x

es expresin regular sobre ?


es expresin regular sobre ?
es expresin regular sobre ?
es expresin regular sobre ?
es expresin regular sobre ?
es expresin regular sobre ?

y representa al lenguaje {}
y representa al lenguaje { ? }
y representa al lenguaje { A }
y representa al lenguaje { B }
y representa al lenguaje { / }
y representa al lenguaje { x }

Esta notacin es muy sencilla, lo cul es valioso en matemticas, pero ciertamente


podran presentarse confusiones. Por ejemplo, al escribir A, puede referirse al smbolo A
del alfabeto ? o a la expresin regular que denota al lenguaje{A}.
A medida que profundicemos en esta seccin, ser claro para el lector a que nos
referimos en cada caso puesto que se deducir del contexto, o bien, escribiremos
explcitamente:"la expresin regular A".
Continuando con el ejemplo:
A+ ? es la expresin regular que denota a {A}U{ ? }= { ?, A }.
De la misma forma:
A+A+B+ ?={A,B, ? }
A?={A}
AB={A,B}
A*={ ?,A,AA,AAA...}
(A+B)*={?,A,B,AA,AB,BA,BB,...}
Obsrvese que en (A+B)* se encuentran todas las palabras que se pueden formar con A
y B. Esta claro adems que se pueden formar expresiones regulares que denotan a
lenguajes complicados: ( (A*+B)(/+B*+AB)*AA(X+/) )*.
Ejemplo 3: Describir al lenguaje de los nmeros binarios pares usando una expresin
regular. Solucin: (0+1)*0
Ejemplo 4: Describir al lenguaje de los nmeros binarios pares sin repeticin usando
una expresin regular. Solucin: 1(0+1)*0
Ejemplo 5: Indicar que lenguaje describe la siguiente expresin regular:
46

(0+1)*1(00+01+10+11)
Solucin: Observamos que el lenguaje puede iniciar con cualquier combinacin de
ceros y unos, incluyendo ningn 0 y ningn 1, pero definitivamente, debido a
que a continuacin se encuentra la expresin 1(00+01+10+11), debe de
tener un 1 como tercer smbolo de derecha a izquierda.
La expresin regular (0+1)*1(00+01+10+11) denota al lenguaje de los
binarios con un 1 como tercer smbolo de derecha a izquierda.
Ejemplo 6: En este ejemplo encontraremos una aplicacin de mucho inters de las
expresiones regulares a la computacin.
En los lenguajes de programacin es usual que los identificadores se
construyan comenzando con una letra del alfabeto y a continuacin,
combinando cualquier cantidad de letras y dgitos.
Describir a los identificadores usando una expresin regular.
Definimos a :
letra={a,b,..,z,A,B,...,Z}
digito={0,1,2,...,9}
Luego, la expresin regular buscada es:
letra(letra+digito)*
Ahora centraremos nuestra atencin en corroborar que el siguiente diagrama se cumple:
Teorema 6.2

Expresiones
regulares

Teorema 6.1

DFA
NDFA?

Teoremas 5.1 y 5.2

NDFA

Teoremas 5.3 y 5.4

Los teoremas 5.1, 5.2, 5.3 y 5.4 se discutieron en la seccin 5 y muestran la


equivalencia entre los autmatas finitos determinsticos, los no determinsticos sin
movimientos vacos y los autmatas no determinsticos con movimientos vacos.

Los teoremas 6.1 y 6.2 nos mostrarn la equivalencia entre las expresiones regulares y
los autmatas finitos. Con esto cerraremos el crculo y estaremos en posibilidad de
47

declarar que las expresiones regulares describen a la clase de lenguajes aceptados por
los autmatas finitos.
Teorema 6.1: Sea ? una expresin regular que denota a un lenguaje sobre ?, entonces
existe un NDFA? con un solo estado final y sin transiciones en ese estado que acepta al
mismo lenguaje.
Demostracin:
Definiremos a las expresiones regulares bsicas como: , ? y ai??. Es decir, las
expresiones regulares bsicas sern aquellas sin operadores, en otro caso se denominarn
compuestas.
La demostracin de este teorema es por induccin completa sobre el nmero de
operadores de ?.
i)

Si ? tiene 0 operadores, entonces es una expresin regular bsica y se tiene


que:
a) Si ? = , el NDFA? con un solo estado final y sin transiciones en ese
estado que acepta a este lenguaje es:
qf

qo

b) Si ? = ?, el NDFA? con un solo estado final y sin transiciones en ese


estado que acepta a este lenguaje es:
q0

c) Si ? = ai, el NDFA? con un solo estado final y sin transiciones en ese


estado que acepta a este lenguaje es:
ai
qo

ii)

qf

Si ? tiene n+1 operadores, n ? N, entonces por definicin de expresin


regular, ? es necesariamente de la forma:
a) r+s, donde r o s contienen a lo ms n operadores
b) rs, donde r o s contienen a lo ms n operadores
c) r* donde r contiene a lo ms n operadores
Analizaremos cada caso por separado:
48

a) r+s. Por hiptesis de induccin completa, existen


M1=(Q1, ?1, ?1, q1, {f1) } y M2=(Q2, ?2, ?2, q2, {f2}), ambos NDFA? con
un solo estado final y sin transiciones en ese estado, tal que: L(M1)=r y
L(M2)=s.
Dado que podemos renombrar los estados en Q1 y Q2, podemos asumir
sin prdida de generalidad que Q1 Q2= .
Sea q0 un nuevo estado inicial y f0 un nuevo estado final, definimos:
M=(Q1UQ2U{q0,f0}, ?1U?2, ?, q0, {f0}), tal que:
i)
ii)
iii)
iv)

?(qo, ?)={q1,q2}
?(q, a)= ?1(q, a)
q ? Q1{f1} y a ? ?1U{ ? }
?(q, a)= ?2(q, a)
q ? Q2{f2} y a ? ?2U{ ? }
?(f1, ?)=?(f2, ?)={f0}

M grficamente es as:
M1

q1

...

f1

q0
f0

M2
q2

...

f2

Deber ahora estar claro que M es un NDFA? con un solo estado final y
sin transiciones en ese estado construido de manera que acepta a r+s.
b) rs. De manera anloga, en este caso definimos a
M=(Q1UQ2, ?1U?2, ?, q1, {f2}), tal que:
i)
ii)
iii)

?(q, a)= ?1(q, a)


?(f1, ?)= {q2}
?(q, a)= ?2(q, a)

q ? Q1{f1} y a ? ?1U{ ? }
q ? Q2 y a ? ?2U{ ? }

M grficamente es as:
M1
q1

...

?
f1

M2
q2

...

f2

M es un NDFA? con un solo estado final y sin transiciones en ese estado


construido de manera que acepta a rs.

49

c) r*. Por hiptesis de induccin completa, existe M1=(Q1, ?1, ?1, q1, {f1) }
NDFA? con un solo estado final y sin transiciones en ese estado, tal que:
L(M1)=r.
Sea q0 un nuevo estado inicial y f0 un nuevo estado final, definimos:
M=(Q1U{q0,f0}, ?1, ?, q0, {f0}), tal que:
i)
ii)

?(qo, ?)= ?(f1, ?)={q1,f0}


?(q, a) = ?1(q, a)
q ? Q1{f1} y a ? ?1U{ ? }

M grficamente es as:
?
?

M1

...

q1

q0

f1

f0

?
Afirmamos que M es un NDFA? con un solo estado final y sin
transiciones en ese estado construido de manera que acepta a r*.
Invitamos al lector para encontrar los argumentos que permitan justificar
esta ltima afirmacin.
(Q.E.D.)
La demostracin anterior es otra de estas valiossimas demostraciones constructivas, esto
es, adems de demostrar el teorema, los argumentos de la demostracin producen un
algoritmo de construccin.
Ejemplo 7: Sea ?={0,1}. Encontrar un autmata finito que acepte al lenguaje descrito
por la expresin regular 1(0+1)*0.
Solucin: Esta claro cul es el autmata finito que acepta a 1(0+1)*0, pues sta
expresin caracteriza a los binarios pares sin repeticin. Solo deseamos aqu encontrar
este autmata por un camino distinto al de la intuicin o la heurstica. Lo construiremos
usando el algoritmo del teorema 6.1.

Sea r=0 y s=1, entonces construimos los siguientes autmatas:


1

0
qo

q1

50

q2

q3

El primero acepta a r y el segundo a s.


Ahora construimos un autmata que acepte a (0+1) a partir de los 2 anteriores:
0
q1

qo

?
q4

q5
1

q2

q3

Continuamos con la construccin del autmata que acepta a (0+1)*:


?

?
q6

qo

q1

?
?
q7

q5

q4
1

q2

q3

?
?
y finalmente, terminamos con el autmata para 1(0+1)*0:

1
q9

?
q8

qo

q1

?
q6

?
q5

q4

q7

q10

0
q11

1
q2

q3

?
En el NDFA? anterior los estados pueden ser renumerados y se pueden simplificar
?
estados redundantes, de forma que el autmata resultante sea ms sencillo.
Parece que la intuicin o la heurstica funcionan mejor en ciertos casos, y as es.
El teorema 6.1 resulta til cuando la expresin regular es medianamente complicada.
Incluso, un programa de computadora puede ser escrito para tener como entrada una
expresin regular y usando el algoritmo anterior producir cmo salida un FA que acepte

51

al lenguaje descrito por aquella. (Ver ejercicio #10). Sin embargo, en otras
circunstancias ser preferible construir el autmata sin usar el algoritmo.
El siguiente teorema se da sin demostracin. Revise (3) si desea obtener una
demostracin completa del teorema.
Teorema 6.2: Si M es un DFA que reconoce al lenguaje L(M), entonces existe una
expresin regular ? que denota al mismo lenguaje.
Esto cierra el ciclo propuesto, y por tanto podemos afirmar:
La clase de lenguajes aceptados por los autmatas finitos es
precisamente la clase de lenguajes descrita por las expresiones
regulares.
Teorema 6.3: Las expresiones regulares son cerradas respecto al complemento y la
interseccin.
Demostracin: Ya que conocemos la equivalencia entre expresiones regulares y
autmatas, podemos ahora usar esta equivalencia para nuestras demostraciones.
i)

Si L es expresin regular, entonces existe un DFA M que acepta al lenguaje


descrito por L. Redefinamos a M de manera que todos los estados finales
sean no finales, y que todos los estados no finales sean ahora finales. (Podra
decirse que "complementamos" al autmata).
Llamemos al DFA resultante M. Si el conjunto de estados finales de M es Q,
entonces el conjunto de estados finales de M es Q (El complemento de Q).
No es muy difcil ver que M acepta a L (El complemento de L) y de aqu
que existe una expresin regular para L.

ii)

Si L1 y L2 son expresiones regulares entonces L1?L2 es expresin regular, pues


aplicando la 2 ley de DMorgan y conviniendo que el smbolo
" " significa complemento de conjuntos tenemos que :
L1?L2 = (L1UL2) .

(Q.E.D.)
Como puede observarse, los conceptos pueden ser extendidos de forma inmediata para
probar muchas propiedades interesantes sobre las expresiones regulares, conformando lo
que se conoce como "lgebra regular".
Ejercicios
1.

Encuentre un autmata finito para cada una de las siguientes expresiones


regulares:
a)
b)
52

10+(0+11)0*1
01(((10)*+111)*+0)*1

2.

Encuentre autmatas finitos que acepten a los lenguajes binarios


siguientes:
a)
b)
c)

Todas las palabras que terminan en 00


Todas las palabras con 3 ceros consecutivos
Todas las palabras cuyo sexto smbolo de derecha a
izquierda es 1

3.

Construir un autmata finito que acepte al lenguaje de las palabras


binarias que no contienen a la subpalabra 101 ni a la subpalabra 010.

4.

Encontrar una expresin regular que describa al lenguaje todas las


palabras binarias que en las cuales los 2 ltimos smbolos son iguales.
Construir un autmata que acepte a este lenguaje.

Sea ?={0,1,2}. Definimos L1={01x22 / x ? ?*} y L2={x012y / x,y ?


?*}.
Encontrar autmatas finitos que acepten a L1UL2 y a L1L2.
5.

6.
Sean L1 y L2 lenguajes denotados por expresiones regulares.
Demostrar que:
(L1?L2)U(L1?L2)= si y solo si L1=L2.
7.

Considerar los siguientes autmatas:


1

M1
0
1
qo

q2
0

qo

0
q1

Encontrar M3 tal que: L(M3)=L(M1) ?L(M2).


8.

Demostrar que todo lenguaje que puede ser expresado por medio de
una expresin regular es recursivo.

9.

Sea L un lenguaje. Lr se define como :

Lr={x / (x al revs) ? L }
53

Probar que si existe una expresin regular para describir a L entonces tambin
existe una expresin regular para describir a Lr.
10.

Escribir un programa de computadora en lenguaje C, de forma que la entrada del


programa sea una expresin regular sobre el alfabeto {0,1} y el programa
produzca como salida la especificacin del autmata finito que acepta al lenguaje
descrito por la expresin regular.

54

Seccin 7
Gramtica Formal
En la seccin 1 comentbamos sobre la posibilidad de escribir un compilador.
Decamos que un compilador tiene como objetivo leer un programa fuente escrito en
algn lenguaje de alto nivel y traducirlo a cdigo objeto de una computadora.
El primer paso antes de intentar escribir un compilador es tener clara la especificacin
del lenguaje a compilar. Con esto queremos decir que las reglas del lenguaje deben de
estar especificadas por escrito de alguna forma precisa y sin ambigedad, pues el
compilador deber (como todo algoritmo) revisar de forma mecnica un programa
escrito en este lenguaje y decidir en un tiempo finito si est bien escrito o no, cotejando
en cada momento si no se han cometido violaciones a las reglas.
Por otro lado, las reglas que se definan para el lenguaje deben de ser amplias y
adecuadas como para generar programas suficientemente expresivos, de alto nivel y que
ayuden a los usuarios a resolver problemas complejos usando todo el poder de la
computadora.
Son las expresiones regulares adecuadas para definir con ellas a un lenguaje de
programacin?. Desgraciadamente la respuesta es NO.
Las expresiones regulares no son suficientes para especificar completamente a un
lenguaje de programacin de alto nivel. La razn de esto radica bsicamente en la
relativa sencillez de los lenguajes que describen, no obstante las expresiones regulares
juegan un papel importante en un compilador, permitiendo definir las componentes
lexicogrficas del lenguaje.
Fue Noam Chomsky, del Instituto Tecnolgico de Massachussets, quin por primera vez
propuso la formalizacin del concepto de gramtica, es decir, la matematizacin del
concepto a fin de poder definir y estudiar rigurosamente sus propiedades.
Estas herramientas permitieron la definicin de lenguajes de programacin expresivos y
la construccin de compiladores para estos lenguajes.
En esta ltima seccin estudiaremos brevemente algunos conceptos bsicos de gramtica
formal.
Definicin: Sea V un alfabeto. Una gramtica sin restricciones o del tipo 0, tambin
llamada natural, es un cuadruplete (Vn,Vt,P,S), donde:
a) Vn

V. (Vn se llama conjunto de smbolos no terminales)

b) Vt

V. (Vt se llama conjunto de smbolos terminales),

Se tiene que : VnUVt=V y Vn?Vt= .


c)

P es un conjunto de proposiciones de la forma ?>?, donde:


55

? ? V+ y ? ? V*. El smbolo ">" se lee "produce a".


d) S ?Vn se llama smbolo inicial o distinguido de la gramtica.
Ejemplo 1: Sea G=(Vn,Vt,P,S) tal que:
Vn={S}, Vt={0,1} y P={S>0S1, S>01}.
Si partimos siempre del smbolo inicial y usamos las reglas de forma consecutiva y
sistemtica, podemos obtener algunas palabras a partir de G:
i) S>0S1>0011
ii) S>0S1>00S11>000S111>0000S1111
Las palabras 0011 y 0000S1111 son producidas por la gramtica G. La primera consta
de solo smbolos terminales y la segunda combina terminales y un no terminal.
Como se muestra, la idea es producir palabras o frases por el mecanismo de sustituir
smbolos usando reglas preestablecidas.
Al principio, la idea de definir una gramtica de esta forma puede no parecer muy
natural. Esto es comprensible debido al hecho de que nuestra gramtica ms familiar, la
del idioma espaol, no nos fue enseada con semejante formalismo. Sin embargo el
siguiente ejemplo podra contribuir a aclarar algunas ideas.
Ejemplo 2: Definimos:
Vn={<Frase>,<Sujeto>,<Predicado>),
Vt={Pedro, Mara, Duerme, Come}
En este ejemplo usamos a una palabra completa como un smbolo, para el caso, la
palabra "Sujeto" o la palabra "Duerme" debern de ser consideradas como un todo y
como un solo smbolo. Encerraremos entre < > a los smbolos no terminales a fin de
poder distinguirlos.
S=<Frase>, y adems:
P={<Frase> > <Sujeto><Predicado>,
<Sujeto> > Pedro,
<Sujeto> > Juan,
<Predicado> > Duerme
<Predicado> > Come}
Con esta gramtica ms familiar se pueden obtener frases como: Pedro Come, as:
<Frase>> <Sujeto><Predicado> > Pedro<Predicado> > Pedro Come.
o bien, Mara Duerme, as:
56

<Frase>><Sujeto><Predicado>> Mara<Predicado>> Mara Duerme.


Obsrvese que a partir de esta gramtica es posible generar algunas frases que forman
un pequeo lenguaje: {PedroCome, PedroDuerme, MaraCome, MaraDuerme}.
Regresemos ahora al ejemplo 1. Cul es el conjunto de palabras formadas solamente
por smbolos terminales producidas por G?.
No es difcil ver que es el lenguaje descrito por 0n1n, donde por definicin : Si a es un
smbolo, an es la palabra : aaaa...aaaa ("a" repetida n veces). Por supuesto n ? N.
n

Definicin: Se dice que la palabra ??? deriva directamente a la palabra ??? en la


gramtica G, y se escribe:
???==> ???,
G
si existe una produccin en G de la forma ?>?.
Ejemplo 3: Sea G=({S},{0,1},{S>01, S>0S1},S)
En esta gramtica 00S11 deriva directamente a la palabra 000S111. Basta con
identificar: ?=00, ?=S, ?=11 y ?=0S1.
Definicin: Se dice que la palabra w1 deriva a la palabra wn en la gramtica G, y se
escribe:
*
w1==> wn,
G
si existe una sucesin w1,w2,...,wn de palabras, tal que:
w1==>w2==>...==>wn
G
G
G
Ejemplo 4: Usando la misma gramtica del ejemplo anterior se tiene que:
*
00S11==>0000011111
G
Puesto que: 00S11==>000S111==>0000S1111==>0000011111
G
G
G
Definicin: El lenguaje generado por una gramtica G es el conjunto de todas las
palabras en Vt* que se derivan a partir de S utilizando las producciones de G.
Matemticamente:
57

*
L(G)={x / S==>x y x ? Vt*}
G
El lenguaje generado por una gramtica G es el conjunto de todas las palabras formadas
solo por smbolos terminales que pueden derivarse a partir de S en G.
Ejemplo 5: Consideremos a la gramtica G1=(Vn,Vt,P1,S):
Vn={S,A,B}, Vt={0,1} y
P1={S>AB, B>0,A>A0,A>A1,
A>0,A>1,A> ? }.
Podemos abreviar la escritura de las producciones P1 usando el smbolo "|" para indicar
alternativa. Para el caso, P1 puede rescribirse:
P1={S>AB, B>0,
A>A0|A1|0|1| ? }.
La produccin A> ?
significa que el smbolo A puede ser sustituido por la
palabra vaca, es decir, que a partir de A se genera a la palabra vaca. Esto no contradice
la definicin de gramtica, puesto que la especificacin de que en toda produccin
?>?,
? ? V+, impide que la palabra vaca este a la izquierda de la produccin, pero no a su
derecha.
Un examen del comportamiento de las producciones en G1

muestra que:

L(G1)=(0+1)*0
Si consideramos ahora a G2=(Vn,Vt,P2,S), con:
P2={S>A0, A>A0|A1|? },
Notamos que tambin L(G2)=(0+1)*0, de lo cual se concluye que 2 gramticas distintas
pueden generar el mismo lenguaje.
Como sucede con los lenguajes aceptados por los autmatas finitos, en general no
siempre ser posible encontrar de un vistazo el lenguaje generado por una gramtica, en
especial cuando sta tiene muchas producciones complejas.
Definicin: Una gramtica sensible de contexto (CSG=Context Sensitive Grammar) o
del tipo 1, es una gramtica de tipo 0 con la restriccin de que todas las producciones
?>? cumplen con la condicin: | ? |?| ? |. (Recuerde que el operador | . | es la
"longitud de una palabra").
Definicin: Una gramtica libre de contexto (CFG=Context Free Grammar) o del tipo 2,
es una gramtica de tipo 1 con la restriccin de que todas las producciones
?>? cumplen con la condicin: | ? |=1.
58

Ejemplo 6: Sea G=(Vn,Vt,P,S), donde:


Vn={S,A,B,C,D,E}, Vt={a,b}
y P={S>AcaB,Ca>aaC
CB>DB | Aba,
aD>Da, AD>AC,
aE>Ea,AE>ab, AaE>AbE}
Todas las producciones de G cumplen la condicin: | ? |?| ? |, y por tanto G es CSG.
El termino de "sensitivas del contexto" es importante en este tipo de gramticas.
Significa precisamente que la sustitucin de smbolos en las derivaciones en G depende
del contexto en el que se encuentren los smbolos. En las gramticas CSG si se tiene
producciones de la forma ?1A?2> ?1B?2 , ?1,?2 en V*, significa que el smbolo A solo
puede ser reemplazado por el smbolo B en el contexto ?1?2.
Por ejemplo en la gramtica del ejemplo anterior se tiene la produccin AaE>AbE.
Esta produccin nos permite reemplazar al smbolo "a" por el smbolo "b" solo cuando
"a" se encuentre en el contexto AE.
Ejemplo 7: Sea Vn={S,A,B,C} y Vt={0,1}
y P={S>ABC,A>1,B>BB|0|1}
En esta gramtica todas las producciones ?>? cumplen con la condicin: | ? |=1, por
tanto G es CFG.
Las gramticas de este tipo se denominan "libres de contexto" debido a que en ellas la
sustitucin de smbolos se puede hacer sin reparar en el contexto en el que se encuentra
dicho smbolo. Por ejemplo en la gramtica anterior, si nos encontramos derivando una
palabra, el smbolo "A" puede ser reemplazado en donde se encuentre por el smbolo
"1".
Usted puede fcilmente encontrar un ejemplo para convencerse de que existen
gramticas que no son del tipo 1 ni del tipo 2.
Definicin: Una gramtica regular (RG=Regular Grammar) o del tipo 3 es una
gramtica de tipo 2 en donde todas las producciones cumplen con ser de una de dos
formas: A>a o A>aB, con A,B ? Vn y a ?Vt.

Ejemplo 8: Definamos G=({A,S},{0,1},P,S}, donde :


P={S>1A, A>0|0A|1A}.

59

G es evidentemente regular.
Si se examina con detenimiento a G se puede ver que L(G)=1(0+1)*0, el lenguaje de los
binarios pares sin repeticin.
Para el caso de las gramticas regulares, la definicin nos dice que una de las formas de
las producciones es A>aB, denominndose entonces regular por la derecha.
Se puede dar la posibilidad de que la produccin sea de la forma A>Ba, lo cul
produce una gramtica denominada regular por la izquierda.
Los nombres de los lenguajes generados por las gramticas se denominan de acuerdo a
la gramtica que las genera, para el caso:
Si G0 es natural. entonces L(G0) es natural
Si G1 es sensitiva del contexto, L(G1) es sensitivo del contexto
Si G2 es libre de contexto, L(G2) es libre de contexto
Si G3 es regular, L(G3) es regular.
Esto produce una nueva clasificacin de los lenguajes de acuerdo a la gramtica que los
produce, segn el siguiente diagrama:
L(G0)
L(G1)
L(G2)
L(G3)

Desde luego esto nos dice que todo lenguaje regular es libre de contexto, que todo
lenguaje libre de contexto es sensitivo de contexto y que todo lenguaje sensitivo de
contexto es natural.
El lector inquisitivo habr notado una cierta ligereza en la denominacin de lenguaje
regular para los lenguajes generados por una gramtica regular, puesto que por
congruencia, los nicos lenguajes que pueden denominarse con propiedad "regulares",
son aquellos que pueden ser descritos por alguna expresin regular.
El siguiente teorema legitima el uso de la expresin "regular" para estos lenguajes:
Teorema 7.1: Sea G gramtica regular, entonces L(G) es aceptado por un autmata
finito.
60

Comentario: Si L(G) es aceptado por una autmata finito, entonces existe una expresin
regular que describe a L(G).
Demostracin: Indicaremos de forma constructiva el autmata requerido y dejamos al
lector los detalles para convencerse de que dicho autmata acepta exactamente a L(G).
Como G es regular, todas las producciones son de la forma A>a o A>aB, con
A,B ? Vn y a ? Vt. Creamos el conjunto denominado [Vn], formado por los nuevos
smbolos [A] y [B].
Construimos ahora al autmata finito M, equivalente a G as:
M={[Vn]U[qf],Vt, ?, [A],{[qf]}},
(Obsrvese que a cada smbolo no terminal le asociamos un estado)
y definimos a ? de la siguiente manera:
i)
ii)

Si A>a entonces ?([A],a)=[qf]


Si A>aB entonces ?([A],a)=[B]

Note que las transiciones del autmata simulan de forma precisa a las reglas del
lenguaje:
a

A>a se simula con la transicin:

A>aB se simula con la transicin:

[A]

[A]

[qf]

[B]

M acepta a L(G).
(Q.E.D.)
Ejemplo 9: Sea Vn={S,A} y Vt={0,1}.
P={S>0A|1A|0|0S|1S, A>0}
Esta gramtica es regular. Construyamos un autmata finito que acepte al lenguaje
generado por esta gramtica:
Q={[S],[A],[qf]}, ={0,1}, el estado inicial es [S], F={[qf]} y el diagrama de transicin
del autmata es como sigue:
0,1

[qf]

61

[S]
0,1

[A]

El teorema que sigue, y que se da sin demostracin, nos permitir de nuevo obtener una
nueva organizacin de lenguajes:
Teorema 7.2: Todo lenguaje sensitivo del contexto es recursivo. Esto es: existe un
algoritmo que siempre decide si una palabra pertenece o no a un lenguaje sensitivo del
contexto.
Podemos entonces dibujar el siguiente diagrama:
Todos los
lenguajes
Lenguajes rec. num.
Lenguajes
recursivos
L(G1)
L(G2)
L(G3)

Se puede probar (Ver ejercicio #2) que si L(G) es un lenguaje sensitivo de contexto,
entonces ? ? L(G). Esto significa que la palabra vaca no puede producirse a partir de las
reglas de la gramtica.
Dado que en cualquier lenguaje la palabra vaca es una palabra relevante (como en
teora de conjuntos, el vaco es fundamental), el resultado anterior impone una
importante restriccin sobre L(G) cuando G es CSG.
Uno podra pensar que dada G, CSG, la generacin de la palabra vaca es trivial si se
introducen las producciones necesarias. El siguiente ejemplo ilustra esta idea.
Ejemplo 10: Sea G=({S,A},{a,b},P,S), tal que:
62

P={S>aS|aa|bb|AS,
A>b|aA|ba}
G es CFG y por tanto CSG. Adems G no genera a la palabra vaca. Para producir a la
palabra vaca aumentemos a P la produccin S> ? y listo. En un paso S==> ?.
G
Sin embargo debemos de hacer notar que antes de introducir la nueva regla, la palabra
"a" no era producida por G, y luego de la introduccin de la nueva regla, la palabra "a"
si es producida a partir de S:
S > aS>a.
Por tanto, el lenguaje generado por G ha sido alterado. Aunque este ejemplo es sencillo,
muestra que en casos ms complejos la introduccin de una regla para producir al vaco
pudiese alterar de manera drstica a L(G).
A continuacin discutiremos un mtodo para aumentar a la palabra vaca sin alterar al
lenguaje producido por la gramtica (excepto por supuesto por la produccin de ?).
Este mtodo es conocido como extensin de la gramtica y el resultado se conoce como
gramtica extendida.
Sea G=(Vn,Vt,P,S) CSG.
Construimos G=(VnU{S1},Vt,P,S1) y S1 ? Vn. (S1 es el nuevo smbolo inicial).
Adems P=PU{S1>? si y solo si S> ??P} U {S1> ?}
Aseguramos que L(G)=L(G)U{?}. No es difcil ver esto, pues G tiene las mismas
producciones que G y lo que hemos hecho es solamente introducir un nuevo smbolo
inicial para retrazar las producciones de S.
G es la gramtica extendida de G.
Ejemplo 11: Regresemos a la gramtica del ejemplo 10 e intentemos ahora extender la
gramtica G.
Tenemos que: P={ S1>aS|aa|bb|AS, S1> ?,
S>aS|aa|bb|AS,
A>b|aA|ba}.
Al iniciar la discusin de esta seccin, decamos que era importante encontrar reglas
para definir a los lenguajes de programacin. Ahora que conocemos el concepto de
gramtica formal, estamos en posicin de decidir que tipo de gramtica conviene para
tales efectos. Hacemos hincapi en la importancia de decidir correctamente, pues luego
de definir que gramtica servir para definir a los lenguajes de programacin de alto
nivel, el problema ya no ser la generacin de frases, sino su reconocimiento por medio
de un compilador.

63

Inicialmente la tentacin puede ser escoger a las gramticas tipo 0 o gramticas


naturales. Ciertamente no hay condicin alguna sobre las producciones y por tanto los
lenguajes que producen son los ms poderosos, pero el mismo hecho de no tener
restricciones sobre las reglas hace, en general, imposible la construccin de un
compilador.
La segunda opcin son las gramticas tipo 1 o gramticas sensitivas del contexto.
Aqu las reglas poseen una restriccin, lo cual hace que los lenguajes generados sean
restringidos en el mismo sentido, an cuando siempre podran ser muy expresivos.
Sin embargo el mismo hecho de poseer contexto dificulta enormemente su
reconocimiento mecnico en un tiempo aceptable. El compilador deber en cada
momento revisar el contexto en el que se encuentra cada smbolo para decidir si la frase
(programa) es correcta o no.
Saltemos hasta las gramticas tipo 3 o regulares. Estas gramticas tienen las
restricciones ms amplias, y no solamente sobre el tamao de las frases en las
producciones, sino tambin sobre su forma. Los lenguajes que producen son
equivalentes a las expresiones regulares y por tanto ahora nos encontramos en el
problema contrario al encontrado arriba. El compilador para los lenguajes regulares es
equivalente a escribir un programa que simule a un autmata finito, lo cual es muy
sencillo, pero los programas que se pueden escribir a partir de una gramtica regular son
muy pobres en trminos de estructura y digmoslo de una vez, completamente
insatisfactorios para todo propsito prctico.
Quedan entonces los lenguajes generados por gramticas tipo 2 o libres de contexto.
Veremos ahora que tales gramticas resultan adecuadas para la definicin de lenguajes
de programacin de alto nivel.
Las gramticas tipo 2 se seleccionan para definir a la mayora de los lenguajes de
programacin de alto nivel, debido que, an cuando poseen restricciones sobre las
reglas, los lenguajes resultantes son adecuados para expresar algoritmos complejos en un
nivel cercano al nivel de entendimiento humano. Como muestra, basta ver a los
lenguajes como C, Pascal o ADA, que son generados por gramticas libres de contexto
y cuyo poder de programacin esta probado.
Por otro lado, an cuando escribir un compilador para un lenguaje de esta naturaleza no
es sencillo (y por eso usted toma un curso de 1 semestre en Teora de la Compilacin),
el reconocimiento de frases, llamado "parsing"4, es una teora bien conocida y estudiada.
El hecho de que la gramtica sea libre de contexto facilita la labor de parsing, puesto
que cuando se examina un smbolo en una frase y se debe decidir si no se ha cometido
un error, no hay que examinar contexto; basta encontrar una regla que permita la
aparicin de este smbolo por medio de una sustitucin libre de contexto.
Sobre este punto finalmente se debe de decir que se han hecho muchos esfuerzos para el
reconocimiento de lenguajes naturales, principalmente en el rea de la inteligencia
artificial.

Del latn: Parse Orationis

64

Sobre los detalles en la notacin en gramtica formal


Terminaremos nuestro estudio de la gramtica formal haciendo algunas observaciones
sobre la notacin.
Algunos autores prefieren usar una notacin distinta a la que hemos presentado aqu
para las gramticas formales. Esto adems de ser una cuestin de preferencia, proviene
de consideraciones prcticas, por ejemplo: se debe de especificar la gramtica de un
lenguaje de programacin particular en un manual de usuario, y por tanto, es sensato
simplificar la notacin de manera que la mayora pueda entenderla sin necesidad de usar
expresiones matemticas complejas.
Se tiene por ejemplo la notacin BNF (BackusNaur Form)5, en donde el smbolo
">" se sustituye por "::=" , y los smbolos terminales se encierran entre "<>".
Ejemplo 12: A continuacin se muestran algunas producciones de la gramtica del
ejemplo10 en notacin BNF:
<S>::=a<S>
<S>::=aa
?
<S>::=a<A>
Ejemplo 13: A continuacin se presenta un extracto de la definicin de subrutina,
tomada de un manual de FORTRAN:
<Subroutine>::=<Subheader><Subbody>
<Subheader>::=<Subtitle><Subdeclarations>
<Subtitle> ::=subroutine<name><list of parameters>
?

Bakus: Padre del FORTRAN, Naur: Padre del ALGOL.

65

Ejercicios
1.

Describir los lenguajes generados por las siguientes gramticas:


i)

Vn={S,A}, Vt={x,y,z} y
P={S>xA, A>z|yA}

ii)

Vn={S,A,B}, Vt={x,y,z} y
P={S>A|B, A>xA|y, B>xB|z}

2.

Probar que si L(G) es un lenguaje sensitivo de contexto, entonces ? ? L(G).

3.

Considerar a la gramtica G, tal que: Vn={S,A}, Vt={0,1} y


P={S>0A|1A|0|0S|1S, A>0}.
Construir una gramtica extendida para G
4.

Sea G la gramtica extendida correspondiente a la


gramtica regular G.
Indicar como debe de cambiar el autmata finito M construido en el teorema 7.1
para que L(M)=L(G).
5.

Usando el resultado del ejercicio anterior, construir un


autmata finito que acepte a la gramtica extendida del
ejercicio 3.

6.

Encontrar una gramtica G libre de contexto que genere al


lenguaje
L={ancan / n?0}. Demostrar formalmente que L(G)=L.
7.

Encontrar una gramtica G libre de contexto que genere al


lenguaje
L={ancan / n?0} U { ? }.

66

Referencias bibliogrficas
(1) Levine Gutirrez, Guillermo, Introduccin a la computacin y a la
programacin estructurada, McGrawHill, Mxico.
(2) Rudin, W., Principios de anlisis matemtico, McGrawHill, Mxico.
(3) Hopcroft, John E.; Ullman, Jeffrey D., Introduction to automata theory,
languages and computation, AddisonWesley Publishing Company.
(4) Hopcroft, John E.; Ullman, Jeffrey D., Formal languages and their relations to
automata, AddisonWesley Publishing Company.
(5) Kelley, Dean, Teora de autmatas y lenguajes formales, Prentice Hall.
(6) Beckman, F.S., Mathematical theory of programming, AddisonWesley.
(7) Brookshear, J. Glenn, Teora de la computacin : lenguajes formales, autmatas
y complejidad, AddisonWesley Iberoamericana.
(8) D. Knuth, The art of computer programming, Vol I, AddisonWesley, Mass.
(9) R. Kothange, Logic and algoritms, Wiley & Sons, N.Y.
(10)Teufel, Bernard; Teufel, Thomas; Schmidt, Stephanie, Compiladores: conceptos
fundamentales, AddisonWesley Iberoamericana.

67

68

You might also like