You are on page 1of 18

UNIDAD II

AUTMATAS DE PILA Y LENGUAJES LIBRES DE


CONTEXTO
Objetivo Genera
Entender la fundamentacin de lenguajes libres de contexto.
Aprender a construir gramticas libres de contexto que definan un
lenguaje y su notacin BNF, adems de aprender a utiliar los
autmatas de pila.
GRAM!TICAS DE CONTEXTO LIBRE
!uc"os de los lenguajes considerados "asta este punto, tanto regulares como
no regulares, pueden describirse con definiciones recursi#as. En el primer
ejemplo, correspondiente a lenguaje regular muy sencillo, un le#e cambio a la
definicin recursi#a lle#a a la idea de una gramtica de contexto libre. Este tipo
de gramtica resulta ser "erramientas poderosas para la descripcin y anlisis
de lenguajes.
$onsidere el lenguaje % &a, b'( de todas las cadenas en el alfabeto &a, b'.
definicin recursi#a de % que equi#ale a lo siguiente)
*. A %.
+. ,ara cada - %, -a %.
.. ,ara cada - %, -b %
/. Ninguna otra cadena es parte de %.
-e concept0a aqu1 a - como una #ariable, la cual representa a un elemento
arbitrario de % cuyo #alor se obtiene mediante alguna combinacin de las reglas
* a .. %a regla *, que se escribe como 2 A, indica una forma de asignar a 2
un #alor es sustituirla con A. %as reglas + y . pueden escribirse como - -a
y
- -b. Ello significa que - tambi3n puede sustituirse con -a o -b4 en ambos
casos luego debe obtenerse el #alor final al seguir aplicando las reglas para
asignar un #alor a la nue#a -.
El s1mbolo se usa para cada regla en la que una #ariable se sustituye con
una cadena. En con dos cadenas 5 y 6, se usa la notacin 5 7 6 para indicar
que 6 puede obtenerse la aplicacin de una de estas reglas a una sola #ariable
en la cadena a. Al aplicar esta en el ejemplo, puede escribirse)
S " S# " Sb# " Sbb# " Abb# " bb#
,ara escribir la secuencia de pasos &la aplicacin de las reglas +, ., . y *8
usada en la obtencin o deri#acin de la cadena bb. %a deri#acin llega a su
final en el punto donde se puede sustituir - con una cadena real de s1mbolos
del alfabeto &en este caso A84 cada no de los pasos pre#ios guarda analog1a
con una llamada recursi#a, puesto que se sustituye - con una cadena que
contiene una #ariable.
Es posible simplificar toda#1a ms esta notacin al introducir el s1mbolo 9 para
denotar :o; y escribir las tres primeras reglas como sigue)
S A $ Sa $ Sb
&Esta nue#a notacin, no se escribe la regla /, aunque toda#1a est #igente de
manera impl1cita.8 <ay que tomar nota, que una expresin como -a 9 -b las
dos alternati#as son -a y -b, no a y -4 en otras palabras, la operacin de
concatenacin tiene precedencia sobre la operacin 9 .
=ambi3n se puede considerar la siguiente notacin o definicin alterna de %.
*. A %.
+. a %
.. b %
/. ,ara cada xy y en %, xy %
2. Ninguna otra cadena es parte de %.
$on la nue#a notacin, se resumir1an las reglas gramaticales al escribir
S A $a $ b $ SS
$on este enfoque, existen #arias formas de obtener la cadena bba. >os
deri#aciones se muestran a continuacin)
S " SS " bS " bSS " bbS " bba
S " SS " Sa " SSa " bSa " bba
En ambos casos las formulas obtenidas con la definicin recursi#a pueden
interpretarse como reglas gramaticales en una gramtica de contexto libre.
GRAMATICAS REGULARES
?tra forma de obtener una @ramtica de $ontexto %ibre A @$% A para un
lenguaje regular %, a partir de un AF que pertenece a %. %a gramtica resultante
es distinta en dos aspectos. ,rimero, que todas las producciones tienen forma
sencilla, relacionada estrec"amente con los mo#imientos de AF, y segundo,
que la construccin es re#ersible, de modo que una @$% de este tipo sencillo
puede usarse para generar el AF correspondiente.
-e aprecia cmo proceder al obser#ar el ejemplo, el AF, acepta al lenguaje
%7 BC, *'(B*C', que es el conjunto de todas las cadenas BC,*' que termina con
*C. Dn elemento de % es x 7 **CCC*C*C. -u procesamiento en el AF es el
siguiente)
S%b&a'ena
(ro&e)a'a *a)ta
E)ta'o
e)te (%nto
A A
+ B
++ B
++, C
++,, A
++,,, A
++,,,+ B
++,,,+, C
++,,,+,+ B
++,,,+,+, C

-i se numeran consecuti#amente las l1neas de esta tabla, separadas con 7, se
obtiene)
A " +B " ++ B " ++,C " ++,,A " ++,,,+ " ++,,,+B " ++,,,+,C "
++,,,+,+B " ++,,,+,+,C
Eso se asemeja a la deri#acin en una gramtica. %a gramtica puede
obtenerse al especificar que las #ariables sean los estados AF y empear con
las producciones)
A +B
B +B
B OC
C OA
A OA
C +B
En ellas se incluye cada produccin de la forma)
P a-
es una transicin en el AF. El s1mbolo inicial es A, el estado inicial del AF. A fin
se completar la deri#acin, "ay que eliminar $ de la 0ltima cadena. Ello se
logra al agregar la produccin B C, de la deri#acin es en realidad)
++,,,+,+B " ++,,,+,+,
Note que la produccin aEadida es la forma)
P a
=oda AF lle#a a una gramtica exactamente de esa manera. En el ejemplo es
fcil apreciar que el lenguaje generado es el que reconoce el AF. En general,
debe limitarse un poco la afirmacin, ya que las reglas descritas para obtener
producciones no permiten las producciones A4 pero toda#1a es cierto que las
cadenas no nulas que acepta el AF son precisamente las que genera la
gramtica resultante.
Dna caracter1stica significati#a de cualquier deri#acin en una gramtica como
3sa es que "asta el 0ltimo paso tiene exactamente una #ariable de la cadena
actual. ,uede pensarse en ella como el :estado de deri#acin; y, en este
sentido, la deri#acin simula el procesamiento de la cadena por el AF.
Dna gramtica @ 7 &F, ,-,,8 es regular si cada produccin toma una de las
dos formas)
B A&
B a
,ara las #ariables B y $, y para terminales a.
En ocasiones, el adjeti#o regular se aplica a las gramticas que no se
restinguen tanto la forma de las reducciones.
!RBOLES DE DERI.ACIN Y AMBIG/EDAD
En lenguajes como el espaEol, la comprensin de una oracin se inicia con la
de su estructura gramatical, lo cual significa saber cmo se deri#a las
reglas gramaticales de ese idioma. >e manera similar, en una @$% que
especifica la sintaxis de un lenguaje de programacin o las reglas para
construir una expresin algebraica, la interpretacin correcta de una
cadena requiere encontrar una deri#acin correcta de la cadena en la
gramtica.
Dna forma natural de mostrar la estructura de deri#acin es traar un rbol de
deri#acin o rbol de anlisis sintctico.
Antes de explicar los rboles #eamos la definicin de deri#ar)
Dsamos el s1mbolo "0 para decir Gderi#aG.
*. -i 5AH I &N D J8
(

+. y A K L es una produccin de @

.. entonces 5AH "0
G
5LH

?mitimos el sub1ndice G cuando ello no se presta a confusin.
=ambi3n se usan los operadores "0
12
"0
3
, y "0
4
, los cuales tienen los
significados esperados) deri#a en cero o ms pasos, deri#a en uno o ms
pasos, y deri#a en M pasos.
Dna deri#acin de una sentencia N es la secuencia de sustituciones de noO
terminales que, partiendo del s1mbolo inicial -, produce como resultado N.
,or ejemplo podemos deri#ar la expresin idPid(id de dos formas distintas
como sigue)
*. - -P- -P-(- -P-(id -Pid(id idPid(id
+. - -(- -P-(- idP-(- idPid(- idPid(id
5or6a Senten&ia
Dna forma sentencial de una gramtica @ se define recursi#amente)

*. -, el s1mbolo inicial, es una forma sentencial.
+. -i 56H es una forma sentencial y 6 K L es una produccin de @,
entonces 5LH es una forma sentencial d @
Es decir, una forma sentencial es cualquier secuencia de s1mbolos terminales y
no terminales 7 8 9N U :;1 tal que S "0
1
7 &se deri#a en cero ms pasos a partir
de S8.
,ara las $F@, 6 es siempre un noOterminal.
Dna deri#acin iquierdaQderec"a es la que se obtiene sustituyendo primero el
noOterminal ms a la iquierdaQderec"a en cada forma sentencial. %as formas
senteciales as1 obtenidas se llaman formas sentenciales iquierdasQderec"as.
$omo una deri#acin iquierdaQderec"a indica cul s1mbolo no terminal se
substituye en cada paso de una deri#acin, entonces si le damos un n0mero
distinto a cada produccin de la gramtica es posible representar una
deri#acin dando solo la secuencia de n0meros de las producciones que se
emplearon en cada paso.
Dna gramtica de contexto libre @ es ambigua si existe por lo menos una
cadena en %&@8 que tiene dos o ms rboles de deri#acin distintos &o , lo que
es equi#alente, dos o ms deri#aciones de extrema iquierda diferentes8.
El lenguaje generado por una gramtica es el conjunto de secuencias de
s1mbolos terminales que se obtiene partiendo del noOterminal inicial, y
reemplaando sucesi#amente los noOterminales en la sentencia por el lado
derec"o de las producciones que tienen al noOterminal como lado iquierdo.
El lenguaje generado por una gramtica es el conjunto de todas las frases
deri#adas por la gramtica &formas sentenciales8 donde todos los s1mbolos en
dic"as frases son terminales. El lenguaje generado por una gramtica es el
conjunto de todas les secuencias de s1mbolos terminales que pueden ser
generadas por la gramtica en un n0mero finito de pasos.
L9G; " < = > :
1
$ S "0
1
= ?
!rbo 'e Deriva&i@n
>ada la siguiente gramtica)
asig K i' " expre A
expre K expre 3 expre
expre K expre B expre
expre K expre 00 expre
...
expre K 9 expre ;
expre K i'
expre K &n

R la cadena)
a 7 &b P *8 SS +

Dn rbol de deri#acin correspondiente a la expresin es)


Dn rbol de deri#acin tiene las siguientes caracter1sticas)
*. %as "ojas estn etiquetadas con s1mbolos terminales que, recorridos
en orden de profundidad primero, reproducen la secuencia de
componentes l3xicos de las correspondientes a la cadena original.
+. %os nodos internos estn etiquetados con s1mbolos noOterminales.
.. %a ra1 del rbol est etiquetada con el s1mbolo noOterminal inicial de
la gramtica.
/. ,ara cada nodo interior, los "ijos tomados de iquierda a derec"a
corresponden al lado derec"o de una produccin donde la etiqueta del
nodo interior es el lado iquierdo.
2.
Dn rbol de deri#acin describe una deri#acin de la sentencia en cuestin.
Dn rbol de deri#acin es tambi3n un rbol de anlisis sintctico.
Dna gramtica es ambigua si puede "aber ms de un rbol de deri#acin para
la misma sentencia. %a ambigTedad es una condicin indeseable ya que lo
normal es que deseemos que el comportamiento de un programa escrito en un
lenguaje de programacin sea determin1stico4 es decir, que el significado de
cada programa sea 0nico.
El problema de determinar en forma general si una gramtica es o no ambigua
no es decidible. Es decir, no existe un algoritmo que pueda determinar para
cualquier gramtica si ella es o no ambigua.
<ay una clase de lenguajes llamados in"erentemente ambiguos para los cuales
es posible demostrar que toda gramtica es ambigua.
%a else ambigua) El caso ms famoso de gramticas ambiguas es tal #e el del
else ambiguo, que ocurre en di#ersos lenguajes de programacin como
,ascal, $, o Ua#a. %as instrucciones if t"en else en ,ascal tienen la
sintaxis especificada por la siguiente gramtica)
instruccin K iC expresin t*en instruccin
9 iC expresin t*en instruccin e)e instruccin
9 a

expr K e

>ada la frase)
iC e t*en iC e t*en a e)e a

,ueden obtenerse dos deri#aciones para la misma frase. Dna es la que
corresponde a la interpretacin usual de los iC anidados en los lenguajes de
programacin)
iC e t*en
iC e t*en
a
e)e
a

