Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(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
=
_
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, !, ,
, .
, .,
. Modulo traduccio-
nes (que no juegan por ahora) una version original de la Ilada, el Coran, El Idiota o
los Vedas no perteneceran a
. Los
elementos del dominio (los datos) se suelen llamar inputs (tambien son sus-
ceptibles de ser llamados inputs aquellos x
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
(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
_
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
, 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
n
:=
n1
.
Reverso de una Palabra: Se trata de una biyeccion
R
:
,
dada mediante:
Si = ,
R
= ,
14 CAP
, 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
: 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
:=
_
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
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
(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
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 )
.
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
, (x, y) R (y, x) R
20 CAP
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
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
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,
()
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()
) = L()
.
Tambien mencionamos que el operador tiene preferencia sobre y este sobre +.
Ejemplo 4 A modo de ejemplo, sea := 0
10
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
.
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
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
= L(a
) = a L(a
) + +.
Claramente, la inducci on pretendida nos dice que para hallar la gram atica asociada
a la expresi on a
) escribamos la producci on q ,
Dado que D
a
(a
) = a
.
9
Suscitado por conversaciones habidas en el Aula.
28 CAP
) = 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,
() = .
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
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
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(
) = 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,
(+) =
+
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
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
,
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
: (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
?
Problema 18 Simplicar la expresi on regular = a+a(b+aa)(b
(aa)
+a(aa+
b)
ab.
Problema 20 Probar que D
a
(
) = D
a
()
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)
= +.
Problema 31 Probar que si es una expresi on regular se cumple
+.
38 CAP
)?/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
[ 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
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
, 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
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
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
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,
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
. 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
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
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
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 (
:= (Q
, , Q
0
, F
:= 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
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
/
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
, 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
, 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
: 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
(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 (
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
.
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
(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 (
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
, 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
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 )
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
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 ,
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
:= A V : A
G
.
A partir del calculo de V
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
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
, 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 )
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
de longitud menor
o igual que la longitud de .
Las aristas del grafo E
) N
tales que c
G
c
.
A partir de del grafo G
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
. 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
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
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
: (q, x, A) = (p, )) 1.
Si dados q Q y A , existieran (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
Z
0
V
, 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
= 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
= 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
:= Z
0
z
1
z
n1
:= push(pop(z), ).
84 CAP
, 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
:= 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
. 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
, pero nuestra hipotesis nos dice que solo un n umero nito de elementos
de Q
.
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
cuando la conguracion c
: 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
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
: 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
Initialize: I := (Q
0
, , Z
0
).
while I , Q Z
0
do
Hallar c
S
A
tal que I
A
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
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
, 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
, 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
(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
(
A) L(A).
Recprocamente, dado un automata con pila A := (Q, , , Q
0
, Z
0
, F, ) que
acepta el lenguaje L
A := (
Q,
,
,
Q
0
,
Z
0
,
F,
[
Q({})
= .
3.4. AUT
(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
, 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).
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
(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
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
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
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
, 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
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 )
, 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
, tendremos
que
L
2
= L(T
output
) y la podemos denotar mediante
= () y la llamaremos
traduccion de mediante el SDTS P.
Notese que
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
(V )
, A V, (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
, A 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
.
2. Diremos que 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
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 )
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
.
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
.
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
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
:
[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 )
, entonces
FIRST() = FIRST(X
1
)
1
1
FIRST(X
n
).
3. Si 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
,
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
()
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
) = ,
F(Q
0
) = , F(E
) = .
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
): A nadir F(Q
0
)
a F(T).
Producci on E
+TE
: A nadir FIRST(E
) a F(T).
Producci on E
+TE
): 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
).
Producci on E
+TE
) = 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
) ) F(T) = , , +, ).
Variable T
:
Producci on T XT
)
Producci on T
XT
: idem.
F(T
) = +, , ).
Segundo while: Todos coinciden.
Output:
F(Q
0
) = , ), F(E
) = +, , ).
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 )
,
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 )
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
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 )
, , (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
, 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 )
, 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
es no vaco y no
esta ya en o, a nadir a
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
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
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
a)
= 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
r e s ul t ado=r e s ul t ado+producto ;
r e s ul t ado=r e s ul t ado+producto ;
ENDICE A. GENERADORES DE AN
ALISIS SINT
ACTICO
public void outAFactorProd ( AFactorProd node )
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;
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
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.