Sei sulla pagina 1di 11

Prctica 2

Autmatas, Gramticas y Lenguajes


2014-2015

Introduccin
El objetivo de esta prctica es trabajar con los analizadores sintcticos LR(k).
Para ello se deber conocer qu son los smbolos de preanlisis y el mecanismo de
construccin de un analizador sintctico LR(k). Puesto que estos dos temas no se
tratan adecuadamente en el libro base de la asignatura, se recomienda consultarlos
por cualquier otra bibliografa. En concreto puede ser til consultar el libro de
la bibliografa complementaria Teora de la Computacin: lenguajes formales,
autmatas y complejidad o bien el ejemplo que se incluye en el enunciado de
esta prctica.

Normas de entrega y calificacin


La prctica tendr una ponderacin del 15 % de la nota definitiva de la
asignatura, siempre que se obtenga una nota superior o igual a 5 puntos en la
prueba presencial.
La prctica slo podr entregarse utilizando la aplicacin de Tareas de los
cursos virtuales. La entrega de la misma ser un archivo, en formato *.pdf,
nombrado como Apellido1 Apellido2, Nombre (DNI).pdf, que no pueda ser
reescrito por ninguna persona. El archivo no puede ser un escaneado transformado
a PDF.
Esta prctica tiene dos partes diferenciadas que se calificarn con un mximo
de 5 puntos cada una. La primera parte consiste en la realizacin de un
cuestionario. La segunda parte consiste en la realizacin de un ejercicio. La
evaluacin final de la prctica ser la suma de la nota obtenida en cada una de
las partes.
A continuacin y antes de mostrar los ejercicios a realizar en esta prctica
mostramos un resumen de las ideas fundamentales que se encuentran detrs de la
construccin de los analizadores sintcticos.

Introduccin a los analizadores sintcticos LR(k)


Una de las principales aplicaciones de los autmatas a pila es la construccin
de analizadores sintcticos. Los analizadores sintcticos son parte fundamental en
la construccin de compiladores y su objetivo es el anlisis de las estructuras del
programa dado un determinado lenguaje de programacin.
Para la construccin de rutinas de anlisis sintctico es necesario apoyarse en
mquinas deterministas. A diferencia de lo que ocurra con los autmatas finitos,

el imponer determinismo a los autmatas a pila restringe el conjunto de lenguajes


que se pueden aceptar.
Para superar esta limitacin, se suele utilizar el llamado principio de
preanlisis. El principio de preanlisis, consiste en visualizar un nmero
determinado de smbolos de la entrada sin consumirlos. De esta forma, en casos de
no determinismo, el autmata puede tomar decisiones sobre qu transicin aplicar
teniendo en cuenta los siguientes k elementos de la entrada.
En este punto es til la consulta del minivdeo docente titulado Smbolos
de Preanlisis que encontrar en la carpeta de Minivideos docentes en el
rea de Documentos del curso virtual

Analizadores sintcticos LL(k) y LR(k)


Existen dos tipos diferentes de analizadores sintcticos: los analizadores
LL(k) y los analizadores LR(k). Ambos se basan en un nmero k de smbolos
de preanlisis, as, un analizador LL(1) tendr en cuenta un nico smbolo de
preanlisis, de la misma forma que un analizador LL(2) tendr en cuenta dos
smbolos de preanlisis.
Ambos tipos de analizadores se basan en la gramtica independiente del
contexto que genera el lenguaje a analizar. La diferencia estriba en el tipo
de derivacin que se realice para obtener cadenas vlidas. As, si se realizan
derivaciones ms a la izquierda, la cadena se genera derivando siempre el no
terminal que se encuentra ms a la izquierda. El autmata a pila correspondiente,
analiza la cadena de entrada produciendo una derivacin por la izquierda
conforme lee la cadena de izquierda a derecha. Los analizadores sintcticos
desarrollados de esta manera se conocen como analizadores sintcticos LL. La
primera L denota que el analizador lee su entrada de izquierda a derecha (left to
right); la segunda L indica que el objetivo del analizador sintctico es producir
una derivacin por la izquierda [1].
La construccin de un analizador sintctico LL(k) se basa en el autmata a
pila equivalente a una determinada gramtica (ver apartado 6.3.1 del libro base de
la asignatura).
No obstante, existen lenguajes dentro de los lmites de los analizadores
sintcticos de pila que no puede reconocer ningn analizador sintctico LL(k), sin
importar la magnitud de k. Un ejemplo es el lenguaje L = {xn : n 0} {xn y n :
n 0}. L es un lenguaje independiente del contexto determinista. Un ejemplo de
gramtica que genera L es:
S xA|xBy|
A xA|
B xBy|
2