%a otra es la que corresponde a la siguiente interpretacin)
iC e t*en
iC e t*en
a
e)e
a

%a ambiguedad puede eliminarse escribiendo la gramtica de la siguiente
forma)
instr K instrVp 9 instrVn

instrVp K iC expr t*en instrVp e)e instrV,
9 a

instrVn K iC expr t*en instr
instrVn K iC expr t*en instrVp e)e instrVn

El problema del else ambiguo se resuel#e con reglas de precedencia, o
"aciendo que esa parte del analiador sintctico se comporte de manera a#ara
&greedy8 y siempre trate de "acer concordar la #ersin del iC ms larga. ,or
ejemplo, si factoriamos la gramtica de la siguiente forma)
instr K iC expre t*en instr else part
9 a

else part K e)e instr
9 D

expr K e

un analiador sintctico descendente recursi#o escoger la deri#acin
esperada.
Eje6(o
>ada la siguiente gramtica)
E E E 3 E
E E E B E
E E E 1 E
E E E F E
E E 9 E ;
E E i'

Es posible construir dos rboles de deri#acin para la frase)
a P b P c


Es posible escribir la gramtica para expresiones aritm3ticas introduciendo
nue#os s1mbolos para los distintos ni#eles de precedencia de los operadores)
E E E 3 T $ T
E E E B T $ T
T E T 1 5 $ 5
T E T F 5 $ 5
5 E 9 E ; $ i'

