Está en la página 1de 149

Teora de Automatas y Lenguajes Formales

(para Informaticos)
Luis M. Pardo Domingo Gomez
14 de enero de 2010
2

Indice general
1. Chomsky. Expresiones Regulares 9
1.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Lenguajes Formales y Monoides . . . . . . . . . . . . . . . . . . . . . 12
1.2.1. Operaciones Elementales con Lenguajes . . . . . . . . . . . . 14
1.2.2. Sistemas de Transicion . . . . . . . . . . . . . . . . . . . . . . 15
1.3. Gramaticas Formales . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.1. Sistema de Transicion Asociado a una Gramatica. . . . . . . 16
1.4. Jerarqua de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5. Sistemas de Thue: Problemas de Palabra . . . . . . . . . . . . . . . . 19
1.6. Expresiones Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.6.1. Las Nociones Basicas . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.2. Derivacion de Expresiones Regulares . . . . . . . . . . . . . . 24
1.6.3. De REs a RGs: Metodo de Derivaciones . . . . . . . . . . . 26
1.6.4. Ecuaciones Lineales. Lema de Arden . . . . . . . . . . . . . . 30
1.7. Equivalencia entre REs y RGs . . . . . . . . . . . . . . . . . . . . . 32
1.8. Problemas y Cuestiones. . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.8.1. Cuestiones Relativas a Lenguajes y Gramaticas. . . . . . . . 33
1.8.2. Cuestiones Relativas a Expresiones Regulares. . . . . . . . . . 34
1.8.3. Problemas Relativos a Lenguajes Formales y Gramaticas . . 34
1.8.4. Problemas Relativos a Expresiones Regulares . . . . . . . . . 36
2. Aut omatas Finitos 39
2.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.2. La Nocion de Automata . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.2.1. Sistema de Transicion de un automata : . . . . . . . . . . . . 40
2.2.2. Automatas con/sin Transiciones. . . . . . . . . . . . . . . 44
2.2.3. Determinismo e Indeterminismo en Automatas . . . . . . . . 46
2.3. Lenguajes Regulares y Automatas. . . . . . . . . . . . . . . . . . . . 47
2.3.1. Teorema de Analisis de Kleene . . . . . . . . . . . . . . . . . 47
2.3.2. Teorema de Sntesis de Kleene . . . . . . . . . . . . . . . . . 48
2.4. Lenguajes que no son regulares . . . . . . . . . . . . . . . . . . . . . 51
2.4.1. Un ejemplo clave : El Palndromo. . . . . . . . . . . . . . . . 52
2.5. Minimizacion de Automatas Deterministas . . . . . . . . . . . . . . . 53
2.6. Cuestiones y Problemas. . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.6.1. Cuestiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3
4

INDICE GENERAL
2.6.2. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3. Libres de Contexto 63
3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.2.

Arboles de Derivacion de una Gramatica . . . . . . . . . . . . . . . . 65
3.2.1. Un algoritmo para la vacuidad. . . . . . . . . . . . . . . . . . 66
3.3. Formas Normales de Gramaticas. . . . . . . . . . . . . . . . . . . . . 67
3.3.1. Eliminacion de Smbolos In utiles o Inaccesibles . . . . . . . . 68
3.3.2. Transformacion en Gramaticas Propias. . . . . . . . . . . . . 71
3.3.3. El Problema de Palabra para Gramaticas Libres de Contexto es Decidible. 76
3.3.4. Transformacion a Formal Normal de Chomsky. . . . . . . . . 77
3.3.5. Forma Normal de Greibach . . . . . . . . . . . . . . . . . . . 79
3.4. Automatas con Pila. . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.4.1. Nocion de Automatas con Pila. . . . . . . . . . . . . . . . . . 79
3.4.2. Sistema de Transicion Asociado a un Automata con Pila. . . 82
3.4.3. Lenguaje Aceptado por un Automata con Pila. . . . . . . . . 87
3.4.4. Equivalencia con Gramaticas Libres de Contexto. . . . . . . . 92
3.5. Propiedades Basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.6. Cuestiones y Problemas . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.6.1. Cuestiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.6.2. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4. Introducci on a Parsing 103
4.1. Compiladores, Traductores, Interpretes . . . . . . . . . . . . . . . . . 106
4.1.1. Traductores, Compiladores, Interpretes . . . . . . . . . . . . 107
4.1.2. Las etapas esenciales de la compilacion. . . . . . . . . . . . . 108
4.2. Conceptos de Analisis Sintatico . . . . . . . . . . . . . . . . . . . . . 109
4.2.1. El problema de la Ambig uedad en CFG . . . . . . . . . . . . 109
4.2.2. Estrategias para el Analisis Sintactico. . . . . . . . . . . . . . 111
4.3. Analisis CYK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.3.1. La Tabla CYK y el Problema de Palabra. . . . . . . . . . . . 113
4.3.2. El

Arbol de Derivacion con las tablas CYK. . . . . . . . . . . 114
4.4. Traductores PushDown. . . . . . . . . . . . . . . . . . . . . . . . . 116
4.5. Gramaticas LL(k): Analisis Sintatico . . . . . . . . . . . . . . . . . . 118
4.5.1. FIRST and FOLLOW . . . . . . . . . . . . . . . . . . . . . . 118
4.5.2. Gramaticas LL(k) . . . . . . . . . . . . . . . . . . . . . . . . 122
4.5.3. Tabla de Analisis Sintactico para Gramaticas LL(1) . . . . . 123
4.5.4. Parsing Gramaticas LL(1) . . . . . . . . . . . . . . . . . . . . 125
4.6. Gramaticas LR(k): Analisis Sintatico (Opcional) . . . . . . . . . . . 127
4.6.1. Las Nociones Preliminares . . . . . . . . . . . . . . . . . . . . 127
4.6.2. Calculo de la Coleccion Canonica . . . . . . . . . . . . . . . . 129
4.6.3. Tabla(s) de analisis sintactico LR(k) . . . . . . . . . . . . . . 131
4.6.4. PDT de Parsing para gramaticas LR(k) . . . . . . . . . . . . 132
4.7. Cuestiones y Problemas . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.7.1. Cuestiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.7.2. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

INDICE GENERAL 5
A. Generadores de Analisis sintactico 141
A.1. Una introduccion al SableCC . . . . . . . . . . . . . . . . . . . . . . 141
A.2. Una introduccion a ANTLR . . . . . . . . . . . . . . . . . . . . . . . 145
6

INDICE GENERAL
Prologo
Lo que sigue son una evolucion de notas comenzadas a impartir en el curso 2007/08,
para la asignatura Teora de Automatas y Lenguajes Formales. La evolucion de
los contenidos ha sido siempre en funcion de las diversas promociones, su formacion
previa y su capacidad de adquirir nuevos conocimientos. Estos apuntes representan
una version denitiva de nuestra experiencia. Nuestro cuidado ha sido conseguir una
adquisicion de conocimientos teoricos, su aplicacion con una formacion de caracter
matematico para que el alumno desarrolle una actitud rigurosa ante problemas de
esta y otras materias.
Esto es de gran importancia en una materia como los automatas y los lenguajes for-
males, considerados como uno de los fundamentos de las ciencias de computacion.
Dada la escasa formacion previa en matematicas de los alumnos que llegan a la
Univerisdad espa nola, se ha pretendido mantener el maximo de formalismo en de-
niciones y enunciados pero renunciando a las demostraciones en terminos formales
completos, y limitando estas a aquellos casos en los que la prueba se basa en la exis-
tencia de un algoritmo. El objetivo del curso es que el alumno comprenda, aplique
y asimile una serie de herramientas matematicas que se han desarrollado para la
teora de automatas y lenguajes formales..
Estos apuntes estan pensados para aprender a resolver problemas. Seg un nuestro
punto de vista, la mejor forma para conseguir este objetivo es a traves de adquirir
experiencia en la resolucion de problemas. Viendo como la idea que permite resolver
problemas sencillos, puede ser aplicada con modicaciones a problemas complejos y
no es necesario atacar estos directamente partiendo de cero. De esta forma, se con-
sigue un conocimiento practico de la materia y ademas, como un extra, un dominio
de la teora mas completo.
Aunque utilizaremos un formalismo matematico, nuestro planteamiento es construc-
tivo, dejando que las demostraciones rutinarias como ejercicio. Estos apuntes estan
dirigidos a futuros ingenieros, por lo que intentaremos que los algoritmos presentados
sean ecientes y adecuados para implementacion en un programa informatico. Esto
sin menoscabo de que dichos algoritmos provengan de ideas sencillas anteriormente
adquiridas en fases mas tempranas del curso y plasmadas en estos apuntes.
La teora de la computacion es un area abstracta de la ingeniera informatica. Por
ello incluimos ejemplos, cuestiones y problemas que van de preguntas triviales hasta
retos que requeriran utilizar todo lo aprendido con logica.
Los autores han utilizado este libro para una asignatura cuatrimestral, y nuestro
objetivo ha sido que los alumnos conocieran los lenguajes regulares y los libres
7
8

INDICE GENERAL
de contexto. A partir de ellos, pudieran generar automatas que reconocieran estos
lenguajes y los algoritmos que permiten pasar de automatas a lenguajes regulares
o lenguajes libres de contexto. La ultima parte trata sobre dos clases de lenguajes
especiales LL y LR.

Estos tienen una importancia especial en parsing y en la
Syntax Directed Translation.
Las referencias bibliogracas tampoco pretenden ser exhaustivas, aunque s contie-
nen lo esencial de la literatura en estos temas.
Captulo 1
Jerarqua de Chomsky.
Expresiones Regulares.
1.1. Introduccion
La primera disquisicion importante al jar un modelo de calculo hace referencia
a los fundamentos de la comunicacion y el lenguaje. Para ser precisos todo calculo
algortmico consiste fundamentalmente en un proceso de comunicacion : algo es emi-
tido (input), manipulado (transmision) y respondido (output). Es una comunicacion
entre hombre y maquina o una comunicacion entre seres humanos. Pero el princi-
pio de esta discusion debe orientarse hacia lo que es susceptible de ser comunicado
(tanto el input como el output son objetos comunicables).
Nos vamos directamente al Crculo de Viena, donde la participacion de Hahn fue
central y al que Godel se incorpora (pensemos en el origen moravo de K. Godel). Este
inuyente conjunto de matematicos y logicos se ve roto por el nazismo en pedazos
incomponibles, pero inuyo muy notablemente la losofa y la logica de primeros de
siglo (hasta nales de los 30). Tomemos la disquisicion inicial : que es susceptible
de ser comunicado?.
Una respuesta razonable (emprica en mi aproximacion) es que es comunicable todo
aquello expresable en un alfabeto nito. Mi aproximacion emprica se basa en la
experiencia : no conozco ning un caso de informacion emitida o recibida por m ,
con contenido semantico no ambiguo, que no haya sido expresada sobre un alfabeto
nito.
A partir de esta idea consideraremos como un conjunto nito que denominaremos
alfabeto y por

el conjunto de todas las palabras expresables sobre este alfabeto