Cualquier gramtica independiente del contexto que genere L debe permitir


que se derive un no terminal con una cadena que contiene slo xs o una cadena
que contiene una combinacin equilibrada de xs e ys. Esto quiere decir que
existirn por lo menos dos reglas posibles a la hora de derivar este no terminal. De
la misma forma, cualquier analizador sintctico LL(k), se enfrentar al problema
de decidir cul de estas reglas ser la que se aplique cuando surja el no terminal
en la superficie de la pila. Por desgracia, independientemente de la magnitud de
k, siempre podremos encontrar una cadena para la cul no es posible detectar el
nmero de xs o la ausencia o no de ys sin considerar ms de k smbolos de
preanlisis. Por tanto, los analizadores sintcticos LL(k) slo son adecuados para
una subclase de lenguajes independientes del contexto.
Para paliar las deficiencias de los analizadores predictivos LL(k), se definieron
los analizadores sintcticos LR(k), que van procesando la cadena de izquierda
a derecha (del ingls Left to right derivation) mientras van construyendo una
derivacin por la derecha (del ingls Right derivation) utilizando k smbolos de
preanlisis.
La construccin de un analizador sintctico LR(k) para una determinada
gramtica, consiste en la construccin de un autmata a pila equivalente a dicha
gramtica y en la construccin de una tabla de anlisis sintctico que tiene en
cuenta los smbolos de preanlisis que sean necesarios. Dicha tabla se construye
a su vez, a partir de un autmata finito que tiene en cuenta en qu momento de la
derivacin de una cadena nos encontramos en cada momento.
El proceso de construccin de estos elementos se encuentra definido en el
apartado 2.5 y en el apndice A de [1].
En este punto es til la consulta de los minivdeos docentes titulados LL(1)
y LR(1) que encontrarn en la carpeta de Minivideos docentes en el rea
de Documentos del curso virtual
El lmite de los analizadores sintcticos LR(k) es el conjunto de lenguajes
independientes del contexto deterministas
A continuacin mostramos un ejemplo concreto de construccin de un
analizador sintctico LR(k).
Ejemplo de construccin de un analizador sintctico LR(k)
En este apartado mostramos un ejemplo de construccin de un analizador
sintctico LR(k) tomado del libro de la bibliografa complementaria Autmatas,
Gramticas y Lenguajes formales: problemas resueltos.
Se trata de construir el analizador sintctico LR(k) para la gramtica
independiente del contexto G = ({S}, {x, y, z}, S, P ), donde P es el siguiente
conjunto de producciones:
3

S xSz
S ySz
Sz
Dada cualquier cadena perteneciente al lenguaje generado por G, a la hora
de decidir qu produccin utilizar para derivarla, basta con inspeccionar si a
continuacin viene una x, una y o una z. Por tanto, para esta gramtica se necesita
un nico smbolo de preanlisis.
Los estados del autmata finito correspondiente a la tabla de anlisis de un
analizador sintctico LR, se corresponden con una determinada derivacin de la
gramtica. Los estados de aceptacin se corresponden con situaciones en las que
el autmata ha reconocido una derivacin vlida de la gramtica.
Por tanto, en cada estado se indica para cada produccin de la gramtica, la
parte que ya se ha reconocido y la parte que queda por identificar. As por ejemplo,
si se supone que de la produccin S xSz ya se ha reconocido la x, el autmata
debera poder controlar que resta por reconocer la subcadena que se obtendra
al derivar el no terminal S. Para facilitar la comprensin del funcionamiento
del autmata, se marcar la produccin con un indicando qu posibilidades
de derivacin hay en ese estado. Por lo tanto, en este ejemplo, la produccin se
representara de esta forma S xSz.
Para el ejemplo de esta produccin, al estado del autmata, se le aadirn
las transiciones correspondientes a las producciones que contengan el smbolo no
terminal S en la parte izquierda, por lo tanto el estado del autmata (que ser el
estado D en la representacin grfica del autmata) queda definido por:
S xSz
S xSz
S ySz
S z
A continuacin se describe el proceso de definicin del resto de estados del
autmata.
El estado inicial, marcado con A, contendr una produccin extra que
solamente genera el smbolo inicial de la gramtica, por lo tanto el estado queda
definido por las siguientes producciones:
S S
S xSz