%a gramtica resultante no es ambigua.
!RBOLES SINTACTICOS
-i una cadena se deri#a mediante una gramtica libre de contexto, el s1mbolo
inicial es sustituido por alguna cadena. %os s1mbolos no terminales de esta
cadena son sustituidos uno tras otro por otra cadena, y as1 sucesi#amente,
"asta que se llega a una cadena formada slo por s1mbolos terminales. A
#eces, es 0til realiar un grfico de la deri#acin, que indique de qu3 manera "a
contribuido cada no terminal a formar la cadena final de s1mbolos terminales.
=al grfico tiene forma de rbol y se llama rbol sintctico.
Dn rbol sintctico para una deri#acin dada se construye creando un nodo
ra1 que se etiqueta con el s1mbolo inicial. El nodo ra1 tiene un nodo "ijo para
cada s1mbolo que apareca en el lado derec"o de la produccin usada para
reemplaar el s1mbolo inicial. =odo nodo etiquetado con un no terminal
tambi3n tiene nodos "ijos etiquetados con los s1mbolos del lado derec"o de la
produccin usada para sustituir ese no terminal. %os nodos que no tienen "ijos
deben ser etiquetados con s1mbolos terminales.
$onsideremos la $F@ cuyo lenguaje es) Ba
m
b
n
9 m * y n *'
- AB
A aA | a
B bB | b