nito.
Dos precisiones importantes : Lo comunicado (el signicante) es una palabra sobre
un alfabeto nito, pero el signicado (la componente semantica de la comunicacion)
no es tan claramente nito. Tomemos un ejemplo de las matematicas. Sea D
1
al
conjunto de n umeros reales dado por :
(x, y) R
2
: x
2
+y
2
1 0
El tal conjunto no es nito, ni contable. Podra quiza discutirse su existencia (uno
de los problemas mas difciles de la losofa de las matematicas es determinar el
9
10 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


signicado de existencia : existe lo que es expresable esto es seguro, pero, existe
lo que no puedo expresar?
1
). Suponiendo que R exista, yo puedo expresar un
conjunto cuyo cardinal no es numerable mediante una expresion sobre un alfabeto
nito. Por lo tanto, los signcantes caminan sobre una digitalizacion nita, sobre un
alfabeto nito, no as los signicados. No olvidemos, nalmente, que la modelizacion
continua de la semantica es una de las corrientes de la moda ultima; pero tampoco
olvidemos que la semantica (y la Semiotica) cuentan con los elementos adicionales
de la subjetividad que son bastante difusos.
La segunda consideracion es que nosotros usaremos el lenguaje de la Teora de la
Recursividad y no el de la Ling ustica. Para referencias al asunto vease, por ejemplo,
[Mar67]. En este caso, la terminologa se modica del modo siguiente : el alfabeto
se denomina vocabulario, las palabras son lo mismo, y el lenguaje es una cantidad,
posiblemente innita, de palabras sobre el vocabulario. Pero vayamos a nuestra
denicion :
Denici on 1 (Notaciones) Sea un conjunto nito que llamaremos alfabeto.
Una palabra sobre es una lista nita de smbolos de . Podemos formalmente
identicar las listas x = x
1
x
n
de smbolos (x
i
) con los elementos del
producto cartesiano
n
. Denotaremos por [ x [= n la longitud de la palabra
x
1
x
n
.
El conjunto de todas las palabras sobre el alfabeto se denotar a mediante

y podemos identicarlo con la uni on disjunta

=

_
nN

n
Los subconjuntos L de

se denominan lenguajes.
Insistamos en la notacion x
1
x
n
para expresar la palabra (x
1
, . . . , x
n
)
n
. Los
) y las , pudieran ser (y suelen ser) elementos del alfabeto.
Notese por ejemplo la identicacion obvia, cuando = a es un alfabeto de una
sola palabra, entre

y N.
Nota 2 La unica observaci on relevante es que si es un conjunto nito

es
un conjunto numerable. No podemos expresar mucho m as all a que una cantidad
numerable de signicantes (a lo sumo). La verdad, no es gran cosa : una sonata de
Mozart no es sino una triste palabra de unas pocas numerables posibles.
El considerar alfabetos numerables no cambiara gran cosa, lo que se puede expre-
sar sobre un alfabeto numerable es expresable sobre un alfabeto nito (por razones
obvias). El punto duro comienza cuando uno se pregunta si es posible la comunica-
ci on (hombrem aquina u hombrehombre) a traves de lenguajes sobre alfabetos no
numerables.
1
Esto sera lo maximo que nos introduciremos por los oscuros caminos de la losofa. Paul Gordan,
gran matematico del siglo XIX, amonesto a David Hilbert con su famosa frase Das ist keine
Matematik, Das ist Theologie por demostrar la existencia de objetos, sin mostrar esos objetos.
1.1. INTRODUCCI

ON 11
Otros ejemplos, El Quijote , entendido como el libro completo es, para nuestro
contexto una palabra sobre el alfabeto del castellano, i.e. a, b, . . . , z, A, B, . . . , Z,
?,

A, !, ,

, .

, .,

.., donde las , y . son los obvios, . es el punto-y-aparte


y son los espacios entre palabras.
Uno podra muy bien argumentar porque el Otello de Shakespeare no es una pa-
labra del castellano y la respuesta es la obvia : es una palabra sobre el alfabeto
castellano; pero el castellano no es solamente un alfabeto, sino un lenguaje (

en el que se incluyen solamente las palabras formadas por sucesiones de smbolos


del Diccionario de la Real Academia de la Lengua (ver automatas nitos para mas
disquisiciones). El Otello pertenece al lenguaje ingles I

. Modulo traduccio-
nes (que no juegan por ahora) una version original de la Ilada, el Coran, El Idiota o
los Vedas no perteneceran a

por usar diferentes alfabetos (el griego, el arabe, el


cirlico o el sanscrito). Por lo tanto, variaran tanto los alfabetos como los conjuntos
llamados lenguajes, teniendo la comunicacion occidental en com un el alfabeto. Sin
embargo, las traducciones muestran que no hay mucho que a nadir aunque se cambie
el alfabeto.
Esto muestra que alfabetos complicados o sencillos no tienen relacion con la simpli-
cidad del lenguaje. Aprovecharemos este momento para introducir un lenguaje que
volvera a aparecer mas adelante.
Ejemplo 1 Sea = A, C, G, T , representando las cuatro bases que confor-
man el ADN, a saber: Adenina, Guanina, Citosina y Timina. Las cadenas de ADN
forman un lenguaje que contiene la informaci on genetica y esta empaquetada de esta
forma para su posible transmisi on hereditaria. Curiosamente, este lenguaje es casi
universal y se aplica a todos los seres vivos menos en excepciones contadas dentro
de casos contados.
Cada cadena de ADN guarda la codicaci on de varias protenas. Dentro del ADN, ca-
da secuencia de tres bases de las mencionadas corresponden a un aminoacido concre-
to. Esto se conoce como el c odigo genetico. Por ejemplo, la combinaci on ATG repre-
senta el inicio de la secuencia y el nal puede ser representada por TGA, TAG, TAA.
2
Primeras concreciones sobre lo computable :
Un algoritmo es usado para resolver un problema. La entrada del algoritmo son los
datos del problema que, convenientemente manipulados, aportan una solucion.
Por lo tanto, todo algoritmo eval ua una correspondencia
f : D S
donde D son los datos y S las soluciones. Como ya queda claro de lo discutido
arriba (o eso espero), este que escribe solo puede discernir datos y soluciones
como signicantes de algo (el algo ya no corresponde a la disquisicion). Luego
Denici on 3 Un problema es una correspondencia f : D S entre dos
conjuntos. Resolver un problema es evaluar f.
2
El ADN siempre se ha considerado el lenguaje de la vida y parece que se cumple la maxima
de Galileo: La Naturaleza es un libro escrito con el lenguaje de las matematicas.
12 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


Un problema f : D S es susceptible de ser resuelto solamente si D y S son
lenguajes expresables sobre un alfabeto nito. Uniendo alfabetos, uno podra
suponer que son lenguajes sobre un alfabeto com un .
Un problema es, por tanto, evaluar una correspondencia f :

. Los
elementos del dominio (los datos) se suelen llamar inputs (tambien son sus-
ceptibles de ser llamados inputs aquellos x

tales que no existe f(x)). Los


elementos del rango de f son las soluciones y se denominan outputs.
Entre los muchos problemas distinguimos una subclase de gran importancia : los
problemas decisionales. Se trata de evaluar funciones parcialmente denidas f :

0, 1. Claramente si D(f) es el dominio de denicion de f y denimos


L := f
1
(1), la funcion f es del tipo restriccion al dominio de f de la funcion
caracterstica de L. Los tales lenguajes L se denominaran lenguajes recursivamen-
te enumerables cuando su funcion caracterstica sea parcialmente computable, i.e.
cuando exista f :

0, 1 computable tal que :


L D(f),

L
[
D(f)
= f.
Para perlar la nocion de funcion computable y problema resoluble por un algoritmo
debemos avanzar a un un largo trecho. Tratemos de precisar como han de entenderse
las manipulaciones de objetos de

que sirven para evaluar correspondencias f.


1.2. Lenguajes Formales y Monoides
La operacion esencial sobre

es la concatenacion (tambien llamada adjuncion) de


palabras :
:

(x, y) x y
es decir, si x = x
1
x
n
e y = y
1
y
m
, entonces
x y = x
1
x
n
y
1
y
m
.
Denotemos por

la palabra vaca (para distinguirla del lenguaje vaco ,


usando la notacion estandar de Teora de Conjuntos).
Lema 4 (

, ) es un monoide (semigrupo unitario), donde es el elemento neutro,


y la longitud dene un morsmo de monoides entre

y el conjunto de los n umero


naturales. El monoide

es abeliano si y solamente si el cardinal de es uno.


Demostracion. Ejercicio obvio.
Lema 5 Si es un alfabeto nito, el conjunto

es numerable, esto es, es biyectable


con el conjunto N de los n umeros naturales.
1.2. LENGUAJES FORMALES Y MONOIDES 13
Demostracion. Para dar una prueba de este enunciado basta con jar un buen
orden en

. En ejercicio razonable consiste en denir el buen orden basado en


lexicograco + grado que dene la biyeccion. Recuerdese que el orden lexicograco
es el orden usual del diccionario, i.e., basado en establecer un orden en el alfabeto
. Aqu el termino grado hace referencia a la longitud de palabras. Es decir, sea
un orden en :
:=
1

2

r
.
Denimos para x = x
1
. . . x
n
, y = y
1
. . . y
m

la relacion de orden siguiente:


x y :=
_

_
o bien n = [x[ [y[ = m,
o bien [x[ = [y[ = n = m,
_
_
_
k n = m, i k 1,
x
i
= y
i
,
x
k
y
k
_
_
_
o bien x = y.
Esta relacion de orden es un buen orden en

y permite una identicacion (bi-


yeccion) entre

y N, asociando a cada elemento de

, el n umero de elementos
menores que el:
0

1
1

2
2

1
r + 1

2
r + 2

Operaciones Basicas con palabras. Ademas de la concatenacion de palabras,
podemos destacar las siguientes:
Potencia de Palabras. Se dene recursivamente a partir de la concatenacion.
As, dada una palabra

y un n umero natural n N, denimos la


potencia
n
, mediante:
Si n = 0, entonces
0
= ,
Para n 1, denimos

n
:=
n1
.
Reverso de una Palabra: Se trata de una biyeccion
R
:

,
dada mediante:
Si = ,
R
= ,
14 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


Si = x
1
x
n

, con x
i
, denimos

R
:= x
n
x
n1
x
1

.
Un lenguaje que tendra cierta relevancia en nuestras discusiones posteriores es el
Palndromo T 0, 1

y que viene dado por la siguiente igualdad:


T := x 0, 1

: x
R
= x.
1.2.1. Operaciones Elementales con Lenguajes
Vamos a considerar las siguientes operaciones basicas con lenguajes formales. Ten-
dremos jado un alfabeto ,
Uni on de Lenguajes: De la manera obvia como subconjuntos. Dados L
1
, L
2

, denimos:
L
1
L
2
:= x

: [x L
1
] [x L
2
].
Concatenaci on de Lenguajes: Dados L
1
, L
2

, denimos su concatenacion:
L
1
L
2
:= x
1
x
2

: x
1
L
1
, x
2
L
2
.
Potencia de Lenguajes: Se dene recursivamente.
Si n = 0, L
0
= .
Si n 1, L
n
:= L (L
n1
).
Nota 6 Observese que L
1
L
2
no es, en general, igual a L
2
L
1
. Tampoco es cierto
que si L
1
L
2
= L
2
L
1
entonces se tiene L
1
= L
2
. El ejemplo m as sencillo de esto
es = a, L
1
= a, L
2
= aa.
Proposici on 7 (Distributivas) Con las anteriores notaciones, se tienen las si-
guientes propiedades para lenguajes L
1
, L
2
y L
3
contenidos en

:
L
1
(L
2
L
3
) = L
1
L
2
L
1
L
3
.
(L
1
L
2
) L
3
= L
1
L
3
L
2
L
3
.
Otras opeaciones importantes entre lenguajes:
Clausura transitiva o monoide generado por un lenguaje: Dado un lenguaje
L

denimos el monoide L

que genera mediante la igualdad siguiente:


L

:=
_
nN
L
n
.
Clausura positiva de un lenguaje:Dado un lenguaje L

denimos la clau-
sura positiva L
+
que genera mediante la igualdad siguiente:
L
+
:=
_
n1
L
n
.
Nota 8 Es obvio que L

es la uni on (disjunta si , L) entre L


+
y .
1.3. GRAM

ATICAS FORMALES 15
1.2.2. Sistemas de Transicion
Una de las ideas esenciales en un proceso algortmico es que se van dando pasos
hasta obtener un resultado. Lo del n umero nito de pasos lo dejamos para un poco
despues. Surge as la nocion de Sistema de Transicion, Sistema Deductivo, Sistema
de Producciones, Sistema de semiThue etc.
Denici on 9 Llamaremos sistema de transici on a todo par (S, ), donde S es un
conjunto (que se denomina espacio de conguraciones) y SS es una relaci on.
Una sucesi on de computaci on en el sistema de transicion (S, ) es simplemente una
sucesion nita de elementos de S :
s
1
, . . . , s
n
donde (s
i
, s
i+1
) (se dice que la conguracion s
i+1
es deducible de s
i
en un
solo paso deductivo). Normalmente, uno preere escribir s
i
s
i+1
en lugar de
(s
i
, s
i+1
) . Con ello, una computacion en el sistema de transicion (S, ) es
simplemente :
s
1
s
n
Se dice que el sistema de transicion es determinstico si cada s S tiene un solo
sucesor a lo sumo y es indeterminista en caso contrario.
Denici on 10 Dada una conguraci on s S, diremos que una conguraci on s

S
es deducible de s y lo denotaremos por s s

, si existe una sucesi on de computaci on


s = s
1
s
n
= s

La relacion que debe existir entre los datos de un problema y su resolucion es de


ser deducible para alg un sistema de transicion. En cada caso claricaremos los sis-
temas de transicion esenciales del modelo de calculo introducido (es decir, la accion
dinamica del modelo denido).
Nota 11 N otese la obvia analoga entre sistemas de transici on y grafos (potencial-
mente con un n umero innito de nodos). De hecho, un grafo orientado es simple-
mente un sistema de transici on con un conjunto de conguraciones nito.
1.3. Gramaticas Formales
A. Thue
3
fue un matematico noruego que en 1914 introdujo la nocion de sistema
de de reescritura. El interes de Thue era el analisis de los problemas de palabra para
grupos y semi-grupos. Habra que esperar a los trabajos de Noam Chomsky a nales
de los a nos 50 para tener una estructuracion de los sistemas de transicion en el
formato de gramaticas formales que, inicialmente, intentaba utilizar para modelizar
los lenguajes naturales.
3
A. Thue. Probleme uber Veranderungen von Zichereihen nach gegebenen. Regeln. Skr. Videnk.
Selks. Kristiania I, 10 (1914).
16 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


Denici on 12 (Gramaticas Formales) Una gram atica formal es una cuaterna
G = (V, , Q
0
, P), donde:
V es un conjunto nito llamado alfabeto de smbolos no terminales o, simple-
mente, alfabeto de variables.
es otro conjunto nito, que verica V = y se suele denominar alfabeto
de smbolos terminales.
Q
0
V es una variable distinguida que se denomina smbolo inicial.
P (V )

(V )

es un conjunto nito llamado conjunto de producciones


(o, simplemente, sistema de reescritura).
1.3.1. Sistema de Transicion Asociado a una Gramatica.
Para poder denir la dinamica asociada a una gramatica, necesitamos asociarle un
sistema de transicion.
Denici on 13 Sea G = (V, , Q
0
, P) una gram atica, deniremos el sistema de
transici on asociado (S
G
,
G
) dado por las propiedades siguientes:
El espacio de conguraciones ser a dado por:
S
G
:= (V )

.
Dadas dos conguraciones s
1
, s
2
S
G
, decimos que s
1

G
s
2
si se verica la
siguiente propiedad:
x, y, , S
G
= (V )

, tales que
s
1
:= x y, s
2
:= x y, (, ) P.
Ejemplo 2 Consideremos la gram atica: G = (V, , q, P), donde
V := Q
0
, := a, b, , P := (q, aq), (q, ).
El sistema de transici on tiene por conguraciones S := q, a, b

y un ejemplo de
una computaci on sera:
aaQ
0
bb aaaQ
0
bb aaaaQ
0
bb aaaabb = aaaabb.
N otese que las dos primeras veces hemos usado la regla de reescritura (Q
0
, aQ
0
) y
la ultima vez hemos usado (Q
0
, ).
Notaci on 14 Por analoga con el sistema de transici on, se suelen usar la notaci on
A B en lugar de (A, B) P, para indicar una producci on. Y, en el caso de tener
m as de una producci on que comience en el mismo objeto, se suele usar A B [ C,
en lugar de escribir A B, A C.
1.3. GRAM

ATICAS FORMALES 17
A :
a B
B :
C
D :
F
E
E :
F
Figura 1.1: Representacion A:aB, B:C*, D:F [ E, E:F?
Notaci on BNF. Es un modelo de notacion que recuerda mas los manuales de
programacion. En el, se introducen los siguientes cambios:
Las variables X V se representan mediante X).
Los smbolos terminales (del alfabeto ) no son modicados.
El smbolo asociado a las producciones es reemplazado por =.
As, la gramatica descrita en el Ejemplo 2 anterior vendra dada por:
V = Q), = a, b,
y las producciones estaran dadas por las reglas:
Q) = aQ)
Q) = .
Independiente de las notaciones, el elemento clave es la nocion de lenguaje generado
por una gramatica.
Notaci on EBNF. Esta notacion intenta es extension de la notacion BNF. Es un
estandar ISO-1497 y es utilizada (con algunas modicaciones) en los generadores de
compiladores, como ANTLR
Basicamente, a nade funcionalidad a la notacion BNF, permitiendo repeticiones o
diferentes opciones. Varios ejemplos estan dados en la gura encabezando la pagina
(notese la diferencia para los smbolos terminales y no terminales). Estas son las
principales cambios con respecto a la notacion BNF,
Las variables X V no son modicadas.
Los smbolos terminales (del alfabeto ) se representan entre comillas simples.
El smbolo asociado a las producciones es remplazado por :.
Se introducen nuevos smbolos para representar repeticiones (ninguna, una
o mas repeticiones) + (una repeticion al menos).
18 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


? indica que la expresion puede ocurrir o no.
Se deja como ejercicio al alumno hallar la expresion de la gramatica
Q) := aQ)
Q) := .
con notacion EBNF.
Denici on 15 (Lenguaje Generado por una gramatica) Sea G := (V, , Q
0
, P)
una gram atica. Llamaremos lenguaje generado por la gram atica G (y lo denotaremos
usualmente mediante L(G)) al lenguaje L(G)

dado por:
L(G) := x

: Q
0

G
x,
es decir , a las palabras sobre el alfabeto de smbolos terminales alcanzables (dentro
del sistema de transici on asociado) desde el smbolo inicial de la gram atica.
1.4. Jerarqua de Chomsky
Chomsky comienza hablando de la modelizacion de los lenguajes (formales) mediante
gramaticas en su trabajo [Cho57]. El uso de maquinas con un n umero nito de
estados (automatas) ya aparece en [CM58].
Es en sus trabajos del a no 59 (ca.[Cho59a] y [Cho59b]) donde aparece la clasicacion
que discutiremos en las paginas que siguen.
Denici on 16 (Gramaticas Regulares o de Tipo 3) Deniremos las gram ati-
cas con producciones lineales del modo siguiente:
Llamaremos gram atica lineal por la izquierda a toda gram atica G = (V, , Q
0
, P)
tal que todas las producciones de P son de uno de los dos tipos siguientes:
A a, donde A V y a .
A aB, donde A, B V y a .
Llamaremos gram atica lineal por la derecha a toda gram atica G = (V, , Q
0
, P)
tal que todas las producciones de P son de uno de los dos tipos siguientes:
A a, donde A V y a .
A Ba, donde A, B V y a .
Llamaremos gramaticas regulares a las gram aticas lineales por la izquierda
o lineales por la derecha.
La dualidad (y simetra entre los automatas lineales a izquierda o lineales a derecha
es obvia y nos quedaremos solamente con las gramaticas lineales a izquierda.
Denici on 17 (Lenguajes Regulares) Un lenguaje L

se denomina un len-
guaje regular si existe una gram atica regular G = (V, , Q
0
, P) que lo genera.
1.5. SISTEMAS DE THUE: PROBLEMAS DE PALABRA 19
Por denicion una produccion puede ser una transformacion del tipo aAb w,
donde a, b (

V )

, A V . a las palabras a y b se las denomina contexto de la


produccion. As, una produccion libre de contexto es una produccion que no tiene
contexto, esto es, de la forma A w, con A V .
Denici on 18 (Gramaticas libres de contexto o de Tipo 2) Llamaremos gra-
m atica libre de contexto a toda gram atica G = (V, , Q
0
, P) tal que todas las pro-
ducciones de P son del tipo siguiente:
A , donde A V y ( V )

.
Un lenguaje libre de contexto es un lenguaje generado por una gram atica libre de
contexto.
Denici on 19 (Gramaticas sensibles al contexto o de Tipo 1) Llamaremos
gram atica libre de contexto a toda gram atica G = (V, , Q
0
, P) tal que todas las
producciones de P son del tipo siguiente:
A , donde A V y , ( V )

, ( V )

.
Un lenguaje sensible al contexto es un lenguaje generado por una gram atica sen-
sible al contexto.
Denici on 20 (Gramaticas formales, sistemas de semiThue o de Tipo 0)
Llamaremos
gram atica formal (o sistema de semiThue o sistema de reescritura) a toda gram ati-
ca G = (V, , Q
0
, P) que admite todo tipo de producciones, esto es, sus producciones
son de la forma
, donde , ( V )

.
1.5. Sistemas de Thue: Problemas de Palabra
Las Gramaticas de Tipo 0 son tambien llamadas Sistemas de SemiThue (vease,
por ejemplo, la referencia en [DW83]) en honor del matematico que las introdujo.
Su objetivo era analizar el siguiente tipo de problemas.
Problema de Palabra para Sistemas de SemiThue :
Dado un sistema de semiThue (, R) y dados x, y

, decidir si x
R
y
Problema de Palabra en Semigrupos: Dado R un sistema de semiThue sobre
un alfabeto nito , consideramos la estructura de semigrupo con unidad de

(monoide). Dos palabras x, y

se dicen relacionadas mediante R, si x


R
y en
el sistema de transicion asociado (i.e. si y es deducible de x).
Un sistema de Thue es un sistema de semiThue en el que R verica la siguiente
propiedad adicional :
x, y

, (x, y) R (y, x) R
20 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


Entonces, R dene una relacion de equivalencia
R
en

y podemos considerar el
conjunto cociente :
S(, R) :=

/
R
Claramente se tiene que S(, R) es un semigrupo, cuyos elementos son las clases [x]
denidas por elementos x

.
El problema de la palabra para semigrupos se dene mediante :
Dados un sistema de Thue (, R) y dados x, y

, decidir si [x] = [y]


Nota 21 Esta versi on del problema de la palabra est a relacionada directamente con
un h abito muy com un en matem aticas. Supongamos que quiero trabajar con un se-
migrupo S, no necesariamente conmutativo. Para describirlo, todos pondramos un
conjunto de generadores (digamos
1
, . . . ,
n
). Sabidos los generadores, sabemos
que los elementos son todos de la forma :

s(1)

s(m)
donde s : 1, . . . , m 1, . . . , n es una aplicaci on, con m N. El problema de
una representaci on tal cual esta es que uno no puede hacer cosas tan elementales
como comparar dos elementos dados (observese que nadie dijo que las cosas conmu-
ten ni que la representaci on sea unica). Por lo tanto, uno debera dar, al menos,
las relaciones entre los generadores (que son inevitables). Estas relaciones tienen la
pinta

r
i
(1)

r
i
(m
i
)
=
s
i
(1)

s
i
(k
i
)
para 1 i N, siendo r
i
y k
i
aplicaciones con rango 1, . . . , n. Nos conformamos
con que s olo haya un n umero nito de relaciones entre los generadores. Claramente,
tenemos un sistema de reescritura sobre el alfabeto = 1, . . . , n, siendo
R := (r
i
(1) r
i
(m
i
), s
i
(1) s
i
(k
i
)) : 1 i N
Es obvio que nuestro semigrupo S inicial es justamente S(, R). Luego el problema
de las palabras viene a decir si somos capaces de identicar o distinguir dos elementos
de un semigrupo dado por sus generadores y sus relaciones. La respuesta , dada por
E. Post
4
en 1947 es que uno no debera representar as los semigrupos porque el
problema de la palabra es indecidible (luego, insoluble).
El problema de palabra en grupos El problema anterior se sostica un poco mas,
si en lugar de semigrupo hablamos de grupos. Un grupo nitamente generado (no
necesariamente abeliano) no es sino un semigrupo asociado a un sistema de Thue
(, R) que, ademas verica la propiedad siguiente :
existe una aplicacion : tal que :
a , (a(a), ) R)
donde es la palabra vaca. Escribamos G(, R) por el grupo cociente

/R
El problema de la palabra es tambien : Dado un sistema de grupo (, R) y dadas
x, y

, decidir si [x] = [y] en G(, R).


4
E. Post. Recursive unsolvability of a Problem of Thue. J. of Symb. Logic 12 (1947) 111.
1.6. EXPRESIONES REGULARES 21
Teorema 22 (Post
5
, 47) Los problemas de palabras para sistemas de semiThue,
semigrupos o para grupos son insolubles algortmicamente.
Como a un no sabemos lo que es un algoritmo, dejemos la demostracion de este re-
sultado como Ejercicio (cf. [Wei87]). Notese que los problemas de palabras de los
sistemas de producciones tambien pueden interpretarse como una primera aproxi-
macion al problema de lo deducible en una teora formal. Pero eso es otro asunto.
Problema de correspondencia de Post. Se trata de otro problema basado en los
sistemas de reescritura y que resulta, tambien insoluble algortmicamente (cf. E.
Post
6
en 1946 ).
Consideremos un sistema de semiThue (, R) y sus elementos como piezas de do-
mino :
R := (x
1
, y
1
), . . . , (x
n
, y
n
)
y las piezas
T
i
:=[
x
i
y
i
[
El problema esta en decidir si existe una secuencia de chas
T
s(1)
T
s(n)
tal que lo que aparece escrito en las partes superiores de los dominos coincide con
lo escrito debajo. Por ejemplo, sea R (Post preere Pairing Lists i.e. PL)
R := (a, aa), (bb, b), (a, bb)
para el alfabeto := a, b. La siguiente es una solucion :
[
a
aa
[[
a
bb
[[
bb
b
[[
bb
b
[
Teorema 23 (Post, 46) El problema de la correspondencia es insoluble por ning un
metodo algortmico.
Este problema insoluble tambien queda como ejercicio y la prueba puede verse en el
Weihrauch o en el Davis & Weyuker , entre otros.
1.6. Expresiones Regulares
El problema que se pretende resolver mediante la introduccion de las expresiones
regulares es el de obtener alg un tipo de descriptores para los lenguajes generados
por las gramaticas regulares (las gramaticas de Tipo 3 o Regulares en la jerarqua
de Chomsky), ademas de utilizarlos en la notacion EBNF.
6
E. Post . A variant of a recursively unsolvable problem.Bull. A.M.S. 52 (1946) 264268.
22 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


1.6.1. Las Nociones Basicas
Siendo este un curso de lenguajes formales,utilizaremos la metodologa propia del
area. Empezaremos deniendo las reglas de formacion (la gramatica) de las expresio-
nes regulares. A continuacion las dotaremos de signicado (la semantica) y veremos
los recursos que nos ofrece esta nueva herramienta.
Denici on 24 Sea un alfabeto nito. Llamaremos expresi on regular sobre el al-
fabeto a toda palabra sobre el alfabeto
1
denido por la siguiente igualdad:

1
:= , , +, , (, ),

,
conforme a las reglas siguientes:
Las siguientes son expresiones regulares:
El smbolo es una expresi on regular,
el smbolo es una expresi on regular,
y el smbolo a es una expresi on regular, para cualquier smbolo a en el
alfabeto ,
Si y son expresiones regulares, tambien lo son las construidas mediante
las reglas siguientes:
( +) es una expresi on regular,
( ) es una expresi on regular,
()

es una expresi on regular,


Nota 25 Por comodidad de la escritura (y s olo en el caso de que no haya ninguna
posibilidad de que aparezcan ambig uedades) se suprimen parentesis y smbolos de
producto ().
Ejemplo 3 Tomemos el alfabeto := a, b. Son expresiones regulares las secuen-
cias de smbolos (palabras) siguientes:
a a +b

a, ab

ba, . . .
No ser an expresiones regulares cosas del tipo
7
:
(+b

, . . .
7
No creo que sea tan necesario poner demasiados ejemplos, la agudeza del alumno le permi-
tira evitar ejemplos patologicos
1.6. EXPRESIONES REGULARES 23
La Semantica de las expresiones regulares. A cada objeto sintactico, como lo
es una expresion regular, conviene a nadirle el mecanismo de asignacion de signicado
(semantica). En el caso de expresiones regulares asignaremos un unico signicado a
cada expresion en la forma de el lenguaje formal que describe.
Denici on 26 Sea un alfabeto nito. A cada expresi on regular sobre el alfabeto
le asignaremos un lenguaje formal L()

conforme a las siguientes reglas:


En el caso de la sea una palabra de longitud 1, seguiremos las reglas siguien-
tes:
Si = , entonces L() = ,
Si = , entonces L() = ,
Si = a , entonces L() = a,
Aplicando las reglas recursivas, si y son dos expresiones regulares sobre el
alfabeto usaremos las reglas siguientes:
L( +) = L() L(),
L( ) = L() L(),
L(

) = L()

.
Tambien mencionamos que el operador tiene preferencia sobre y este sobre +.
Ejemplo 4 A modo de ejemplo, sea := 0

10

la expresi on regular sobre el alfabeto


:= 0, 1. Entonces,
L(0

10

) = L(0)

L(1) L(0)

= 0
m
10
n
: n, m N.
Denici on 27 Diremos que dos expresiones regulares y son tautol ogicamente
equivalentes (o, simplemente, equivalentes) si se verica:
L() = L().
Escribamos para indicar equivalencia tautol ogica.
Algunas de las propiedades basicas de la asignacion semantica de lenguajes a ex-
presiones regulares se resumen en la siguiente Proposicion, cuya demostracion es
completamente obvia.
Proposici on 28 (Propiedades Basicas) Sea un alfabeto nito, se verican las
siguientes propiedades para expresiones regulares , , sobre :
1. Asociativas.
( ) ( ) , + ( +) = ( +) +.
24 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


2. Conmutativa (s olo para +)
8
:
+ +.
3. Elementos Neutros:
+ , , .
4. Idempotencia:
+ .
5. Distributivas:
( +) + .
( +) + .
6. Invariantes para

:

.
7. La notaci on
+
:


+
.
8.

= +
+
9. Relaci on de

con la suma:
( +)

.
1.6.2. Derivacion de Expresiones Regulares
En esta Seccion dedicaremos alg un tiempo a jar una de las operaciones basicas en
el tratamiento de expresiones regulares: la derivacion.
Denici on 29 Sea un alfabeto nito, a un smbolo del alfabeto, y una ex-
presi on regular sobre el alfabeto Llamaremos derivada de con respecto al smbolo
a la expresi on regular

a
denida mediante la regla recursiva siguiente:
Para expresiones regulares de longitud 1, tenemos las deniciones siguientes:

a
= ,

a
= ,
b
a
= , b , b ,= a.
a
a
= .
Si y son dos expresiones regulares sobre , deniremos:

( +)
a
=

a
+

a
.
8
Aunque la insistencia sea innecesaria, es com un olvidar que 2 3 no es igual que 3 2. Cosas de
malos habitos.
1.6. EXPRESIONES REGULARES 25

( )
a
=

a
+t()

a
,
donde t() es la funci on dada por la identidad siguiente:
t() :=
_
si L()
en caso contrario

()

a
=
()
a

.
Nota 30 La derivada de una expresi on regular con respecto a un smbolo de un
alfabeto nito es, claramente, una derivada parcial y, por tanto, est a perfectamente
descrita mediante el smbolo

a
. Sin embargo, el smbolo parece poner nerviosos
a ciertos autores, por lo que tambien es costumbre (solamente entre los nerviosos)
usar el smbolo menos correcto (pero menos enervante) D
a
(). Dejaremos que los
alumnos reescriban la denici on anterior con esta nueva notaci on. De ahora en
adelante usaremos D
a
().
La propiedad fundamental por la cual derivar es una accion util, viene dada por la
siguiente Proposicion (cuya prueba omitiremos por obvia).
Proposici on 31 Con las notaciones anteriores, para cada expresi on regular sobre
un alfabeto , la derivada D
a
() es una expresi on regular que verica la siguiente
propiedad:
L(D
a
()) =

: a L().
Demostracion. Como pista para la demostracion, digamos que sale de manera obvia
a traves de la denicion recursiva de expresiones regulares.
Una identicacion mas clara de la relacion de una palabra con sus derivadas viene
dada por la siguiente Proposicion (que resume la regla de Leibnitz para polinomios
homogeneos multivariados).
Proposici on 32 (Regla de Leibnitz para Expresiones Regulares) Dada una
expresi on regular sobre un alfabeto nito , supongamos que = a
1
, . . . , a
n
.
Entonces,
a
1
D
a
1
() + +a
n
D
an
() +t(),
donde t() es la funci on denida anteriormente.
Demostracion. Mediante la proposicion anterior, basta con vericara que las pa-
labras en L() son de los tipos (obvios) siguientes: o empiezan por alg un smbolo
de (y, por tanto, estan en a
1
D
a
1
()) o es la palabra vaca (y queda sumida en la
expresion t()). El caso restante es que no haya ninguna palabra en L() lo cual
tambien queda expresado por la identidad y por t().
26 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


1.6.3. De REs a RGs: Metodo de Derivaciones
En esta Seccion demostraremos que el lenguaje descrito por una expresion regular
es un lenguaje regular, es decir, que existe una gramatica regular que lo genera.
Mas a un, daremos un algoritmo que transforma expresiones regulares en gramati-
cas regulares respetando los lenguajes que describen/generan: es el Metodo de las
Derivaciones.
Lema 33 Sea L
1
y L
2
dos lenguajes sobre el alfabeto generados respectivamente
por gram aticas G
1
= (V
1
, , q
1
, P
1
) y G
2
= (V
2
, , q
2
, P
2
), entonces L
1
L
2
es tam-
bien un lenguaje generado por una gram atica. La gram atica que genera la uni on es
una nueva gram atica G = (V, , q
0
, P) dada por las reglas siguientes:
1. Al precio de renombrar las variables, podemos suponer que V
1
V
2
= (es
decir, G
1
, G
2
no poseen smbolos no terminales comunes) y P
1
P
2
= .
2. Introducimos una nueva variable q
0
, V
1
V
2
.
3. Finalmente, denimos V := V
1
V
2
q
0
.
4. Y denimos P := P
1
P
2
q
0
q
1
[ q
2
.
Demostracion. Con esta denicion de la nueva gramatica G es un mero ejercicio
de demostracion por induccion en el n umero de pasos de calculo.
Lema 34 En el caso de uni on nita L = L
1
L
m
, el Lema anterior se pue-
de extender de la forma obvia. Por tanto, la uni on nita de lenguajes generados
por gram aticas (resp. regulares) es un lenguaje generado por una gram atica (resp.
regulares).
Lema 35 Sea L

un lenguaje sobre el alfabeto generado por una gram atica


(regular) G := (V, , q
0
, P). Sea a un smbolo del alfabeto. Entonces, la siguiente
gram atica G
a
= (V
a
, , q
a
, P
a
) genera el lenguaje a L:
Sea q
a
una nueva variable (no presente en V ) y denamos V
a
:= V q
a
.
Denamos P
a
:= P q
a
aq
0
.
Demostracion. De nuevo un mero ejercicio de demostracion por induccion. Es
importante se nalar que si la gramatica G es regular, la nueva gramatica tambien es
regular.
1.6. EXPRESIONES REGULARES 27
C omo no construir la gramatica.
9
Combinando la Proposicion 32 con los le-
mas 34 y 35, uno pensara en un argumento inductivo para generar un lenguaje dado
por una expresion regular a partir de sus derivadas. La idea, grosso modo, sera
la siguiente:
Sea L() un lenguaje dado por una expresion regular sobre un alfabeto , su-
pongamos que = a
1
, . . . , a
n
. entonces, la Regla de Leibnitz para expresiones
regulares nos da la siguiente identidad:
L() = a
1
L(D
a
1
()) a
n
L(D
an
()) t().
A partir de esta identidad, uno pretende ver un arbol entre expresiones regulares y
podra tratar de argumentar como sigue:
Supongamos dadas gramaticas G
1
, . . . , G
n
que generan (respectivamente) los
lenguajes L(D
a
1
()), . . . , L(D
an
()).
Utilizado el Lema 35, uno podra construir gramaticas G

1
, . . . , G

n
de tal modo
que G

i
es la gramatica que genera el lenguaje a
i
L(D
a
i
()).
Finalmente, utilizando el Lema 34 uno concluira exhibiendo la gramatica que
genera el lenguaje L() a traves de la identidad dada por la Regla de Leibnitz
(Proposicion 32).
El problema en esta forma de pensamiento es la gradacion de las gramaticas. En
esta propuesta hay implcitamente una suposicion de que las expresiones regulares
asociadas a las derivadas son mas peque nas que las expresion regular original. El
concepto de mas peque no es inevitable para poder dar un argumento recursivo con
esta construccion. Sin embargo, la intuicion sobre las propiedades de las derivadas o
debe confundirnos. La derivada de una expresion regular puede ser mas grande (o
de mayor grado) que la expresion original, debido justamente al papel de logaritmo
neperiano del operador

. Veamos algunos ejemplos:
Ejemplo 5 Sea = a, b y consideremos la expresi on regular a

. Conside-
ramos las derivadas D
a
(a

) = a

, D
b
(a

) = . Tendremos, por Leibnitz,


a

= L(a

) = a L(a

) + +.
Claramente, la inducci on pretendida nos dice que para hallar la gram atica asociada
a la expresi on a

necesitamos calcular previamente la gramatica asociada


a la expresi on a

!. La respuesta a este dilema en este caso, sera la gram atica


siguiente:
Dado que L(a

) escribamos la producci on q ,
Dado que D
a
(a

) ,= , , escribamos la producci on q aq.


Notese que, en este ejemplo, hemos identicado la variable q con la expresion regular
a

y, hemos escrito la produccion q aq porque D


a
(a

) = a

.
9
Suscitado por conversaciones habidas en el Aula.
28 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


Ejemplo 6 En el anterior ejemplo, la expresi on regular obtenida tras derivar no
crece con respecto a la expresi on regular original (en todo caso, se estabiliza). Pero
es posible que se produzca un crecimiento (al menos en la longitud como palabra) y
eso se muestra a traves del ejemplo (abc)

de una expresi on regular sobre el alfabeto


= a, b, c. Al derivar observamos:
D
a
((abc)

) = bc(abc)

,
cuya longitud es mayor que la longitud de la expresi on regular original.
Para resolver este problema acudiremos al analisis de las derivadas sucesivas de una
expresion regular.
Denici on 36 (Derivadas sucesivas de una expresi on regular) Sea = a
1
, . . . , a
n

un alfabeto nito,

una palabra sobre el alfabeto y una expresi on regular.


Deniremos la derivada D

() mediante el proceso siguiente:


Si = es la palabra vaca, D

() = .
Si [[ = 1 (es una palabra de longitud 1) y, por tanto, = a
i
, denimos
D

() = D
a
i
(), conforme a la denici on de derivada anterior.
Si [[ = n 2 (es una palabra de longitud n) y, por tanto, existe a
i
y
existe
1

, con [
1
[ = n 1, tal que
= a
i

1
,
denimos
D

() = D
a
i
(D

1
()),
conforme a la denici on recursiva para palabras de longitud n 1.
Nota 37 De nuevo la intuici on puede hacer estragos, n otese que no hay conmu-
tatividad de las derivadas (como s ocurra en el caso de las derivadas parciales
habituales). Es decir, D
ab
,= D
ba
. Por poner un ejemplo, consideremos la expresi on
= aa

bb

. Tendremos,
D
a
() = a

bb

, D
b
() = .
Por tanto,
D
ba
() = D
b
(D
a
()) = D
b
(a

bb

) = b

,
mientras que
D
ab
() = D
a
(D
b
()) = D
a
() = .
El resultado crucial es el siguiente:
Proposici on 38 Sea una expresi on regular sobre un alfabeto nito y sea Der()
el conjunto de todas las derivadas sucesivas de con respecto a palabras en

. Esto
es,
Der() := :

, = D

().
Entonces, Der() es un conjunto nito.
1.6. EXPRESIONES REGULARES 29
Demostracion. Se demostrara por induccion en la denicion recursiva de la expre-
sion regular.
Nuestro proposito es construir una estructura de grafo con pesos asociado al conjunto
de todas las derivadas de la expresion regular. Esto va a constituir la gramatica
buscada.
Proposici on 39 El algoritmo siguiente transforma toda expresi on regular en una
gram atica nita G que genera el lenguaje L() descrito por la expresi on. En parti-
cular, los lenguajes descritos por expresiones regulares son lenguajes regulares.
Demostracion. La idea principal para realizar este algoritmo es la Regla de Leibnitz,
combinando las gramaticas con los Lemas 34 y 35.
Consideremos el siguiente algoritmo:
begin
Input: Una expresi on regular sobre un alfabeto nito
Hallar todos los elementos del conjunto Der() := D

() :

.
Denir un conjunto nito V de variables, biyetable al conjunto Der(). Sea
q V un elemento de ese conjunto de variables.
Denir una biyeccion E : Der() V , tal que E() = Q
0
.
Denir P
1
:= 1 y
P
2
:=
_
q , si L()
, en caso contrario
while P
2
,= P
1
do
P
1
:= P
2
Para cada Der() do
Para cada a do
Hallar := D
a
(), p := E() y q := E() en V .
Si L(), hacer P
2
:= P
2
q a.
Si ,= , , hacer P
2
:= P
2
q ap.
next a
od
next
od
od
Output: La lista [V, , Q
0
, P
2
].
end
30 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


1.6.4. Ecuaciones Lineales. Lema de Arden
La ecuaciones lineales en los lenguajes regulares juegan un papel muy importante.
Estas nos posibilitaran probar que las palabras generadas por una gramatica regular
forman un lenguaje dado por una expresion regular. Empecemos con la denicion.
Denici on 40 Llamaremos sistema de ecuaciones lineales en expresiones regulares
a toda ecuaci on del tipo siguiente:
_
_
_
X
1
.
.
.
X
n
_
_
_ =
_
_
_

1,1

1,n
.
.
.
.
.
.
.
.
.

n,1

n,n
_
_
_
_
_
_
X
1
.
.
.
X
n
_
_
_+
_
_
_

1
.
.
.

n
_
_
_, (1.1)
donde los
i,j
y los
k
son expresiones regulares sobre un alfabeto .
Una solucion de uno de tales sistemas de ecuaciones es una lista (
1
, . . . ,
n
) de
expresiones regulares sobre el mismo alfabeto, tales que

i

i,1

1
+ +
i,n

n
+
i
,
donde es la igualdad entre los lenguajes que describen (i.e. la igualdad tautologica
de las expresiones regulares).
El objetivo de esta Subseccion es la discusion del metodo obvio de resolucion de este
tipo de ecuaciones lineales. La clave para poder establecer lo obvio es una clasico
resultado de Arden:
Denici on 41 Se denomina ecuaci on lineal fundamental en expresiones regulares
a la ecuaci on lineal en una variable X siguiente:
X = X +,
donde y son expresiones regulares sobre un alfabeto nito .
Lema 42 (Lema de Arden) Dada la ecuaci on fundamental siguiente:
X = X +,
donde , son expresiones regulares sobre un alfabeto . Se verican las propiedades
siguiente:
1. La ecuaci on fundamental anterior posee una soluci on unica si y solamente si
, L().
2. La expresi on regular

es siempre soluci on de la ecuaci on fundamental


anterior.
3. Si L(), para cualquier expresi on regular , la expresi on

( + ) es
una soluci on de la ecuaci on fundamental
1.6. EXPRESIONES REGULARES 31
Demostracion. Aunque no se pretende dar una demostracion completa del Lema,
al menos se nalaremos los hechos fundamentales.
El alumno puede ver facilmente que cualquier expresion regular que sea solucion
debe contener al lenguaje L(

). Otra observacion trivial es que cualquier palabra


del lenguaje generado por una solucion debe de estar en el lenguaje generado por
o es la concatenacion de dos palabras, la primera en el lenguaje generado por y la
segunda en el lenguaje generado por X.
Tambien notese que si es una expresion regular, se tiene que
L(

) = L()
+
.
Es decir,


+
. Ahora bien, notese que L(

) = L(
+
) si y solamente si
L().
Del mismo modo, consideremos una expresion regular cualquiera, tendremos:

( +) +
+
+ +
+
(
+
+) +
+

+
+
.
Por su parte,

(+) =

. Esto nos da inmediatamente que si


+
o si = tenemos la equivalencia.
Este simple Lema es la base para el algoritmo obvio de sustitucion, es decir, eligiendo
una variable y sustituyendola en las demas ecuaciones. Formalmente, esto se expresa
de la siguiente manera.
Proposici on 43 Toda ecuaci on lineal en expresiones regulares del tipo de la De-
nici on 40 posee soluci on, que es una lista de expresiones regulares sobre el mismo
alfabeto.
Demostracion. El algoritmo se divide en las dos fases obvias: triangulacion/reduc-
cion (a traves del Lema de Arden) y levantamiento (invirtiendo las expresiones ya
despejadas). Los detalles del algoritmo se dejan como ejercicio al alumno.
Triangulaci on: Seguiremos la notacion 1.1 y procederemos utilizando induc-
cion. El caso n = 1 se resuelve mediante el Lema de Arden. Para el caso n > 1,
usaremos un doble paso:
Despejar. Podemos despejar X
n
en la ultima ecuacion, mediante la ex-
presion siguiente:
X
n
:=

n,n
R
n
, (1.2)
donde R
n
:=

n1
j=1

n,j
X
j
+
n
.
Sustituir. Podemos sustituir la expresion anterior en el resto de las ecua-
ciones obteniendo un nuevo sistema de (n1) ecuaciones en (n1) varia-
bles. Este sistema viene dado, obviamente, por las expresiones siguientes
para 1 i n 1:
X
i
:=
_
_
n1

j=1
_

i,j
+
i,n

n,n

n,j
_
X
j
_
_
+
_

i
+

n,n

n
_
.
32 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


Levantamiento. Una vez llegamos al caso n = 1, se obtiene una expresion
regular valida para X
1
y se procede a levantar el resto de las variables usando
las expresiones obtenidas en la fase de despejado (expresiones (1.2)).
1.7. Equivalencia entre REs y RGs
Comenzaremos asociando a cada gramatica regular G = (V, , q, P) un sistema de
ecuaciones lineales en expresiones regulares mediante la regla siguiente:
Supongamos V = q
0
, . . . , q
n
es el conjunto de los smbolos no termina-
les, que supondremos de cardinal n + 1. Denamos un conjunto de variables
X
0
, . . . , X
n
con el mismo cardinal y con la asignacion q
i
X
i
como biyec-
cion.
Denamos para cada i, 0 i n, la expresion regular
i
mediante la cons-
truccion siguiente. Consideremos todas las producciones que comienzan en la
variable q
i
y terminan en elementos de . Supongamos que tales pro-
ducciones sean
q
i
a
1
[ . . . [ a
r
.
Denimos
10

i
:= a
1
+. . . +a
r
.
Si no hubiera ninguna produccion del tipo q
i
a , deniremos

i
:= .
Para cada i y para cada j, deniremos el coeciente
i,j
del modo siguiente.
Consideremos todas las producciones que comienzan en el smbolo no terminal
q
i
e involucran al smbolo no terminal q
j
. Supongamos que tales producciones
sean:
q
i
a
1
q
j
[ [ a
r
q
j
,
con a
k
. Entonces deniremos

i,j
:= a
1
+ +a
r
.
Si no hubiera ninguna de tales producciones, deniremos
i,j
:= .
Denici on 44 (Sistema asociado a una gramatica) Dada una gram atica G =
(V, , q, P) llamaremos sistema asociado a G y lo denotaremos por o(G) al sistema:
o(G) :=
_

_
_
_
_
X
0
.
.
.
X
n
_
_
_ =
_
_
_

0,1

0,n
.
.
.
.
.
.
.
.
.

n,0

n,n
_
_
_
_
_
_
X
0
.
.
.
X
n
_
_
_+
_
_
_

0
.
.
.

n
_
_
_
_

_
,
dado por las anteriores reglas de construcci on.
10
Note el lector que alg un ai puede ser .
1.8. PROBLEMAS Y CUESTIONES. 33
Proposici on 45 Con las anteriores notaciones, sea (
0
, . . . ,
n
) una soluci on del
sistema S(G) asociado a una gram atica G. Entonces, L(
0
) es el lenguaje generado
por la gram atica G.
Demostracion. La idea de la demostracion es que estamos asociando una expresion
regular a cada variable. La variable X
i
es la expresion regular de las palabras que
se pueden generar a traves de derivaciones empezando por la variable q
i
. Por esa
razon la solucion de nuestro problema es encontrar X
0
. A partir de esta idea, la
demostracion se realiza por induccion.
Teorema 46 Los lenguajes regulares son los descritos por las expresiones regulares.
Es decir, todo lenguaje descrito por una expresi on regular es el lenguaje generado
por alguna gram atica regular y, recprocamente, todo lenguaje generado por alguna
gram atica regular puede ser descrito por alguna expresi on regular.
Demostracion. Basta con combinar los algoritmos descritos en las Proposiciones
45 y 39.
1.8. Problemas y Cuestiones.
1.8.1. Cuestiones Relativas a Lenguajes y Gramaticas.
Cuesti on 1 Se considera una gram atica sobre el alfabeto := a, b, cuyas pro-
ducciones vienen dadas por
q [ aqa [ bqb.
Decidir si el lenguaje generado por esa gram atica es el conjunto de los palndromos
sobre .
Cuesti on 2 Demostrar la falsedad de las armaciones dando el c odigo java sobre
las siguientes armaciones (se deja a un lado la funcionalidad del programa, por
ahora solo se requiere si el compilador devolver a un error al tratar de compilarlo):
Cambiar una orden por otra correcta no provoca errores de compilaci on.
Trabajando con parentesis () y corchetes [], no hay que tener mas cuidado que
cuando abramos alguno, se cierre en la misma orden.
Cuesti on 3 Si el sistema de producciones de una gram atica no posee ninguna trans-
formaci on del tipo A a, podemos asegurar que no es una gram atica regular?.
Cuesti on 4 El lenguaje sobre el alfabeto 0, 1 de las palabras que no contienen a
00, es un lenguaje regular?.
Cuesti on 5 Dados dos lenguajes L
1
y L
2
sobre el alfabeto a, b, podemos asegu-
rar que se verica la siguiente igualdad
(L
1
L
2
)
R
= L
R
1
L
R
2
?
Cuesti on 6 Dar una denici on inductiva (recursiva) de la transformaci on w
w
R
que revierte las palabras.
34 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


1.8.2. Cuestiones Relativas a Expresiones Regulares.
Cuesti on 7 Se dice que una expresi on regular esta forma normal disyuntiva si
=
1
+ +
n
,
donde las expresiones regulares
1
, . . . ,
n
no involucran el operador +. Decidir si
la siguiente expresi on regular esta en forma disyuntiva o encontrar una forma de
ponerla en forma disyuntiva:
(0 + 00 + 10)

,
con = 0, 1.
Cuesti on 8 Decidir si es verdadera la siguiente igualdad de expresiones regulares:
(a +b)

= (a

+b

.
Cuesti on 9 Pertenece la palabra acdcdb al lenguaje descrito por la expresi on re-
gular siguiente:
= (b

(cd)

b)

+ (cd)

?.
Cuesti on 10 Sea L el lenguaje sobre el alfabeto a, b formado por todas las pala-
bras que contienen al menos una aparici on de la palabra b. Es L el lenguaje descrito
por la expresi on regular siguiente
:= a

(ba

bb

(b

?.
Cuesti on 11 Dada cualquier expresi on regular , Se cumple

?.
Cuesti on 12 Dadas tres expresiones regulares , , , Es cierto que + ( ) =
( +) ( +)?.
Cuesti on 13 Es siempre la derivada de una expresi on regular otra expresi on re-
gular?.
1.8.3. Problemas Relativos a Lenguajes Formales y Gramaticas
Problema 1 Sea L := , a un lenguaje sobre el alfabeto := a, b. Hallar L
n
para los valores n = 0, 1, 2, 3, 4. Cu antos elementos tiene L
n
?.
Problema 2 Dados los lenguajes L
1
:= a y L
2
:= b sobre el mismo alfabeto
anterior, describir (L
1
L
2
)

y (L
1
L
2
)
+
. Buscar coincidencias.
Problema 3 Probar que la concatenaci on de los lenguajes no es distributiva con
respecto a la intersecci on de lenguajes.
Problema 4 Probar que la longitud [ [ :

N es un morsmo de monoides
suprayectivo, pero no es un isomorsmo excepto si () = 1.
1.8. PROBLEMAS Y CUESTIONES. 35
Problema 5 Dado el alfabeto = 0, 1, se consideran los siguientes dos lenguajes:
L
1
:=

: (ceros en ) 2Z.
L
2
:=

: n N, = 01
n
.
Demostrar que L
1
L
2
es el lenguaje L
3
siguiente:
L
3
:=

: (ceros en ) 2Z + 1.
Problema 6 Sea G una gram atica libre de contexto dada por V
N
:= q, V
F
:=
a, b y las producciones dadas por:
q aqb [ .
Probar que L(G) es el lenguaje denido por
L := a
n
b
n
: n N.
Problema 7 Sea L := a
n
b
n
c
n
: n N un lenguaje sobre el alfabeto = a, b, c.
Hallar una gram atica G tal que L(G) = L. Clasicar L dentro de la jerarqua de
Chomsky en funci on del tipo de gram atica que hayas encontrado.
Problema 8 Hallar una gram atica libre de contexto y otra equivalente regular para
cada uno de los dos lenguajes siguientes:
L
1
:= ab
n
a : n N,
L
2
:= 0
n
1 : n N.
Problema 9 Hallar gram aticas que generen los siguientes lenguajes:
L
1
:= 0
m
1
n
: [m, n N] [m n],
L
2
:= 0
k
1
m
2
n
: [n, k, m N] [n = k +m].
Problema 10 Dado el lenguaje L := z a, b

: w a, b

, con z = ww,
hallar una gram atica que lo genere.
Problema 11 Clasicar las siguientes gram aticas en terminos de la jerarqua de
Chomsky. Tratar de analizar los lenguajes generados por ellas y denirlos por com-
presi on.
1. P := q [ A, A c [ AA, V
N
:= q, A, V
F
:= c.
2. P := q [ A, A Ad [ cA [ c [ d, V
N
:= q, A, V
F
:= c, d.
3. P := q c [ qcq, V
N
:= q, V
F
:= c.
4. P := q c [ AcA, A cc [ cAc, cA cq, V
N
:= q, V
F
:= c.
36 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


5. P := q AcA, A 0, Ac AAcA [ ABc [ AcB, B B [ AB,
V
N
:= q, A, B, V
F
:= 0, c.
Problema 12 Sea G la gram atica dada por las siguientes producciones:
q 0B [ 1A,
.
A 0 [ 0q [ 1AA,
.
B 1 [ 1q [ 0BB.
Siendo V
N
:= q, A, B y V
F
:= 0, 1, probar que
L(G) := 0, 1

: (ceros en ) = (unos en ) [[ 0.
Problema 13 Probar que si L es el lenguaje dado por la siguiente igualdad:
L := 0, 1

: (ceros en ) ,= (unos en ),
entonces L

= 0, 1

.
Problema 14 Sea L a, b

el lenguaje dado por la siguiente denici on :


L,
Si L, entonces ab L y ba L,
Si x, y L, entonces xy L.
Describir el lenguaje y denirlo por comprensi on.
Problema 15 Probar que si L es generado por una gram atica regular a izquierda,
entonces L
R
es generado por una gram atica regular a derecha.
1.8.4. Problemas Relativos a Expresiones Regulares
Problema 16 Dadas , dos expresiones regulares. Probar que si L() L(),
entonces + .
Problema 17 Dada la expresi on regular = a + bc + b
3
a, Cu al es el lenguaje
regular L() descrito por ella?. Cu al es la expresi on regular que dene el lenguaje
a, b, c

?
Problema 18 Simplicar la expresi on regular = a+a(b+aa)(b

(aa)

+a(aa+
b)

, usando las equivalencias (sem anticas) vistas en clase.


Problema 19 Calcular la derivada D
ab
() = D
a
(D
b
()), siendo := a

ab.
Problema 20 Probar que D
a
(

) = D
a
()

, para cualquier expresi on regular .


1.8. PROBLEMAS Y CUESTIONES. 37
Problema 21 Probar que x :=

es una soluci on para la ecuaci on fundamental


x + .
Problema 22 Simplicar la expresi on regular := 1

01

(01

01

0 + 1)

01

+ 1

.
Problema 23 Hallar la expresi on regular asociada a la siguiente gram atica (por
el metodo de las ecuaciones lineales):
q aA [ cA [ a [ c,
A bq.
Aplicar el metodo de las derivadas a y comparar los resultados.
Problema 24 Hallar la gram atica que genera el lenguaje descrito por la siguiente
expresi on regular:
:= (b +ab
+
a)

ab

.
Problema 25 Comprobar la equivalencia tautol ogica
(b +ab

a)

ab

a(b +ab

a)

.
Problema 26 Dada la expresi on regular := (ab+aba)

, hallar una gram atica que


genere el lenguaje L().
Problema 27 Dada la expresi on regular := a(bc)

(b+bc)+a, hallar una gram ati-


ca G que genere el lenguaje L(). Construir el sistema S(G) asociado a la gram atica
calculada, resolverlo y comparar los resultados.
Problema 28 Hallar la expresi on regular asociada a la siguiente gram atica :
q bA [ ,
A bB [ ,
B aA.
Aplicar el metodo de las derivadas a y comparar los resultados.
Problema 29 Idem con la gram atica :
q 0A [ 1B [ ,
A 1A [ 0B,
B 1A [ 0B [ .
Problema 30 Probar que si es una expresi on regular tal que
2
, entonces

= +.
Problema 31 Probar que si es una expresi on regular se cumple

+.
38 CAP

ITULO 1. CHOMSKY. EXPRESIONES REGULARES


Problema 32 Hallar dos expresiones regulares distintas que sean soluci on de la
siguiente ecuaci on lineal
(a +)X = X.
Problema 33 Las Expresiones Regulares Avanzadas son expresiones regulares a nadien-
do diferentes operadores. Se utilizan en lenguajes de programaci on como Perl para
b usquedas dentro de texto. Los operadores a nadidos son los siguientes:
operador de rango: Para las letras [a..z], signica que cualquier letra del rango
es correcta.
operador ?: Este operador aplicado a una expresi on regular entre parentesis
indica que necesariamente encaja en este esquema.
operador /i: Este operador, indica el smbolo en la posici on i de la palabra, por
ejemplo /1 indica el primer smbolo de la palabra.
Demostrar como transformar las expresiones regulares avanzadas a expresiones re-
gulares. Aplicarlo al siguiente caso,
[a..c]([C..E]

)?/1.
Captulo 2
Automatas Finitos
2.1. Introduccion
La siguiente etapa, que constituye un buen entrenamiento para las maquinas de
Turing, son los automatas nitos. Los automatas nitos corresponden a correctores
ortogracos. Se trata de la vieja tarea del maestro de escuela que corrige las palabras
mal escritas. En terminos informaticos, los automatas nitos se usan para corregir (o
se nalar) los lugares en los que la morfologa de un lenguaje de programacion no ha
sido respetada. Si, por ejemplo, alguien elabora un peque no programa en C, Maple,
Matlab o, simplemente, un documento Textures, debajo del proceso de compilacion
existe un automata nito que detecta la presencia de errores y, si encuentra alguno,
salta mostrando donde aparece. El gran activador de la Teora de Automatas fue
J. von Neumann. Este gran matematico, gasto buena parte de los ultimos a nos de
su vida en el desarrollo de la teora de automatas nitos y, durante la Segunda
Guerra Mundial, en el desarrollo de los computadores electronicos de gran tama no
que fructico en la aparicion del ENIAC (un ordenador para calcular rapidamente
trayectorias balsticas que fue nanciado por el ejercito de los Estados Unidos y
nalizado en 1948
1
).
2.2. La Nocion de Automata
Formalmente, se denen como sigue :
Denici on 47 Llamaremos aut omata nito a todo quntuplo A := (Q, , Q
0
, F, )
donde :
es un conjunto nito (alfabeto),
Q es un conjunto nito cuyos elementos se llaman estados y que suele deno-
minarse espacio de estados,
Q
0
es un elemento de Q que se denomina estado inicial,
1
La historia del dise no y puesta en marcha del ENIAC y las personas involucradas puede seguirse
en la pagina web http://ftp.arl.mil/ mike/comphist/eniac-story.html .
39
40 CAP

ITULO 2. AUT

OMATAS FINITOS
F es un subconjunto de Q, cuyos elementos se denominan estados nales acep-
tadores,
: Q ( ) Q es una correspondencia que se denomina funci on de
transici on.
Si es aplicaci on, el aut omata se denomina determinstico y en caso contrario in-
determinstico.
Para ver como puede funcionar un automata, denamos su sistema de transicion.
2.2.1. Sistema de Transicion de un automata :
Sea dado el automata
A := (Q, , Q
0
, F, )
S := Q

es el espacio de conguraciones,
La transicion
A
S S se dene por las reglas siguientes :
(q, x)
A
(q

, x

) , x = x

, q

= (q, x)
Para interpretar mejor el proceso, hagamos nuestra primera descripcion graca. Las
palabras del albafeto

se pueden imaginar como escritas en una cinta innita,


dividida en celdas en cada una de las cuales puedo escribir un smbolo de .
[ x
1
[ x
2
[ x
3
[
Hay una unidad de control que ocupa diferentes posiciones sobre la cinta y que
dispone de una cantidad nita de memoria en la que puede recoger un estado de Q :
[ x
1
[ x
2
[ x
3
[

[ q [
Las conguraciones de S solo representan el momento instantaneo (snapshot) de
calculo correspondiente. As, dada una palabra x = x
1
x
n

el automata A
computa sobre esta palabra de la manera siguiente :
Inicializa (Q
0
, x) S, es decir
[ x
1
[ x
2
[ x
3
[

[ Q
0
[
2.2. LA NOCI

ON DE AUT

OMATA 41
Q
1
:= (Q
0
, x
1
), x
(1)
:= x
2
x
n

,
(Q
0
, x)
A
(Q
1
, x

)
Gracamente, borramos el contenido de la primera celda, cambiamos el estado
en la unidad de control de Q
0
(estado inicial) a Q
1
y movemos la unidad de
control un paso a la derecha :
[ [ x
2
[ x
3
[

[ Q
1
[
El proceso contin ua hasta que nos quedamos sin palabra, i.e. llegamos a la con-
guracion (Q
n1
, x
(n)
) S, donde x
(n)
:= x
n
es una palabra de longitud 1. Sea
Q
n
:= (Q
n1
, x
n
) y la palabra vaca y tenemos la sucesion de computacion :
(Q
0
, x)
A
(Q
1
, x
(1)
)
A

A
(Q
n1
, x
(n)
)
A
(Q
n
, )
[ [ [ [ [ [

[ Q
n
[
Ejemplo 7 El alfabeto ser a = a, b.
El espacio de estados ser a Q := Q
0
, Q
1
, Q
2
, Q
3

Las conguraciones nales aceptadoras ser an F := Q


2

La conguraci on inicial ser a Q


0
Para la funci on de transici on elegiremos una representaci on a traves de una tabla :
a b
Q
0
Q
1
Q
3
Q
1
Q
1
Q
2
Q
2
Q
3
Q
2
Q
3
Q
3
Q
3
Esta tabla debe interpretarse como (Q
i
, x) es el estado que aparece en la la Q
i
y
columna x. Revisemos la computaci on del aut omata A sobre un par de entradas :
Sea x = aabbb

y veamos c omo funciona nuestro au omata :


(Q
0
, aabbb)
A
(Q
1
, abbb)
A
(Q
1
, bbb)
A
42 CAP

ITULO 2. AUT

OMATAS FINITOS
Figura 2.1: Representacion graca del automata.

A
(Q
2
, bb)
A
(Q
2
, b)
A
(Q
2
, )
Y la palabra aabbb es aceptada.
Tomemos la palabra y = baba

y tratemos de seguir los c alculos de nuestro


aut omata :
(Q
0
, baba)
A
(Q
3
, aba)
A
(Q
3
, ba)
A
(Q
3
, a)
A
(Q
3
, )
y la palabra baba no es aceptada por nuestro aut omata.
El automata ya presenta una primera aproximacion a las maquinas de Turing. Pro-
cesa como un ordenador y va corrigiendo la palabra dada. Si, al nal del proceso, el
automata alcanza una conguracion nal aceptadora, es porque la palabra dada en
la conguracion inicial era correcta. En caso contrario rechaza. As surge la primera
nocion de problema susceptible de ser tratado informaticamente :
Denici on 48 Dado un aut omata A en las notaciones anteriores y una palabra
x

, denimos la correspondencia

Q
dada por

(x) = q si y solamente si (Q
0
, x)
A
(q, ).
Representaci on Graca de la Funci on de Transici on.
Una forma estetica, pero no siempre conveniente a la hora de manipular automatas
relativamente grandes, es la representacion de sistemas de transicion mediante grafos
con aristas etiquetadas, un ejemplo se puede ver en la Figura 2.1. Las reglas son las
siguientes:
2.2. LA NOCI

ON DE AUT

OMATA 43
Los nodos del grafo estan dados por los estados del grafo. Cada nodo esta ro-
deado de, al menos, una circunferencia.
Los nodos nales aceptadores del grafo son aquellos que estan rodeados por
dos circunferencias, el resto de los nodos aparecen rodeados de una sola cir-
cunferencia.
Dada una transicion (q, z) = p, asignaremos la arista del grafo (q, p) con
etiqueta z.
Hay una arista sin entrada, cuya salida es el nodo asociado al estado inicial.
Usaremos mas habitualmente la representacion de las funciones de transicion bien
mediante listas o bien mediante tablas.
Denici on 49 Llamaremos lenguaje aceptado por un aut omata A al conjunto de
palabras x

tales que

(x) F, es decir al conjunto de palabras tales que se


alcanza alguna conguraci on nal aceptadora.
Llamaremos lenguaje regular a todo lenguaje aceptable por alg un aut omata.
Podemos interpretar un automata como un evaluador de la funcion caracterstica de
un subconjunto de L

L
:

0, 1
Los automatas deterministas directamente sirven para evaluar
L
y la interpretacion
es la obvia en terminos de pregunta respuesta :
Input : Una palabra x

Output :
1 si el automata llega a una conguracion nal aceptadora (i.e.

(x) QF).
0 si el automata llega a una conguracion nal no aceptadora (i.e.

(x)
Q F).
Una buena referencia sobre automatas es el texto [DW83], donde tambien se pueden
encontrar ejemplos sencillos que ayuden al alumno a interiorizar la nocion.
El Aut omata como Programa
Una manera bastante natural de interpretar el automata nito es usar un pseudo
codigo para expresar un automata como un programa con un while basado en el
sistema de transicion anterior. Informalmente, sea A := (Q, , Q
0
, F, ) un automata.
El programa (algoritmo) que dene es el dado por la siguiente descripcion:
Input: x

(una palabra sobre el alfabeto).


Initialize: I := (Q
0
, x) (la conguracion inicial sobre x)
while I , F do
if I = (q, x

x
1
), x

x
1
,= , then I := ((q, x

), x
1
)
44 CAP

ITULO 2. AUT

OMATAS FINITOS
else Ouput NO

od
Output YES
La interpretacion como programa (determinstico) de este pseudocodigo depende
esencialmente de la ausencia de dos obstrucciones:
La presencia de transiciones, esto es, de transiciones de la forma (q, ) que
pueden hacer que caigamos en un ciclo innito.
La indenicion de I = ((q, x

), x
1
) por no estar denido (q, x

) o por tener
mas de un valor asociado.
Ambas obstrucciones se resuelven con los algoritmos que se describen a continuacion.
2.2.2. Automatas con/sin Transiciones.
Se denominan transiciones a las transiciones de una automata A := (Q, , Q
0
, F, )
dadas por igualdades de la forma:
(q, ) = p
1
, . . . , p
s
.
La presencia de transiciones puede modicar (aunque solo aparentemente) la
clase de problemas aceptados por los automatas.
Una transicion puede interpretarse como que el automata adivina cuales son
los siguientes smbolos que van a aparecer.
Supongamos primero el caso mas sencillo donde tenemos una conguracion (q, x)
en el sistema de transicion asociado al automata y una transicion (q, ) = p.
Entonces, la transformacion sera de la forma:
(q, x) (p, x

),
donde x

es dado por tal que x = x

y (q, ) = p.
El signicado de esta transformacion es el siguiente:
x = x

, p = (q, ).
En el caso general, donde (q, ) contiene varios estados, se corresponde a la situa-
cion donde tenemos una caja negra que implementa nuestro automata (esto es, solo
sabemos que con ciertas entradas, tenemos ciertas salidas). Vemos que el automata
que queremos modelar no lee la cinta, pero cambia de estado, y no a un unico estado,
si no que parece que depende del contenido de la celda. En terminos de operaciones
de lectoescritura, nuestra transicion realiza las siguientes tareas:
NO lee el contenido de la cinta.
Modica el estado en la unidad de control.
2.2. LA NOCI

ON DE AUT

OMATA 45
NO borra el contenido de la celda se nalada por la unidad de control.
NO se mueve a la izquierda.
En un sentido menos preciso, las transiciones son meras transformaciones de los
estados conforme a reglas que no dependen del contenido de la cinta.
Grafo de Transiciones.
A partir de las transiciones de un automata podemos construir un grafo. Dado
un automata A := (Q, , Q
0
, F, ), denimos el grafo de las transiciones de A
mediante G := (V, E), donde las reglas son:
V = Q.
Dados p, q V , decimos que (p, q) E si q (p, ), i.e.
E := (p, q) : q (p, ).
A partir del grafo de las transiciones podemos considerar la clausura transitiva
de un nodo (estado), deniendola del modo siguiente:
clausura(p) := q V : (p, ) (q, ).
Observese que a clausura de un nodo p esta determinada por las conguraciones
(con palabra vaca ) alcanzables desde la conguracion (p, ) dentro del sistema de
transicion asociado al automata.
Del mismo modo, dados p Q y a , deniremos la clausura de p y a mediante:
clausura(p, a) := q V : (p, ) (q, ), (q, a).
Nuestro objetivo es probar el siguiente enunciado:
Proposici on 50 Dado cualquier lenguaje L que sea aceptado por un aut omata con
transiciones, entonces existe un aut omata sin transiciones que acepta el mismo
lenguaje. M as aun, la transformaci on de un aut omata a otra se puede dar algortmi-
camente.
Demostracion. Como en el resto de los casos, nos basta con tomar como dado
de entrada un automata A := (Q, , Q
0
, F, ) y denir un nuevo automata que
elimina las transiciones. El nuevo automata no ha de ser determinista, pero eso
es irrelevante como veremos en la Proposicion 52.
Construiremos un nuevo automata

A := (

Q, , Q
0
,

F,

) denido conforme al algo-


ritmo siguiente:
Input: Automata A := (Q, , Q
0
, F, ).
Initialize:

Q := Q y Q
0
:= Q
0
.
for each p Q do nd clausura(p) od

F := F p : clausura(p) F ,= .
46 CAP

ITULO 2. AUT

OMATAS FINITOS
for each p Q do
if clausura(p, a) ,= , then

(p, a) :=
_
qclausura(p)
clausura((q, a)).

od
Output

A := (

Q, , Q
0
,

F,

)
Notar que

(p, ) no esta denida para ning un p Q.
Es un sencillo ejercicio comprobar que el automata

A acepta L.
Nota 51 Observese que el resultado de eliminar transiciones puede ser un aut oma-
ta indeterminista.
2.2.3. Determinismo e Indeterminismo en Automatas
Una primera preocupacion tecnica podra ser el papel que juega el indeterminismo en
la clase de lenguajes aceptados por automatas. Los siguientes resultados tranquilizan
mostrando que el indeterminismo es irrelevante en cuanto a la clase de lenguajes
aceptados.
Proposici on 52 Si un lenguaje L

es aceptado por un aut omata nito inde-


terminista, entonces, existe un aut omata nito determinista que lo acepta.
2
Demostracion. La idea es simple, sea A = (Q, , Q
0
, F, ) un automata indeter-
minista sin transiciones que acepta un lenguaje L

. Denamos el siguiente
automata determinista A dado por :
Q := T(Q) (el espacio de estados es el conjunto de las partes de Q).
F := X Q : XF ,= (las conguraciones nales aceptadoras son aque-
llas que contienen alg un estado del espacio F de estados nales aceptadores).
Q
0
:= Q
0
(el conjunto formado por la antigua conguracion inicial).
la funcion de transicion
: Q Q
denida mediante :
(X, ) := q Q : q

X, q = (q

, ).
Dejamos el asunto de la comprobacion como ejercicio.
Nota 53 A partir de ahora usaremos aut omatas deterministas e indeterministas
sin la preocupaci on sobre el indeterminismo, dado que podemos reemplazar unos por
otros sin mayores problemas.
2
Una caracterstica del indeterminismo es que no modica la clase de lenguajes aceptados; aunque
si modicara los tiempos de calculo.
2.3. LENGUAJES REGULARES Y AUT

OMATAS. 47
2.3. Lenguajes Regulares y Automatas.
Como indica el ttulo, el objetivo de esta seccion es mostrar que los lenguajes acep-
tados por los automatas son los lenguajes regulares. Para ello, mostraremos dos
procedimientos de paso conocidos como Teorema de Analisis y Teorema de Sntesis
de Kleene (cf. [Kle52]).
2.3.1. Teorema de Analisis de Kleene
Nuestra primera duda que cualquier lenguaje aceptado por un automata nito esta
generado por una expresion regular. El teorema siguiente arma eso y ademas da un
algoritmo para calcularlo. Se deja al alumno el ejercicio de demostrar la complejidad
del algoritmo.
Teorema 54 Sea L

un lenguaje aceptado por un aut omata nito determinista.


Entonces, existe una expresi on regular sobre el alfabeto tal que L = L().
M as a un, mostraremos que existe un procedimiento tratable que permite calcular la
expresi on regular asociada al lenguaje aceptado por un aut omata.
Demostracion. Nos limitaremos con mostrar el procedimiento, que casi viene pre-
gurado por las deniciones.
Para ello construiremos un sistema de ecuaciones lineales en expresiones regulares
con las reglas siguientes:
Supongamos que Q := Q
0
, . . . , Q
n
. Introducimos un conjunto de variables
biyectable con Q dado por X
0
, . . . , X
n
La biyeccion sera dada por Q
i
X
i
.
Denimos un sistema de ecuaciones lineales en expresiones regulares :
_
_
_
X
0
.
.
.
X
n
_
_
_ =
_
_
_

0,0

0,n
.
.
.
.
.
.
.
.
.

n,0

n,n
_
_
_
_
_
_
X
0
.
.
.
X
n
_
_
_+
_
_
_

0
.
.
.

n
_
_
_,
Conforme a las reglas siguientes:
Para cada i, 0 i n, denamos
i
= si Q
i
F y
i
= si Q
i
, F.
Para cada i, j, 0 i, j n, denamos A
i,j
mediante:
A
i,j
:= z : (Q
i
, z) = Q
j
.
Deniremos

i,j
:=

zA
i,j

i,j
,
notando que si A
i,j
= , entonces,
i,j
= .
Entonces, si (
0
, . . . ,
n
) es una solucion del anterior sistema lineal, L(
0
) es el
lenguaje aceptado por el automata. La idea de la demostracion es la siguiente: Em-
pecemos por calcular el lenguaje de las palabras que empezando en Q
0
son aceptadas
48 CAP

ITULO 2. AUT

OMATAS FINITOS
por el automata y llamemos a este lenguaje X
0
. De la misma forma, para cada uno
de los estados ponemos un lenguaje X
1
, X
2
. . . Hay una clara relacion entre estos
lenguajes, que esta dada por las ecuaciones lineales dadas mas arriba. Si tomamos
+ como union de lenguajes y
i,j
X
i
como el lenguaje formado por las palabras
concatenadas por
i.j
donde X
i
entonces la relacion esta mas que clara.
El lenguaje X
0
esta claramente formado por la union de los lenguajes X
i
correspon-
dientes, con prejo dado por el smbolo de la transicion. Ademas, si el estado es nal
hay que a nadir la palabra .
Denici on 55 (Sistema Caracterstico de un Aut omata) Se denomina siste-
ma de ecuaciones caracterstico de un aut omata al sistema de ecuaciones lineales en
expresiones regulares obtendio conforme a las reglas descritas en la demostraci on del
Teorema anterior.
2.3.2. Teorema de Sntesis de Kleene
En esta segunda parte, vamos a demostrar la implicacion contraria. Esto es, que
para cualquier lenguaje generado por una expresion regular se puede encontrar un
automata determinista que lo acepta. Comenzaremos por un sencillo Lema.
Lema 56 Dado un lenguaje L aceptado por un aut omata, existe un aut omata A :=
(Q, , Q
0
, F, ) que acepta L y que verica las siguientes propiedades:
1. (F) = 1, es decir, s olo hay una conguraci on nal aceptadora. Supondremos
F := f.
2. (q, x) est a denida para todo q Q y todo x .
3. Las unicas transiciones entran en f. Es decir,
Si (p, ) = q q = f.
Demostracion. Dado el automata A := (Q, , Q
0
, F, ), que podemos suponer
determinista, denamos el nuevo automata

A := (

Q, , Q
0
,

F,

) conforme a las
reglas siguientes:
Sea f, ERROR dos nuevos estados tal que f, ERROR , Q. Denamos

Q :=
Q f ERROR y Q
0
:= Q
0
.
Denamos

F := f.
Para cada p Q y para cada a , denamos

(p, a) := (p, a),



(ERROR, a) := ERROR,

(f, a) = ERROR.
Para cada p F, denamos

(p, ) := f.
2.3. LENGUAJES REGULARES Y AUT

OMATAS. 49
Es claro que

A acepta el mismo lenguaje que aceptaba A. La razon es sencilla, la
unica manera de alcanzar el nuevo estado f es llegar a un estado nal con la cinta
vaca.
Teorema 57 Sea un alfabeto nito y una expresi on regular sobre . Entonces,
existe un aut omata nito A que reconoce el lenguaje L() descrito por . M as a un,
el proceso de obtenci on del aut omata a partir de la expresi on regular se puede lograr
de manera algortmica.
Demostracion. De nuevo nos limitaremos a describir un proceso algormico que
transforma expresiones regulares en automatas, usando los operadores de denicion
de la expresion (i.e. el procedimiento es recursivo en la construccion de la expresion
regular).
El caso de los smbolos primarios:
El caso : Bastara un automata con Q := Q
0
, Q
1
, F := Q
1
tal que
la funcion de trasicion no este denida en ning un caso.
El caso : De nuevo usaremos Q := Q
0
, Q
1
, F := Q
1
, pero la funcion
de transicion esta denida solamente para (Q
0
, ) = Q
1
y no denida en
el resto de los casos.
El caso constante a : Igual que en el caso anterior, usaremos Q :=
Q
0
, Q
1
, F := Q
1
, pero la funcion de transicion esta denida solamen-
te para (Q
0
, a) = Q
1
y no denida en el resto de los casos.
Siguiendo los operadores:
El aut omata de la uni on ( + ): Si tenemos A
1
:= (Q
1
, , Q
1
, F
1
,
1
)
un automata determinista que acepta L
1

y un segundo automata
tambien deterministas A
2
:= (Q
2
, , Q
2
, F
2
,
2
) un automata que acepta
L
2

, denimos un nuevo automata


3
A := (Q, , Q
0
, F, ) que acepta
L
1
L
2
y viene dado por las reglas siguientes:
Q := Q
1
Q
2
,
F := (F
1
Q
2
) (Q
1
F
2
)
Q
0
:= (Q
1
, Q
2
)
((p, q), z) = (
1
(p, z),
2
(q, z)), p Q
1
, q Q
2
y z .
El aut omata de la concatenaci on (): Supongamos A
1
:= (Q
1
, , Q
1
, F
1
,
1
)
un automata que acepta L
1

y un segundo automata A
2
:= (Q
2
, , Q
2
, F
2
,
2
)
un automata que acepta L
2

. Supongamos que A
1
verica las con-
diciones descritas en el Lema 56 y sea F
1
:= f.
Denimos un nuevo automata A := (Q, , Q
0
, F, ) que acepta L
1
L
2
y
viene dado por las reglas siguientes:
Q := (Q
1
1) (Q
2
2).
3
Esta construccion se la conoce como Automata Producto.
50 CAP

ITULO 2. AUT

OMATAS FINITOS
F := F
2
2.
Q
0
:= (Q
1
, 1)
La funcion de transicion : Q( ) Q, viene dada por:
((q, i), z) :=
_
_
_
(
1
(q, z), 1) , si q Q
1
, i = 1
(Q
2
, 2) , si q = f F
1
, i = 1, z =
(
2
(q, z), 2) , si q Q
2
, i = 2
(2.1)
El aut omata del monoide generado (

): De nuevo suponemos que te-


nemos un automata A := (Q, , Q
0
, F, ) que acepta el lenguaje L().
Podemos suponer que dicho automata verica las condiciones del Le-
ma 56 anterior. Supongamos F = f. Denamos un nuevo automata
A

:= (Q

, , Q

0
, F

) conforme a las reglas siguientes:


Q

:= Q.
Q

0
:= Q
0
.
F

:= F = f.
Para cada q Q F y para cada z , denamos

(q, z) :=
(q, z).
Finalmente, denamos:

(f, ) := Q
0
.
y

(Q
0
, ) := f.
Es claro que este automata acepta el lenguaje previsto.
Con esto acabamos la demostracion, ya que cualquier expresion regular esta forma-
da por concatenacion, suma de expresiones regulares o es estrella de una expresion
regular.
El alumno avezado habra sin duda notado que solo se ha demostrado que cualquier
lenguaje dado por una expresion regular es aceptado por un automata indeterminis-
ta. Utilizando los resultados de las secciones anteriores, podemos hallar un automa-
ta determinista equivalente. Se propone ahora un metodo equivalente, mas graco
orientado a la resolucion con papel y bolgrafo.
Inicialmente, empezamos dibujamos dos estados, el primero sera el inicial y el
segundo el nal. Dibujamos una transicion con la expresion regular de la cual
queremos hallar el automata.
Repetir el los siguientes pasos hasta que todas las transiciones no contengan
mas que smbolos del alfabeto.
Remplazar cada transicion donde aparezca f + g por dos transiciones,
entre los mismos estados con f y g.
2.4. LENGUAJES QUE NO SON REGULARES 51
A nadir un nuevo estado por cada transicion donde aparezca fg y a nadir
dos transiciones, la primera que vaya del estado inicio hasta el nuevo nodo
con f y la segunda que vaya del nuevo nodo al estado antiguo por g.
A nadir tambien un nuevo estado por cada transicion donde aparezca f,
a nadiendo transiciones que entren y salgan al nuevo estado de los esta-
dos antiguos y una transicion del nuevo estado en si mismo con smbolo
f.
2.4. Lenguajes que no son regulares
La tradicion usa el Lema de Bombeo para mostrar las limitaciones de los lengua-
jes regulares. El resultado fue originalmente debido a Y. Bar-Hillel, M. Perles, E.
Shamir
4
. Este Lema se enuncia del modo siguiente:
Teorema 58 (Pumping Lemma) Sea L un lenguaje regular. Entonces, existe un
n umero entero positivo p N tal que para cada palabra L, con [[ p existen
x, y, z

vericando los siguientes propiedades:


[y[ p,
= xyz
Para todo N, las palabras xy

z L
El Lema de Bombeo simplemente dice que hay prejos y una lista nita de palabras
tal que, bombeando esas palabras, permaneceremos en el mismo lenguaje regular.
Por razones esteticas preero mostrar los lmites de los lenguajes regulares con el
resultado siguiente que prueba que los prejos posibles forman un conjunto nito.
Denici on 59 (Prejos) Sea un alfabeto nito y sea L

un lenguaje cual-
quiera. Denimos la siguiente relaci on de equivalencia sobre

:
dados x, y

, x
L
y si y solamente si :
w

, xw L yw L
Vericar que estamos ante una relacion de equivalencia es un mero ejercicio. Lo que
pretendemos es caracterizar los lenguajes aceptados por un automata mediante una
caracterizacion del conjunto cociente :

/
L
.
Teorema 60 (MyhillNerode)
5
Si L

es un lenguaje aceptado por un


aut omata, entonces el conjunto cociente

/
L
es nito
6
.
4
Y. Bar-Hillel, M. Perles, E. Shamir.On formal properties of simple phrase structure gram-
mars.Zeitschrift f ur Phonetik, Sprachwissenschaft und Kommunikationsforschung 14 (1961) 143
172.
5
Rabin, M. and Scott, D..Finite automata and their decision problems. IBM Journal of Re-
search & Development 3 (1959), 114-125.
6
El recproco tambien es cierto y lo dejamos como ejercicio.
52 CAP

ITULO 2. AUT

OMATAS FINITOS
Demostracion. Supongamos que L es el lenguaje aceptado por un automata deter-
minista A := (, Q, Q
0
, F, ). Consideremos el conjunto de los estados alcanzables
por alguna computacion de A sobre alguna entrada y

:
Q := q Q : y

, (Q
0
, y) (q, )
es claro que Q Q es un conjunto nito. Para cada q Q, sea y
q

tal que
(Q
0
, y
q
) (q, ). Sea
S := y
q
: q Q
Claramente S es un conjunto nito y vamos a probar que

/
L
= [y
q
] : y
q
S
con lo que tenemos la armacion. Ahora, tomemos x

y sea (Q
0
, x) (q, ),
q Q. Para cualquier w

, el sistema de transicion asociado al automata A,


trabajando sobre xw realiza algo como lo siguiente :
(Q
0
, xw)
A

A
(q, w)
mientras vamos borrando la x. Ahora bien, si tomamos y
q
w

, el calculo hara tam-


bien el camino :
(Q
0
, y
q
w)
A

A
(q, w)
Lo que pase a aprtir de (q, w) es independiente de por donde hayamos empezado,
luego xw es aceptado por A si y solamente si y
q
w es aceptado por A.
2.4.1. Un ejemplo clave : El Palndromo.
Por lo visto y denido, los automatas podran haber sido buenos candidatos a proce-
sos algortmicos y uno estara tentado a denir los problemas decisionales resolubles
por un algoritmo como aquellos problemas que son funciones caractersticas de un
lenguaje regular. Desgraciadamente, a pesar de las buenas propiedades que verican,
los automatas son insucientes para caracterizar la nocion de algoritmo. Un sencillo
problema decisional el Palndromo o, en buen catalan, el problema de la deteccion
de los capicua, no sera un lenguaje regular, como consecuencia del resultado de
Myhill y Nerode anterior.
Comencemos recordando la denicion del Palndromo ya denido en Secciones an-
teriores. Dado un alfabeto nito , y una palabra x = x
1
x
n

, denominamos
el reverso de x, x
R
a la palabra : x
R
= x
n
x
1
.
El lenguaje del Palndromo es dado por
T := x

: x
R
= x
Corolario 61 (MyhillNerode) El palndromo no es un lenguaje regular.
Demostracion. Dada cualquier palabra x

se tiene que xx
R
T. Claramente,
pues
(xx
R
)
R
= (x
R
)
R
x
R
= xx
R
2.5. MINIMIZACI

ON DE AUT

OMATAS DETERMINISTAS 53
Supongamos, entonces que T fuera un lenguaje regular y sea S un conjunto nito
tal que

/
P
= [y] : y S. Sea m := max[ y [ : y S, que existe por ser
S un conjunto nito. Consideremos la palabra x = 0
[m]
110
[m]
donde 0
[m]
representa
una lista de m 0s y los smbolos 0, 1 se suponen dentro del alfabeto . Ha de
existir y = y
1
y
r
S tal que para todo w

xw T yw T
Ahora bien, tomando x = 0
[m]
1, xx
R
T, luego yx
R
T. Pero esto implica
yx
R
= (yx
R
)
R
= xy
R
Reescribamos esta identidad :
yx
R
= y
1
y
r
10
[m]
= 0
[m]
1y
r
y
1
= xy
R
Deducimos (dado que r m que y
1
= = y
r
= 0) que m + 1 = r + 1, ya que la
palabra solo tiene un 1. Pero esto da una contradiccion.
Ejemplo 8 Los siguientes son tambien ejemplos de lenguajes no regulares :
= 0, 1 y el lenguaje L dado por la condici on el n umero de 1s es mayor
que el n umero de 0s.
Para el mismo alfabeto el lenguaje :
L := 0
[m]
1
[m]
: m N
Para el alfabeto = 0, 1, . . . , 9 sea

el lenguaje formado por las


palabras que son prejos de la expansi on decimal de R, es decir :
L := 3, 31, 314, 3141, 31415, . . .
2.5. Minimizacion de Automatas Deterministas
En ocasiones uno puede observar que el automata que ha dise nado (usando algunas
de las propiedades o metodos ya descritos) es un automata con demasiados estados
(y, por tanto, el codigo del programa es excesivo para el programador). Para resolver
esta situacion se utiliza un proceso de minimizacion de los automatas que pasaremos
a describir a continuacion.
Comenzaremos observando que las computaciones que realizan varios estados pueden
ser esencialmente las mismas, que los efectos que producen ciertos estados podran
ser los mismos. Esto se caracteriza mediante la relacion de equivalencia siguiente:
Sea A := (Q, , Q
0
, F, ) un automata. Dos estados p, q Q se dicen equivalentes si
se verica la siguente propiedad:
z

, Si
__
(p, z) (p

, )
_

_
(q, z) (q

, )
__
=
_
(p

F) (q

F)
_
.
54 CAP

ITULO 2. AUT

OMATAS FINITOS
En otras palabras, dos estados son equivalentes si para cualquier palabra el efecto
de la computacion que generan es el mismo (en terminos de alcanzar o no un estado
nal aceptador).
Denotaremos por p
A
q en el caso de que p y q sean equivalentes. Para cada estado
p Q, denotaremos por [q]
A
la clse de equivalencia denida por q y denotaremos
por Q/
A
al conjunto cociente. Deniremos automata minimal al automata que
tiene el menor n umero de estados y que acepta un lenguaje.
Se tiene:
Teorema 62 Sea L un lenguaje aceptado por un aut omata determinista A. Enton-
ces, existe un aut omata mnimo que lo acepta. Dicho aut omata (

Q, ,

Q
0
,

F,

) viene
dado por las propiedades siguientes:

Q := Q/
A
,

F := [q]
A
: q F.

Q
0
:= [Q
0
]
A
.

([q]
A
, z) := [(q, a)].
Demostracion. Lo dejamos para la reexion de los alumnos.
El problema es que el calculo de las clases de equivalencia no puede hacerse de
manera simple (porque habramos de vericar todas las palabras z

). Por eso
se plantean algoritmos alternativos como el que se describe a continuacion (tomado
de [Eil74a]).
Para construir nuestro automata cociente, tomaremos una cadena de relaciones de
equivalencia. Las deniremos recursivamente del modo siguiente:
Sea A := (Q, , Q
0
, F, ) un automata. Denamos las siguientes relaciones:
La relaci on E
0
: Dados p, q Q, diremos que pE
0
q (p y q estan relacionados al
nivel 0) si se verica:
p F q F.
Es claramente una relacion de equivalencia. El conjunto cociente esta formado
por dos clases:
Q/E
0
:= F, Q F.
Denamos e
0
:= (Q/E
0
) = 2.
La relaci on E
1
: Dados p, q Q, diremos que pE
1
q (p y q estan relacionados al
nivel 1) si se verica:
pE
1
q
_
_
_
pE
0
q,
(p, z)E
0
(q, z), z
Es, de nuevo, una relacion de equivalencia. El conjunto cociente ya no es tan
obvio, y denimos:
e
1
:= (Q/E
1
) .
2.5. MINIMIZACI

ON DE AUT

OMATAS DETERMINISTAS 55
La relaci on E
n
: Para n 2, denimos la relacion del modo siguiente: Dados
p, q Q, diremos que pE
n
q (p y q estan relacionados al nivel n) si se verica:
pE
n
q
_
_
_
pE
n1
q,
(p, z)E
n1
(q, z), z
Es, de nuevo, una relacion de equivalencia. El conjunto cociente ya no es tan
obvio, y denimos:
e
n
:= (Q/E
n
) .
Lema 63 Sea A := (Q, , Q
0
, F, ) un aut omata y sean E
n
: n N la cadena
de relaciones de equivalencia denidas conforme a la regla anterior. Se tiene:
1. Para cada n N, e
n
e
n+1
.
2. Si existe n N, tal que e
n
= e
n+1
, entonces
e
m
= e
n
, m n.
Demostracion. Es claro que si dos estados estan relacionados a nivel n entonces,
estan relacionados a nivel n 1. Esto es as por pura construccion (por denicion).
Por tanto, la relacion E
n+1
lo mas que puede hacer es partir en mas de una clase de
equivalencia alguna de las clases de equivalencia del conjunto cociente anterior. Por
tanto,
e
n
= (Q/E
n
) (Q/E
n+1
) = e
n+1
.
Como, ademas, la relacion E
n+1
se dene inductivamente a partir de la relacion E
n
,
si e
n
= e
n+1
, entonces, las clases a nivel n siguen siendo las clases a nivel n + 1. En
otras palabras, si e
n
= e
n+1
, entonces para todo par p, q Q, pE
n
q si y solamente si
pE
n+1
q. En particular, E
n
= E
n+1
y ambas relaciones de equivalencia son la misma.
Inductivamente, para n + 2 se tendra
pE
n+2
q
_
_
_
pE
n+1
q,
(p, z)E
n+1
(q, z), z
_
_
_

_
_
_
pE
n
q,
(p, z)E
n
(q, z), z
_
_
_
pE
n+1
q pE
n
q.
Por tanto E
n+2
= E
n+1
= E
n
y, en consecuencia, e
n+2
= e
n+1
= e
n
.
Para cualquier m n + 3, aplquese induccion para concluir E
m
= E
n+1
= E
n
y,
ademas, e
m
= e
n
.
Proposici on 64 Con las notaciones del Lema anterior, para cada aut omata A exis-
te n N, con n (Q) 2, tal que para todo m n se verica:
1. pE
m
q pE
n
q, p, q Q.
56 CAP

ITULO 2. AUT

OMATAS FINITOS
2. e
m
= e
n
.
Demostracion. Por el Lema anterior, concluimos:
2 = e
0
e
1
e
2
e
n

Ahora consideremos n = (Q) 2. Pueden ocurrir dos cosas:
Caso I: Que e
i
,= e
i+1
para todo i n. Es decir, que tengamos (con n =
(Q) 2):
2 = e
0
< e
1
< e
2
< < e
n
.
En este caso, tendramos
e
1
e
0
+ 1 = 3,
e
2
e
1
+ 1 4,
.
.
.
e
n1
e
n2
+ 1 e
1
+ (n 2) 3 + (n 1) = n + 2 = (Q).
e
n
e
n1
+ 1 n + 3 = (Q).
Recordemos que e
n
= (Q/E
n
) y el n umero de clases de equivalencia no puede
ser mayor que el n umero de elementos de Q, es decir, habremos logrado que
n + 3 e
n
(Q) = n + 2 y eso es imposible. As que este caso no se puede
dar.
Caso II: La negacion del caso anterior. Es decir, existe un i, con 0 i n (y
n = (Q) 2) tal que e
i
= e
i
+ 1. Entonces, por el Lema anterior, se tendra:
2 = e
0
< e
1
< e
2
< < e
i
= e
i+1
= = e
m
=
A partir de que solo se puede dar el caso II, es obvio que se tienen las propiedades
del enunciado.
Teorema 65 Sea A := (Q, , Q
0
, F, ) un aut omata sin transiciones y sean p, q
dos estados. Entonces, tomando n = (Q) 2, se tendr a que
p
A
q pE
n
q.
Demostracion. Lo dejamos como ejercicio para el alumno.
En particular, el algoritmo que calcula el automata minimal funciona como sigue:
Hallar el conjunto cociente (Q/E
0
) y su cardinal e
0
.
(Siguiendo los E
i
s) Mientras el conjunto cociente nuevo sea alterado con
respecto al anterior, hallar el conjunto cociente siguiente.
Parar cuando el cardinal del nuevo conjunto cociente coincida con el ultimo
calculado.
2.6. CUESTIONES Y PROBLEMAS. 57
2.6. Cuestiones y Problemas.
2.6.1. Cuestiones.
Cuesti on 14 Sea A := (Q, , Q
0
, F, ) una aut omata indeterminista que verica la
siguiente propiedad: Para todo estado q y para todo smbolo z ,
(p : (q, z) = p) 1,
donde signica cardinal. Dar un procedimiento inmediato para hallar uno equiva-
lente que sea determinista.
Cuesti on 15 Hallar una expresi on regular sobre el alfabeto a, b que describa
el lenguaje aceptado por el aut omata siguiente. Sea Q := Q
0
, Q
1
y F = Q
1
.
Siendo la funci on de transici on dada por la tabla:
a b
Q
0
Q
0
Q
1
N.D.
Q
1
N.D. N.D. N.D.
Donde N.D. signica No Denido.
Cuesti on 16 Considerar el aut omata A := (Q, , Q
0
, F, ), donde
:= a,
Q := Q
0
, Q
1
, Q
2
,
F := Q
2
.
Y la funci on de transici on es dada por la Tabla siguiente:
a
Q
0
Q
1
N.D.
Q
1
Q
2
N.D.
Q
2
Q
0
N.D.
Probra que L(A) = (aaa)
n
aa : n N.
Cuesti on 17 Describir una aut omata que acepta el siguiente lenguaje:
L(A) := a, b

: (apariciones de b en ) 2N.
Cuesti on 18 Considerese el aut omata siguiente:
:= 0, 1,
Q := Q
0
, Q
1
, Q
2
, Q
3
, Q
4
, Q
5
,
F := Q
2
, Q
3
, Q
4
.
58 CAP

ITULO 2. AUT

OMATAS FINITOS
Cuya funci on de transici on es dada por la tabla siguiente:
0 1
Q
0
Q
1
Q
2
N.D.
Q
1
Q
0
Q
3
N.D.
Q
2
Q
4
Q
5
N.D.
Q
3
Q
4
Q
4
N.D.
Q
4
Q
4
Q
5
N.D.
Q
5
Q
5
Q
5
N.D.
1. Dibuja el grafo que describe al aut omata.
2. Probar que Q
0
y Q
1
son equivalentes.
3. Probar que Q
2
, Q
3
, Q
4
son equivalentes.
4. Hallar el aut omata mnimo correspondiente.
Cuesti on 19 Sea G una gram atica sobre el alfabeto a, b cuyas reglas de produc-
ci on son las siguientes:
q bA [
A bB [
B aA
Hallar una aut omata que acepte el elnguaje generado por esa gram atica. Hallar el
aut omata mnimo que acepte ese lenguaje. Hallar una expresi on regular que describa
ese lenguaje.
Cuesti on 20 Dado un aut omata A que acepta el lenguaje L, Hay un aut omata
que acepta el lenguaje L
R
?, C omo le describiras?.
Cuesti on 21 dado un aut omata A que acepta el lenguaje descrito por una expresi on
regular y dado un smbolo a del alfabeto, C omo sera el aut omata regular que
acepta el lenguaje L(D
a
())?
2.6.2. Problemas
Problema 34 Construir aut omatas que acepten los siguientes lenguajs:
1. L
1
:= a, b

: abab es una subcadena de .


2. L
2
:= a, b

: ni aa ni bb son subcadenas de .
3. L
3
:= a, b

: ab y ba son subcadenas de .
4. L
4
:= a, b

: bbb no es subcadena de .
Problema 35 Hallar una aut omata determinista equivalente al aut omata indeter-
minista A := (Q
0
, Q
1
, 0, 1, Q
0
, Q
1
, ), donde es dado por la tabla siguiente:
2.6. CUESTIONES Y PROBLEMAS. 59
0 1
Q
0
Q
0
, Q
1
Q
1
N.D.
Q
1
N.D. Q
1
, Q
0
N.D.
Problema 36 Hallar una aut omata determinista equivalente al aut omata indeter-
minista A := (Q, 0, 1, Q
0
, F, ), donde
:= 0, 1,
Q := Q
0
, Q
1
, Q
2
, Q
3
, Q
4
,
F := Q
4
.
Y es dado por la tabla siguiente:
a b
Q
0
N.D. Q
2
Q
1
Q
1
Q
0
, Q
4
N.D. Q
2
, Q
3
Q
2
N.D. Q
4
N.D.
Q
3
Q
4
N.D. N.D.
Q
4
N.D. N.D. Q
3
Problema 37 Minimizar el aut omata sobre el alfabeto 0, 1 dado por las propie-
dades siguientes:
:= 0, 1,
Q := Q
0
, Q
1
, Q
2
, Q
3
, Q
4
, Q
5
,
F := Q
3
, Q
4
.
0 1
Q
0
Q
1
Q
2
N.D.
Q
1
Q
2
Q
3
N.D.
Q
2
Q
2
Q
4
N.D.
Q
3
Q
3
Q
3
N.D.
Q
4
Q
4
Q
4
N.D.
Q
5
Q
5
Q
4
N.D.
Hallar su grafo, una gram atica que genere el mismo lenguaje y una expresi on regular
que lo describa.
Problema 38 Construir una expresi on regular y un aut omata nito asociados al
lenguaje siguiente:
L := a, b

: z a, b

, = azb.
Problema 39 Hallar una expresi on regular y una gram atica asociadas al lenguaje
aceptado por el aut omata A := (Q, , Q
0
, F, ), dado por las propiedades siguientes
60 CAP

ITULO 2. AUT

OMATAS FINITOS
:= a, b,
Q := Q
0
, Q
1
, Q
2
, Q
3
, Q
4
,
F := Q
3
, Q
4
.
Y es dado por la tabla siguiente:
a b
Q
0
Q
1
N.D. N.D.
Q
1
Q
2
Q
4
N.D.
Q
2
Q
3
Q
4
N.D.
Q
3
Q
3
Q
4
N.D.
Q
4
N.D. Q
4
N.D.
Problema 40 Hallar un aut omata determinista que acepta el lenguaje descrito por
la siguiente expresion regular:
a(bc)

(b +bc) +a.
Minimiza el resultado obtenido.
Problema 41 Haz lo mismo que en el problema anterior para la expresi on regular:
(a (ab)

da (ab)

.
Problema 42 Haz lo mismo que en el problema anterior para la expresi on regular:
0(011)

0 + 10

(1 (11)

0 +) +.
Problema 43 Cacula un aut omata nito determinista minimal, una gram atica re-
gular y una expresi on regular para el lenguaje siguiente:
L := 0, 1

: [ (0s en ) 2N] [ (1s en ) 3N].


Problema 44 Obtener una expresi on regular para el aut omata descrito por las si-
guientes propiedades: A := (Q, , Q
0
, F, ), y
:= a, b,
Q := Q
0
, Q
1
, Q
2
,
F := Q
2
.
Y es dado por la tabla siguiente:
a b
Q
0
Q
0
, Q
2
N.D. Q
1
Q
1
Q
2
Q
1
N.D.
Q
2
N.D. N.D. Q
1
2.6. CUESTIONES Y PROBLEMAS. 61
Problema 45 Dada la expresi on regular (ab)

(ba)

+aa

, hallar:
1. El aut omata determinista minimal que acepta el lenguaje que describe esa ex-
presi on regular.
2. Una gram atica regular que genere dicho lenguaje.
Problema 46 Considera un tipo de datos real que consideres acorde con el tipo
de alg un lenguaje de programaci on. Halla una expresi on regular que describa las
palabras de este tipo de datos. Halla un aut omata que los reconzoca y una gram atica
que los genere.
Problema 47 Se considera el aut omata descrito por la informaci on siguiente A :=
(Q, , Q
0
, F, ), y
:= 0, 1,
Q := Q
0
, Q
1
, Q
2
, Q
3
, Q
4
, Q
5
,
F := Q
1
, Q
3
, Q
5
.
Y es dado por la tabla siguiente:
0 1
Q
0
N.D. N.D. Q
1
Q
1
Q
2
N.D. N.D.
Q
2
N.D. Q
3
N.D.
Q
3
Q
4
N.D. Q
1
Q
4
Q
5
N.D. N.D.
Q
5
N.D. N.D. Q
3
, Q
1
Se pide:
1. Dibujar el grafo de transici on del aut omata.
2. Decidir si 0101 es aceptado por al aut omata y describir la computaci on sobre
esta palabra.
3. Hallar un aut omata determinista ue acepte el mismo lenguaje.
4. Minimizar el aut omata determinista hallado.
5. Hallar una expresi on regular que describa el languaje aceptado por ese aut oma-
ta.
6. Hallar una gram atica que genere dicho lenguaje.
Problema 48 Hallar un aut omata que acepte las expresiones matematicas con su-
mas y restas y sin parentesis. A nadir a este una cinta donde escribir la traduccion
al espa nol acabando en punto. Ejemplo:
4 + 3 5 cuatro mas tres menos cinco.
62 CAP

ITULO 2. AUT

OMATAS FINITOS
Problema 49 Suponer que al aut omata anterior se le quisiera a nadir expresiones
con parentesis. Para hacer esto toma la expresion regular del automata anterior y
se a nade considera la siguiente expresion regular (

. Demostrar que el automata


no comprueba que todos los parentesis que se abren son cerrados.
Problema 50 Otro de los problemas de los aut omatas nitos es que no tienen en
cuenta eo orden entre los distintos elementos. Utilicemos una expresion regular
mencionada en el ejercicio anterior. Hallar el automata que acepte el lenguaje ge-
nerado por la siguiente expresion regular
(

alpha(

.
Demostrar que el automata no tiene en cuenta el orden de aparicion de las llaves y
los parentesis.
Problema 51 Este ejercicio demuestra el problema de traducci on para las estruc-
turas condicionales. Suponemos que EXPRESION es conocido y los bucles condicio-
nales est an dados por la siguiente expresi on regular:
((if EXPRESION then BUCLE) (else if EXPRESION then BUCLE )*) Hallar un
automata nito que acepte el lenguaje dado por la expresi on regular y discutir como
a nadir una cinta de traducci on.
Captulo 3
Gramaticas Libres de Contexto
y Automatas con Pila
3.1. Introduccion
El proceso de compilacion es el proceso que justica la presencia de un estudio
teorico de lenguajes y automatas como el que se desarrolla en esta asignatura. Sin
embargo, el objetivo de un curso como este no puede ser solamente, el dise no de
un compilador, ni siquiera el analisis de todos los procesos que intervienen en la
compilacion. Para culminar este proceso existe una asignatura dedicada a Compi-
ladores (la asignatura llamada Procesadores de Lenguajes) en el curso cuarto de
la titulacion dentro del plan de estudios vigente.
De otro modo, la perdida de la motivacion puede suponer la perdida del interes
(y del potencial atractivo) de una materia teorica y densa como la presente. En
compensacion, podemos recuperar el esquema basico de un clasico como los dos
vol umenes (que han inuido intensamente en el dise no del presente manuscrito)
como son [AU72] y [AU73]. Por tanto, dedicaremos una parte del curso al proceso
de parsing (Analisis Sintactico) sin mas pretensiones que las de dar al lector una
introduccion suciente al tema. En terminos bibliogracos, alcanzaremos lo esencial
del volumen I ([AU72]) dejando el resto de los temas de [AU73] para la asignatura
correspondiente.
Antes de comenzar se nalemos que los lenguajes de programacion modernos son esen-
cialmente lenguajes dados por gramaticas libres de contexto. El uso de gramaticas
en niveles mas elevados de la jerarqua de Chomsky hace nos adentremos en lo
indecidible algortmicamente:
En la Seccion 1.5 observamos que el Problema de Palabra para Gramaticas
Formales cualesquiera es indecidible, esto es, no puede existir ning un algoritmo
que lo resuelva.
Para gramaticas sensibles al contexto, el problema de decidir si el lenguaje que
genera es vaco o no tambien es un problema indecidible.
En cuanto al Problema de Palabra para gramaticas sensibles al contexto, el
63
64 CAP

ITULO 3. LIBRES DE CONTEXTO


problema es PSPACEcompleto para ciertas subclases, con lo que se hace
impracticable para su uso en compilacion.
De ah la restriccion a Gramaticas Libres de Contexto para los lenguajes de progra-
macion (con algunos aderezos de producciones sensibles al contexto controlables
por tratamientos semanticos. Veremos en este Captulo (vease la Subseccion 3.3.3)
que el problema de palabra para gramaticas libres de contexto es decidible. Esto
signica que es posible dise nar un algoritmo/programa que realice la tarea siguiente:
Problema de detecci on de errores para lenguajes dados por gramaticas
libres de contexto. Dado un lenguaje de programaci on L

y una gram atica


libre de contexto G que lo genera, y dada una palabra

(un chero) decidir si


es un programa v alido (i.e. una palabra aceptada) para ese lenguaje de programaci on.
Recordemos que una Gramatica Libre de Contexto (CFG) o de Tipo 2 es dada por
la siguiente denicion.
Denici on 66 (Gramaticas libres de contexto o de Tipo 2) Llamaremos gra-
m atica libre de contexto a toda gram atica G = (V, , q, P) tal que todas las produc-
ciones de P son del tipo siguiente:
A , donde A V y ( V )

.
Un lenguaje libre de contexto es un lenguaje generado por una gram atica libre de
contexto.
El sistema de transicion asociado a una gramatica libre de contexto es el mismo que
asociamos a una gramatica cualquiera. Usaremos el smbolo C
G
C

para indicar
que la conguracion C

es deducible de la conguracion C mediante computaciones


de G.
Esta sera la primera accion asociada a un compilador: resolver el problema de
palabra para un lenguaje de programacion jado a priori. En otras palabras, ser
capaz de decidir si un chero es un programa o devolver al programador un mensaje
de error.
El problema de palabra en general admite tambien como input la gramatica que
lo genera. Sin embargo, la situacion usual es que nuestro lenguaje de programacion
esta jado. Por tanto, el problema a resolver no tiene a la gramatica como input
sino, simplemente, la palabra. Esto es,
Problema de detecci on de errores para un lenguaje dado por una gramati-
ca libre de contexto. Fijado un lenguaje de programacion L decidir si una pala-
bra

(un chero) es un programa v alido (i.e. una palabra aceptada) para ese
lenguaje de programaci on.
En este caso no se necesita generar el programa que decida como parte de la resolu-
cion del problema. Basta con tener un unico programa que resuelve el problema de
palabra para cualquier palabra dada. El modelo de algoritmo natural que aparece
es el automata con pila que discutiremos en este Captulo.
3.2.

ARBOLES DE DERIVACI

ON DE UNA GRAM

ATICA 65
Un automata con pila (PDA) resuelve el problema de palabra para una gramatica
libre de contexto. En este Captulo dise namos solamente los aspectos relativos a la
equivalencia entre ambas concepciones: la gramatica como generador y los PDAs co-
mo reconocedores. Mostraremos la equivalencia entre ambas concepciones sin entrar
en detalles de la ecacia de ese dise no.
3.2.

Arboles de Derivacion de una Gramatica
Denici on 67 Llamamos formas sentenciales a todos los elementos de (V )

.
Llamaremos formas terminales a las formas sentenciales que s olo tienen smbolos
en el alfabeto de smbolos terminales, es decir, a los elementos de

.
Denici on 68 (

Arbol de Derivaci on) Sea G := (V, , Q


0
, P) una gram atica li-
bre de contexto, sea A V una variable. Diremos que un arbol T
A
:= (V, E) etique-
tado es un arbol de derivaci on asociado a G si verica las propiedades siguientes:
La raz del arbol es un smbolo no terminal (i.e. una variable).
Las etiquetas de los nodos del arbol son smbolos en V .
Cada nodo interior est a etiquetado con un smbolo en V (i.e. un smbolo no
terminal).
Cada hoja est a etiquetada con una variable, un smbolo terminal o
Si un nodo est a etiquetado con una variable X y sus descendientes (ledos de
izquierda a derecha) en el arbol son X
1
, . . . , X
k
entonces, hay una producci on
X X
1
X
k
en G.
Ejemplo 9 Hallar arboles de derivaci on para las gram aticas siguientes:
A BF, B EC, E a, C b, F c, de tal manera que la raz sea A y
las hojas esten etiquetadas con a, b, c en este orden.
A

B F

E C c

a b
(3.1)
Q
0
zABz, B CD, C c, D d, A a, de tal manera que la raz sea
Q
0
y las hojas esten etiquetadas (de izquierda a derecha) mediante z, a, c, d, z.
Q
0
aQ
0
bQ
0
[ bQ
0
aQ
0
[ .Escribe arboles de derivaci on cuyas hojas tengan
la lectura siguiente:
Una s ola hoja con .
66 CAP

ITULO 3. LIBRES DE CONTEXTO


Un arbol con varias hojas, tales que leyendo la palabra se obtenga abab.
Un arbol distinto, con varias hojas tales que leyendo la palabra se obtenga
abab.
Proposici on 69 Sea G := (V, , Q
0
, P) una gram atica libre de contexto, sea A V
una variable. Sea T
A
un arbol asociado a la gram atica con raz A. Sea (V )

la forma sentencial obtenida leyendo de izquierda a derecha los smbolos de las hojas
de T
A
. Entonces, A
G
. En particular, las formas sentenciales alcanzables desde
el smbolo inicial Q
0
est a representados por los arboles de derivaci on de raz Q
0
.
Demostracion. Obvio a partir de la denicion.
Corolario 70 Las palabras sobre el alfabeto est an en el lenguaje L(G) generado
por una gram atica G si y solamente si existe un arbol de derivaci on cuyas hojas
(ledas de izquierda a derecha) expresan la palabra .
Demostracion. Obvio.
3.2.1. Un algoritmo para la vacuidad.
Comenzaremos con un ejemplo de un algoritmo que sera reutilizado, por analoga,
en los demas algoritmos de esta Subseccion. Su objetivo consiste en mostrar que el
problema de decidir si es o no vaco el lenguaje generado por una gramatica libre de
contexto.
Teorema 71 (Vacuidad de un lenguaje libre de contexto) El problema de la
vacuidad de los lenguajes generados por gram aticas libres de contexto es decidible.
Es decir, existe un algoritmo que toma como input una gram atica libre de contexto
G y devuelve una respuesta armativa si L(G) ,= y negativa en caso contrario.
Demostracion. Denimos el algoritmo siguiente:
Input: Una gramatica libre de contexto G = (V, , Q
0
, P).
M :=
N := A V : (A a) P, a

while N ,= M do
M := N
N := A V : (A a) P, a (N )

N.
endwhile
if Q
0
N, then Ouput SI
else Output NO

Observese que este algoritmo tiene la propiedad de que los sucesivos conjuntos M
y N construidos en su recorrido son siempre subconjuntos del conjunto de smbolos
3.3. FORMAS NORMALES DE GRAM

ATICAS. 67
no terminales V que es un conjunto nito. Por tanto, es un algoritmo que acaba sus
calculos en todos los datos de entrada.
Veamos que este algoritmo realiza las tareas prescritas. Para ello, consideremos una
cadena de subconjuntos N
i
de V que reejan los sucesivos pasos por el ciclo while.
Escribamos N
0
= y denotemos por N
i
al conjunto obtenido en el iesimo paso
por el ciclo while, sin considerar la condicion de parada. Esto es,
N
i
:= A V : (A a) P, a (N
i1
)

N
i1
.
Esta claro que tenemos una cadena ascendente
N
0
N
1
N
2
N
n

Por construccion observamos, ademas, que si existe un paso i tal que N
i
= N
i+1
,
entonces, N
i
= N
m
para todo m i + 1.
Analicemos que propiedades han de vericar las variables en N
i
. Por induccion se
probara lo siguiente:
Una variable X V verica que X N
i
si y solamente si existe un arbol de
derivaci on de G de altura
1
i+1 que tiene X como raz y cuyas hojas est an etiquetadas
con smbolos en .
Una vez probada esta propiedad, es claro que se tiene:
Sea i tal que nuestro algoritmo detiene sus calculos tras i pasos por el ciclo
while. Sea N el conjunto de variables calculado en ese paso. Entonces, N = N
m
,
m i + 1.
Si Q
0
N, entonces, N = N
i+1
y existe un arbol de derivacion de la gramatica
de altura i + 2 cuyas hojas son todo smbolos en y cuya raz es Q
0
.
Sea

, la palabra descrita mediante la lectura (de izquierda a derecha)


de las hojas del arbol. Entonces, Q
0

G

, luego L(G) ,= .
Por otro lado, si L(G) ,= habra un arbol de derivacion de G cuya raz
es Q
0
y cuyas hojas tienen sus etiquetas en producen, leyendo de
izquierda a derecha, . Sea m la altura de tal arbol (m 1, obviamente) y,
por tanto, Q
0
N
m1
N
i+1
= N para cualquier m.
3.3. Formas Normales de Gramaticas.
Esta Seccion mostrara una serie de reducciones algortmicas (transformaciones de
gramaticas) hasta reducir una gramatica libre de contexto a una gramatica en Forma
Normal de Chomsky. Las diferentes subsecciones estan basadas en las progresivas
reducciones y simplicaciones.
1
Medimos altura por el n umero de nodos atravesados en el camino mas largo.
68 CAP

ITULO 3. LIBRES DE CONTEXTO


3.3.1. Eliminacion de Smbolos In utiles o Inaccesibles
Denici on 72 (Smbolos In utiles) Sea G := (V, , Q
0
, P) una gram atica libre
de contexto. Llamamos smbolos utiles de G a todos los smbolos (terminales o no)
X V tales que existen , (V )

de tal modo que:


Q
0

G
X, y X
G
.
Los smbolos in utiles son los que no son utiles.
Ejemplo 10 Consideremos la gram atica G := (Q
0
, A, B, a, b, Q
0
, P), donde las
producciones de P son dadas por:
P := Q
0
a [ A, A AB, B b.
Observese que A, B, b son smbolos in utiles en esta gram atica. La raz on es que el
lenguaje aceptado es a. Si, por el contrario, a nadieramos la producci on A a,
entonces, todos ellos seran smbolos utiles.
Denici on 73 Sea G := (V, , Q
0
, P) una gram atica libre de contexto.
Llamamos smbolos productivos (o fecundos) de G a todos los smbolos no
terminales X V tales que existe

tal que X
G
. Son improductivos
(o infecundos) a los que no satisfacen esta propiedad.
Llamamos smbolos accesibles de G a todos los smbolos (terminales o no)
X V tales que existen , (V )

de tal modo que:


Q
0

G
X.
Se llaman inaccesibles a los que no son accesibles.
Ejemplo 11 N otese que si X es un smbolo util, se han de producir dos propiedades.
De una parte, la propiedad Q
0

G
X que nos dice que X es accesible. De otra
parte, por estar en una gram atica libre de contexto, ha de existir

tal que
X
G
. Esto es necesario porque, al ser libre de contexto, todas las producciones
se basan en reemplazar una variables por formas sentenciales. Si la variable X no
alcanzara nunca una forma terminal en el sistema de transici on, entonces, X
tampoco alcanzara una forma terminal contradiciendo el hecho de ser X util. La
existencia de

tal que X
G
nos dice que X es un smbolo fecundo o
productivo. En el siguiente ejemplo:
P := Q
0
AB [ CD, A AQ
0
, B b, C Cc [ , D d.
El smbolo B es fecundo y accesible, pero es un smbolo in util.
Proposici on 74 Si G := (V, , Q
0
, P) es una gram atica libre de contexto, entonces
los smbolos utiles son productivos y accesibles. El recproco no es cierto, en general.
3.3. FORMAS NORMALES DE GRAM

ATICAS. 69
Demostracion. Es obvia la implicacion enunciada. En cuanto a ejemplos que mues-
tran que el recproco no es en general cierto, baste con ver las gramaticas expuestas
en los Ejemplos 10 y 11 anteriores.
Proposici on 75 Si G := (V, , Q
0
, P) es una gram atica libre de contexto, y libre
de smbolos infecundos, entonces todo smbolo es util si y solamente si es accesible.
Demostracion. En ausencia de smbolos infecundos accesibilidad es sin onimo de
utilidad. La prueba es la obvia.
Proposici on 76 [Eliminaci on de smbolos infecundos] Toda gram atica libre de
contexto es equivalente a una gram atica libre de contexto sin smbolos infecundos.
Adem as, dicha equivalencia puede hacerse de manera algortmica.
Demostracion. El algoritmo es esencialmente el propuesto en el Teorema 71 ante-
rior:
Input: Una gramatica libre de contexto G = (V, , Q
0
, P).
M :=
N := A V : (A a) P, a

while N ,= M do
M := N
N := A V : (A a) P, a (N )

N.
endwhile
Output

G := (V N, , Q
0
,

P), donde

P son las producciones de P que
involucran solamente smbolos en (V N)
Por la prueba del Teorema 71, sabemos que N es justamente el conjunto de variables
productivas y el algoritmo realiza la tarea pretendida.
Eliminaci on de Smbolos Inaccesibles.
Teorema 77 [Eliminaci on de Smbolos Inaccesibles] Toda gram atica libre de
contexto es equivalente a una gram atica libre de contexto sin smbolos inaccesibles.
Adem as, dicha equivalencia puede hacerse de manera algortmica.
Demostracion. El siguiente algoritmo elimina smbolos inaccesibles de una gramati-
ca libre de contexto. La demostracion de que es un algoritmo y de que realiza la tarea
prevista es analoga a la demostracion del Teorema 71 anterior. Notese que, de facto,
el algoritmo calcula los smbolos que s son accesibles.
Input: Una gramatica libre de contexto G = (V, , Q
0
, P).
70 CAP

ITULO 3. LIBRES DE CONTEXTO


M := Q
0

N := X V : A M, , (V )

, con A X en P.
while N ,= M do
M := N
N := X V : A M, , (V )

, con A X en P.
endwhile
Output: La gramatica

G = (

V ,

, Q
0
,

P), con

V := N V,

:= N ,

P := Las producciones de P que solo contienen los elementos de



V

.
Eliminaci on de Smbolos In utiles.
Teorema 78 [Eliminaci on de Smbolos In utiles] Toda gram atica libre de con-
texto es equivalente a una gram atica sin smbolos in utiles. Adem as, esta equivalencia
es calculable algortmicamente.
Demostracion. Utilizaremos un algoritmo que combina los dos algoritmos descritos
anteriormente y el enunciado de la Proposicion 75. Primero eliminamos los smbolos
infecundos y luego los inaccesibles.
Input: Una gramatica libre de contexto G = (V, , Q
0
, P).
Eliminar Smbolos Infecundos
M :=
N := A V : (A a) P, a

while N ,= M do
M := N
N := A V : (A a) P, a (N )

N.
endwhile
G
1
:= (V
1
, , Q
0
, P
1
), donde
V
1
:= V N,
P
1
:= Las producciones en P que no involucran smbolos fuera de V
1
.
3.3. FORMAS NORMALES DE GRAM

ATICAS. 71
Eliminar Smbolos Inaccesibles de G
1
M := Q
0

N := X V
1
: A M, , (V )

, con A X en P.
while N ,= M do
M := N
N := X V
1
: A M, , (V )

, con A X en P.
endwhile
Output: La gramatica

G = (V
1
, , Q
0
, P
1
), con
V
1
:= N V
1
, := N ,
P := Las producciones de P que solo contienen los elementos de V
1
.
3.3.2. Transformacion en Gramaticas Propias.
En nuestro camino hasta la Forma Normal de Chomsky, continuaremos con trans-
formaciones de las gramaticas libes de contexto hasta obtener gramaticas propias.
Eliminaci on de producciones.
Denici on 79 Sea G = (V, , Q
0
, P) una gram atica libre de contexto.
1. Llamaremos producciones en G a todas las producciones de la forma X ,
donde X V es un smbolo no terminal.
2. Diremos que la gram atica G es libre si verica una de las dos propiedades
siguientes:
O bien no posee producciones,
o bien la unica producci on es de la forma Q
0
y Q
0
no aparece
en el lado derecho de ninguna otra producci on de P (es decir, no existe
ninguna producci on de la forma X Q
0
, con , (V )

).
Ejemplo 12 Consideremos la gram atica cuyas producciones son:
Q
0
aQ
0
bQ
0
[ bQ
0
aQ
0
[ .
No es una gram atica libre.
Teorema 80 (Transformaci on a Gramatica libre) Toda gram atica libre de
contexto es equivalente a una gram atica libre. Adem as, dicha equivalencia es cal-
culable algortmicamente.
72 CAP

ITULO 3. LIBRES DE CONTEXTO


Demostracion. El algoritmo comienza con una tarea que repite esencialmente lo
hecho en algoritmos anteriores.
Hallar V

:= A V : A
G
.
A partir del calculo de V

procedemos de la forma siguiente:


1. Calculamos el nuevo sistema de producciones P del modo siguiente:
Consideremos todas las producciones de la forma siguiente:
A
0
B
1

1
B
k

k
,
donde
i
(V

, B
i
V

y no todos los
i
son iguales a .
Denamos
P := P A
0
X
1

1
X
k

k
: X
i
B
i
, .
Consideremos todas las producciones de la forma siguiente:
A B
1
B
k
,
donde B
i
V

. Denamos:
P := P (A X
1
X
k
: X
i
B
i
, A ) .
Suprimir todas las producciones.
2. Finalmente, si Q
0
V

sea V := V Q

0
, con Q

0
, V . Y a nadamos
P = P Q

0
Q
0
[ .
En otro caso, V = V .
El output sera la gramatica G := (V , , Q

0
, P) y satisface las propiedades pretendi-
das.
Eliminaci on de Producciones Simples
Denici on 81 (Producciones Simples o Unarias) Se llaman producciones sim-
ples (unarias) a las producciones de una gram atica libre de contexto de la forma
A B, donde A y B son smbolos no terminales.
Teorema 82 [Eliminaci on de Producciones Simples] Toda gram atica libre es
equivalente a una gram atica libre y sin producciones simples. Esta equivalencia
es calculable algortmicamente.
Demostracion. El algoritmo tiene dos partes. La primera parte sigue el mismo
esquema algortmico usado en resultados anteriores. La segunda parte se dedica a
eliminar todas las producciones simples.
3.3. FORMAS NORMALES DE GRAM

ATICAS. 73
Clausura Transitiva de smbolos no terminales. Se trata de calcular, para cada
A V , el conjunto siguiente:
V
A
:= B V : A B A.
El algoritmo obvio funciona del modo siguiente:
Input: Una gramatica libre de contexto G := (V, , Q
0
, P)
Para cada A V calcular
M
A
:=
N
A
:= A
while N
A
,= M do
M := N
A
N
A
:= C V : B C esta en P, y B N
A
N
A
od
Output: Para cada A V , N
A
.
Eliminar las producciones simples. Para cada variable B tal que existe una
produccion simple A B en P, procederemos somo sigue:
Hallar todos los Xs tales que B V
X
.
Para cada produccion B que no sea produccion simple, a nadir a P
la produccion X .
Eliminar toda produccion del tipo X B.
Notese que cada iteracion de la parte segunda del proceso a nade producciones no
simples y elimina al menos una produccion simple. Con ello se alcanza el objetivo
buscado.
Hacia las Gramaticas Propias.
Denici on 83 Diremos que una gram atica libre de contexto G := (Q, , Q
0
, F, )
es acclica (o libre de ciclos) si no existe ning un smbolo no terminal A V tal que
existe una computaci on no trivial (en el sistema de transici on asociado):
A B
1
B
k
= A.
Denici on 84 (Gramaticas Propias) Diremos que una gram atica libre de con-
texto G := (Q, , Q
0
, F, ) es propia si verica las siguientes propiedades:
G es acclica,
G es libre,
74 CAP

ITULO 3. LIBRES DE CONTEXTO


G es libre de smbolos in utiles.
Lema 85 [Interacci on entre los algoritmos expuestos] Se dan las siguientes propie-
dades:
1. Si G es una gram atica libre de contexto que es libre y est a libre de produc-
ciones simples, entonces G es acclica.
2. Sea G es una gram atica libre de contexto, libre. Sea

G la gram atica obtenida
despues de aplicar a G el algoritmo de eliminaci on de producciones simples
descrito en la demostraci on del Teorema 82. Entonces,

G sigue siendo libre.
3. Sea G es una gram atica libre de contexto, libre de producciones simples y
libre. Sea

G la gram atica obtenida despues de aplicar a G el algoritmo de
eliminaci on de smbolos in utiles descrito en la demostraci on del Teorema 78.
Entonces,

G sigue siendo libre de producciones simples y libre.
Demostracion.
1. Supongamos que la gramatica fuera libre y libre de producciones simples,
pero hubiera un estado que generara un ciclo. Es decir, supongamos que existe:
A
1

k
A,
con k 1. Entonces, puedo suponer que

k
:=
0
X
1

1

n1
X
n

n
,
donde
i

, X
i
V . En primer lugar, observese que, como estamos hablan-
do de gramaticas libres de contexto, las unicas producciones que se aplican son
de la forma B . Si alguno de los
i
fuera distinto de la palabra vaca , no
habra forma de borrarlos usando las producciones libre de contexto (para
quedarnos solamente con un smbolo no terminal como A). Por tanto,
i
=
para cada i, 0 i n. En conclusion, solo tenemos (como ultima accion):
B
k
= X
1
X
n
A.
Si, ademas, n 2, con una unica produccion libre de contexto, no podramos
eliminar nada mas que un smbolo no terminal. Con lo cual no podramos
obtener A. Por tanto, tenemos, en realidad, n 2. Tenemos dos casos n = 1 o
n = 2. Si n = 1 tendremos:
B
k
= X
1
A.
En el este caso debera existir la produccion simple X
1
A, pero hemos dicho
que nuestra gramatica es libre de producciones simples. Por tanto, el segundo
caso (n = 1) no puede darse. Nos queda un unico caso n = 2 y tendremos:
B
k
= X
1
X
2
A.
3.3. FORMAS NORMALES DE GRAM

ATICAS. 75
En este caso hay dos opciones simetricas, con lo que discutiremos solo una
de ellas: X
1
= A y X
2
es una produccion. Pero nuestra gramatica es
libre. Si hay una produccion X
2
es solo porque X
2
es el smbolo inicial
X
2
= Q
0
. Por tanto, tenemos una computacion:
A
1

k1
AQ
0
A,
Pero, para llegar a AQ
0
desde A tiene que ocurrir que Q
0
este en la parte
derecha de alguna produccion (lo cual es imposible por la propia dencion de
libre. Luego no puede haber ciclos.
2. Retomemos el algoritmo descrito en la prueba del Teorema 82. Una vez hemos
calculado V
A
para cada A, y tratamos las producciones unarias del tipo A B
del modo siguiente:
Hallar todos los Xs tales que B V
X
.
Para cada produccion B que no sea produccion simple, a nadir a P
la produccion X .
Eliminar la produccion A B.
Ahora bien, si G es una gramatica libre, y si Q
0
es el estado inicial, Q
0
no
puede estar en la derecha de ninguna produccion. En particular, no existen
producciones simples de la forma A Q
0
. Por tanto, toda produccion simple
A B de P verica que B ,= Q
0
. De otro lado, como G es libre, para
todo B ,= Q
0
, las producciones de la forma B verican que ,= .
Por tanto, ninguna de las producciones que a nadimos en este proceso es una
produccion. Y, por tanto,

G sigue siendo libre.
3. Basta con observar que el algoritmo de eliminacion de smbolos in utiles so-
lamente elimina smbolos y producciones que los involucran. Pero no a nade
producciones. Por ello, si no haba en G ninguna produccion simple, tampoco
la habra en

G. Si G era libre, tambien lo sera

G puesto que no a nadimos
producciones.
Teorema 86 Toda gram atica libre de contexto es equivalente a una gram atica pro-
pia. Dicha equivalencia es calculable algortmicamente.
Demostracion. Basta con unir los algoritmos antes expuestos en el orden adecuado
como indica el Lema 85 anterior. El proceso sera el siguiente:
Input: Una gramatica G libre de contexto.
Hallar G
1
la gramatica libre obtenida aplicando a G, mediante el algoritmo
del Teorema 80.
Hallar G
2
la gramatica obtenida de aplicar a G
1
el algoritmo del Teorema 82.
76 CAP

ITULO 3. LIBRES DE CONTEXTO


Hallar G
3
la gramatica obtenida de aplicar a G
2
el algoritmo del Teorema 78.
Output: G
3
El algoritmo anterior realiza la tarea prescrita. La gramatica G
1
es claramente
libre como consecuencia del Teorema 80. Como consecuencia del apartado 2 del
Lema 85, como la gramatica G
1
es libre, tambien es libre la gramatica G
2
. De
otro lado, el Teorema 82 nos garantiza que G
2
es libre de producciones simples.
Como consecuencia del apartado 3 del Lema 85, la gramatica G
3
sigue siendo una
gramatica libre y libre de producciones simples. Asimismo, el Teorema 78 nos
garantiza que G
3
es libre de smbolos in utiles.
Finalmente, el apartado 1 del Lema 85, nos garantiza que G
3
es acclica. Por tanto,
verica todas las propiedades para ser una gramatica propia.
3.3.3. El Problema de Palabra para Gramaticas Libres de Contexto
es Decidible.
En la Seccion 1.5 hemos descrito algunos resultados relativos a la indecidibilidad
del Problema de palabra de sistemas de semiThue (o gramaticas de Tipo 0). En
esta Subseccion mostraremos que este problema es decidible para gramaticas libres
de contexto. Es decir, se trata de mostrar un algoritmo que resuelve el problema
siguiente:
Problema de Palabra para Gramaticas libres de Contexto. Dada una
gramatica libre de contexto G = (V, , Q
0
, P) y dada una palabra

, deci-
dir si L(G).
Lema 87 Sea G = (V, , Q
0
, P) una gram atica libre de contexto y libre. Sea
L(G) una palabra aceptada por la gram atica y sea:
Q
0

1

2

n
= ,
una computaci on aceptadora de , donde
i
(V )

son formas sentenciales de


la gram atica. Entonces, la longitud de cada una de estas formas sentenciales verica:
[
i
[ [[, i.
Demostracion. De hecho, basta con observar que si tenemos dos conguraciones
(i.e. dos formas sentenciales)
G

y si la gramatica es libre, entonces o bien


= (en cuyo caso c = Q
0
forzosamente) o bien [c[ [[ (dado que no suprimimos
ninguna variable, al reemplazarla nos sale, al menos, un smbolo y la longitud no
puede disminuir).
Teorema 88 El problema de palabra es decidible para gram aticas libres de contexto.
3.3. FORMAS NORMALES DE GRAM

ATICAS. 77
Demostracion. Basta con usar el Lema anterior. El procedimiento es el siguien-
te: En primer lugar, transformamos nuestra gramatica original en una gramatica
libre. posteriormente, dado , construiremos un grafo G

:= (N

, E

) con las
reglas siguientes:
Los vertices del grafo N

son todas las palabras de (V )

de longitud menor
o igual que la longitud de .
Las aristas del grafo E

son los pares (c, c

) N

tales que c
G
c

.
A partir de del grafo G

, calculamos la clausura transitiva de Q


0
: CT
G
(Q
0
). Enton-
ces, usando el Lema anterior, esta en L(G) si y solamente si esta en la clausura
transitiva de Q
0
.
Nota 89 Decidibilidad no signica eciencia. Es decir, el hecho de la existencia
de un algoritmo para el problema de palabra no signica de modo inmediata que
se pueda usar ese algoritmo para la detecci on de errores. De hecho, debe haber un
preprocessing para el c alculo del aut omata (con pila, como veremos) que decide el
problema de palabra y luego s olo debe usarse el aut omata para cada palabra concreta.
En otro caso estaramos consumiendo una enormidad de tiempo de c alculo para cada
vericaci on de correctitud de una palabra.
3.3.4. Transformacion a Formal Normal de Chomsky.
Denici on 90 (Forma Normal de Chomsky) Una gram atica libre de contexto
G := (Q, , Q
0
, F, ) se dice que est a en Forma Normal de Chomsky si es libre y
las unicas producciones (exceptuando, eventualmente, la unica producci on Q
0

), son exclusivamente de uno de los dos tipos siguientes.
A b, con A V y b ,
A CD, con A, C, D V .
Teorema 91 (Transformaci on a Forma Normal de Chomsky) Toda gram ati-
ca libre de contexto es equivalente a una gram atica libre de contexto en Forma Nor-
mal de Chomsky. Adem as, esta equivalencia es algortmicamente computable.
Demostracion. Bastara con que demos un algoritmo que transforma gramaticas
propias en gramaticas en forma normal de Chomsky. As, supongamos que tenemos
una gramatica G = (V, , Q
0
, P) propia. Procederemos del modo siguiente:
Denamos un par de clases

V y

P de smbolos no terminales y producciones, con-
forme a las reglas siguientes:
Inicializar con

V := V ,

P = .
Si Q
0
esta en P, a nadir Q
0
a

P sin modicar

V .
78 CAP

ITULO 3. LIBRES DE CONTEXTO


Si en P hay una produccion del tipo A a entonces, a nadir A a a

P
sin modicar

V .
Si en P hay una produccion del tipo A CD, con C, D V , esta en P,
entonces, a nadir A CD a

P sin modicar

V .
Finalmente, Para cada produccion en P del tipo
A X
1
X
k
,
con X
i
V que no sea de ninguno de los tres tipos anteriores
2
realizar las
tareas siguientes:
Para cada i tal que X
i
V , no modicar

V
Para cada i tal que X
i
, a nadir a

V una nueva variable

X
i
, distinta
a todas las que ya estuvieran en

V . A nadir a

P la produccion

X
i
X
i
en este caso. (Observese que, en este caso, aparece una produccion del Tipo
1).
A nadir

P la produccion A X

1
X

k
, donde X

i
viene dada por:
X

i
:=
_
X
i
, si X
i
V

X
i
, en otro caso
Si k = 2, no modicar.
Si k > 2, reemplazar en

P, la produccion A X

1
X

k
por una cadena
de producciones:
A X

1
Y
2
, Y
2
X

2
Y
3
, , Y
k1
X

k1
X

k
,
a nadiendo a

V las variables Y
2
, . . . , Y
k1
.
Output: (

V , , Q
0
,

P).
Es claro que el algoritmo descrito verica las propiedades deseadas.
Nota 92 Observese que los arboles de derivaci on asociados a gram aticas en Forma
Normal de Chomsky son arboles binarios cuyas hojas vienen de nodos con salida
unaria.
2
Observese que k 2 puesto que no hay producciones simples. Si k = 2, al no ser de ninguno de
los tipos anteriores, son o bien dos smbolos en o bien uno es un smbolos en y el otro esta en
V . En cualquier caso se aplica el mismo metodo.
3.4. AUT

OMATAS CON PILA. 79


3.3.5. Forma Normal de Greibach
Es otra normalizacion de las gramaticas libres de contexto que hace referencia al
trabajo de Sheila A. Greibach en Teora de Automatas.
Denici on 93 Una gram atica G := (V, , Q
0
, P) se dice en Forma Normal de Grei-
bach si es libre y las unicas producciones (exceptuando, eventualmente, la unica
producci on Q
0
) pertenecen al tipo siguiente:
A X,
donde A V es una variable, es un smbolo terminal y X es una lista
(posiblemente vaca) de smbolos no terminales (variables en V ) entre los cuales no
est a el smbolo inicial Q
0
.
Obviamente toda gramatica libre de contexto es equivalente a una gramatica en
Formal Normal de Greibach.
3.4. Automatas con Pila.
3.4.1. Nocion de Automatas con Pila.
Antes de pasar a denir un automata con pila (o pushdown) recordemos (super-
cialmente) la estructura de datos pila (stack).
Stacks.
Podemos identicar las pilas con ciertos lenguajes y ciertas funciones sobre un alfa-
beto del modo siguiente. Comenzaremos a nadiendo un nuevo smbolo Z
0
que no
esta en . Las pilas (stacks) son elementos del lenguaje: Z
0

. El smbolo Z
0
se
identicara con el signicado Fondo de la Pila.
Tendremos unas ciertas funciones sobre pilas:
empty: Denimos la aplicacion
empty : Z
0

0, 1,
dada mediante:
empty(Z
0
) :=
_
1, si =
0, en otro caso
top: Denimos la aplicacion
top : Z
0

,
mediante la regla siguiente:
Dada una pila Z
0
Z
0

(con = w
1
w
n

),
top(Z
0
w) :=
_
w
n
, si = w
1
w
n

, ,=
, en caso contrario
80 CAP

ITULO 3. LIBRES DE CONTEXTO


push: Apilar (empujar) una pila encima de otra. Denimos la aplicacion
push : Z
0

Z
0

,
mediante la regla siguiente:
Dada una pila Z
0
Z
0

(con = w
1
w
n

), y una palabra a

,
dada mediante: a := a
1
a
r
, denimos
push(Z
0
, a) := Z
0
w
1
w
n
a
1
a
r
Z
0

.
pop (Pull Out the toP): Denimos la aplicacion
pop : Z
0

Z
0

,
mediante la regla siguiente:
Dada una pila Z
0
Z
0

, denimos pop(Z
0
) como el resultado de eliminar
top(Z
0
), esto es
pop(Z
0
) :=
_
Z
0
w
1
w
n1
Z
0

, si = w
1
w
n

, ,=
Z
0
, en caso contrario
Nota 94 Una de las propiedades b asicas de las operaciones es, obviamente, la si-
guiente:
push(pop(Z
0
), top(Z
0
)) = Z
0
.
Denici on 95 (NonDeterministic Pushdown Automata) Un aut omata con
pila (o pushdown aut omata) indeterminista es una lista A := (Q, , , Q
0
, F, Z
0
, )
donde:
Q es un conjunto nito cuyos elementos se llaman estados y que suele deno-
minarse espacio de estados,
es un conjunto nito (alfabeto),
es un conjunto nito llamado alfabeto de la pila.
Q
0
es un elemento de Q que se denomina estado inicial,
F es un subconjunto de Q, cuyos elementos se denominan estados nales acep-
tadores,
Z
0
es un smbolo que no est a en el alfabeto y que se denomina fondo de la
pila.
es una correspondencia:
: Q( ) ( ) Q

,
3.4. AUT

OMATAS CON PILA. 81


que se denomina funci on de transici on y que ha de vericar la propiedad si-
guiente
3
para cada lista (q, x, A) Q( ) ( ):
((q, ) Q

: (q, x, A) = (q, )) < .


Es decir, s olo un n umero nito de elementos de Q

estar an relacionados
con cada elemento (q, x, A) mediante la funci on de transici on.
Nota 96 N otese que hemos supuesto que la funci on de transici on tiene su rango
(el conjunto hacia el que va a parar) en Q

. Esta condici on nos dir a (m as


adelante) que no podemos escribir en la pila el smbolo de fondo de pila nada m as
que cuando se escriba en la conguraci on inicial. Podremos, sin embargo, leerlo. No
estar a, en ning un caso, en medio de la pila.
El determinismo en automatas con pila diere del caso de aut omatas nitos. No
vamos a exigir que sea aplicacion sino algo mas delicado.
Denici on 97 (Aut omata con Pila Determinista) Un aut omata con pila in-
determinista A := (Q, , , Q
0
, Z
0
, ) se denomina determinista si verica las si-
guientes dos propiedades:
La imagen de cualquier lectura contiene a lo sumo 1 elemento. Es decir, para
cualesquiera (q, x, A) Q( )( Z
0
), el conjunto de los elementos
relacionados con el a traves de tiene, a lo sumo, 1 elemento:
((p, ) Q

: (q, x, A) = (p, )) 1.
Si dados q Q y A , existieran (p, ) Q

tales que (q, , A) = (q, ),


entonces, ninguno de los elementos de Q( Z
0
) tiene imagen por .
Es decir, si
((p, ) Q

: (q, , A) = (p, )) = 1,
entonces

_
_
x
(p, ) Q

: (q, x, A) = (p, )
_
= 0.
Nota 98 No es cierto, en el caso de aut omatas con pila, que todo aut omata con
pila indeterminista sea equivalente a un aut omata con pila determinista. As, el
siguiente lenguaje es aceptado por un aut omata con pila indeterminista, pero no
puede ser aceptado por un aut omata con pila determinista:
L := a
n
b
m
c
n
: n, m 1
_
a
n
b
m
c
m
: n, m 1 a, b, c

.
3
Recuerdese que si X es un conjunto nito, denotamos por (X) su cardinal (i.e. el n umero de
sus elementos).
82 CAP

ITULO 3. LIBRES DE CONTEXTO


3.4.2. Sistema de Transicion Asociado a un Automata con Pila.
Sea dado un automata A := (Q, V, , Q
0
, F, Z
0
, ). El espacio de conguraciones es
el producto o
A
:= Q

Z
0
V

. Dada una palabra

, la conguracion
inicial vendra dada por:
I
A
() := (Q
0
, , Z
0
),
esto es, escribimos en la cinta de trabajo , escribimos el estado inicial en la unidad
de control y escribimos Z
0
en la pila como tareas de inicializacion.
Modelo graco del sistema de transici on.
Gracamente podemos dibujar el automata con pila mediante los siguientes ele-
mentos. El alfabeto de la cinta sera = 0, 1. El alfabeto de la pila sera =
A, B, C. El espacio de estados seran los primeros cien n umeros naturales, i.e.
Q = 0, 1, 2, 3, . . . , 98, 99, 100. Una representacion graca de la conguracion sera:
[ 0 [ 1 [ 1 [

[ 23 [
.
.
.
B
C
Z
0
En este dibujo, el estado es 23 y la unidad de control lee el primer smbolo de la
cinta de entrada 0 y tambien lee el smbolo B en la pila. Supondremos que, en la
pila, lee siempre el smbolo que se encuentra mas arriba en la pila (el top), lo que
supone que, en el dibujo, por encima de B no hay nada en la pila.
Transiciones: Formalismo.
Las transiciones son de los tipos siguientes:
Transiciones Read/Push. Son transiciones entre dos conguraciones:
(q, , Z
0
Z)
A
(q

, Z
0
Z

),
donde q Q y
:= w
1
w
r
, Z
0
Z = Z
0
Z
1
Z
n
.
Realizamos las siguientes operaciones:
Read Leemos la informacion (Q, w
1
, Z
n
) (es decir, el estado, el primer
smbolo de la palabra y el top de la pila). Supondremos w
1
,= .
Transition Aplicamos la funcion de transicion obteniendo (Q, w
1
, Z
n
) =
(Q

, ), con

, ,= .
Push and Move Entonces,
3.4. AUT

OMATAS CON PILA. 83


Q

= Q (cambia el estado de la transicion).


= w
2
w
r
(borramos un smbolo de la palabra a analizar (mo-
ve).
Z

:= Z
0
Z
1
Z
n1
, es decir, Z
0
Z

:= push(pop(Z
0
Z), ).
Transiciones Read/Pop: Son transiciones entre dos conguraciones:
(Q, , Z
0
Z)
A
(Q

, Z
0
Z

),
donde q Q y
:= w
1
w
r
, Z
0
z = Z
0
z
1
z
n
.
Realizamos las siguientes operaciones:
Read Leemos la informacion (q, w
1
, z
n
) (es decir, el estado, el primer
smbolo de la palabra y el top de la pila). Supondremos w
1
,= .
Transition Aplicamos la funcion de transicion obteniendo (q, w
1
, z
n
) =
(q

, ) (esta es la caracterizacion de las acciones Read/Pop). Observese


que, en este caso, se ha obtenido como smbolo de la pila, esto indica
que debemos hacer pop sin hacer push.
Pop and Move Entonces,
q

= q (cambia el estado de la transicion).


= w
2
w
r
(borramos un smbolo de la palabra a analizar (mo-
ve).
Z
0
z

:= Z
0
z
1
z
n1
:= pop(Z
0
z) = push(pop(Z
0
z), ).
Transiciones Lambda/Push. Son transiciones entre dos conguraciones:
(q, , Z
0
z)
A
(q

, Z
0
z

),
donde q Q y
:= w
1
w
r
, Z
0
z = Z
0
z
1
z
n
.
Realizamos las siguientes operaciones:
Read Lambda En este caso, no se lee la cinta a un que s se lee la pila.
Leeremos (q, , z
n
) (es decir, el estado, la palabra vaca y el top de la pila).
Transition Aplicamos la funcion de transicion obteniendo (q, , z
n
) =
(q

, ), con

, ,= .
Push Entonces,
q

= q (cambia el estado de la transicion).


= (No borramos un smbolo de la palabra a analizar (make


no move)).
Z
0
z

:= Z
0
z
1
z
n1
:= push(pop(z), ).
84 CAP

ITULO 3. LIBRES DE CONTEXTO


Transiciones Lambda/Pop: Son transiciones entre dos conguraciones:
(q, , Z
0
z)
A
(q

, Z
0
z

),
donde q Q y
:= w
1
w
r
, Z
0
z = Z
0
z
1
z
n
, con z
n
,= Z
0
.
Realizamos las siguientes operaciones:
Read Lambda De nuevo, no se lee la cinta aunque s se lee la pila. Ten-
dremos (q, , z
n
) (es decir, el estado, la palabra vaca y el top de la pila).
Transition Aplicamos la funcion de transicion obteniendo (q, , z
n
) =
(q

, ). Observese que, en este caso, se ha obtenido como smbolo de la


pila, esto indica que debemos hacer pop sin hacer push.
Pop and Move Entonces,
q

= q (cambia el estado de la transicion).


= (No borramos un smbolo de la palabra a analizar (make


no move)).
Z
0
z

:= Z
0
z
1
z
n1
:= pop(Z
0
z) = push(pop(Z
0
z), ).
Nota 99 Es importante se nalar que la diferencia entre instrucciones /Push y
/Pop es articial, esto es, las incluimos por necesidades did acticas solamente.
N otese que
pop(z) = push(pop(z), )
y
push(z) = push(pop(z), ),
con

, no tienen diferencias sem anticas signicativas porque, obviamente,

. Las distinguimos para que el lector pueda ver la operaci on borrar el ultimo
dgito de la pila como una operaci on distinguida.
Nota 100 Los aut omatas nitos del Captulo anterior se pueden releer como aut oma-
tas con pila del modo siguiente: Suponemos que la funci on de transici on verica
que
(q, x, z) = (q

, ), (q, x, z) Q( )

.
En este caso, todas las instrucciones pasan por hacer push(pop(Z
0
), ) que no cambia
el contenido de la pila desde la conguraci on inicial.
Proposici on 101 Si A es un aut omata con pila determinista, su sistema de transi-
ci on (S
A
,
A
) es determinista. Es decir, dada una conguraci on c S
A
, existir a a
lo sumo una unica conguraci on c

S
A
tal que c
A
c

.
Demostracion. Siguiendo las dos hipotesis de la Denicion de Automata De-
terminista: Dada una conguracion, uno pude hacer una transicion Read/... o
una Lambda/.... Si cabe la posibilidad de hacer una transicion Lambda/..., no
habra ninguna transicion que permita hacer lectura (por la segunda de las con-
diciones impuestas). Si, por el contrario, no hay ninguna transicion Lambda/...,
entonces es forzoso hacer una transicion de lectura y esta es, a lo sumo, unica.
3.4. AUT

OMATAS CON PILA. 85


Nota 102 Esta propiedad nos garantiza que la ejecuci on de un aut omata con pila
determinista es posible dado que a cada conguraci on le sigue o bien una congura-
ci on siguiente o bien una salida por no tener ninguna opci on de continuar.
Codicaci on del Aut omata con Pila.
La introduccion que hemos hecho de la nocion de Automata con Pila se basa en varios
principios basicos. El primero es que los Automatas con Pila son expresables sobre
un alfabeto nito, del mismo modo que lo fueron los automatas. Una vez visto que
expresable sobre un alfabeto nito y visto el sistema de transicion podemos admitir
(espero) que se trata de un programa que es ejecutable en alg un tipo de interprete
que sea capaz de seguir las instrucciones asociadas a la transicion. Es, obviamente,
simple dise nar un programa (en Java, C++, C o cualquier lenguaje) asociado a
un automata (con la salvedad de los problemas de determinismo/indeterminismo:
no tiene sentido programar automatas no deterministas porque su sistema de
transicion no es determinista).
Sin embargo, podemos utilizar diversas representaciones del automata. La mas sim-
ple es la de tabla. Para ello, podemos usar dos entradas. De una parte, el producto
cartesiano E := Q( ) ( Z
0
) que sera el conjunto de las entradas de
la funcion de transicion. De otro lado tenemos un conjunto innito de las salidas
O := Q

, pero nuestra hipotesis nos dice que solo un n umero nito de elementos
de Q

van a entrar en la relacion. As tendremos una tabla como la siguiente:


Ejemplo 13 El PDA viene dado por:
Q := Q
0
, q
1
, r, s,
:= 0, 1,
:= A,
Estado Inicial Q
0
.
Smbolo de fondo de pila Z
0
.
F := r.
Tabla de transici on:
E O
(Q
0
, 0, Z
0
) (Q
0
, A)
(Q
0
, 0, A) (Q
0
, AA)
(Q
0
, 1, A) (q
1
, )
(q
1
, 1, A) (q
1
, )
(q
1
, , Z
0
) (r, )
(q
1
, , A) (s, )
(q
1
, 1, Z
0
) (s, )
86 CAP

ITULO 3. LIBRES DE CONTEXTO


Tomemos como entrada la palabra 0
3
1
3

.
Inicializamos
I := (Q
0
, 000111, Z
0
)
Ahora las sucesivas computaciones seran dadas por la secuencia siguiente:
Read/Push I
A
c
1
= (Q
0
, 00111, Z
0
A)
Read/Push c
1

A
c
2
= (Q
0
, 0111, Z
0
AA)
Read/Push c
2

A
c
3
= (Q
0
, 111, Z
0
AAA)
Read/Pop c
3

A
c
4
= (q
1
, 11, Z
0
AA)
Read/Pop c
4

A
c
5
= (q
1
, 1, Z
0
A)
Read/Pop c
5

A
c
6
= (q
1
, , Z
0
)
Lambda/Pop c
6

A
c
6
= (r, , Z
0
)
Si, por el contrario, escojo la palabra 0
3
1
2

se produce el efecto siguiente:


Inicializamos
I := (Q
0
, 00011, Z
0
)
Read/Push I
A
c
1
= (Q
0
, 0011, Z
0
A)
Read/Push c
1

A
c
2
= (Q
0
, 011, Z
0
AA)
Read/Push c
2

A
c
3
= (Q
0
, 11, Z
0
AAA)
Read/Pop c
3

A
c
4
= (q
1
, 1, Z
0
AA)
Lambda/Pop c
4

A
c
5
= (q
1
, , Z
0
A)
Lambda/Pop c
5

A
c
6
= (s, , Z
0
)
Finalmente, escojo la palabra 0
2
1
3

se produce el efecto siguiente:


Inicializamos
I := (Q
0
, 00111, Z
0
)
Read/Push I
A
c
1
= (Q
0
, 0111, Z
0
A)
Read/Push c
1

A
c
2
= (Q
0
, 111, Z
0
AA)
Read/Pop c
2

A
c
3
= (q
1
, 11, Z
0
A)
Read/Pop c
3

A
c
4
= (q
1
, 1, Z
0
)
Lambda/Pop c
4

A
c
5
= (s, , Z
0
)
Observese que:
Si tengo mas ceros que unos, llegare a leer (q
1
, , A) con lo que acabare en el
estado s
3.4. AUT

OMATAS CON PILA. 87


Si tengo mas unos que ceros, llegare a leer (Q
0
, 1, Z
0
) con lo que acabare en s.
La unica forma de llegar a r sera tener el mismo n umero de ceros que de unos.
Mas a un, las unicas palabras que llegan al estado r son las dadas por
L := 0
n
1
n
: n N.
3.4.3. Lenguaje Aceptado por un Automata con Pila.
Hay dos maneras de interpretar el lenguaje aceptado por un automata con pila: por
estado nal aceptador y por pila y cinta vacas. Sea A := (Q, , , Q
0
, Z
0
, F) un
automata con pila y sea o
A
el sistema de transicion asociado. Escribiremos c
A
c

cuando la conguracion c

es alcanzable desde c en el sistema de transicion o


A
.
Denici on 103 (Lenguaje aceptado mediante estado nal aceptador)
Sea A := (Q, , , Q
0
, Z
0
, F, ) un aut omata con pila y sea o
A
el sistema de transi-
ci on asociado. Para cada palabra

, denimos la conguraci on inicial en a


la conguraci on:
I
A
() := (Q
0
, , Z
0
) o
A
.
Llamaremos lenguaje aceptado (mediante estado nal nal aceptador) por el aut oma-
ta A (y lo denotaremos por L(A)) al conjunto siguiente:
L(A) :=

: I
A
()
A
(f, , z) o
A
, f F.
Este concepto nos lleva a un modelo de programa en el que la condicion de parada
viene dada por los estados nales aceptadores y por tener la cinta vaca. Es decir,
un programa con la estructura siguiente:
Input:

Initialize: I := (Q
0
, , Z
0
).
while I , F Z
0

do
Hallar c

S
A
tal que I
A
c

Com.: Realiza un paso en el sistema de transicion.


I := c

od
Output: ACEPTAR
end
Denici on 104 (Lenguaje aceptado mediante pila y cinta vacas) Sea A :=
(Q, , , Q
0
, Z
0
, F) un aut omata con pila y sea o
A
el sistema de transici on asociado.
Llamaremos lenguaje aceptado (mediante pila y cinta vacas) por el aut omata A (y
lo denotaremos por L

(A)) al conjunto siguiente:


L(A) :=

: I
A
()
A
(f, , Z
0
) o
A
, f Q Q
0

4
.
4
Si admitimos Q0 entonces, todo lenguaje aceptado por pila vaca debera contener la palabra
vaca.
88 CAP

ITULO 3. LIBRES DE CONTEXTO


La diferencia entre aceptar por pila vaca o por estado nal es que en el caso de
aceptar por estado nal, la pila puede estar o no vaca mientras que en el caso de
aceptacion por pila vaca, la pila queda vaca, pero no nos preocupamos de cual es
el estado alcanzado.
En este segundo caso el programa tendra la pinta siguiente:
Input:

Initialize: I := (Q
0
, , Z
0
).
while I , Q Z
0
do
Hallar c

S
A
tal que I
A
c

Com.: Realiza un paso en el sistema de transicion.


I := c

od
Output: ACEPTAR
end
Nota 105 N otese que las palabras no aceptadas (i.e. Output: RECHAZAR) no se
han incluido en una salida del bucle sino que se admite que puedan continuar inde-
nidamente dentro del bucle. Trataremos de claricar el signicado de este proceso.
N otese tambien que los programas anteriores no tienen el sentido usual cuando
el aut omata es indeterminista. Lo cual es, parcialmente, causa de este formalismo
admitiendo bucles innitos.
La siguiente Proposicion muestra la equivalencia entre ambas formas de aceptacion,
aunque sera mas comodo utilizar el caso de pila vaca.
Proposici on 106 Un lenguaje es aceptado por un aut omata con pila mediante pila
y cinta vacas si y solamente si es aceptado por un aut omata con pila mediante
estado nal aceptador.
Demostracion. Mostraremos un mecanismo de paso, construyendo para cada len-
guaje L(A) aceptado por un automata con pila A mediante estado nal aceptador
un automata con pila

A que acepta el mismo lenguaje mediante pila y cintas vacas
y recprocamente. Esto es, L(A) = L

(

A).
Dado un automata con pila A := (Q, , , Q
0
, Z
0
, F, ) que acepta el lenguaje
L(A) mediante estado nal aceptador, construyamos el nuevo aut omata que
aceptara el mismo lenguaje mediante pila vaca

A := (

Q,

,

,

Q
0
,

Z
0
,

F,

) del
modo siguiente:
Sea p
0
, p
f
, Q dos nuevos estados y denamos

Q := Q p
0
, p
f
.


:= ,

Q
0
:= p
0
,

Z
0
:= Z
0
.
La idea clave consiste en introducir un nuevo smbolo en el alfabeto de
la pila X
0
que protegera el smbolo de fondo de la pila. As, elegiremos
X
0
, y

:= X
0
.
3.4. AUT

OMATAS CON PILA. 89


F := F, dejamos el mismo conjunto de estados nales aceptadores
5
.
Denamos

:

Q
_

Z
0

,
mediante:


(p
0
, w, Z
0
) = (Q
0
, Z
0
X
0
). Es decir, inicializamos protegiendo Z
0
con una variable X
0
. La transformacion sera:
I
A
()
A
(Q
0
, , Z
0
X
0
).
Mientras vivamos en el viejo automata no cambiamos la funcion
de transicion, es decir:

[
Q({})
= ,
Aqui nos garantizamos que la variable protectora X
0
no sera nunca
a nadida despues de haberla usado por vez primera.
Para una transicion

(q, w, X
0
) hacemos lo que hubiera hecho el viejo
automata si estuviera leyendo la pila vaca. As, si (q, w, Z
0
) = (p, z)
y z ,= haremos:

(q, w, X
0
) := (q, w, Z
0
) = (p, z).
Varios elementos importantes a describir aqu:
Por nuestra denicion de la funcion pop, Z
0
no puede borrarse,
por eso, si la segunda coordenada de (q, w, Z
0
) = (q, z) es z = ,
entonces deniremos:

(q, w, X
0
) := (p, X
0
).
La idea de esta transformacion es que, durante los calculos del
viejo automata, pudiera ser que, en una etapa intermedia, se
vaciase la pila sin haber acabado con la palabra. En ese caso,
seguiramos apilando informacion que podra ser util en el resto
de la computacion.
Si q F, denimos

(q, , z) := (p
f
, ), para z , z ,= Z
0
, X
0
.
Si q F, denimos

(q, , X
0
) := (p
f
, X
0
).
Finalmente, denimos para cada z ,= Z
0
,

(p
f
, , z) = (p
f
, ).
Para alcanzar el estado p
f
, debemos alcanzar un estado nal aceptador de F.
Ademas, las conguraciones de

A tienen la forma siguiente para q ,= p
0
, p
f
:
(q, , Z
0
X
0
Z), con

, Z

,
y estan identicadas con las conguraciones de A dadas mediante:
(q, , Z
0
Z), con

, Z

,
5
Aunque bien podramos haber a nadido p
f
a F y tendramos el todo.
90 CAP

ITULO 3. LIBRES DE CONTEXTO


Las demas conguraciones son o bien la conguracion inicial (Q
0
, , Z
0
) o
conguraciones cuyo estado es p
f
. Para una palabra

, tendremos:
I
A
()
A
(q, , Z
0
Z).
Si q F, el automata

A habra calculado tambien:
I
A
()
A
(q, , Z
0
X
0
Z).
Y, en la siguiente fase, procedera a vaciar la pila, usando

(q, , X
0
) :=
(p
f
, X
0
) y

(p
f
, , z) = (p
f
, ), para todo z ,= Z
0
. Esto nos da L(A) L

(

A).
De otro lado, dada

si L

(A), entonces, habremos realizado una


computacion que produce el efecto siguiente:
I
A
()
A
(p
f
, , Z
0
).
Ahora bien, p
f
solo se alcanza tras una conguracion nal aceptadora de A,
por lo que deberamos haber calculado:
I
A
()
A
(q,

, Z
0
X
0
Z)
A
(p
f
, , Z
0
),
con q F en alg un momento intermedio. Entonces, la accion del aut omata

A
nos permite garantizar que se tiene:
I
A
()
A
(q,

, Z
0
X
0
Z)
A
(q,

, Z
0
X
0
)
A
(p
f
, , Z
0
),
Si

,= , las transiciones asociadas al borrado de la pila (

(q, , ) := (p
f
, )

(q, , X
0
) := (p
f
, X
0
) y

(p
f
, , z) = (p
f
, Z
0
)) no nos permiten borrar conte-
nido en la cinta. Por tanto, la unica conguracion nal alcanzable sera:
I
A
()
A
(q,

, Z
0
X
0
Z)
A
(q,

, Z
0
X
0
)
A
(p
f
,

, Z
0
).
Por tanto, solo cabe la posibilidad de que

= con lo cual habremos hecho


la computacion mediante:
I
A
()
A
(q, , Z
0
X
0
a)
A
(p
f
, , Z
0
).
Y el automata A habra seguido la computacion:
I
A
()
A
(q, , Z
0
Z),
con lo que L

(

A) L(A).
Recprocamente, dado un automata con pila A := (Q, , , Q
0
, Z
0
, F, ) que
acepta el lenguaje L

(A) mediante pila y cinta vacas, construyamos el nuevo


automata que aceptara el mismo lenguaje mediante estados nales aceptadores

A := (

Q,

,

,

Q
0
,

Z
0
,

F,

) del modo siguiente. Introduciremos un estado nal


aceptador nuevo p
f
y denimos

F := p
f
,

Q := Q p
f
. Introducimos un
nuevo smbolo inicial para la pila

Z
0
:= X
0
y denimos

:= Z
0
. Ahora
introducimos una nueva funcion de transicion

denida del modo siguiente:

[
Q({})

= .
3.4. AUT

OMATAS CON PILA. 91

(q, , Z
0
) := (p
f
, ).

(

Q
0
, , X
0
) := (Q
0
, Z
0
).
Es clara la identicacion entre las conguraciones de A y las conguraciones
de

A que poseen un estado de A:
(q, , ) (q, , X
0
).
Ahora consideramos L(

A) el lenguaje aceptado mediante estado nal aceptador
por

A. Una palabra

es aceptada si se ha producido una computacion


cuyos extremos son:
I
A
()
A
(p
f
, , ).
Ahora observamos que el estado p
f
solo se alcanza mediante transiciones
que leen el smbolo Z
0
en la pila (i.e.

(q, , Z
0
) := (p
f
, )). Pero el smbolo
Z
0
solo se lee cuando la pila original esta vaca (i.e. = Z
0
). As, nuestra
computacion debe tener la forma:
I
A
()
A
(q,

, X
0
Z
0
)
A
(p
f
, , X
0
).
De otro lado, estas transiciones no borran informacion en la cinta. Por
tanto, con los mismos argumentos que en el apartado anterior, necesariamente
ha de darse

= y existiran:
I
A
()
A
(q, , X
0
Z
0
)
A
(p
f
, , X
0
Z
0
),
que se corresponde a la computacion en A
I
A
()
A
(q, , Z
0
).
Con ello concluimos que L

(A), es aceptado por A mediante pila y cinta


vacas, y L(

A) L

(A).
De otro lado, supongamos que es aceptado por A mediante pila y cinta
vacas. En ese caso, tendremos una computacion en A de la forma:
I
A
()
A
(q, , Z
0
).
Esto se transforma en una computacion en

A de la forma:
I
A
()
A
(q, , X
0
Z
0
).
Aplicando la transicion (q, , Z
0
) := (p
f
, ) obtendremos:
I
A
()
A
(q, , X
0
Z
0
)
A
(p
f
, , X
0
)
y habremos probado que L

(A) L(

A) como pretendamos.
92 CAP

ITULO 3. LIBRES DE CONTEXTO


3.4.4. Equivalencia con Gramaticas Libres de Contexto.
Teorema 107 Los lenguajes libres de contexto son exactamente los lenguajes acep-
tados por los aut omatas con pila mediante cinta y pila vacas. Es decir, se verican
las siguiente dos propiedades:
1. Para cada gram atica libre de contexto G sobre un alfabeto de smbolos ter-
minales, existe un aut omata con pila A tal que L(G) = L

(A).
2. Para cada aut omata A con alfabeto de cinta existe una gram atica libre de
contexto G tal que el lenguaje generado por G coincide con L

(A).
M as a un, daremos procedimientos de construcci on en ambos sentidos.
Demostracion. Dividiremos la prueba en las dos armaciones.
1. Bastara con lo probemos para gramaticas en Forma Normal de Chomsky. El
resto se obtiene en las progresivas transformaciones de gramaticas. As, su-
pongamos que G es dada mediante G := (V, , Q
0
, P), donde Q
0
es el smbolo
inicial. Deniremos un automata con pila A := (Q, , , Q
0
, Z
0
, F, ) de la
forma siguiente:
Q := Q
0
posee un unico estado (que es tambien el estado inicial).
El smbolo de fondo de la pila es un smbolo auxiliar.
El alfabeto de la pila reune a todos los smbolos (terminales o no) de la
gramatica := V Q
0
.
La funcion de transicion estara dada del modo siguiente:
(Q
0
, , Z
0
) := (Q
0
, Z
0
Q
0
) (al comenzar pongamos Q
0
justo encima
del fondo de la pila).
Si la gramatica tiene una produccion del tipo A a ,
escribamos
6
:
(Q
0
, , A) := (Q
0
, a).
Si la gramatica tiene una produccion del tipo A CD, con C, D V ,
pongamos:
(Q
0
, , A) := (Q
0
, DC).
Finalmente, para cada a , pongamos:
(Q
0
, a, a) := (Q
0
, ).
Para ver la demostracion de la igualdad bastara con observar que la pila ejecuta
un arbol de derivacion de la gramatica. Por tanto, basta con seguir (borrando)
las hojas para ir borrando en la cinta. El vaciado de la cinta y de la pila se
produce conforme vamos vericando las hojas.
2. Para la segunda de las armaciones, consideremos dado un automata con pi-
la A := (Q, , , Q
0
, Z
0
, ) que acepta un lenguaje L

(A). Construyamos la
gramatica G := (V, , Q
0
, P) mediante las deniciones siguientes:
6
Notese que para las producciones A borramos A.
3.5. PROPIEDADES B

ASICAS 93
V := Q ( Z
0
) Q Q
0
. Utilizaremos la notacion qAp) para
representar el smbolo no terminal (q, A, p) V .
El smbolo inicial Q
0
lleva acompa nada unas producciones del tipo si-
guiente:
Q
0
Q
0
Z
0
p),
para cada p Q.
Si la funcion de transicion satisface (p, a, A) = (q, ) con a
y A , escribiremos la produccion:
pAq) a.
Si la funcion de transicion satisface (p, a, A) = (q, B
1
B
n
) con a
y B
1
, . . . , B
n
Z
0
, escribiremos las producciones siguientes:
pAq) apB
n
s
1
)s
1
B
n1
s
2
)s
2
B
n2
s
3
) s
n1
B
1
q),
para todos los estados (s
1
, . . . , s
n2
) Q
n2
.
Nota 108 N otese que la construcci on de la gram atica asociada a un aut omata con
pila introduce un n umero exponencial (en el n umero de estados) de producciones por
lo que es poco aconsejable utilizar esa construcci on. Nos conformaremos con saber
de su existencia. En todo caso, podemos usar aut omatas con una sola producci on
como el mostrado para el paso de gram aticas a aut omatas.
3.5. Algunas Propiedades de la clase de lenguajes libres
de contexto
Denici on 109 Llamamos lenguajes libres de contexto a los lenguajes generados
por una gram atica incontextual (o, equivalentemente, los reconocidos por un aut oma-
ta con pila mediante pila y cinta vacas).
En esta Seccion nos ocuparemos de enunciar unas pocas propiedades de la clase de
lenguajes libres de contexto.
Teorema 110 (Intersecci on con Lenguajes Regulares) La clase de lenguajes
libres de contexto est a cerrada mediante intersecci on con lenguajes regulares. Es
decir, si L

es un lenguaje libre de contexto y si M

es un lenguaje
regular, entonces, L M es un lenguaje libre de contexto.
Nota 111 Veremos que la intersecci on de dos lenguajes libres de contexto puede no
ser un lenguaje libre de contexto. Para ello, consideremos los dos lenguajes siguien-
tes:
L := a

b
n
c
n
: n N a, b, c

.
94 CAP

ITULO 3. LIBRES DE CONTEXTO


M := a
n
b
n
: n N b

a, b, c

.
La intersecci on es el lenguaje:
L M := a
n
b
n
c
n
: n N a, b, c

.
Veremos m as adelante que L M no es un lenguaje libre de contexto.
Denici on 112 (Morsmo de monoides) Dados dos monoides (M, ) y (N, )
llamaremos morsmo de monoides a toda aplicaci on f : M N que verica las
propiedades siguientes:
1. f(
M
) =
N
, donde
M
y
N
son los respectivos elementos neutros de los
monoides M y N.
2. f(x y) = f(x) f(y) para todo x, y M.
Teorema 113 (Imagenes inversas por morsmos) La clase de lenguajes libres
de contexto es cerrada por im agenes inversas por morsmos de monoides. Esto es,
dados dos alfabetos
1
y
2
y dado un morsmo de monoides f :

2
, para
cada lenguaje libre de contexto L

2
, el siguiente tambien es un lenguaje libre de
contexto:
f
1
(L) := x

1
: f(x) L.
Teorema 114 (Complemento de un Lenguaje Libre de Contexto Determinista)
La clase de los lenguajes aceptados por un aut omata con pila determinista es cerrada
por complementaci on. Es decir, si L

es un lenguaje aceptado por un aut omata


con pila determinista, su complementario L
c
:=

L es tambien un lenguaje libre


de contexto.
El siguiente es un importante resultado de caracterizacion de lenguajes libres de
contexto debido a W.F. Ogden
7
.
Denici on 115 (Marcador de una palabra) Llamamos marcador de una pala-
bra x

a una lista := (
1
, . . . ,
n
) 0, 1
n
, donde n = [x[.
Notese que un marcador consiste en se nalar ciertos smbolos de una palabra y no
otros. Obviamente, el n umero de marcadores de una palabra x es igual a 2
|x|
. Una
manera de interpretar un marcador es el de subrayar algunos smbolos de la palabra
y no otros, conforme a la regla obvia: subraya el smbolos iesimo si
i
= 1 y
no lo subrayes en el caso contrario. A modo de ejemplo, tomemos la palabra x =
abbbbabaa de longitud 9 y elijamos dos marcados = (0, 1, 1, 0, 0, 0, 1, 0, 1) y

=
(1, 0, 0, 0, 1, 0, 0, 0, 1). Estos dos marcadores se nalan smbolos de la palabra conforma
a las siguientes reglas:
marcado(x, ) := abbbbabaa.
marcado(x,

) := abbbbabaa.
Llamamos n umero de posiciones distinguidas de un marcador al n umero de 1s. As,
el n umero de posiciones distinguidas de es 4 y el de

es 3.
7
W.F. Ogden. A Helpful Result for Proving Inherent Ambiguity.Mathematical Systems
Theory2 (1968) 191194.
3.5. PROPIEDADES B

ASICAS 95
Teorema 116 (Lema de Ogden) Sea G := (V, , Q
0
, P) una gram atica libre de
contexto. Existe un n umero natural N 1 tal que para toda palabra z L(G) y para
todo marcador de z con un n umero de posiciones distinguidas mayor o igual a N,
existe una factorizaci on:
z = uvwxy,
vericando:
1. La subpalabra w contiene, al menos, una posici on distinguida.
2. Las subpalabras v y x contienen, al menos, una posici on distinguida entre las
dos.
3. La subpalabra vwx tiene, a lo sumo, N posiciones distinguidas.
4. Existe un smbolo no terminal A V tal que se verica Z
0

G
uAy, A
G
vAx
A
G
w. En particular, tenemos una propiedad de bombeo, puesto que para
todo i 0, uv
i
wx

iy L(G).
Aunque el enunciado tiene un aspecto complejo, es un instrumento mas que util
para mostrar lenguajes que no son libres de contexto. Una de las conclusiones de
este Lema de Ogden es el siguiente resultado conocido como Lema de BarHillel
8
aunque es debido a BarHillel, Perles y Shamir.
Corolario 117 (Lema de BarHillel) Si L es un lenguaje que satisface la si-
guiente propiedad:
Para cada n umero natural N, N 1, existe una palabra z L en el lenguaje de
longitud mayor que N vericando la siguiente propiedad:
Para cualesquiera palabras u, v, w, x, y

, vericando
[z = uvwxy, [vwx[ N, [w[ 1, [vx[ 1] i 0, uv
i
wx
i
y , L.
Entonces L no es un lenguaje libre de contexto.
Demostracion. La prueba es obvia a partir del Lema de Ogden. Notese que las
condiciones de longitud pueden reescribirse en terminos de marcadores.
Ejemplo 14 El lenguaje a
n
b
n
c
n
: n N no es un lenguaje libre de contexto.
N otese que para cada N N la palabra a
N
b
N
c
N
verica que para toda factorizaci on
a
N
b
N
c
N
= uvwxy,
con las propiedades prescritas: [vwx[ N, [w[ 1, [vx[ 1 signica que en vwx no
pueden estar m as de dos smbolos (o bien a, b o bien b, c). Por tanto, bombeando
uv
i
wx
i
y en alg un momento desequilibramos el n umero de smbolos. As, por ejemplo,
si vwx s olo contiene smbolos en a, b, bombeando uv
i
wx
i
y aumentamos el n umero
de as y de bs, pero no aumentamos el n umero de cs, con lo que, en alg un momento,
uv
i
wx
i
y , L.
8
Y. BarHillel, M. Perles, E. Shamir. Onformal properties of simple phasestructure gram-
mars.Zeitschrift f ur Phonetik, Sparchwissenschaft und Kommunikationsforschung 14(1961) 143
172.
96 CAP

ITULO 3. LIBRES DE CONTEXTO


3.6. Cuestiones y Problemas
3.6.1. Cuestiones
Cuesti on 22 Comprobar, utilizando las siguientes producciones de una gram atica
G, que al convertir una gram atica libre, puede quedar con smbolos in utiles:
S a [ aA, A bB, B .
Cuesti on 23 Decidir si existe un algoritmo que realice la tarea siguiente:
Dada una gram atica libre de contexto G y dadas dos formas sentenciales de la
gram atica c y c

, el algoritmo decide si c
G
c

.
Cuesti on 24 Sean L
1
y L
2
dos lenguajes libres de contexto. Decidir si es libre de
contexto el lenguaje siguiente:
L :=
_
n1
(L
1
)
n
(L
2
)
n
.
Cuesti on 25 Hallar una estimaci on del n umero de pasos necesarios para generar
una palabra de un lenguaje libre de contexto, en el caso en que la gram atica que lo
genera este en forma normal de Chomsky.
Cuesti on 26 Discutir si alguno de los siguientes lenguajes es un lenguaje incon-
textual:
1. a, b

: =
R
, x, y a, b

, ,= xabay.
2. a
i
b
j
c
k
: i = j j = k.
3. a
i
b
j
c
k
d
l
: (i = j k = l) (i = l j = k).
4. xcy : x, y a, b


a
(x) +
b
(y) 2Z [x[ = [y[.
Cuesti on 27 Sea P un Aut omata con pila con lenguaje por pila y lista vacas
L = N(P), y suponed que la palabra vaca no est a en el lenguaje. Describid c omo
modicar el aut omata para que acepte tambien la palabra vaca mediante pila y lista
vacas.
3.6.2. Problemas
Problema 52 Dada una gram atica libre de contexto G, con las siguientes produc-
ciones:
Q
0
AB [ 0Q
0
1 [ A [ C, A 0AB [ , B B1 [ .
Se pide:
Eliminar los smbolos in utiles
Convertirla en libre
Eliminar las producciones unitarias
3.6. CUESTIONES Y PROBLEMAS 97
Problema 53 Eliminar las variables improductivas en la gram atica G con las si-
guientes producciones:
Q
0
A [ AA [ AAA, A ABa [ ACa [ a, B ABa [ Ab [ ,
C Cab [ CC, D CD [ Cd [ CEa, E b.
Eliminar los smbolos inaccesibles en la gram atica resultante.
Problema 54 Hallar una gram atica libre equivalente a la siguiente:
Q
0
aQ
0
a [ bQ
0
b [ aAb [ bAa, A aA [ bA [ .
Es una gram atica propia?.
Problema 55 Hallar una gram atica propia equivalente a la siguiente:
Q
0
XY, X aXb [ , Y bY c [ .
Problema 56 Sea G = (V, , Q
0
, P) la gram atica libre de contexto dada por las
propiedades siguientes:
V := Q
0
, X, Y, Z, T,
:= 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, , (, ),
Las producciones en P est an dadas por:
Q
0
X [ X +Q
0
, X T [ Y Z,
Y T [ (X +Q
0
), Z Y [ Y Z,
T 0 [ 1 [ 2 [ 3 [ 4 [ 5 [ 6 [ 7 [ 8 [ 9.
Se pide:
1. Hallar la clase de formas terminales de esta gram atica.
2. Hallar el lenguaje generado por esta gram atica.
3. Eliminar producciones unarias.
4. Eliminar producciones in utiles.
5. Convertirla en una gram atica propia.
6. Transformarla en Forma Normal de Chomsky.
Problema 57 Hacer los mismos pasos 3 a 6 del problema anterior con la gram atica
siguiente:
Q
0
A [ B, A aA [ aAb [ a, B Bd [ ABa [ b.
98 CAP

ITULO 3. LIBRES DE CONTEXTO


Problema 58 Eliminar producciones y hacer los mismos pasos del problema an-
terior con la gram atica siguiente:
Q
0
ABQ
0
[ BAQ
0
[ , A bAA [ a, B aBB [ b.
Problema 59 Dar un algoritmo que decida si el lenguaje generado por una gram ati-
ca libre de contexto es nito o innito.
Problema 60 Hallar un aut omata con pila para el lenguaje
L := 0
n
1
n
: n N.
Problema 61 Hallar un aut omata con pila para el palndromo.
Problema 62 Construir aut omatas con pila que acepten los complementarios (en
a, b

) de los siguiente lenguajes:


1. a
n
b
n
c
n
: n N.
2.
R
: a, b.
3. a
m
b
n
a
m
b
n
: m, n 1.
Problema 63
9
Probar que el conjunto de palabras que pueden aparecer en una pila
de un aut omata con pila es un lenguaje regular.
Problema 64 Probar que si un aut omata con pila verica que existe una constante
k N tal que la pila nunca contiene palabras de longitud mayor que k, entonces, el
lenguaje aceptado por ese aut omata es un lenguaje regular.
Problema 65 Dise nar un automata con pila para cada uno de los siguientes len-
guajes
1.
a
i
b
j
c
k
[i ,= jorj ,= k
2. El conjunto de todos las cadenas de smbolos que no son de la forma ww, esto
es que no son igual a ning un string repetido.
Problema 66 Sea el siguiente PDA denido por
P = (Q
0
, q
1
, q
2
, q
3
, f), a, b, Z
0
, A, B, , Q
0
, Z
0
, f)
Donde est a dada por las siguientes reglas:
(Q
0
, a, Z
0
) = (q
1
, AAZ
0
) (Q
0
, b, Z
0
) = (q
2
, BZ
0
) (Q
0
, , Z
0
) = (f, )
(q
1
, a, A) = (q
1
, AAA) (q
1
, b, A) = (q
1
, ) (q
1
, , Z
0
) = (Q
0
, Z
0
)
(q
2
, a, B) = (q
3
, ) (q
2
, b, B) = (q
2
, BB) (q
2
, , Z
0
) = (Q
0
, Z
0
)
(q
3
, , B) = (q
3
, ) (q
3
, , Z
0
) = (q
1
, AZ
1
)
9
Problema Difcil.
3.6. CUESTIONES Y PROBLEMAS 99
1. Demostrar que la cadena de caracteres bab est a en el lenguaje.
2. Demostrar que la cadena abb est a en el lenguaje.
3. Dar los contenidos de la pila despues de que el aut omata ha ledo b
7
a
4
.
4. Describir el lenguaje generado.
Problema 67 Un aut omata con pila se llama restringido si en cada transici on la
pila solamente aumenta en, a lo sumo, un smbolo. Demostrar que todo lenguaje
dado por un aut omata se puede denir mediante aut omatas restringidos.
Problema 68 Convertir la gram atica
Q
0
0Q
0
1 [ A, A 0A1 [ Q
0
[ ,
a un aut omata con pila que acepte el lenguaje por pila vaca o por estados nales
aceptadores.
Problema 69 Convertir la gram atica con producciones
Q
0
aAA, A aQ
0
[ bQ
0
[ a,
a un aut omata con pila que acepte el lenguaje por pila vaca o por estado nales.
Problema 70 Dise nar una gram atica y un aut omata con pila que acepte el siguiente
lenguaje:
0
n
1
m
[ n m 2m.
Problema 71 Consideremos la siguiente gram atica libre de contexto. :
< Q
0
> while < EXPRESION > < PROCEDIMIENTO >
< Q
0
> if < EXPRESION > then < PROCEDIMIENTO >
< PROCEDIMIENTO > < Q
0
>
< PROCEDIMIENTO > t + +; cout << endl << t << endl;
< EXPRESION > < NUMERO > less than < V ARIABLE >
< EXPRESION > < V ARIABLE > less than < NUMERO >
< EXPRESION > < NUMERO > less than < FORMULA >
< FORMULA > < FORMULA > + < V ARIABLE >
< FORMULA > (< FORMULA >)
< NUMERO > 1 < NUMERO >
< NUMERO > 0
< V ARIABLE > t
< V ARIABLE > < FORMULA > +t
< V ARIABLE > < FORMULA > +1
100 CAP

ITULO 3. LIBRES DE CONTEXTO


Denotaremos a las variables utilizando < x >, donde la variable de inicio sera
denotada con < Q
0
>. El alfabeto esta formado por los siguientes smbolos:
:= while, if, , , then, t, +, ; , cout, endl, <<, less than, 1, 0, (, ).
Se pide lo siguiente:
1. Eliminar las producciones unarias de la gram atica.
2. Eliminar los smbolos in utiles de la gram atica.
3. Construir la tabla de an alisis sint actico de la gram atica.
4. Obtener la siguiente palabra mediante derivaciones a la izquierda:
while t less than 110 if t less than 10 then t++; cout << endl << t << endl; .
Problema 72 Una gram atica se dice ambigua si se puede derivar la misma palabra
mediante dos derivaciones diferentes a la izquierda.
Demostrar que la siguiente gram atica es ambigua:
< Q
0
> if < EXPRESION > then < PROCEDIMIENTO >
< Q
0
> if < EXPRESION > then < PROCEDIMIENTO >
else < PROCEDIMIENTO >
< PROCEDIMIENTO > if < EXPRESION > then < PROCEDIMIENTO >
< PROCEDIMIENTO > if < EXPRESION > then < PROCEDIMIENTO >
else < PROCEDIMIENTO >
< PROCEDIMIENTO > System.out.println(1);
< PROCEDIMIENTO > System.out.println(0);
< EXPRESION > < NUMERO > less than < V ARIABLE >
< EXPRESION > < V ARIABLE > less than < NUMERO >
< NUMERO > 1 < NUMERO >
< NUMERO > 0
< V ARIABLE > t
3.6. CUESTIONES Y PROBLEMAS 101
Demostrar que esta gram atica genera el mismo lenguaje:
< Q
0
> if < EXPRESION > then < PROCEDIMIENTO >
< Q
0
> if < EXPRESION > then < PROCED ELSE >
else < PROCEDIMIENTO >
< PROCEDIMIENTO > if < EXPRESION > then < PROCEDIMIENTO >
< PROCED ELSE > if < EXPRESION > then < PROCED ELSE >
else < PROCED ELSE >
< PROCEDIMIENTO > System.out.println(1);
< PROCEDIMIENTO > System.out.println(0);
< PROCED ELSE > System.out.println(1);
< PROCED ELSE > System.out.println(0);
< EXPRESION > < NUMERO > less than < V ARIABLE >
< EXPRESION > < V ARIABLE > less than < NUMERO >
< NUMERO > 1 < NUMERO >
< NUMERO > 0
< V ARIABLE > t
y ademas demostrar que no es ambigua.
Problema 73 Construir una derivacion a la izquierda de la siguiente palabra 10 +
11 1111 utilizando la siguiente gram atica:
< Q
0
> < EXPRESION > < EXPRESION >
< Q
0
> < EXPRESION > + < EXPRESION >
< EXPRESION > < NUMERO > + < EXPRESION >
< EXPRESION > < NUMERO > < EXPRESION >
< NUMERO > 1 < NUMERO >
< NUMERO > 0 < NUMERO >
< NUMERO > 0[1.
Decidir si la gram atica es ambigua y que pasa si se elimina la segunda producci on.
Problema 74 Supongamos que el siguiente lenguaje de programaci on dado por la
102 CAP

ITULO 3. LIBRES DE CONTEXTO


siguiente gram atica:
< Q
0
> < DECLARACION >< Q
0
>< ORDEN >
< DECLARACION > < TIPO >< NOMBRE >=< V ALOR >;
< TIPO > REAL[INTEGER
< NOMBRE > a[b
< ORDEN > < NOMBRE >=< ORDEN > + < ORDEN >;
< ORDEN > < V ALOR >
< ORDEN > < NOMBRE >
< V ALOR > 1 < V ALOR >
< V ALOR > 0
Hallar una derivaci on a la izquierda para esta palabra (los espacios y retornos de
carro se eliminaran):
REAL a = 10; REAL b = 110; a = a +b; b = a +a +a;
Demostrar que el lenguaje asi denido admite como correcta la siguiente expresion:
REAL a = 10; a = a = a +a; +110s;
Comprobar que se acepta esta expresion y modicar la gram atica para que solo se
acepten expresiones correctas de sumas.
Captulo 4
Una Sucinta Introduccion a
Parsing
En el proceso de compilacion, debemos considerar diversos pasos.
En un primer paso (analisis lexico) el compilador decide si todas las partes del
chero (trozos en los que esta dividido) responden a los patrones de tipos de datos,
identicadores o palabras reservadas que hemos seleccionado. Para ello, aplica los
diversos automatas nitos asociados a las diversas expresiones regulares distinguidas.
Una vez realizado el analisis lexico (omitiendo la gesti on de errores en este curso)
se procede al proceso de traduccion del codigo fuente a codigo objetivo. En este
proceso utilizaremos un modelo clasico basado en Sistemas de Traduccion basados en
Sintaxis Directa (SDTS). Con ellos, el proceso de traducci on se reduce a un proceso
de deteccion de pertenencia al lenguaje generado por la gramatica que dene nuestro
lenguaje fuente (Problema de Palabra para gramaticas libres de contexto) y a un
proceso de descripcion de un arbol de derivacion de la palabra dada. Los algoritmos
que realizan esta tarea son los algoritmos de parsing (o analisis sintactico) y la
descripcion de algunos de ellos es el objetivo de este Captulo.
El problema al que nos enfrentamos es el siguiente:
Problema de Traducci on. Fijados dos lenguajes de programaci on L
1

1
, L
2

2
, y dada una palabra realizar la tarea siguiente:
Decidir si L
1
,
Traducir a una palabra
2
en el lenguaje de programaci on L
2
(i.e.
2
L
2
).
La traduccion en lenguajes naturales sigue siendo un proceso complejo e incompleto.
En lenguajes formales, si ambos son dados por gramaticas libres de contexto, esta
tarea es factible. De eso trata el presente Captulo.
Sin embargo, el proceso de traduccion no es evidente y acudiremos a sistemas de
traduccion basados en la existencia de una relacion directa entre las sintaxis de
ambos lenguajes (STDSs).
Denici on 118 (SyntaxDirected Translation Scheme) Un esquema de tra-
ducci on sint actica directa (SDTS) es un quntuplo (V, , , Q
0
, P) donde:
103
104 CAP

ITULO 4. INTRODUCCI

ON A PARSING
V es un conjunto nito de smbolos llamados variables o smbolos no termina-
les.
es un alfabeto nito, llamado alfabeto de input.
es un segundo alfabeto nito llamado alfabeto de output.
Q
0
V es un smbolo distinguido llamado smbolo inicial del SDTS.
P V (V )

(V )

es un conjunto nito conocido como conjunto


de pares de producciones.
Escribiremos las producciones mediante: A (, ) para denotar la terna (A, , )
P.
Un SDTS es un mecanismo de traduccion basado en los componentes sintacticos de
dos gramaticas.
Denici on 119 (Input and Output Grammars) Dado un SDTS T := (V, , , Q
0
, P)
disponemos de dos gram aticas libres de contexto asociadas:
La gram atica de input (o fuente) T
input
:= (V, , Q
0
, P
input
) donde:
P
input
:= A :

, A (, ) P.
La gram atica de output (u objetivo) T
output
:= (V, , Q
0
, P
output
) donde:
P
output
:= A :

, A (, ) P.
Notese que ambas gramaticas son gramaticas libres de contexto. Puede observarse
que un sistema de traduccion por sintaxis directa SDTS := (V, , , Q
0
, P) genera
un proceso de traduccion entre dos lenguajes. Una traduccion es una aplicacion:
: L
1

L
2

,
que transforma palabras (programas, cheros, codigos) en el primer lenguaje en
palabras (programas, cheros, codigos) en el segundo lenguaje. La traduccion
asociada a nuestro sistema SDTS anterior funciona del modo siguiente:
El lenguaje del cual tomamos las entradas es L
1
y es el lenguaje generado por
la gramatica T
input
, i.e. L
1
:= L(T
input
).
El lenguaje al cual deben pertenecer las salidas es L
2
y es el lenguaje generado
por la gramatica T
output
, i.e. L
2
:= L(T
output
).
La traduccion funciona del modo siguiente: dado L
1
sea
Q
0

1

2

n
= ,
una cadena de computaciones o derivaciones en P
input
(i.e. las producciones de la
gramatica T
input
) . Por construccion, tendremos unas producciones en P que se
corresponden con los pasos realizados.
105
As, el paso de
i
a
i1
se habra realizado porque existen ,

tales que

i1
= A
i
, con A
i
V y existe una produccion A
i

i
en P
input
tal que

i
=
i
.
Pero la produccion en P
input
debe proceder de una produccion en P que ha de tener
la forma:
A
i
(
i
,
i
),
Ahora comienza a actuar el SDTS del modo siguiente:
Comenzamos con Q
0

1
=
1
. Es decir, realizamos la produccion empare-
jada a la produccion de P
input
usada inicialmente.
Recursivamente, si hemos calculado Q
0

1
. . .
i
, y si la variable A
i
esta en
i
, recodamos el par de producciones A
i
(
i
,
i
) en P. Si
i
=
1
A
i

2
,
entonces denimos
i+1
=
1

2
, en caso contrario devolvemos error.
Ahora tendremos una cadena de derivaciones basadas en P
output
de la forma:
Q
0

1

2

n
=

.
Las palabras
i

se obtienen inductivamente aplicando las producciones A


i

i
de P
output
. Si tras el proceso anterior hallamos una forma terminal

, tendremos
que

L
2
= L(T
output
) y la podemos denotar mediante

= () y la llamaremos
traduccion de mediante el SDTS P.
Notese que

no es necesariamente unica y ni siquiera tiene por que existir. En


primer lugar, porque no hemos indicado cual de las posibles apariciones de la variable
A
i
es la que hay que reemplazar por
i
. Tambien carece del rasgo determinista
porque podra haber mas de una produccion en el SDTS cuya primera produccion
fuera A
i

i
. Finalmente podra incluso que no no hubiera ninguna variable A
i
en

i1
para reemplazar, con lo que
i1
=
i
. La conclusion es que, en general, es
correspondencia y no necesariamente aplicacion.
Por todo ello, nos conformaremos con disponer de un SDTS de tipo simple.
Denici on 120 (SDTS simple) Un sistema de traducci on por sintaxis directa
T := (V, , , s
0
, P) se llama simple, si para cada producci on
A (, ),
las variables que aparecen en son las mismas, repetidas con la misma multiplicidad
1
que las que aparecen en .
Por simplicidad de nuestro analisis podemos incluso suponer que el orden en que se
presentan las variables en cada una de las producciones de T es el mismo.
En todo caso, una traduccion basada en SDTS trata elmente de seguir el proce-
so sintactico de generacion de en la primera gramatica, para reproducirla en la
segunda y as producir la traduccion.
1
Se podra incluso suponer que la variables aparecen en el mismo orden, eso conducira a tra-
ducciones a un mas inmediatas.
106 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Notese que el proceso de traduccion natural consistira en disponer a priori de dos
gramaticas libres de contexto G
1
y G
2
y generar, a partir de ellas, un SDTS T tal
que L(G
1
) = L(T
input
) y L(G
2
) = L(T
output
). Por simplicidad de la discusion admi-
tiremos que disponemos de un STDS a priori entre dos lenguajes de programacion
L
1
y L
2
.
A partir de el nos planteamos el problema siguiente:
El problema de parsing Fijado un lenguaje libre de contexto L

, dada una
palabra

, entonces resolver:
Decidir si L.
En caso de respuesta armativa, dar un arbol de derivaci on (o una derivaci on)
que produzca .
El objetivo general de este Captulo es resolver el problema de parsing siguiendo
varias estrategias. Observese que disponiendo de un algoritmo que resuelva el pro-
blema de parsing para la gramatica P
input
y disponiendo de un SDTS, disponemos
de un compilador (aunque sea indeterminista) que traduzca los programas de un
lenguaje de programacion al otro.
Antes de comenzar nuestro analisis del problema de parsing, dedicaremos un rato a
recordar algunos terminos informales sobre compiladores.
4.1. Palabras Tecnicas de uso Com un sobre Compila-
dores, Traductores, Interpretes
Presentamos algunas ideas de las palabras de uso com un en el mundo de los compi-
ladores. Dejamos el formalismo para el curso proximo.
Denici on 121 (Compilador) Un compilador es un programa (o conjunto de pro-
gramas) que transforma:
un texto escrito en un lenguaje de programaci on (lenguaje fuente)
en un texto escrito en otro lenguaje de programaci on (lenguaje objetivo)
El texto en lenguaje fuente se llama c odigo fuente. La salida del compilador se llama
c odigo objetivo.
Notaci on 122 (Terminologa Basica) El uso m as com un de los terminos suele
ser:
Compilador: suele usarse este termino cuando el lenguaje objetivo es de nivel
m as bajo que el lenguaje fuente.
Fuente a Fuente: transforma c odigo entre lenguajes de alto nivel. Se suele
usar el termino reescritura cuando el lenguaje fuente es exactamente el len-
guaje objetivo.
Decompilador: el lenguaje objetivo es de mayor nivel que el lenguaje fuente.
Su uso es harto infrecuente.
4.1. COMPILADORES, TRADUCTORES, INT

ERPRETES 107
4.1.1. Traductores, Compiladores, Interpretes
El resultado de un TraductorCompilador es esencialmente un ejecutable. Sin em-
bargo, presenta un inconveniente, sobre todo en el manejo de codigos fuente de gran
tama no:
El codigo debe ser primero compilado y solo tras nalizar la compilacion puede ser
ejecutado.
La alternativa son los Interpretes. Un Interprete toma como entrado un lenguaje
en codigo fuente y procede el modo siguiente con cada instruccion (o parte) del
codigo fuente realiza las siguientes tareas:
carga la instruccion,
analiza la instruccion,
ejecuta la parte del codigo fuente.
Ventajas del Interprete. Tiene las siguientes ventajas:
El programador trabaja en forma interactiva y va viendo los resultados de cada
instruccion antes de pasar a la siguiente.
El programa se utiliza solo una vez y no importa tanto la velocidad (despues
se compila y se usa solamente el ejecutable).
Se espera que cada instruccion se ejecute una sola vez.
Las instrucciones tienen formas simples y son mas faciles de analizar.
Inconvenientes de los Interpretes. Tiene los siguientes inconvenientes:
La velocidad puede ser del orden de 100 veces mas lento que la de un ejecutable.
No sirve cuando se espera que las instrucciones se ejecuten frecuentemente.
Tampoco es interesante cuando las instrucciones sea complicadas de analizar.
Ejemplo 15 Entre los interpretes m as habituales:
shell El interprete de comandos de Unix. Es una instrucci on para el sistema
operativo Unix. Se introduce dando el comando de forma textual. Act ua como
se ha indicado: comando a comando. El usuario puede ver la acci on de cada
comando.
LISP Es un lenguaje de programaci on de procesado de Listas. Common LISP.
Un Interprete de SQL. Ver curso previo de Bases de datos.
108 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Compiladores Interpretados.
Combinan las cualidades de Compiladores e interpretes.
Transforma el codigo fuente en un lenguaje intermedio.
Sus instrucciones tienen un formato simple y facil de analizar.
La traduccion desde el lenguaje fuente al lenguaje intermedio es facil y rapida.
Ejemplo 16 (Java) Tiene las propiedades siguientes:
El c odigo JVM (Java Virtual Machine) es un lenguaje intermedio entre Java,
de una parte, y Ensamblador y c odigo m aquina.
La interpretaci on de JVM es m as r apida que si hubiera un interprete directo
de Java.
JVM es un traductor m as un interprete:
Traduce c odigo Java a c odigo JVM.
Interpreta c odigo JVM.
4.1.2. Las etapas esenciales de la compilacion.
La Compilaci on y su entorno de la programaci on.
Primero ubicaremos el proceso de compilacion dentro del proceso completo:
Recibimos el codigo fuente y realizamos un preprocesamiento para eliminar
extensiones.
El Compilador traduce el codigo fuente (limpio de extensiones) en codigo ob-
jetivo (en lenguaje ensamblador).
El ensamblador asociado a cada maquina concreta transforma (e interpreta)
cada ejecutable en ensamblador en codigo maquina (el codigo traducido a la
maquina concreta en la que sera ejecutado).
Etapas del Proceso de Compilaci on.
Las etapas fundamentales de la compilacion son las siguientes:
1. Analisis Lexico: Utilizando expresiones regulares y/o automatas nitos, se
verica si el codigo fuente sigue las reglas basicas de la gramatica (regular)
en este caso que dene el lenguaje. A modo de ejemplo, denimos los tipos
admisibles de datos (pongamos real) mediante una expresion regular, despues
usamos el automata correspondiente para reconocer una entrada del lenguaje
fuente que pertenece al lenguaje denido por esa expresion regular. En caso
de encontrar un error, devuelve un mensaje de error.)
4.2. CONCEPTOS DE AN

ALISIS SINT

ACTICO 109
2. Analisis Sintactico. De nuevo usaremos el Problema de Palabra como refe-
rente y como sustrato las gramaticas libres de contexto y los automatas con
pila del Captulo anterior.
3. Analisis Semantico. Revisiones para asegurar que los componentes de un
programa se ajustan desde el plano semantico.
4. Generador de C odigo Intermedio: Un codigo intermedio que sea facil de
producir y facil de traducir a codigo objetivo.
5. Optimizaci on del C odigo. Trata de mejorar el codigo intermedio
2
.
6. Generador de C odigo Final: Etapa nal de la compilacion. Genera un
codigo en ensamblador.
En lo que concierne a este Captulo.
En lo que concierne a este curso nos interesaremos solamente por las etapas de
Analisis Lexico y Analisis Sintactico (o parsing).
Como los analizadores lexicos contienen una menor dicultad, nos centraremos en
el Analisis Sintactico o parsing.
4.2. Conceptos de Analisis Sintactico
El problema central del Analisis Sintactico es el
Problema 75 (Parsing o Analisis Sintactico) Dada una forma terminal

sobre una gram atica G := (V, , Q


0
, P), se pide producir:
Un arbol sint actico con el que continuar a la siguiente etapa de la compilaci on,
si la palabra L(G).
Un informe con la lista de errores detectados, si la cadena contiene errores
sint acticos. Este informe deber a ser lo m as claro y exacto posible.
Omitiremos las distintas estrategias de Manejo de Errores, para concentrarnos en
los otros dos aspectos.
4.2.1. El problema de la Ambig uedad en CFG
Denici on 123 (Derivaciones Leftmost y Rightmost) Sea G = (V, , Q
0
, P)
una gram atica libre de contexto. Sean c, c

(V )

dos formas sentenciales.


1. Diremos que c

se obtiene mediante derivaci on m as a la izquierda (o left-


most) de c, si existen

, A V, (V )

, y existe una producci on


A , con (V )

tales que
c = A, c

= .
Denotaremos mediante c
G
lm
c

.
2
La generacion de codigo optimo es un problema NPcompleto.
110 CAP

ITULO 4. INTRODUCCI

ON A PARSING
2. Diremos que c

se obtiene mediante derivaci on m as a la derecha (o right-


most) de c, si existen (V )

, A V,

, y existe una producci on


A , con (V )

tales que
c = A, c

= .
Denotaremos mediante c
G
rm
c

.
Usualmente, y si no hay confusi on, omitiremos el super-ndice
G
.
Notese que hay dos elementos indeterministas en las traducciones as planteadas. De
una parte tenemos la eleccion de sobre que variable actuamos, de otro lado que pare-
ja de producciones elegimos. La idea de introducir derivaciones mas a la izquierda
o mas a la derecha consiste en tratar de reducir el ingrediente indeterminstico a la
hora de seleccionar que variable es la variable sobre la que vamos a actuar con nues-
tras producciones. En el proceso leftmost, seleccionamos la variable que se encuentra
mas a la izquierda y actuamos sobre ella mediante alguna de las producciones apli-
cables. En el rightmost hacemos lo propio con la variable que se encuentra mas a la
derecha. Notese que esto no signica que el proceso de derivacion sea determinstico:
aunque seleccionemos sobre cual de las variables actuamos primero, es claro que
puede haber mas de una produccion que act ua sobre esa variable y mantiene sus
rasgos indeterministas.
Denici on 124 (Cadenas de Derivaciones Leftmost y Rightmost) Con las mis-
mas notaciones de la Denici on anterior,
1. Diremos que c

es deducible de c mediante derivaciones m as a la izquierda (y


lo denotaremos mediante c
G
lm
c

) si existe una cadena nita de derivaciones


m as a la izquierda que va de c a c

. Esto es, si existen:


c = c
0

G
lm
c
1

G
lm
c
k1

G
lm
c
k
= c

.
2. Diremos que c

es deducible de c mediante derivaciones m as a la derecha (y


lo denotaremos mediante c
G
rm
c

) si existe una cadena nita de derivaciones


m as a la derecha que va de c a c

. Esto es, si existen:


c = c
0

G
rm
c
1

G
rm
c
k1

G
rm
c
k
= c

.
De nuevo, omitiremos el super-ndice
G
siempre que su omisi on no induzca confusi on
alguna.
La idea es una cadena de pasos mas a la izquierda, esto es, elegimos la variable
mas a la izquierda (leyendo de izquierda a derecha) de c. Aplicamos una produccion
de la gramatica sobre esa variable y c

es simplemente el resultado de aplicar esa


produccion.
Ejemplo 17 Tomemos la gram atica cuyas producciones son:
P := Q
0
AB [ CA [ AQ
0
[ 0, A BA [ 0A0 [ 1, B Q
0
A, C 1.
4.2. CONCEPTOS DE AN

ALISIS SINT

ACTICO 111
Una cadena de derivaciones leftmost (m as la izquierda) sera la siguiente:
Q
0
AB CAB 1AB 11B 11Q
0
A 110A 1101.
Una cadena de derivaciones rightmost (m as a la derecha) sera la siguiente:
Q
0
AB AQ
0
A AQ
0
1 A01 0A001 01001.
Denici on 125 (Gramaticas Ambiguas) Una gram atica se dice ambigua si exis-
te una forma sentencial (V )

alcanzable desde el smbolo inicial (i.e Q


0

G
)
tal que existen al menos dos computaciones (derivaciones) m as a la izquierda (o m as
a la derecha) distintas que permiten generar .
Ejemplo 18 Tomemos la gram atica P := E E + E [ E E [ a. Ahora dispo-
nemos de dos cadenas de derivaci on para a +a a distintas:
E
lm
E +E
lm
a +E
lm
a +E E
lm
a +a E
lm
a +a a.
Y tambien
E
lm
E E
lm
E +E E
lm
a +E E
lm
a +a E
lm
a +a a.
Por lo que la anterior gram atica es ambigua.
El problema con la ambig uedad de las gramaticas se enfrenta a la siguiente dicultad:
Teorema 126 Decidir si una gram atica libre de contexto es ambigua es indecidible
(i.e. no existe algoritmo que permita decidir la cualidad de ser ambigua).
La razon es la Indecidibilidad del Post Correspondence Problem. En algunos ca-
sos se pueden dar estrategias que eliminen la condicion de ambig uedad de algunas
gramaticas, pero el anterior Teorema nos garantiza que esto no es posible en general.
En todo caso, los lenguajes de programacion se dise nan generados mediante gramati-
cas no ambiguas.
4.2.2. Estrategias para el Analisis Sintactico.
En este Captulo nos dedicaremos a mostrar algunos ejemplos de analisis sintactico,
basados en distintos ejemplos de estrategias.
1. Estrategias de caracter general aplicables a cualquier gramatica y con sustrato
indeterminista. Hemos seleccionado la estrategia de parsing CYK de Cocke
3
,
Younger
4
y Kasami
5
. Otros procesos generales, como la estrategia de Earley
6
, pueden seguirse en [AU72].
3
Hays se lo atribuye a Cocke en D.G. Hays. Introduction to Computational Linguistics. Elsevier,
New York, 1967. Vease tambien [Cocke-Schwartz, 70].
4
D.H. Cocke. Recognition and parsing of contextfree languages in time n
3
. Information and
Control 10 (1967) 189208.
5
Vease el informe tecnico de 1965, AFCRL65758, escrito por Kasami y el paper T. Kasami, K.
Torii.A syntax analysis procedure for unambiguous contextfree grammars. J. of the ACM 16
(1969) 423-431.
6
J. Earley. An Ecient contextfree parsing algorithm, Ph.D. Thesis, carnegieMellon, 1968.Y el
trabajo J. Earley. An Ecient contextfree parsing algorithm. Commun. ACM 13 (1970) 94102.
112 CAP

ITULO 4. INTRODUCCI

ON A PARSING
2. Analisis Descendente (TopDown). El modelo de analisis recorre un arbol
de derivacion desde la raz (con el smbolo inicial Q
0
, hasta las hojas. Basa su
construccion en el uso de derivaciones mas a la izquierda. El proceso resulta
determinista en el caso de que la gramatica involucrada sea de un tipo espec-
co: gramaticas LL(k) (de from left to right with left canonical derivation and
a look-ahead of k symbols deterministic recognizable). Haremos la exposicion
para gramaticas LL(1).
3. Analisis Ascendente (BottomUp). El proceso recorre un arbol de deri-
vacion desde las hojas hasta la raz. Basa su analisis en derivaciones mas a la
derecha. Por ello el output de este tipo de parsers es el reverso de un arbol de
derivacion de una palabra aceptada. El proceso se ocupa de derivaciones mas
a la derecha. De nuevo, el proceso no es determinista salvo que la gramatica
tenga especiales caractersticas. En este caso se trata de las gramaticas LR(k)
(de Left-to-right scan, Rightmost derivation) y mostraremos nuestro analisis
para gramaticas LR(1).
Como nota historica, la estrategia preferida por los desarrolladores de analizadores
sintacticos ha sido ascendente. Los compiladores de compiladores mas conocidos
as lo demuestran. Mencionaremos como ejemplos:
Yacc: Yet Another Compiler Compiler desarrollado por los laboratorios AT & T.
Genera codigo en lenguaje C y es mantenido actualmente por la compa na SUN
Bison: Es el compilador de compiladores del proyecto GNU. Genera codigo en
C++.
SableCC: Creado por

Etienne Gagnon, este programa contiene los ultimos
avances en materia de compiladores.
La potencia de los lenguajes LR se basa en que cualquier gramatica que sea LR(k) se
puede transformar en una gramatica LR(1). A pesar de estas ventajas, por motivos
de eciencia estos generadores de compiladores solo aceptan un subconjunto de las
gramaticas LR(1), llamadas LALR.
Esto no quiere decir que estas gramaticas sean perfectas. Es mas, el analisis descen-
dente es mas intuitivo y permite gestionar mejor los errores en el codigo fuente. Esto
es as porque, como veremos, el cerebro humano funciona de esta manera.
7
Cuando
queremos omos una frase, estamos analizando automaticamente. No necesitamos
or la frase entera para ir deduciendo que quien sera el sujeto o quien el predicado.
Es mas, notamos, sin tener que acabar la frase podemos deducir que no es una frase
correcta en espa nol.
4.3. Analisis CYK
Es el modelo de analisis debido a Cocke, Younger y Kasami. Es un modelo aplicable
a cualquier gramatica en forma normal de Chomsky (CNF) y libre.
7
Para una discusion mas detallada ver [Par07, Chapter 2].
4.3. AN

ALISIS CYK 113


4.3.1. La Tabla CYK y el Problema de Palabra.
El input del algoritmo esta formado por una gramatica libre de contexto G =
(V, , q
0
, P), y por una forma terminal, es decir, := a
1
a
2
a
n1
a
n

.
El output del algoritmo es una tabla triangular. Para interpretarlo, podemos enten-
der la tabla de output como una aplicacion:
t : (i, j) : 1 i n, 1 j n i + 1 T(V ),
donde V son los smbolos no terminales de la gramatica y T(V ) son los subcon-
juntos de V . A la imagen t(i, j) T(V ) la denotaremos con sub-ndices. Es decir,
escribiremos t
i,j
T(V ).
En el conjunto t
i,j
escribiremos todas las variables A V tales que
A
G
a
i
a
i+1
a
i+j1
.
Notese que, en realidad, t depende de G y de .
Input: Dos elementos:
Una gramatica G := (V, , Q
0
, P) libre de contexto, en forma normal de
Chomsky y libre.
Una palabra = a
1
a
2
a
n

de longitud n.
Output: La tabla
t : (i, j) : 1 i n, 1 j n i + 1 T(V ),
seg un las propiedades anteriores.
Inicializar: Hallar para cada i, 1 i n los conjuntos siguientes:
t
i,1
:= A : A a
i
P.
for j = 1 to n do
for i = 1 to n j + 1 do
t
i,j
:= A : k, 1 k < j, B t
i,k
, C t
i+k,jk
,
and A BC P.
next i
od
next j
od
end
114 CAP

ITULO 4. INTRODUCCI

ON A PARSING
t
i,j
1 2 3 4 5
1 A Q
0
A A Q
0
2 Q
0
,A A Q
0
A
3 Q
0
,A Q
0
Q
0
4 Q
0
,A Q
0
,A
5 Q
0
,A
Cuadro 4.1: Los diferentes t
i,j
donde i es el n umero de la y j es la columna
Teorema 127 El algoritmo calcula la Tabla t conforme a la Denici on preliminar.
El tiempo de ejecuci on del algoritmo es O(n
3
) y la memoria usada es O(n
2
)
8
.
Demostracion. Es una mera comprobacion.
Ejemplo 19 Hallar la tabla para la gram atica G cuyas producciones son:
Q
0
AA [ AQ
0
[ b, A Q
0
A [ AQ
0
[ a.
y la palabra = abaab. c
Teorema 128 Con las notaciones anteriores, L(G) si y solamente si Q
0
t
1,n
.
En particular, el c alculo de la tabla por el metodo CYK resuelve el problema de
palabra para gram aticas en forma normal de Chomsky y libres en tiempo O(n
3
)
y espacio O(n
2
).
Demostracion. Por denicion de la propia tabla, Q
0
t
1,n
si y solamente si Q
0
.
4.3.2. El

Arbol de Derivacion con las tablas CYK.
A partir de la construccion de la tabla CYK, podemos desarrollar un algoritmo que
no solo resuelva el problema de palabra para gramaticas libres de contexto, sino que,
ademas, genera un arbol de derivacion para las palabras aceptadas.
Lo que haremos sera denir una serie de aplicaciones: gen(i, j, ) denidas en los
subconjuntos t
i,j
de la tabla construida a partir del algoritmo CYK antes denido.
La imagen de gen(i,j,A) no esta denida, por tanto cuando A , t
i,j
. En ese caso
devolveremos Error.
Si A t
i,j
, entonces existe un k, 1 k < j y existe una produccion A BC con
B t
i,k
, C t
i+k,jk
. Entonces,
gen(i, j, A) = [(A BC), gen(i, k, B), gen(i +k, j k, C)]
Esta denicion adolecede de algunas dicultades:
En primer lugar, no es aplicacion puesto que podra haber m as de una produccion
A BC con las propiedades prescritas. Para evitarlo, se introduce una enumeracion
del conjunto de las producciones. As, podremos hablar de la produccion mesima
como el elemento de P que ocupa el lugar m. En este caso, deniremos:
8
Aunque, en realidad, se debe tener en cuenta que, en la longitud del input, tambien juega (V ),
aunque no la consideremos por comodidad.
4.3. AN

ALISIS CYK 115


Si A t
i,j
, consideremos todas las producciones de P tales que existe un k,
1 k < j y la produccion A BC con B t
i,k
, C t
i+k,jk
. Sea m el
mnimo de las enumeraciones de tales producciones. Entonces, deniremos
gen(i, j, A) = [m, gen(i, k, B), gen(i +k, j k, C)]
Notese que, ahora, las producciones quedan identicadas por su n umero.
Input: La informacion siguiente:
Una gramatica libre de contexto G := (V, , Q
0
, P) en CNF, libre, en la
que las producciones de P estan numeradas de 1 a N.
Una forma terminal = a
1
a
2
a
n

.
La tabla t del algoritmo CYK anterior.
Output: Si L(G), devuelve un arbol de derivacion de , en caso contrario
devuelve Error.
if Q
0
, t
1,n
Output Error
else do
gen(i, 1, A) := [m] si m es la produccion A a
i
en P.
Si j > 1, hallar la produccion de numeracion mas peque na m tal que:
* Existe k, 1 k < j tal que:
* Existen B t
i,k
y C t
i+k,jk
tales que:
* La produccion mesima es A BC.
gen(i, j, A) := [m, gen(i, k, B), gen(i +k, j k, C)]

Output gen(1, n, Q
0
).
end
Teorema 129 El anterior algoritmo da como output un arbol de derivaci on de
si L(G) y devuelve Error en caso contrario.
Ahora ya estamos listos para hallar una derivacion de la palabra = abaab Empe-
zaremos etiquetando las producciones:
(1) Q
0
AA (4) A Q
0
A
(2) Q
0
AQ
0
(5) A AQ
0
(3) Q
0
b (6) A a
y ahora volvamos a la tabla 4.1. Por la denicion sabemos que
gen(1, 5, Q
0
) = [2, gen(1, 1, A), gen(2, 4, Q
0
)]
= [2, [6], [1, gen(2, 2, A), gen(4, 2, Q
0
)]]
= [2, [6], [1, [4, gen(2, 1, Q
0
), gen(3, 1, A)], [5, gen(4, 1, A), gen(5, 1, Q
0
)]]]
= [2, [6], [1, [4, [3], [6]], [5, [6], [3]]]]
116 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Podemos asociar esto a la representacion de un arbol utilizando pre orden.
2
6 1
4
3 6
5
6 3
] Q
0
A
a
Q
0
A
Q
0
b
A
a
A
A
a
Q
0
b
]
Al lado, hemos dibujado el arbol de derivacion de la palabra.
4.4. Traductores PushDown.
Los procesos de traduccion con gramaticas libres de contexto son gestionados por
un modelo de maquina basado en los automatas con pila descritos en el Captulo
precedente: Los traductores pushdown o traductores con pila.
Informalmente, un traductor con pila es un objeto compuesto de los siguientes ele-
mentos:
Un aut omata con pila. Esto es, disponemos de una cinta de entrada (IT),
una unidad de control con una cantidad nita de memoria, y una pila.
Una cinta de output. En la que el automata simplemente puede escribir, no
puede leer sus contenidos, y puede avanzar un paso a la derecha siempre que
la celda anterior no este vaca.
Las operaciones de un traductor con pila son sucesiones de operaciones del tipo
siguiente:
1. Read. Lee una celda en la cinta de entrada y el top de la pila. Eventualmente
puede hacer operaciones de lectura en la cinta de entrada. por supuesto, lee
tambien el estado actual en la unidad de control.
2. Transition. De acuerdo con una funcion de transicion (o de una tabla como la
que usaremos en las secciones siguientes) el automata indica tres operaciones
basicas a realizar en cada uno de los cuatro elementos.
3. Write and Move. En cada na de las partes realiza la accion que se indica:
En la cinta de input, si ha ledo, borra la celda que ocupa y se desplaza
hasta la celda siguiente. Si la lectura es una Lambda-lectura, no hace
nada en la cinta de input.
En la unidad de control, modica el estado conforme se indica en la
Transicion.
En la pila realiza la operacion push(pop(Pila), z) donde z es el smbo-
lo indicado por la transicion. Sera una operacion push si z ,= y una
operacion pop si z = .
4.4. TRADUCTORES PUSHDOWN. 117
En la cinta de output escribe lo que se le indique. Puede ser que no escriba
nada, en cuyo caso no se mueve, o que escriba un smbolo en cuyo caso
se mueve un paso a la derecha hasta la siguiente celda vaca.
La computacion se termina con pila y cinta vacas. Es decir, el automata funciona
con un gran ciclo while cuya condicion de parada es que la cinta y la pila estan
vacas.
En ese caso, se dice que el input es aceptado (lo que signicar a que el input esta en
el lenguaje generado por la gramatica de input). El output, es el contenido de la
cinta de output y es la traduccion de la palabra escrita en la cinta de input.
Esta denicion informal va acompa nada de una denicion formal que escribimos a
continuacion:
Denici on 130 (PDT) Un traductor con pila (pushdown transducer o PDT), es
una lista T := (Q, , , , Q
0
, z
0
, F, ) donde:
1. Q es un conjunto nito (espacio de estados)
2. es un alfabeto nito, llamado alfabeto del input.
3. es un alfabeto nito, llamado alfabeto de la pila.
4. es un alfabeto nito, llamado alfabeto del output.
5. q
0
Q es el estado inicial.
6. F Q son los estados nales aceptadores.
7. z
0
es un smbolo especial, llamado fondo de la pila.
8. es una correspondencia llamada funci on de transici on:
: Q( ) ( z
0
) Q( z
0
)

.
Sistema de Transici on asociado a un PDT.
Obviamente se trata de un conjunto cuyas conguraciones son los elementos del
conjunto
o := Q

z
0

.
Una conguracion c = (q, x, z
0
z, y) esta describiendo q como el estado de la unidad
de control, x es el contenido de la cinta de input, z
0
z es el contenido de la pila, y es
el contenido de la cinta de output.
De la manera obvia se describen las transiciones c c

entre dos transiciones del


sistema. Lo dejamos como ejercicio para los alumnos.
La conguracion inicial en una palabra

sera dada por:


I() := (q
0
, , z
0
, ),
es decir, esta en la cinta de input, q
0
en la unidad de control, la pila esta vaca y
la cinta de output tambien.
118 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Una conguracion nal aceptadora es una conguracion con pila y cinta vacas, esto
es, una conguracion de la forma (q, , z
0
, y) con y

.
Una palabra

es aceptada si alcanza una conguracion nal aceptadora dentro


del sistema de transicion. Esto es, si ocurre que:
I() = (q
0
, , z
0
, ) (q, , z
0
, y).
la palabra y es el resultado de la traduccion de en el caso de que omega sea
aceptada por el PDT (i.e. y = ()).
Nota 131 En lo que sigue, la traducci on se har a a traves de parsing y SDTS.
Por tanto, usaremos PDTs del modo siguiente: Si L
1
es el lenguaje del input y
T
input
es la gram atica del input asociada a nuestro sistema SDTS, procederemos
enumerado los producciones de T
input
. Deniremos el lenguaje de output como
:= 1, . . . , N, donde N es el n umero de las producciones de T
input
. As, el out-
put de un analizador sint actico (descrito tambien mediante un PDT) es una lista
i
1
i
2
i
r

, que indican (en modelo directo o en reverso) las producciones que


se aplican.
Nota 132 En los casos que siguen, el PDT y sus estados se describir an mediante
diversos tipos de tablas. En cada caso iremos mostrando c omo se construyen esas
tablas.
4.5. Gramaticas LL(k): Analisis Sintactico
Se trata de un modelo de analisis sintactico descendente (topdown) basado en left
parsing (o sea, buscando arboles de derivacion mas a la izquierda) y es determinista
para ciertas clases de gramaticas: las gramaticas LL(k).
El ejemplo clasico de lenguaje de programacion que admiten parsing LL(1) es Pascal.
Vase la obra de Niklaus Wirth y la tradicion europea de analisis sintatico (cf.
[Wir96]).
4.5.1. FIRST and FOLLOW
Denici on 133 Sea G := (V, , Q
0
, P) una gram atica libre de contexto. Para cada
forma sentencial (V )

y para cada k N deniremos la funci on


FIRST
G
k
() := x

:
[x[ = k

,
G
lm
x
[x[ < k
G
lm
x
.
Omitiremos el superndice
G
siempre que su presencia sea innecesaria por el contexto.
En otras palabras, el operador FIRST
k
asocia a cada forma sentencial los primeros k
smbolos de cualquier forma terminal alcanzable desde mediante derivaciones mas
a la izquierda. Si alcanza una forma terminal con menos de k smbolos x

,
con derivaciones mas a la izquierda, entonces tambien x esta en FIRST
k
().
4.5. GRAM

ATICAS LL(K): AN

ALISIS SINT

ACTICO 119
Si

, FIRST
k
() son los primeros k smbolos de . Mas especcamente, si
:= x
1
x
k
x
k+1
x
n

, entonces
FIRST
k
() = x
1
x
k
.
Nos ocuparemos, sobre todo, del operador FIRST() := FIRST
1
(). Para dar
un algoritmo que los calcule comenzaremos con algunas propiedades basicas del
Operador FIRST. Mas a un, comenzaremos con una construccion de un operador
entre lenguajes:
Denici on 134 Sean L
1
, . . . , L
n
(V )

lenguajes. Deniremos el lenguaje


L
1

1

1
L
n
(V )

mediante la siguiente igualdad: Sea j 1, . . . , n tal


que L
i
para 1 i j 1 y , L
j
. Entonces,
L
1

1

1
L
n
:=
j
_
i=1
L
i
.
Ejemplo 20 Dados L
1
= , abb y L
2
= b, bab, entonces
L
1
L
2
= abb, b, bab, , L
2
L
1
= b, bab. (4.1)
Lema 135 Con las anteriores notaciones, se tienen las siguientes propiedades.
1. Si X = a y la gram atica no contiene smbolos in utiles, entonces FIRST(X) =
a.
2. Si := X
1
X
n
donde X
i
(V )

, entonces
FIRST() = FIRST(X
1
)
1

1
FIRST(X
n
).
3. Si V

son los smbolos no terminales que alcanzan la palabra vaca, entonces


FIRST(X) si y solamente si X V

.
Nota 136 A partir de Lema anterior, el c alculo de FIRST de una forma sentencial
cualquiera puede reducirse al c alculo de los FIRSTs de sus smbolos. De ah, el
an alisis que haremos en el algoritmo de evaluaci on de FIRST solo para variables.
Notaci on 137 Para simplicar la notaci on, supongamos dada una aplicaci on
F : (V ) T((V ))

,
escribiremos
F
1
para cada forma terminal queriendo denotar

F
1
:= F(X
1
)
1

1
F(X
n
),
cuando = X
1
X
n
.
120 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Denimos el siguiente algoritmo incremental:
Input: una gramatica libre de contexto G := (V, , Q
0
, P).
Hallar V

:= A V : A .
if A , then F(A) := A
9
else do
G(A) :=
F(A) :=
_
A si A , V

A, si A V

while F(A) ,= G(A) para alg un A V do


10
G(A) := F(A)
F(A) :=
F
1
: X , X F(A) F(A)
od
Output: F(A) , para cada A V .
Proposici on 138 (Evaluaci on de FIRST) El anterior algoritmo eval ua la fun-
ci on FIRST(X) para cada X V .
Denici on 139 (FOLLOW) Con las mismas notaciones anteriores, para cada
forma sentencial (V )

deniremos la funci on FOLLOW


G
k
() del modo
siguiente.
Si existe una forma sentencial (i.e. si Q
0

G
), con (V )

,
entonces FOLLOW
G
k
().
Adicionalmente, denamos
FOLLOW
G
k
() := x

: Q
0
, , (V )

, x FIRST
G
k
().
De nuevo, omitiremos el superndice
G
cuando no genere confusi on.
De nuevo nos ocuparemos solamente de FOLLOW := FOLLOW
1
. Observese que
FOLLOW
k
()

y que para cada x FOLLOW


k
(), [x[ k.
Observese que para cada variable A V , FOLLOW(A) son todos los smbolos
terminales que pueden aparecer a la derecha de A en alguna forma sentencial de
la gramatica. Si A estuviera al nal de alguna forma sentencial, la palabra vaca
tambien se a nade.
Input: una gramatica libre de contexto G := (V, , Q
0
, P) que supondremos libre de
smbolos in utiles
11
.
9
Aceptaremos que A
lm
A.
10
Notese que la frase debe escribirse como while A V, F(A) = G(A)do
11
De hecho, nos interesa que no haya smbolos inaccesibles.
4.5. GRAM

ATICAS LL(K): AN

ALISIS SINT

ACTICO 121
Hallar FIRST(X), para cada X (V ).
G(X) := , para cada X V
F(Q
0
) :=
F(A) := , para cada A ,= Q
0
.
while F(A) ,= G(A) para alg un A V , do
G(A) = F(A) para cada A V
F(A) :=
_
_
BA

_
FIRST(

)
_
_
_
_
_
_
_
BA

, FIRST(

)
F(B)
_
_
_
_
F(A) .
od
Output: F(A) ( ) para cada A V .
Ejemplo 21 Consideremos la gram atica con V := Q
0
, E

, X, T, T

, := id, (, ), +, .
Las producciones son:
P := Q
0
TE

, E

+TE

[ , T XT

, T

XT

[ , X (Q
0
) [ id.
Tendremos
FIRST(Q
0
) = (, id, FIRST(E

) := +, ,
FIRST(X) = (, id, FIRST(T) = (, id, FIRST(T

) = , .
Calculemos todos los FOLLOWs de las variables:
Inicializar:
G(Q
0
) = , G(E

) = , G(X) = , G(T) = , G(T

) = ,
F(Q
0
) = , F(E

) = , F(X) = , F(T) = , F(T

) = .
Primer while:
Variable Q
0
:
Producci on F (Q
0
): A nadir FIRST()) a F(Q
0
):
F(Q
0
) := F(Q
0
) FIRST()) = , ).
Variable T:
Producci on Q
0
TE

: A nadir FIRST(E

) a F(T):
122 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Producci on Q
0
TE

, n otese que FIRST(E

): A nadir F(Q
0
)
a F(T).
Producci on E

+TE

: A nadir FIRST(E

) a F(T).
Producci on E

+TE

, n otese que FIRST(E

): A nadir F(E

)
a F(T).
F(T) = (FIRST(E

) ) F(Q
0
) (FIRST(E

) ) F(E

),
F(T) = +, ) + = +, , ).
Variable E

:
Producci on Q
0
TE

, = , FIRST(): A nadir F(Q


0
) a
F(E

).
Producci on E

+TE

:No a nade nada nuevo.


F(E

) = F(Q
0
) = , ).
Variable X:
Producci on T XT

: A nadir FIRST(T

) a F(X).
Producci on T

XT

: Idem.
Producci on T XT

, como FIRST(T

): A nadir F(T) a F(X).


F(X) = (FIRST(T

) ) F(T) = , , +, ).
Variable T

:
Producci on T XT

: A nadir F(T) a F(T

)
Producci on T

XT

: idem.
F(T

) = +, , ).
Segundo while: Todos coinciden.
Output:
F(Q
0
) = , ), F(E

) = , ), F(X) = , , ), +, F(T) = +, , ), F(T

) = +, , ).
4.5.2. Gramaticas LL(k)
Denici on 140 (Gramaticas LL(k)) Una gram atica libre de contexto G = (V, , Q
0
, P)
se dice de clase LL(k) si verica la siguiente propiedad: Dadas dos derivaciones,
donde

, A V, , , (V )

, del tipo siguiente:


Q
0

lm
A
lm
x

,
Q
0

lm
A
lm
y

,
Si FIRST
k
(x) = FIRST
k
(y), entonces = .
4.5. GRAM

ATICAS LL(K): AN

ALISIS SINT

ACTICO 123
La idea es que si hacemos dos derivaciones a izquierda desde una variable de nuestra
gramatica, y si llegamos a dos formas terminales en las que los primeros k smbolos
a partir de A de una forma terminal coinciden, entonces es que hemos tenido que
hacer la misma derivacion desde A.
La expresion formal es delicadamente retorcida, pero su sentido no se vera hasta que
no procedamos a la construccion de la tabla de prediccion y analisis sintactico. Por
ahora veamos unos poco ejemplos.
Ejemplo 22 Un ejemplo de gram atica LL(1) es la dada mediante: Q
0
aAQ
0
[
b, A a [ bQ
0
A
Ejemplo 23 La gram atica Q
0
[ abA, A Q
0
aa [ b es una gram atica LL(2)
Ejemplo 24 La gram atica G
3
= (Q
0
, A, B, 0, 1, a, b, P
3
, Q
0
), donde
P
3
:= Q
0
A [ B, A aAb [ 0, B aBbb [ 1,
no es una gram atica LL(k) para cualquier k. El lenguaje generado L(G
3
) es el
lenguaje dado por
L(G
3
) := a
n
0b
n
: n 0 a
n
1b
2n
: n 0.
Proposici on 141 Una gram atica G = (V, , Q
0
, P) es LL(k) si y solamente si se
verica la siguiente propiedad:
Dadas dos producciones A y A tales que A es accesible y se tiene Q
0

lm
A, con

y (V )

, entonces
FIRST
k
() FIRST
k
() = .
Demostracion. Siguiendo la propia denicion.
Ejemplo 25 La gram atica Q
0
aQ
0
[ a no puede ser LL(1) porque FIRST
1
(aQ
0
) =
FIRST
1
(a) = a.
4.5.3. Tabla de Analisis Sintactico para Gramaticas LL(1)
Antes de comenzar, enumeraremos nuestras producciones, asignandole un n umero
natural a cada una de ellas. Ademas, introduciremos un nuevo smbolo que hara las
funciones de fondo de la pila.
Construiremos una tabla
M : (V ) ( ) T(P),
donde T(P) es el conjunto de todos los subconjuntos del conjunto de las produccio-
nes.
Input: Una gramatica libre de contexto G = (V, , Q
0
, P).
Establecemos una tabla M cuyas las estan indicadas por los elementos de V
y cuyas columnas estan indicadas por los elementos de .
Deniremos M del modo siguiente:
124 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Dada una produccion (i) A
Para cada a FIRST(), a ,= , a nadir i a la casilla M(A, a).
Si FIRST() a nadir i en todas las casillas M(A, b) para cada b
FOLLOW(A).
M(a, a) =pop para cada a .
M(, ) =accept.
En todos los demas casos escribir M(X, i) =error.
Nota 142 Para simplicar la escritura de una tabla, conviene enumerar las pro-
ducciones y usar esta enumeraci on tanto para denir la tabla de an alisis sint actico
(parsing) como los procesos que sigan en la Subsecci on siguiente.
Como ejemplo, consideremos la gram atica G = (V, , Q
0
, P), donde las producciones
son:
P := Q
0
aAQ
0
[ b, A a [ bQ
0
A.
Enumeramos estas producciones del modo siguiente:
(1) Q
0
aAQ
0
(2) Q
0
b
(3) A a
(4) A bQ
0
A
Proposici on 143 Dada una gram atica libre de contexto G, y dada T(G) la tabla
construida por el algoritmo anterior, entonces G es LL(1) si y solamente si todos
las casillas de la tabla T(G) contienen exactamente una producci on o una de las
palabras seleccionadas (pop, accept, error).
Ejemplo 26 Veamos un ejemplo basado en la gram atica descrita en el ejemplo an-
terior. La tabla de an alisis sint actico correspondiente ser a la siguiente:
a b
Q
0
1 2 error
A 3 4 error
a pop error error
b error pop error
error error accept
Observese que la gram atica es LL(1) porque la tabla tiene siempre una entrada (y
no m as).
4.5. GRAM

ATICAS LL(K): AN

ALISIS SINT

ACTICO 125
4.5.4. Parsing Gramaticas LL(1)
Vamos a construir un traductor con pila (PDT) asociado a cada gramatica LL(1).
Ademas, ese traductor sera determinista cuando la gramatica sea LL(1). El PDT se
dene con las reglas siguientes:
El espacio de estados estara formado por un estado mas relevante M que
hace referencia a la tabla de analisis sintactico tal y como se ha descrito en
la Subseccion anterior, un estado inicial q
0
que solo aparece al inicializar el
proceso, un segundo estado error que indica que se ha producido un error en
el analisis sintactico y un ultimo estado accept que indica que ha terminado
la computacion y hemos aceptado el input. Por tanto, F = accept, Q :=
q
0
, M, error, accept.
El alfabeto de la cinta de input es el alfabeto de la gramatica dada.
El alfabeto de la cinta de output son los n umeros naturales 1, . . . , N de
una enumeracion de las producciones de la gramatica original.
El alfabeto de la pila es la union de los alfabetos V (conjunto de variables de
la gramatica), (el alfabeto de la cinta de input) y el smbolo que jugara el
papel de fondo de la pila.
= V .
La funcion de transicion vendra dada por
: q
0
, M ( ) ( ) M

.
Las transiciones quedaran denidas por las reglas siguientes:
1. Inicializar (q
0
, , ) = (M, Q
0
, ), donde Q
0
es la variable inicial de la
gramatica a analizar. Signica que comenzamos con una transicion
para cargar la variable inicial en la pila, sin borrar ning un dgito de la
cinta de input y sin a nadir ninguna produccion en la cinta de output.
2. Dados X , u , supongamos que M(X, u) ,= error, pop, ac-
cept.
12
Denimos (M, u, X) = (M,
R
, M(X, u)) = (M,
R
, i), donde i
es el n umero de la produccion correspondiente y
R

es el reverso de
la lista de smbolos que aparecen a la derecha en la producci on iesima.
13
Signica que hacemos push(pop(lista),
R
) en la pila, y que a nadimos i
a la cinta de output, pasando a la siguiente celda vaca. No nos movemos
en la cinta de entrada.
3. Dados X , u , supongamos que M(X, u) =pop, denimos
(M, u, X) = (M, , ) (indicando que hacemos pop en la pila, borramos
una celda en la cinta de input y no escribimos nada en la cinta de output).
12
Necesariamente X ha de ser una variable por la denicion de la tabla M
13
La produccion i-esima ha de ser X .
126 CAP

ITULO 4. INTRODUCCI

ON A PARSING
4. Dados X , u , supongamos que M(X, u) =error, entonces,
el proceso de analisis sintactico cambia a estado error y se detienen las
computaciones, aunque no se aceptan.
5. Por ultimo se dene (M/accept, , ) = (M/accept, , ) (indicando
que ha acabado la computacion y aceptamos).
Ejemplo 27 Retomemos el ejemplo de Subsecciones anteriores. Es la gram atica
G = (V, , Q
0
, P), donde V = Q
0
, A, = a, b, y las producciones son:
P := Q
0
aAQ
0
[ b, A a [ bQ
0
A.
Enumeramos estas producciones del modo siguiente:
(1) Q
0
aAQ
0
(2) Q
0
b
(3) A a
(4) A bQ
0
A
Tomamos la tabla M de an alisis sint actico:
M a b
Q
0
1 2 error
A 3 4 error
a pop error error
b error pop error
error error accept
Ahora tenemos el aut omata correspondiente que, esencialmente, est a descrito en esa
tabla. As, podemos evaluar:
(M, , ) a b
Q
0
(Q
0
Aa, 1) (b, 2) error
A (a, 3) (AQ
0
b, 4) error
a pop error error
b error pop error
error error accept
Ejemplo 28 (Sistema de transici on asociado al ejemplo) A modo de ejem-
plo, podemos considerar el sistema de transici on asociado a este ejemplo y al PDT
denido en el ejemplo anterior.
Tomemos una palabra de input = abbab y construimos la conguraci on inicial en
la palabra
I() := (M, abbab, , ).
Las computaciones del aut omata ir an como sigue:
Inicializamos I() (M, abbab, Q
0
, ).
4.6. GRAM

ATICAS LR(K): AN

ALISIS SINT

ACTICO 127
Leemos M(a, Q
0
) = 1, luego (M, a, Q
0
) = (M, aAQ
0
, 1), con lo que tenemos
la transici on:
(M, abbab, Q
0
, ) (M, abbab, aAQ
0
, 1).
Leemos (M, a, a) y M(a, a) =pop, as que borramos
(M, abbab, aAQ
0
, 1) (M, bbab, AQ
0
, 1).
Leemos (M, b, A) y M(b, A) = 4, luego aplicamos la transici on (M, b, A) =
(M, bQ
0
A, 4) y tenemos la transici on:
(M, bbab, AQ
0
, 1) (M, bbab, bQ
0
AQ
0
, 14).
Acudiendo a la tabla, iremos obteniendo las transiciones siguientes:
(M, bbab, bQ
0
AQ
0
, 14) (M, bab, Q
0
AQ
0
, 14) (M, bab, bAQ
0
, 142)
(M, ab, AQ
0
, 142) (M, ab, aQ
0
, 1423) (M, b, Q
0
, 1423)
(M, b, b, 14232) (M, , , 14232) (accept, , , 14232).
Dejamos que el alumno verique que las transiciones se comportan como se
ha indicado.
4.6. Gramaticas LR(k): Analisis Sintactico
Es un ejemplo de analisis sintactico ascendente basado en derivaciones mas a la
derecha. El analisis sera determinista para una clase especial de gramaticas que son
las gramaticas LR. Se basa en un proceso shiftreduce que debemos describir con
detalle.
La lucha entre generadores de lenguajes usando gramaticas LL frente a las gramati-
cas LR puede seguirse en el proyecto ANTLR o ANT(i) LR seg un otras lecturas.
Denici on 144 (Formas Sentenciales a Derecha) Llamaremos formas senten-
ciales a derecha a las palabras (V )

que son alcanzables mediante derivacio-


nes m as a la derecha. Esto es, Q
0

G
rm
. Si = x, con (V )

y x

,
llamaremos a la parte abierta y a x la parte cerrada de la forma sentencial a
derecha .
Insistiremos en la construccion de un PDT que realiza el an alisis sintactico y la
traduccion de las gramaticas LR(k) de forma determinista. El proceso sigue las
pautas siguientes:
128 CAP

ITULO 4. INTRODUCCI

ON A PARSING
4.6.1. Las Nociones Preliminares
Usaremos la gramatica aumentada.
Denici on 145 (Gramatica aumentada) dada una gram atica libre de contexto
G = (V, , Q
0
, P), llamaremos gram atica aumentada a la gram atica G

dada por lo
siguiente igualdad:
G

:= (V Q

0
, , Q

0
, P Q

0
Q
0
).
Denici on 146 (Gramaticas LR(k)) Una gram atica G se denomina LR(k) si su
gram atica aumentada satisface las siguientes propiedades. Dados A, B V , , ,
(V )

, w, x, y

que satisfacen las siguientes tres propiedades:


Q

0

G

rm
Aw
G

rm
w,
Q

0

G

rm
Bx
G

rm
y,
FIRST
k
(w) = FIRST
k
(y).
Entonces = , A = B, x = y.
La nocion se entiende mejor si decimos que una gramatica es LR(k) si el analisis
sintactico LR(k) produce un PDT determinstico. Para lo cual debemos ver este tipo
de analisis.
Denici on 147 (Handle) Dada una forma sentencial a la derecha , llamaremos
asa (handle) de a cualquier subpalabra de que aparezca en la parte derecha
de una producci on de la gram atica y tal que reemplazando el asa por la variable
seguimos tenemos una forma sentencial derecha. Es decir, existe (V )

y
existen A V , , (V )

, existe una producci on A , de tal modo que:


= ,
A tambien es una forma sentencial derecha,
A
rm
.
Notese que un analisis sintactico ascendente, basado en derivaciones mas a la dere-
cha, pretende predecir cual sera la forma sentencial anterior a una dada, detectando
el asa de la que tenemos. Es decir, la existencia de una derivacion
1

rm
, pasa
por detectar un asa e inferir ue

= A. La dicultad de esta reversion de la


derivacion es la dicultad de dise nar un analizador sintatico LR.
Denici on 148 (Prejo Viable) Supongamos dada una derivaci on m as a la de-
recha Q
0

rm
A
rm
(con

, , (V )

, A V y A ).
Llamaremos prejo viable de en G a toda palabra (V )

que es prejo
de . Es decir, es prejo de la forma sentencial y no contiene smbolos de la forma
sentencial m as a la derecha del asa de la palabra.
4.6. GRAM

ATICAS LR(K): AN

ALISIS SINT

ACTICO 129
Denici on 149 (Items LR(k)) Sea G = (V, , Q
0
, P) una gram atica libre de con-
texto. Llamaremos tem LR(k) de G a toda lista [A
1

2
, u] vericando:
A
1

2
es una producci on de la gram atica,
u

y [u[ k.
Denici on 150 (Items Validos LR(k)) Sea G = (V, , Q
0
, P) una gram atica li-
bre de contexto. Sea [A
1

2
, u] un tem LR(k) y sea un prejo viable de G.
Decimos que [A
1

2
, u] es un tem v alido para si se verica:
=
1
, con (V )

,
existe una derivaci on m as a la derecha Q
0

rm
A
rm

1

2
, tal que
u = FIRST
k
().
Notese que
2
puede ser y que cada prejo viable tiene, al menos, un tem LR(k)
valido.
Denici on 151 (FIRST libre) Denimos la funci on libre FIRST, y la de-
notaremos mediante EFF
G
k
() como la funci on dada por las propiedades siguientes:
Si no comienza con una variable, entonces EFF
k
() = FIRST
k
().
Si comienza por una variable, denimos EFF
k
() mediante:
EFF
k
() := w :
rm

rm
wx, [ ,= Awx, A V ], w = FIRST
k
(wx).
La funcion EFF
k
considera todos los miembros de FIRST
k
cuyas derivaciones no
se producen reemplazando una variable inicial por .
Teorema 152 (Una caracterizaci on de las gramaticas LR(k)) Sea G = (V, , Q
0
, P)
una gram atica libre de contexto. Entonces, G es LR(k) si y solamente si se verican
las siguientes propiedades:
Para cualquier u

, con [u[k, y para cualquier prejo viable de una forma


sentencial a derecha w de la gram atica extendida G

, se tiene:
Sea [A , u] un tem LR(k) v alido para , entonces no existe ning un otro tem
v alido [A
1

2
, v] con u EFF
k
(
2
v).
Demostracion. La omitimos
4.6.2. Calculo de la Coleccion Canonica
Denici on 153 Sea G una gram atica libre de contexto y un prejo viable para
G. Denimos el conjunto V
k
() como el conjunto de todos los items LR(k) v alidos
para .
Denimos el conjunto o de todos los conjuntos de items v alidos de una gram atica
mediante:
o := a : a = V
k
(), es prejo valido.
130 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Algoritmo Tomar la Clausura
Input:
Una gramatica libre de contexto G = (V, , Q
0
, P)
Una forma (V )

.
Output: El conjunto V
k
().
Concepto del Proceso: Si = X
1
X
n
, calcularemos V
k
(), calculando
V
k
(), V
k
(X
1
), V
k
(X
1
X
2
), . . . , V
k
(X
1
X
2
X
n
)
(1) Calculamos V
k
() del modo siguiente:
Si Q
0
estan en P, a nadir [Q
0
, ] a V
k
().
Si [A B, u] esta en V
k
() y si B esta en P, entonces, para cada
x en FIRST
k
(u), a nadir [B , x] a V
k
().
Repetir el paso anterior hasta que no se puedan a nadir mas items.
(2) Supuesto que hemos calculado V
k
(X
1
X
i1
) para cada i n, entonces
calculamos V (X
1
X
2
X
i
) del modo siguiente:
Si [A X
i
, u] esta en V
k
(X
1
X
i1
), a nadimos el tem [A
X
i
, u] a V
k
(X
1
X
i
).
Si [A B, u] esta en V
k
(X
1
X
i
) y B esta entre las pro-
ducciones, a nadir el tem [B , x] a V
k
(X
1
, . . . , X
i
) para cada x en
FIRST
k
(u).
Repetir el paso anterior hasta que no se puedan a nadir mas items.
Proposici on 154 El anterior algoritmo calcula V
k
() para cada .
Demostracion. Ver [AU72], Theorem 5.10, p. 387.
Denici on 155 (GOTO) Con las anteriores notaciones, denimos la funci on GOTO
de la forma siguiente:
Dados a = V
k
() para alg un (V )

, y dado X V , denimos GOTO(a, X) =


a

, donde a

= V
k
(X).
Proposici on 156 La fase (2) del algoritmo Tomar Clausura anterior es un al-
goritmo que eval ua GOTO.
Demostracion. Obvio.
4.6. GRAM

ATICAS LR(K): AN

ALISIS SINT

ACTICO 131
Denici on 157 (Colecci on Can onica) Dada una gram atica libre de contexto G,
llamamos colecci on can onica de G a la colecci on de todos los conjuntos de todos los
LR(k) items v alidos de su gram atica aumentada.
Algoritmo Colecci on Can onica
Input: Una gramatica libre de contexto G = (V, , Q
0
, P) y un entero k.
Output: El conjunto
o := a : a = V
k
(), es prejo valido.
Inicializar: o = .
(1) A nadir V
k
() a o como elementos no marcados.
(2) Para un elemento a en o que no este marcado, marcar a y calcular todos
los conjuntos a

:= GOTO(a, X) para cada X V . Si a

es no vaco y no
esta ya en o, a nadir a

a o como elemento no marcado.


(3) Repetir el proceso anterior hasta que no queden elementos sin marcar en
o.
Nota 158 Observese que para hallar la colecci on can onica con el anterior algoritmo,
nunca es necesario calcular (para la gram atica aumentada) GOTO(a, Q

0
) puesto que
este conjunto de items es siempre vaco.
Testar la condici on LR(k)
Bastara con usar los algoritmo anteriores. Dada una gramatica G, diremos que un
conjunto a de LR(k) items es consistente si no hay dos elementos distintos en a
tienen la forma: [A , u], [B
1

2
, v], con u EFF
k
(
2
v), aunque
2
sea .
Proposici on 159 Una gram atica CFG es LR(k) si y solamente si todos los ele-
mentos de o son consistentes.
Por tanto, testar si una gramatica es LR(k) se puede hacer, calculando o y demos-
trando que todos sus elementos son consistentes (vericacion tomando pares dos a
dos en cada a de o). No merece mayor discusion.
4.6.3. Tabla(s) de analisis sintactico LR(k)
Denici on 160 (Tabla de Parsing LR(k)) La tabla de parsing de una gram atica
LR(k) a asociada a un conjunto a en o es un par de funciones f, g), con las
siguientes propiedades:
1. Las producciones de la gram atica han sido enumeradas y est an en biyecci on
con el conjunto 1, . . . , N.
132 CAP

ITULO 4. INTRODUCCI

ON A PARSING
2. La aplicaci on f es dada por
f : u

: [u[ k error, shift, acceptreduce(i) : i 1, . . . , N,


donde:
f(u) := shift si [A
1

2
, v] est a en a,
2
,= , y u EFF
k
(
2
v).
f(u) := reduce(i) si [A , u] est a en a y A es la iesima
producci on de P.
f() := accept si [Q

0
Q
0
, ] est a en a.
f(u) = error en cualquier otro caso.
3. La funci on g es dada por:
g : V o error,
y es dada mediante:
g(X) := GOTO(a, X) o, si GOTO(a, X) ,= ,
g(X) = error en otro caso.
Notese que g es la funcion que indica cual es la siguiente tabla a aplicar.
De hecho, la Tabla de analisis sintactico LR(k) es un conjunto de tablas, cada una
de las cuales esta asociada con un elemento de o. Formalmente, se puede denir as:
Denici on 161 Las tablas LR(k) de conjuntos can onicos para una gram atica G de
tipo LR(k) es una lista (, T
0
) donde es la lista de las tablas de la colecci on de
conjuntos can onicos de la gram atica y T
0
es la tabla LR(k) asociada con V
k
().
Ejemplo 29 Para entender el dise no de las tablas LR(k) comencemos por una
gram atica sencilla con V = Q
0
y = a, b. Supongamos que las producciones
son:
P := Q
0
Q
0
aQ
0
b [ .
Es una gram atica LR(1). De todas formas lo vamos a vericar con la construcci on
de la colecci on can onica. Comenzamos construyendo la gram atica aumentada G

.
Procedemos a construir el conjunto o.
4.6.4. PDT de Parsing para gramaticas LR(k)
Describiremos un automata analogo al descrito para las gramaticas LL(1). Dispon-
dremos de los siguientes elementos:
Una cinta de input en la que podemos leer hasta k smbolos consecutivos.
Bastara con leer de izquierda a derecha, acumular los k smbolos ledos en
la unidad de control. En la cinta de input estara inicialmente la palabra a
analizar. Su alfabeto sera .
Una pila. En ella iremos acumulando smbolos en V o, donde o son los
smbolos que indican las distintas tablas LR(k).
4.6. GRAM

ATICAS LR(K): AN

ALISIS SINT

ACTICO 133
Una cinta de output en la que iremos escribiendo las sucesivas producciones
que se indiquen. Su alfabeto sera 0, 1, . . . , N donde 1, . . . , N es una enu-
meracion de las producciones de la gramatica dada.
Una unidad de control capaz de acumular informacion asociada a los k primeros
smbolos, a las tablas LR(k) y a los estados shift, error, accept.
El fondo de la pila esta indicado por T
0
el smbolo de la tabla de V
k
().
La conguracion inicial para una entrada

sera:
(T
0
, , ),
describiendo, respectivamente, los contenidos de la pila, la cinta de input y la cinta
de output.
El funcionamiento del automata es como sigue:
(1) Se leen k smbolos consecutivos de la cinta de input (que se guardan en la
unidad de control).
(2) Aplicamos las tablas con la funcion f del modo siguiente:
(a) Si f(u) = shift aplicar las siguientes acciones:
Si hay smbolo siguiente a u en la cinta, pongamos a, se traslada el
primer smbolo de la cinta de input a la pila, borrandolo de la cinta
de input.
La funcion GOTO se aplica a los dos elementos en el top de la pi-
la (ahora seran T, el smbolo de la tabla que estaba antes en el
top, y el smbolo a que acabamos de a nadir). Esto es, calculamos
GOTO(T, a) = T

, donde T era el top de la pila en el apartado ante-


rior. Despues a nadimos el nuevo smbolo en el top de la pila.
Si no hay smbolo siguiente en la cinta o si GOTO no esta denido,
devolver error y terminar la computacion.
Volvemos a aplicar el proceso desde el paso (1).
(b) Si f(u) = reduce(i) y la produccion i es de la forma A , entonces
borrar 2[[ smbolos de la pila,
escribir i en la cinta de output,
a nadimos A a la pila,
aplicamos GOTO(top(pop(pila)), top(pila)), es decir, hallamos GOTO(top(pila
anterior), A) = T

. Es decir, hallamos GOTO del top de la pila (antes


de modicarla en este mismo paso) y de la variable A que acabamos
de localizar con la produccion i,
concluimos por a nadir T

a la pila.
(c) Si f(u) = error, detener la computacion y devolver error.
(d) Si f(u) = acceptterminar la computacion, aceptando el input y dan-
do como output el contenido de la cinta de output.
Ejemplo 30 Veamos un ejemplo del proceso propuesto.
134 CAP

ITULO 4. INTRODUCCI

ON A PARSING
4.7. Cuestiones y Problemas
4.7.1. Cuestiones
Cuesti on 28 Compara la siguiente versi on iterativa del algoritmo propuesto para
el c alculo de FIRST:
Deniremos los conjuntos F
i
(X) para valores crecientes de i del modo siguiente:
if X then F
i
(X) = X, para todo i.
F
0
(X) := x : X x P.
F
i
(X) := x : X Y
1
Y
n
P y x F
i1
(Y
1
) F
i1
(Y
2
)
F
i1
(Y
n
) F
i1
(X).
if F
i
(X) = F
i+1
(X), para todo X then Output
F
i
(X) : X V .
Cuesti on 29 Consideremos el siguiente SDTS. Denotaremos a las variables utili-
zando < x >:
< exp > sums < exp >
1
with < var >< exp >
2
to < exp >
2
do < statement >,
begin < var > < exp >
if < var >< exp >
1
then;
begin < statement >
< var >< var > +1;
endend
< var > < id >, < id >
< exp > < id >, < id >
< id > a < id >, a < id >
< id > b < id >, b < id >
< id > a, a
< id > b, b
Razonar porque no es un sistema de traducci on directa. Cual deberia ser la tra-
ducci on para la siguiente palabra:
for a b to aa do baa bba.
Cuesti on 30 Deducir como se escriben las transiciones en un traductor con pila.
4.7. CUESTIONES Y PROBLEMAS 135
Cuesti on 31 En el algoritmo CYK, para construir los posibles arboles de deriva-
ci on, hay que calcular varios valores t
i,j
. Discutir que representan estos valores y
por que hay que calcular los valores t
1,n
, donde n es la longitud de la palabra.
Cuesti on 32 Dar un ejemplo de una gram atica libre de contexto ambigua, construir
un traductor con pila y explicar porque no es aconsejable su utilizaci on en lenguajes
de programaci on.
Cuesti on 33 Suponed que en una gram atica libre de contexto se tiene la siguiente
producci on A AA. Discutir si la gram atica es ambigua.
Cuesti on 34 Dada la siguiente gram atica:
Q
0
0A0[1B1B, A 0BQ
0
[1[, B 0[A[.
Calcular FIRST(AB), FIRST(AA), FOLLOW(1B).
Cuesti on 35 Demostrar que la siguiente gram atica es LL(1):
Q
0
aAQ
0
[b, A a[bQ
0
A.
4.7.2. Problemas
Problema 76 Consideremos el siguiente SDTS. Denotaremos a las variables utili-
zando < x >:
< exp > sums < exp >
1
with < var >< exp >
2
to < exp >
3
,
begin local t;
t = 0;
for < var >< exp >
2
to < exp >
3
do :
t t+ < exp >
1
; result t;
end
< var > < id >, < id >
< exp > < id >, < id >
< id > a < id >, a < id >
< id > b < id >, b < id >
< id > a, a
< id > b, b
Dar la traducci on para las siguientes palabras:
1. sum aa witha b to bb.
2. sum sum a withaa aaa toaaaawithb bb tobbb.
136 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Problema 77 Sea L
1
, L
2
lenguajes libres de contexto con intersecci on vaca. Cons-
truir un SDTS tal que traduzca
(x, y)[si x L
1
entonces y = 0 y si x L
2
entonces y = 1
Problema 78 Sea el siguiente traductor con pila,
(q, q
1
, a, +, , , +, E, a, , +, , q, E)
donde est a denido por las siguientes relaciones:
(q, a, E) = (q, e, a)
(q, e, E) = (q
1
, e, e)
(q, +, E) = (q, EE+, e)
(q, , E) = (q, EE, e)
(q, e, ) = (q, e, ), (q
1
, e, )
(q, e, +) = (q
1
, e, +), (q, e, +)
(q
1
, e, ) = (q
1
, e, e)
(q
1
, e, E) = (q
1
, e, e)
(q
1
, e, +) = q
1
, e, e)
Traducir la siguiente palabra w = + aaa.
Denir un aut omata para el lenguaje de partida.
Problema 79 Construir un SDTS tal que
(x, y)[x a, b

y y = c
i

donde i es el valor absoluto del numero de a menos el numero de b de x.


Problema 80 Dise nar un traductor con cola que realice la siguiente funci on. Dado
el lenguaje sobe el alfabeto = a, +,
denido por la siguiente expresi on regular
(+

a)

elimine todos los operadores innecesarios. Como ejemplo, la siguiente palabra w =


+ +a + + +a a debera ser traducida a w

= a a +a.
Problema 81 Sea R un lenguaje regular, construir un traductor con pila M, tal que
para un lenguaje libre de contexto L, la traducci on
de L sea L-R.
Problema 82 Dada la siguiente gram atica,
Q
0
0Q
0
Q
0
0[A, A [1Q
0
1[,
Aplicar el algoritmo CYK para la palabra w = 0110.
4.7. CUESTIONES Y PROBLEMAS 137
Problema 83 Deducir el n umero de operaciones del algoritmo CYK y la capacidad
de memoria necesaria utilizada.
Problema 84 Construir la tabla de an alisis sint actico y el traductor con pila para
la siguiente gram atica LL(1):
Q
0
AB[BB, A 0A[1, B 2B12[3.
Problema 85 Construir la tabla de an alisis sint actico y el traductor con pila para
la siguiente gram atica LL(1):
Q
0
BAB[CBC, A 0B[1C, B mapsto1[0BB, C 0C[1Q
0
.
Problema 86 Demostrar que la siguiente gram atica es LL(1),
Q
0
TE

, E

+TE

[, T FT

, T

FT

[T

, F (Q
0
)[a
Calcular el traductor con pila y construir el arbol de derivaci on de la palabra w=a+a+a*a.
Problema 87 Construir la tabla CYK y la tabla LL(1) para la gram atica siguiente
(escrita en BNF y con las numeraciones indicadas para las producciones):
exp) := term)termTail) (1)
termTail) := addop)term)termTail) [ (2 [ 3)
term) := factor)factorTail) (4)
facorTail) := multop)factor)factorTail) [ (5 [ 6)
factor) := (exp)) [ NUM [ ID (7 [ 8 [ 9)
addop) := + [ (10 [ 11)
multop) := [ / (12 [ 13)
Problema 88 Consideremos la siguiente gram atica libre de contexto. Denotaremos
a las variables utilizando < x > y = sums, with, , to, do, a, b
< exp > := sums < exp > with < var >< exp > to < exp >
< exp > := sums b with < var >< exp > to < exp >
< exp > := < id >
< var > := < id >
< id > := a < id >
< id > := b < id >
< id > := a
< id > := b
Hallar una derivaci on mas a la izquierda y otra m as a la derecha de la siguiente
palabra utilizando el algoritmo CYK:
sums b with a b to aa
Discutir si la gram atica es ambigua. Eliminar la segunda producci on y construir la
tabla de an alisis sint actico. Discutir si la gram atica es LL(1).
138 CAP

ITULO 4. INTRODUCCI

ON A PARSING
Problema 89 Dada la siguiente gram atica:
< Orden > := < IntroducirElemento >< Orden >
< Orden > := < EliminarElemento >< Orden >
< Orden > :=
< IntroducirElemento > := push < id >;
< EliminarElemento > := remove < id >;
< id > := b < id >
< id > := a
< id > := b
< id > :=
Discutir si es una gram atica propia. Aplicar el algoritmo CYK a la palabra
push baa; push baaa; remove baaa; push b; remove baa;
Dar una derivaci on a la izquierda.
Problema 90 Hallar FIRST(< id >< id >< Orden >) y FOLLOW(< id ><
id >< EliminarElemento >) :
< Orden > := < IntroducirElemento >< Orden >
< Orden > := < EliminarElemento >< Orden >
< Orden > :=
< IntroducirElemento > := push < id >;
< EliminarElemento > := remove < id >;
< id > := b < id >
< id > := a
< id > := b
< id > :=
Discutir si es una gram atica propia. Aplicar el algoritmo CYK a la palabra
push baa; push baaa; remove baaa; push b; remove baa;
Dar una derivaci on a la izquierda.
Problema 91 Dada la siguiente gram atica, donde las variables son las letras may uscu-
4.7. CUESTIONES Y PROBLEMAS 139
las y los smbolos terminales son las letras min usculas
Q
0
:= aQ
0
a
Q
0
:= AB
A := AaB
A :=
B := BbbB
B := bb.
Hallar la tabla de an alisis sint actico.
Problema 92 Dada la siguiente gram atica, donde las variables son las letras may uscu-
las y los smbolos terminales son las letras min usculas
Q
0
:= aQ
0
a
Q
0
:= AB
A := AaB
A :=
B := BbbB
B := bb.
Hallar la tabla de an alisis sint actico.
Problema 93 Dada la siguiente gram atica, donde las variables son las letras may uscu-
las y los smbolos terminales son las letras min usculas
Q
0
:= aQ
0
a
Q
0
:= AB
A := AaB
A :=
B := BbbB
B := bb.
Hallar la tabla de an alisis sint actico. Discutir si la gram atica es ambigua.
Problema 94 Hallar FOLLOW de todas las variables de la siguiente gram atica,
donde las variables son las letras may usculas y los smbolos terminales son las letras
140 CAP

ITULO 4. INTRODUCCI

ON A PARSING
min usculas
Q
0
:= Q
0
Q
0
Q
0
:= AB
A := AaB
A :=
B := BbbB
B := abbB
B := bb.
Discutir si la gram atica es LL(1).
Apendice A
Generadores de Analisis
sintactico
Los generadores de analizadores sintacticos han tenido gran auge y en el momento
de publicacion de estas notas, hay una gran variedad de ellos. Por ser el padre de
muchos de ellos, quizas el mas conocido sea YaCC, desarrollado en AT & T, a partir
de el se crearon versiones libres, algunas tan conocidas como GNU Bison y Ber-
keley YaCC. YaCC necesitaba un analizador morfologico que separara el codigo a
realizar el analisis sintactico en Tokens. Como en el caso de analizadores sintacti-
cos, tambien existen diferentes opciones para generar analizadores morfologicos. Por
comodidad, muchos analizadores sintacticos incluyen alg un metodo para poder es-
pecicar los tokens necesarios.
Hablaremos de dos analizadores sintacticos, que ademas incluyen sus propios gene-
radores de analizadores morfologicos.
ANTLR: Generador de analizadores sintacticos de gramaticas LL. Iniciado el
proyecto por Terence Parr, tiene una gran comunidad detras y diferentes foros
donde poder consultar dudas. Ademas, ofrece la posibilidad de generar los
Parsers en diferentes lenguajes de programacion.
SableCC: Generador de analizadores sintacticos de gramaticas LALR, una sub-
clase de las gramaticas LR. Contiene una implementacion de los ultimos al-
goritmos en el campo. Como punto negativo, hay que comentar que el codigo
generado es java.
En las dos proximas secciones se dara una peque na introduccion a los dos programas.
Intentando dar una base solida al lector, de forma que el lector interesado pueda
profundizar en el tema. Se supondra que el lector ha ledo los dos primeros temas,
poniendo enfasis a la notacion BNF, EBNF y manejo de expresiones regulares.
A.1. Una introduccion al SableCC
Antes de empezar, es necesario instalar sablecc. La ultima version se puede encontrar
en http://sablecc.org/wiki/DownloadPage. En estos momentos, la version esta-
ble se encuentra en la 3.2. Se nos permite descargando un archivo zip, con el codigo
141
142 AP

ENDICE A. GENERADORES DE AN

ALISIS SINT

ACTICO
fuente de SableCC, un archivo llamado sablecc.jar, que es el archivo ejecutable.
Al estar escrito en java, para poder utilizarlo, lo unico que se necesita es tener ins-
talada la maquina virtual JAVA
TM
. SableCC toma como argumento una gramatica
en un archivo de texto que siga la siguiente especicacion:
Package NOMBRE;
// Nombre es el nombre
// del paquete donde se
// genera el codigo
Tokens
//Tokens que debe reconocer
//el analizador morfologico.
//Estos deben ser dados
//por medio de una expresion regular.
//Para mas informacion, ver Problema 33
//del primer tema.
token1=[a..z];
Productions
//Aqu vendra la gramatica del documento
//las reglas seguiran la notacion BNF
variable= {etiqueta1} variable token1|{etiqueta2} token1
//Las etiquetas sirven para dar un valor
//semantico a cada produccion.
Siguiendo nuestra losofa de aprender resolviendo problemas, se propone utilizar
este generador de parsers para hacer una peque na calculadora que reconozca e in-
terprete secuencias como la siguiente:
12 + 4 4
Consideraremos solamente expresiones que involucren sumas y multiplicaciones. Lo
primero de todo, consideraremos tres tipos de tokens, a saber, los n umero el signo
mas y el signo por. Ignoraremos los espacios y los saltos de linea por razones obvias.
Package suma ;
Tokens
numero=[ 0 . . 9 ] +;
mas=+ ;
por= ;
bl anco=( [ 9 [ 13[ 10) +; //Codigo a s c i i de l o s s a l t o s de l i ne a
I gnored Tokens //Tokens que se desecharan
// separados por comas
bl anco ;
Producti ons
A.1. UNA INTRODUCCI

ON AL SABLECC 143
//Supondremos dos t i p o s de expr es i ones l o s product os
// y l a s expr es i ones compl ej as
exp= expr es i on exp mas prod [ pr oduct os ol o prod ;
prod=f a c t o r prod por numero [ numerosol o numero ;
Ejecutando SableCC sobre este archivo, nos generara un paquete llamado suma,
dentro de un directorio llamado suma. El paquete suma genera una clase que nos
permitira recorrer el arbol de derivaciones en profundidad. Esta clase se llama Depth-
FirstAdapter.
Los metodos que dan valor semantico a las reglas gramaticales vienen determinados
por la cabecera de la produccion y la etiqueta, a nadiendo el prejo outA. Incluimos
el codigo de esta clase, as como de un peque no programa para leer caracteres del
teclado, que lee de un chero llamado entrada.txt:
import suma . node . ;
import suma . a na l ys i s . ;
import j ava . i o . ;
// Cl ase que da v al or semant i co a l a s producci ones
public cl ass Semanti ca extends DepthFi rstAdapter

i nt r e s ul t ado =0; // Var i abl e que dara e l r e s ul t ado .


i nt producto =1; // Var i abl e para l o s product os p a r c i a l e s
//Val or semant i co de l a producci on expr es i on de l a
// v a r i a b l e Exp
//Cogeremos e l v al or que hay en l a v a r i a b l e product o
// y l o sumamos al r e s ul t ado .
public void outAExpresionExp ( AExpresionExp node )

r e s ul t ado=r e s ul t ado+producto ;

//Val or semant i co de l a producci on numerosol o de l a


// v a r i a b l e Exp
//Cogeremos e l v al or que hay en e l product o y
// l o sumamos al r e s ul t ado
public void outAProductosol oExp ( AProductosol oExp node )

r e s ul t ado=r e s ul t ado+producto ;

//Val or semant i co de l a producci on f ac t or de l a


// v a r i a b l e prod
//Cogeremos e l v al or que hay en l a v a r i a b l e product o
// y l e mul t i pl i car emos por e l v al or de l numero .
144 AP

ENDICE A. GENERADORES DE AN

ALISIS SINT

ACTICO
public void outAFactorProd ( AFactorProd node )

St r i ng num=node . getNumero ( ) . getText ( ) ; // obt ener e l


// v al or de numero
// como t e x t o
i nt f a c t o r=I nt e ge r . par s e I nt (num) ; // t r ans f or mar l o
//a ent ero
producto=producto f a c t o r ;

public void outANumerosoloProd ( ANumerosoloProd node )

producto =1; // i ni c i al i z amos l a v a r i a b l e donde guardamos


// e l product o a uno
St r i ng num=node . getNumero ( ) . getText ( ) ; // obt ener e l
// v al or de numero
// como t e x t o
i nt f a c t o r=I nt e ge r . par s e I nt (num) ; // t r ans f or mar l o
//a ent ero
producto=producto f a c t o r ;

public void i mpri meResul tado ( )

System . out . pr i nt l n ( El r e s ul t ado es : +r e s ul t ado ) ;

A continuacion se incluye un peque no programa para utilizar nuestro recien creado


lexer. El codigo es bastante explicativo y no deberia representar problema alguno
para ser entendido.
import j ava . l ang . ;
import j ava . i o . ;
import j ava . u t i l . ;
import suma . par s er . ;
import suma . l e xe r . ;
import suma . node . ;
public cl ass Pr i nc i pal
public stati c void main ( St r i ng [ ] argv )

try
Fi l eReader Archi vo=new Fi l eReader ( entrada . t xt ) ;
Buf f eredReader Buf f er=new Buf f eredReader ( Archi vo ) ;
PushbackReader Cola=new PushbackReader ( Buf f er ) ;
A.2. UNA INTRODUCCI

ON A ANTLR 145
Lexer l=new Lexer ( Cola ) ;
Parser p = new Parser ( l ) ;
St ar t s t a r t = p . par s e ( ) ;
Semanti ca Prueba=new Semanti ca ( ) ;
s t a r t . appl y ( Prueba ) ; // Apl i car l a semant i ca al
// ar b ol de der i vaci on
Prueba . i mpri meResul tado ( ) ; // i mpri mi r r e s ul t ado
catch ( Excepti on e )
e . pr i nt St ackTr ace ( ) ;

;
A.2. Una introduccion a ANTLR
ANTLR es una atractiva interesante por la cantidad de herramientes que existen
para manejarlo. Aunque se puede bajar un jar ejecutable y trabajar en terminal,
existe un editor llamado ANTLRWorks
1
. Este se puede descargar de la siguiente
pagina web:http://www.antlr.org/works/index.html y haciendo doble click so-
bre el chero descargado podemos empezar a trabajar.
Lo primero que hay que declarar es que lo que necesitamos es generar un analizador
sintactico y un analizador morfologico, ya que ANTLR permite generar cualquiera
de los dos, tanto por separado o en conjunto. Esto especica iniciando el chero de
la gramatica con:
grammar Nombre para generar un analizador sintactico y un analizador mor-
fologico.
lexer Nombre para generar solamente un analizador morfologico.
parser grammar Nombre para generar solamente un analizador sintactico.
Para distinguir los tokens de las reglas gramaticales, los nombres de los tokens van
en may usculas y los nombres de las variables de nuestra gramatica en min usculas.
Si queremos denir alguna variable para guardar valores, lo podemos hacer sencilla-
mente declarando una cabecera donde ponga members.
Para darle un signicado semantico a cada produccion, el codigo ya no necesita ir en
una clase separa, sino introduccirlo en la produccion entre llaves. Esto lo hace mas
difcil de debuggear, pero es mas comodo para el programador. Ahora para ignorar
tokens hay que utilizar, entre llaves, el metodo skip(); en el token que se quiera
ignorar.
ANTLRWorks proporciona al usuario una forma automatica de probar su gramati-
ca, aunque tambien genera el codigo en caso de que tenga que ser utilizado en un
proyecto. Recordemos que ANTLR genera analizadores sintacticos de gramaticas
1
Notese que el nombre signica tanto como trabajo de ANTLR como ANTLR funciona!.
146 AP

ENDICE A. GENERADORES DE AN

ALISIS SINT

ACTICO
LL

. Esto hace que las reglas que presentan recursividad a la izquierda no funcio-
nen en ANTLR. Por esto, es conveniente utilizar notacion EBNF. Esta extension
utiliza expresiones regulares para denir producciones. Las expresiones regulares
aqu denidas salen de aplicar los algoritmos del primer captulo sobre como pasar
de gramaticas regulares a expresiones regulares. Veamos como seria la implementa-
cion del ejemplo anterior en ANTLRWorks:
grammar suma ;
@members
i nt producto =1;
i nt r e s ul t ado =0;

exp : prod r e s ul t ado=r e s ul t ado+producto ;


(MAS prod r e s ul t ado=r e s ul t ado+producto ; )
System . out . pr i nt l n ( r e s ul t ado : +r e s ul t ado ) ;
;
prod : pri mer=INT

producto =1;
i nt f a c t o r=I nt e ge r . par s e I nt ( $pri mer . t ext ) ;
producto=producto f a c t o r ;

(POR r e s t o=INT

f a c t o r=I nt e ge r . par s e I nt ( $r e s t o . t ext ) ;


producto=producto f a c t o r ;
) ;
INT : 0 . . 9 +;
MAS : + ;
POR : ;
BLANCO : ( [ n [ t [ r )+ s ki p ( ) ; ;
Bibliografa
[AHU75] Alfred V. Aho, John E. Hopcroft, and Jerey D. Ullman. The design
and analysis of computer algorithms. Addison-Wesley Publishing Co.,
Reading, Mass.-London-Amsterdam, 1975. Second printing, Addison-
Wesley Series in Computer Science and Information Processing.
[Alf07] M Alfonseca. Teora De Aut omatas y Lenguajes Formales. McGrawHill,
London, second edition, 2007.
[AU72] Alfred V. Aho and Jerey D. Ullman. The theory of parsing, translation,
and compiling. Vol. I: Parsing. Prentice-Hall Inc., Englewood Clis, N.
J., 1972. Prentice-Hall Series in Automatic Computation.
[AU73] Alfred V. Aho and Jerey D. Ullman. The theory of parsing, translation,
and compiling. Vol. II: Compiling. Prentice-Hall Inc., Englewood Clis,
N. J., 1973. Prentice-Hall Series in Automatic Computation.
[BDG95] Jose Luis Balcazar, Josep Daz, and Joaquim Gabarro. Structural com-
plexity. I. Texts in Theoretical Computer Science. An EATCS Series.
Springer-Verlag, Berlin, second edition, 1995.
[Cho57] N. Chomsky. Syntactic Structures. Mouton and Co., The Hague, 1957.
[Cho59a] Noam Chomsky. A note on phrase structure grammars. Information and
Control, 2:393395, 1959.
[Cho59b] Noam Chomsky. A note on phrase structure grammars. Information and
Control, 2:393395, 1959.
[Cho62] Noam Chomsky. Contextfree grammars and pushdown storage. Quaterly
Progress Report, 65, 1962.
[Cho65] Noam Chomsky. Three models for the description of language. IEEE
Transaction on Information Theory, 2:113124, 1965.
[CM58] Noam Chomsky and George A. Miller. Finite state languages. Information
and Control, 1:91112, 1958.
[CS63] N. Chomsky and M. P. Sch utzenberger. The algebraic theory of context-
free languages. In Computer programming and formal systems, pages 118
161. North-Holland, Amsterdam, 1963.
147
148 BIBLIOGRAF

IA
[CS70] John Cocke and Jakob Schwartz. Programming languages and their com-
pilers. Courant Institute of Mathematical Sciences, New York University,
1970.
[Dav63] Martin Davis. Unsolvable problems: A review. In Proc. Sumpos. Math.
Theory of Automata (New York, 1962), pages 1522. Polytechnic Press of
Polytechnic Inst. of Brooklyn, Brooklyn, N.Y., 1963.
[Dav89] R.E. Davis. Truth, Deduction and Computation. W.H. Freeman., 1989.
W.H. Freeman.
[DK01] Ding-Zhu Du and Ker-I Ko. Problem Solving in Automata, Languages and
Complexity. John Wiley and Sons, INC, 2001.
[DSW94] Martin D. Davis, Ron Sigal, and Elaine J. Weyuker. Computability, com-
plexity, and languages. Computer Science and Scientic Computing. Aca-
demic Press Inc., Boston, MA, second edition, 1994. Fundamentals of
theoretical computer science.
[DW83] Martin D. Davis and Elaine J. Weyuker. Computability, complexity, and
languages. Computer Science and Applied Mathematics. Academic Press
Inc. [Harcourt Brace Jovanovich Publishers], New York, 1983. Fundamen-
tals of theoretical computer science.
[Eil74a] Samuel Eilenberg. Automata, languages, and machines. Vol. A. Academic
Press [A subsidiary of Harcourt Brace Jovanovich, Publishers], New York,
1974. Pure and Applied Mathematics, Vol. 58.
[Eil74b] Samuel Eilenberg. Automata, languages, and machines. Vol. A. Academic
Press [A subsidiary of Harcourt Brace Jovanovich, Publishers], New York,
1974. Pure and Applied Mathematics, Vol. 58.
[GJ79] Michael R. Garey and David S. Johnson. Computers and intractability.
W. H. Freeman and Co., San Francisco, Calif., 1979. A guide to the theory
of NP-completeness, A Series of Books in the Mathematical Sciences.
[HU79] John E. Hopcroft and Jerey D. Ullman. Introduction to automata theory,
languages, and computation. Addison-Wesley Publishing Co., Reading,
Mass., 1979. Addison-Wesley Series in Computer Science.
[IM83] O.H. Ibarra and S. Moran. Equivalence of straightline programs. Journal
of the ACM, 30:217228, 1983.
[Kle52] Stephen Cole Kleene. Introduction to metamathematics. D. Van Nostrand
Co., Inc., New York, N. Y., 1952.
[Mar67] Solomon Marcus. Algebraic linguistics; analytical models. Mathematics in
Science and Engineering, Vol. 29. Academic Press, New York, 1967.
[Pap94] Christos H. Papadimitriou. Computational complexity. Addison-Wesley
Publishing Company, Reading, MA, 1994.
BIBLIOGRAF

IA 149
[Par02] Alan P. Parkes. Introduction to languages, machines and logic. Springer-
Verlag London Ltd., London, 2002. Computable languages, abstract ma-
chines and formal logic.
[Par07] Terence Parr. The Denitive ANTLR Reference. Pragmatic Bookshelf,
United States of America, 2007.
[Sav70] Walter J. Savitch. Relationships between nondeterministic and determi-
nistic tape complexities. J. Comput. System. Sci., 4:177192, 1970.
[VL92] J Van Leeuwen. Handbook of Theoretical Computer Science. Elsevier,
1992. W.H. Freeman.
[Wei87] Klaus Weihrauch. Computability, volume 9 of EATCS Monographs on
Theoretical Computer Science. Springer-Verlag, Berlin, 1987.
[Wir96] N Wirth. Compiler Construction. AddisonWesley International, 1996.
W.H. Freeman.

También podría gustarte