S ySz
S z
Otro estado, el estado B, indica que se ha reconocido la produccin S S.
Para ello, se representar el estado poniendo el smbolo detrs de la produccin
(S S). El estado B es un estado de aceptacin (porque es un estado en el que
ya se ha reconocido una produccin).
El estado C, es el estado al que se accede cuando en la cinta de entrada hay un
smbolo y y se est reconociendo la produccin S ySz. Este estado se define:
S ySz
S xSz
S ySz
S z
Otro estado, el estado D se ha definido al principio del ejercicio como ejemplo.
Estado
A
B
C
D
E
F
G
H
I

x
desplazar D

y
desplazar C

z
desplazar E

desplazar D
desplazar D

desplazar C
desplazar C

desplazar E
desplazar E
Sz
desplazar G
S ySz
desplazar I
S xSz

FDC

S
B

Aceptar
F
H
Sz
S ySz
S xSz

Cuadro 1: Tabla de transicin del autmata de un analizador LR(1)


El estado E, al que se acceder cuando se reconozca un smbolo z de la
produccin S z, es un estado de aceptacin. Este estado de aceptacin
representa la situacin en la que se ha reconocido la produccin S z y por
tanto, el autmata debe regresar al estado donde se empez a reconocerla y dar
por reconocido el smbolo no terminal S.
Al estado F se acceder despus de reconocer el smbolo no terminal S en
la produccin S ySz y por lo tanto el estado estar definido por S ySz.

y
y

z
y

x
z
B

x
Figura 1: Autmata del analizador sintctico LR(1) del ejercicio
Como el nico elemento de la produccin que queda por identificar es un smbolo
terminal, no se introduce ninguna produccin ms en este estado.
Al estado G, se llega despus de reconocer el smbolo terminal z en la
produccin S ySz, y por tanto es un estado de aceptacin que reconoce esta
produccin.
El estado H, es similar al estado F solo que con la produccin S xSz.
Por su parte, el estado I, es equivalente al estado G solo que con la produccin
S xSz.
Para terminar de representar cada estado se utilizar la tabla 1. En esta tabla, se
representa qu accin realizar para cada estado y para cada smbolo de preanlisis.
Los smbolos de preanlisis son los elementos terminales del lenguaje, junto
con la Marca de Final de Cadena (FDC). Cuando en la tabla aparece la accin
desplazar el autmata leer de la cinta de entrada el smbolo actual y lo apilar
en la pila junto con el estado que acompaa a la accin desplazar. Adems,
se utilizar la pila para ir introduciendo los elementos terminales que se van
leyendo, de forma que se ir construyendo dentro de la pila la produccin que
se est resolviendo. Cuando se ha reconocido ntegramente la parte izquierda de
una produccin, se desapilan todos sus elementos y se apila la parte derecha de la
produccin. Tambin se introduce en la pila una marca para saber sobre qu estado
se est realizando el trabajo, ya que cada vez que se reconoce una produccin,
se debe volver al estado en el cual se ha empezado a reconocer la produccin
para continuar con el reconocimiento de la cadena. En la figura 1 se muestra el
diagrama de transiciones del autmata correspondiente al analizador LR(1) del
enunciado.

Ejemplo de ejecucin del autmata construido anteriormente


A continuacin se va a considerar la cadena de entrada yxyzzzz con el
objetivo de ilustrar el funcionamiento del autmata.
Esta cadena pertenece al lenguaje generado por la gramtica del enunciado. En
la siguiente tabla se muestra la ejecucin del autmata con esta cadena de entrada,
teniendo en cuenta, adems, la tabla de transiciones de la tabla 1
En los pasos 5, 8 y 11 se han reconocido derivaciones vlidas de la gramtica,
razn por la cual la pila se ha vaciado hasta llegar al estado previo al comienzo
del reconocimiento de estas producciones. En estos pasos, se ha ledo de la pila
pero no de la entrada. De esta forma, sabiendo en qu estado estaba el autmata y
cul era el smbolo no terminal de la gramtica, el autmata se ha transladado al
estado adecuado sin necesidad de leer ningn elemento de la cinta.
Paso
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Cinta
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz
yxyzzzz