%a cadena aabbb puede ser deri#ada para la anterior $F@ mediante.
- AB AbB AbbB Abbb aAbbb aabbb
,uede #erse que "ay muc"as deri#aciones posibles para la cadena aabbb, las
cuales tambi3n tienen el rbol de deri#acin anterior. ,or ejemplo)
S AB aAB aaB aabB aabbB aabbb.
y S G AB G aAB G aAbB G aAbbB G aAbbbG aabbbH
Esta cadena y esta gramtica, todas las deri#aciones de aabbb tienen el mismo
rbol de deri#acin. -in embargo, esto no tiene porque cumplirse siempre. ,ara
#erlo, consid3rese la siguiente gramtica que genera expresiones aritm3ticas
simples con los operadores) P, O, (, Q, , & 8.
S i'
S S3S | SBS
S S1S | SFS
S SS | BS
S 9S;S
ACTI.IDAD I
Wealiar los siguientes ejercicios)

*. ?btener el autmata de pila para el siguiente lenguaje Ba
n
9 n *'.
X7 Bq
*
, q
+
', 7 Ba', 7 BYo', el s1mbolo inicial de la pila, q
C
7 q
*
, F7 Bq
+
' y
#iene dado por la siguiente tabla)
+. >ado el siguiente autmata de pila !7 BX, , , , q
C
, Y
C
, F8 describir el
lenguaje aceptado.
X7 Bq
*
, q
+
', 7 Ba, b'
7 BA, B, Y', q
C
7 q
*
Y
C
7 Y, F7 Bq
+
'
y #iene dado por la lista siguiente)
1. Bq*, , Y87 B Bq+, Y8'
2. Bq*, a, Y87 B Bq*, AY8'
3. Bq*, b, Y87 B Bq*, BY8'
4. Bq*, a, A87 B Bq*, AA8'
5. Bq*, b, A87 B Bq*, 8'
6. Bq*, a, B87 B Bq*, 8'
&a, Y
C
8
q
*
B&q
+
, Y
C
8'
q
+
B&q
+
, Y
C
8'
7. Bq*, b, B87 B Bq*, BB8'
%7 BZ Ba, b'(9 Z contiene la misma cantidad de a[s que de b[s'.
$uenta el n0mero de ocurrencias de a[s y b[s. Esto puede realiarse
introduciendo s1mbolos en la pila cuando se lee alg0n carcter de entrada y
extray3ndolo cuando se lee otro.
.. >ado que en un ,>A los s1mbolos pueden ser recuperados de la pila en
orden in#erso a como fueron introducidos. $onsideremos el lenguaje %7 BZcZ

9
Z Ba, b'('. Este ,>A debe introducir los caracteres de entrada en la pila "asta
que se encuentra una c y, entonces, compara los caracteres de la entrada con
la cima de la pila, desapilando la pila si concuerda. >escribir el proceso que
realia dic"o autmata de pila !7 BX, , , , q
C
,
C
, F8 sobre las cadenas)
abcba, abcab, y babbcbbab.
X7 Bq
*
, q
+
, q
.
', 7 Ba, b'
7 Ba, b, ', q
C
7 q
*
Y
C
7 s1mbolo inicial de la pila
F7 Bq
.
', y #iene dado por la lista siguiente)
1. Bq*, a, 87B Bq*, a8'
2. Bq*, a, a87B Bq*, aa8'
3. Bq*, a, b87B Bq*, ab8'
4. Bq*, b, 87B Bq*, b8'
5. Bq*, b, a87B Bq*, ba8'
6. Bq*, b, b87B Bq*, bb8'
7. Bq*, c, 87 B Bq+, 8'
8. Bq*, c, a87 B Bq+, a8'
9. Bq*, c, b87 B Bq+, b8'
10. Bq+, a, a87 B Bq+, 8'
11. Bq+, b, b87 B Bq+, 8'
12. Bq+, , 87 B Bq., 8'
/. >escriba el lenguaje que ser aceptado por el autmata de pila !7 BX, , ,
, q
C
,
C
, F8 dado a continuacin)
X7 Bq
*
, q
+
, q
.
'
7 Ba, b'
7 BY
C
', donde Y
C
es el s1mbolo inicial de la pila
q
C
7 q
*
F7 Bq
.
'
y #iene dado por la siguiente tabla:
2. >eterminar la expresin regular equi#alente a la siguiente $F@.
- a-
- b-
- a
- b
-
%a expresin regular es BaPb8(
&a, Y
C
8 &a, b8 &b, a8 &b, b8
q
*
B&q
+
, a8, &q
.
, 8' OO OO OO
q
+
OO B&q
.
, 8' B&q
+
, b8' B&q
+
, b8'
q
.
OO OO OO OO

You might also like