Estado
A
C
D
C
E
C
F
G
D
H
I
C
F
G
B

Pila
yC
yCxD
yCxDyC
yCxDyCzE
yCxDyCSF
yCxDyCSF
yCxDyCSFzG
yCxDSH
yCxDSH
yCxDSHzI
yCSF
yCSF
yCSFzG
SB

Tabla de Transicin
desplazar C
desplazar D
desplazar C
desplazar E
Sz
desplazar G
S ySz
desplazar I
S xSz
desplazar G
S ySz
Aceptar

Parte 1: Cuestionario
El presente cuestionario constituye la primera parte evaluable de la prctica y
contar 5 puntos en la calificacin final de la prctica.
Cada acierto suma un punto sobre 5; cada error y cada pregunta no
contestada no puntan.
1. Dado un determinado alfabeto, tomemos un lenguaje cualquiera
independiente del contexto (LIC) que no contiene la cadena vaca Es
posible construir un analizador sintctico del tipo LR(k)?
a) S, para todo LIC
b) Slo es posible para los LICs deterministas que contengan a la cadena
vaca
c) Es posible para cualquier LIC determinista independientemente de que
contenga o no a la cadena vaca
d) Es posible para todos los LICs deterministas y para algunos LICs no
deterministas.
2. Indicar cul de las siguientes afirmaciones es verdadera:
a) Los lenguajes reconocidos por analizadores sintcticos de tipo LR(k)
son los lenguajes independientes del contexto deterministas o no
deterministas
b) Todo lenguaje regular puede ser reconocido por un analizador
sintctico de tipo LR(k)
c) Los analizadores sintcticos de tipo LR(k) slo se pueden utilizar en
lenguajes regulares.
d) Ninguna de las afirmaciones anteriores es cierta
3. Dada la siguiente gramtica:
SA
S xb
A aAb
AB
Bx
Indicar cuntos smbolos de preanlisis seran necesarios para construir un
analizador sintctico LR(k) sobre esa gramtica:
8

a) 0
b) 1
c) 2
d) 3
4. Indicar si es verdadera o falsa la siguiente afirmacin: Para todo lenguaje
independiente del contexto asociado a un alfabeto es posible construir
un analizador sintctico del tipo LR(k) con la condicin de que k sea
suficientemente grande
a) Verdadero
b) Falso
5. Dada la siguiente gramtica:
S xAy
S xByy
A xAy
A
B xByy
B
Indicar cul de las siguientes afirmaciones es verdadera:
a) El nmero de smbolos de preanlisis necesarios para construir un
analizador LR(k) para esta gramtica es 1
b) El nmero de smbolos de preanlisis necesarios para construir un
analizador LR(k) para esta gramtica es 2
c) El nmero de smbolos de preanlisis necesarios para construir un
analiador LR(k)para esta gramtica es 3
d) No es posible construir un analizar LR(k) para esta gramtica ya que
genera un lenguaje independiente del contexto no determinista

Parte 2: Construccin de un analizador LR(k)


Dado el lenguaje L = {xn y m z n |n, m > 0}:
1. (mximo 0.5 puntos): Construir una gramtica que genere L
9

2. (mximo 0.5 puntos): Indicar cuntos smbolos de preanlisis son


necesarios para construir un analizador sintctico LR(k) basado en la
gramtica construida en el apartado anterior
3. (mximo 2.5 puntos): Construir el analizador sintctico LR(k)
correspondiente a la gramtica y los smbolos de preanlisis definidos en
los apartados anteriores. Para ello, debe indicar el autmata finito y la tabla
de transiciones correspondientes.
4. (mximo 1.5 puntos): Indicar paso a paso la ejecucin del autmata
construido en el apartado anterior para una cadena del lenguaje que tenga
una longitud de al menos 9 smbolos.

Referencias
[1] J.G. Brookshear. Teora de la Computacin: Lenguajes Formales, Autmatas
y Complejidad. Addison-Wesley Iberoamericana, 1993.

10

Potrebbero piacerti anche