Vous êtes sur la page 1sur 101

Autmatas y lenguajes

Pedro Valero y Alberto Parramn Apuntes UAM


Doble Grado Mat.Inf.
UAM - 2014/2015
11 de febrero de 2016 14:29
Cdigo en Github
Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

ndice general

I Introduccin 3
I.1 Lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
I.1.1 Lenguajes particulares . . . . . . . . . . . . . . . . . . . . . . 4
I.1.2 Operadores de utilidad . . . . . . . . . . . . . . . . . . . . . . 4
I.2 Expresiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

II Gramtica 7
II.1 Gramticas independientes del contexto . . . . . . . . . . . . . . . . . 10

III Autmatas finitos: deterministas y no deterministas 14


III.1 Equivalencia entre AF y ER . . . . . . . . . . . . . . . . . . . . . . . 18

IV Autmatas a pila 19

V Gramticas de atributos 23
V.1 Anlisis semntico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

VI Analizador morfolgico 34

VIIAnalizador sintctico 36
VII.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
VII.2 Tablas de anlisis ascendente . . . . . . . . . . . . . . . . . . . . . . 38
VII.2.1 Tablas LR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
VII.2.2 Tablas SLR(1) . . . . . . . . . . . . . . . . . . . . . . . . . . 44
VII.2.3 Tablas LR(1) . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
VII.2.4 Tablas LALR(1) . . . . . . . . . . . . . . . . . . . . . . . . . 51
VII.3 Anlisis descendente . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
VII.3.1 Forma normal de Greigbach . . . . . . . . . . . . . . . . . . . 53
VII.3.2 Cundo nos interesa eliminar las transiciones ? . . . . . . . . 56
VII.3.3 Anlisis LL(1) usando la tabla . . . . . . . . . . . . . . . . . . 56
VII.3.4 Anlisis LL(2) usando la tabla . . . . . . . . . . . . . . . . . . 59
VII.3.5 Anlisis LL(*) . . . . . . . . . . . . . . . . . . . . . . . . . . 60

VIIIltimos detalles: lemas, equivalencias y reduccin de automtas... 61


VIII.1Minimizar autmatas finitos . . . . . . . . . . . . . . . . . . . . . . . 61
VIII.2Equivalencia AFN - AFD . . . . . . . . . . . . . . . . . . . . . . . . . 64
VIII.3Propiedades del cierre (regulares) . . . . . . . . . . . . . . . . . . . . 65
VIII.4Lemas del Bombeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
VIII.4.1 Lema del bombeo (Lenguajes regulares) . . . . . . . . . . . . . 66
0
Documento compilado el 11 de febrero de 2016 a las 14:29

1 de 100
Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

VIII.4.2 Lema del bombeo (Lenguajes independientes del contexto) . . . 67


VIII.5Propiedades del cierre (independientes del contexto) . . . . . . . . . . 68

A Ejercicios 70
A.1 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

B Ejercicios 1a Hoja 73
B.1 Ejercicios sobre autmatas finitos y lenguajes regulares . . . . . . . . . 73
B.2 Ejercicios sobre autmatas a pila y gramticas independientes del contexto 77

C Ejercicios 2a Hoja 79
C.1 Ejercicios sobre Gramticas de Atributos . . . . . . . . . . . . . . . . 79

D Ejercicios 3a Hoja 86
D.1 Ejercicios de anlisis . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

2 de 100
Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo I

Introduccin

Vamos a trabajar con tres elementos fundamentales:

Mquinas/Autmata
Autmatas finitos Expresiones regulares
Autmatas de pila Lenguajes independientes del contexto
Problemas Qu se puede computar?. Conjeturas que se creen ciertas pero cuya
veracidad, por ahora, no se ha demostrado.
Lenguajes/Gramtica

Nuestro objetivo es ver qu relacin existe entre estos tres elementos. Para ello,
primero debemos establecer algunas definiciones.

I.1. Lenguaje

Smbolo Definicin I.1 Smbolo. Letra", elemento de un conjunto

Alfabeto Definicin I.2 Alfabeto. Conjunto finito de smbolos no vaco.

Palabra Definicin I.3 Palabra (Cadena). Secuencia finita de smbolos tomados de un alfa-
(Cadena) beto. La palabra vaca tiene 0 smbolos y se representa por .
Ser conveniente acostumbrarnos a usar el trmino cadena en lugar del trmino
palabra ya que representa mejor el concepto que queremos representar.

Longitud Definicin I.4 Longitud de cadena. Nmero de smbolos que contiene.


de cadena

Lenguaje Definicin I.5 Lenguaje. Conjunto de palabras, cualquier subconjunto de .


Hay algunos casos particulares de lenguajes:

3 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

I.1.1. Lenguajes particulares

P P
Lenguaje Definicin I.6 Lenguaje universal (sobre ). Denotado por representa el
universal
P conjunto de todas las palabras que se pueden formar con los smbolos de , incluido
(sobre ) .

Lenguaje Definicin I.7 Lenguaje de un autmata. Conjunto de palabras que acaban en un


de un estado final del autmata y, por tanto, son aceptadas por el mismo.
autmata

Lenguaje Definicin I.8 Lenguaje vaco. Lenguaje que no contiene ningn elemento: .
vaco

Lenguaje Definicin I.9 Lenguaje {}. Lenguaje que slo contiene . El lenguaje {} es
{} distinto del lenguaje vaco aunque sea la palabra vaca. En particular |{}| = 1 y
|| = 0.

Lenguaje Definicin I.10 Lenguaje + .


+
+ = \ {}

Lenguajes Definicin I.11 Lenguajes Regulares. Son lenguajes que pueden ser admitidos por
Regulares autmatas finitos.

I.1.2. Operadores de utilidad


Tenemos dos operadores importantes:

Cierre 1. Definicin I.12 Cierre estrella (star-closure). El operador estrella se corres-


estrella ponde con la suma infinita:
(star-
closure) a = + a + a2 + a3 + ...

Cierre 2. Definicin I.13 Cierre positivo (positive-closure). Este operador se corres-


positivo ponde con la suma infinita:
(positive-
closure) a+ = a + a2 + a3 + ...

En otras palabras, estos conceptos nos sirven para entender por qu representa todas
las palabras posibles. Para poder entender esto debemos entender la multiplicacin

4 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

como una concatenacin y la suma como un OR. As el elemento neutro del producto
sera la cadena vaca.
Tomemos ahora el alfabeto binario = {0, 1} Entonces:

= (0 + 1) = + (0 + 1) + (0 + 1)2 + (0 + 1)3 + ... =

= + 0 + 1 + 00 + 01 + 10 + 11 + 000 + 001 + 010 + 011 + 100 + 101 + 110 + 111 + ...


Y con esto vemos cmo se forman todas las posibles combinaciones de bits de diferente
longitud. Si en lugar de este alfabeto hubisemos tomado nuestro alfabeto castellano,
habramos obtenido todas las posibles combinaciones de letras.
Si cada conjunto de smbolos representa una cadena, es lgico pensar que no tiene
sentido la operacin suma como la hemos conocido siempre. La forma de entenderlo es
que si yo tengo la palabra abc y tambin tengo la palabra cda, en total tengo abc+cda,
es decir, tengo ambas palabras (unin).

I.2. Expresiones regulares

Expresin Definicin I.14 Expresin regular. Forma alternativa de representar un lenguaje


regular regular.
Dado un alfabeto existen tres tipos de expresiones regulares primitivas:

1.
L() =

2.
L()={}

3. a
L(a) = {a}

A partir de estas expresiones regulares primitivas podemos construir expresiones


regulares compuestas aplicando la siguiente regla:
Siendo , dos expresiones regulares primitivas o compuestas sobre tambin lo
son:

1. + (Unin de lenguajes)
L( + ) = L() L()

2. . (Concatenacin de lenguajes)
L(.) = L(). L()

3. (Cierre)
L( ) = L()

5 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

L( ) = L()
El cierre es la repeticin de cero o ms veces de las expresiones regulares a las
que aplica.

Orden de precedencia de los operadores (de ms a menos):

1. *

2. .

3. +

Cuando la precedencia no est clara o se quiera alterar, se pueden (y deben) usar


parntesis.

Ejemplo: Encontrar los lenguajes definidos por las siguientes expresiones regulares:

1. a.(b + a).b
Cadenas de tres smbolos que empiezan por a y acaban por b y el smbolo
central es una a o una b: {abb,aab}

2. (a + b)
Cadenas de un solo smbolo, que es o a o b: {a,b}

3. (a + b)
Todas las cadenas posibles formadas por los smbolos a y b (incluso la cadena
vaca)

4. (a + b).(a + b)
Todas las cadenas posibles formadas por los smbolos a y b. Pero no incluye la
cadena vaca ya que por (a + b) necesariamente deben contener una a o una
b.

5. (aa + bb)
Todas las cadenas posibles formadas por a y b con la condicin de que siempre
aparezcan los smbolos consecutivos un nmero par de veces. Es decir, cadenas
del tipo aaaabbaabbbbbb, (no valdra aaabb) (incluyendo la cadena vaca).

6 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo II

Gramtica

Gramtica Definicin II.1 Gramtica. Hay varias definiciones para este trmino. No son muy
precisas pero nos dan una idea de su significado:

1. Mecanismo para formalizar matemticamente un lenguaje.

2. Conjunto de reglas que determinan cmo formar las cadenas de un lenguaje.

Ejemplo: Tomemos las reglas:

1. ORACIN SUJETO PREDICADO

2. SUJETO ARTCULO NOMBRE

3. PREDICADO VERBO

4. ARTCULO el | un

5. NOMBRE coche | perro

6. VERBO come | corre

Estas reglas constituyen una gramtica que nos permite generar un lenguaje. En este
caso el lenguaje estara por formado todas las cadenas que se pueden construir a partir
de estas reglas. Empezando siempre por el axioma (en este caso: ORACIN).
Una gramtica est compuesta por una serie de elementos que definiremos a con-
tinuacin.

Smbolos Definicin II.2 Smbolos terminales (T). Conjunto de smbolos que pueden aparecer
terminales en la cadena final (o sentencia). En el ejemplo anterior seran elementos terminales
(T) aquellos escritos en minscula. Para ellos no existe ninguna regla que indique cmo se
derivan.

7 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Smbolos Definicin II.3 Smbolos no terminales (N). Conjunto de smbolos que no pue-
no ter- den aparecer en la cadena final. Simplemente son usados para definir las reglas de
minales derivacin.
(N)
Los conjuntos T y N deben ser disjuntos, es decir T N = . Utilizaremos el smbolo
para referirnos a la unin de ambos, = T N .

Reglas de Definicin II.4 Reglas de produccin (P). Explican cmo se transforma un smbolo
produccin no terminal en un conjunto de smbolos terminales y/o no terminales.
(P)

Smbolo Definicin II.5 Smbolo inicial / Axioma (S). Indica dnde empieza a construirse
inicial / la cadena. En el ejemplo anterior, el axioma sera el smbolo ORACIN. Una gramtica
Axioma slo puede tener un nico axioma.
(S)

Gramtica Definicin II.6 Gramtica (G). Cudrupla formada por T, N, P y S.


(G)

G = (T, N, P, S)

Una gramtica permite generar cadenas para un lenguaje. Por ejemplo, para la
gramtica anterior:
ORACIN (derivamos ORACIN:)
SUJETO PREDICADO (derivamos SUJETO:)
ARTCULO NOMBRE PREDICADO (derivamos ARTCULO:)
el NOMBRE PREDICADO (derivamos NOMBRE;)
el coche PREDICADO (derivamos PREDICADO:)
el coche VERBO (derivamos VERBO:)
el coche corre (acabamos, pues no hay ms que derivar)
Este proceso se llama derivacin. Cada una de las cadenas en una derivacin se de-
nomina forma sentencial. La ltima de ellas es una cadena vlida del lenguaje generado
por la gramtica, y se denomina sentencia. Est formada nicamente por smbolos ter-
minales de la gramtica. El lenguaje generado por una gramtica, L(G), es el conjunto
de todas las sentencias posibles, es decir, el conjunto de todas las cadenas de smbolos
no terminales que pueden derivarse a partir del axioma.
Vamos a ver algunos ejemplos de gramticas y los lenguajes que generan:

Ejemplo: Tomemos la gramtica generada por las reglas:

1. S aSb

2. S

8 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

T = {a, b}
N = {S}

Y su axioma es S.
El lenguaje generado por esta gramtica seran todas las palabras de la forma: ai bi
con i = 0, 1, ...

Ejemplo: Ahora vamos a tratar de construir la gramtica que define un lenguaje


dado: L={(ab)n a, n 0}
La gramtica que define este lenguaje es:

1. S abS
2. S a

El autmata finito asociado a este lenguaje sera:

Gramticas Definicin II.7 Gramticas independientes del contexto. Son aquellas cuyas
indepen- reglas tienen un nico smbolo no terminal en el lado izquierdo.
dientes del
contexto
Ejemplo: Gramtica dependiente de contexto

aSb abb
cSd cdd

S puede derivarse dependiendo de lo que la rodee, es decir, de su contexto.

Ejemplo: Gramtica independiente de contexto (regular)

A aA
Aa

A la derecha tenemos nicamente smbolos terminales o bien smbolos terminales acom-


paados de un nico smbolo no terminal. Si el elemento no terminal est a la izquierda
se denomina gramtica lineal por la izquierda. En caso contrario, gramtica lineal por
la derecha.

9 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Nota a lo anterior: Una gramtica es lineal por la derecha (right-linear) si todas


sus reglas de produccin son de una de las dos formas siguientes:

B aA

Ba

con A, B N y a T . Una gramtica es lineal por la izquierda (left-linear) si todas


sus reglas de produccin son de una de las dos formas siguientes:

B Aa

Ba

con A, B N y a T . Una gramtica es regular si es lineal por la izquierda o lineal


por la derecha. Todas las gramticas regulares son independientes del contexto.

Equivalencia Definicin II.8 Equivalencia de gramticas. Dos gramticas son equivalentes si


de gram- generan el mismo lenguaje
ticas

II.1. Gramticas independientes del contexto


Como ya vimos una gramtica puede representarse como una cudrupla G=(N,T,S,P),
es decir, consta de smbolos no terminales, smbolos terminales, un axioma y unas reglas
de produccin.
En el caso de una gramtica independiente del contexto las reglas de P son de la
forma:

Ax
Con A N , x con = T N

Ejemplo: El lenguaje:

L = {wwR : w (a + b) }

es independiente del contexto puesto que puede representarse por medio de una gra-
mtica G independiente del contexto, que sera:

S aSa

S bSb

10 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Para demostrar que el lenguaje generado por la gramtica, L(G), es el mismo que
L, habra que hacer dos cosas:

1. Probar que cualquier palabra de L(G) est en L.

2. Probar que cualquier palabra de L est en L(G).

El punto 1 es fcil de ver, pues est claro que cualquier cadena generada por G es
simtrica (siempre que aadimos una a al principio aadimos otra al final, y lo mismo
para b).
Para demostrar el punto 2 vamos a probar que si w L entonces w L(G)
usando induccin:

Todas las cadenas de L tienen un nmero par de smbolos: |w| = 2n w L,


n = 0, 1, 2, ...

Para n = 0 tenemos w = L y se cumple que w L(G). Tomamos este


caso como base de la induccin.

Supongamos que se cumple la hiptesis para n: si w L con |w| = 2n entonces


w L(G).

Demostremos que se cumple la hiptesis para n + 1:


Sea w L con |w| = 2n + 2. Entonces w debe ser de la forma ava o bvb
con v L y |v| = 2n. Por hiptesis tenemos que v L(G), es decir se puede
generar a partir del axioma S. Finalmente si w = ava podemos generarla a partir
del axioma con la regla S aSa, y si w = bvb podemos generarla a partir del
axioma con la regla S bSb. Por tanto tambin w L(G).

Derivacin Definicin II.9 Derivacin directa. Dada una gramtica independiente del contexto
directa G=(N,T,S,P) y sean v, w dos formas sentenciales, decimos que w es derivacin directa
de v:
v w v = xZy w = xy regla en P  Z

con Z N y .

Derivacin Definicin II.10 Derivacin. Dada una gramtica G=(N,T,S,P) y sean v, w dos
formas sentenciales, decimos que w es derivacin de v, y lo escribimos v + w, si
existe una cadena de formas sentenciales a0 , a1 , a2 ,... an , tales que:

v = a0 a1 a2 ... an = w

11 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Lenguaje Definicin II.11 Lenguaje generado por G. Dada una gramtica G=(N,T,S,P)
generado definimos el lenguaje generado por ella como:
por G
L(G) = {w T : S + w}

Veamos algunos ejemplos:

Ejemplo: Dado el lenguaje:

L = {an bn : n 0}

La gramtica que genera este lenguaje es:

S aSb

Ejemplo: Dado el lenguaje:

L = {w (a + b)  na (w) = nb (w)}

La gramtica que genera este lenguaje es:

S aSb|bSa|

S SS

Para construirla nos hemos fijado en que una palabra w puede ser de 4 formas:



aw0 b con w0 L




bw0 a con w0 L


w=
aw0 a w = w1 w2 con w1 , w2 L








bw0 b w = w1 w2 con w1 , w2 L

Una sentencia puede ser derivada de diferentes formas a partir de una misma
gramtica. Para estos casos vamos a definir derivaciones leftmost y rightmost:

Leftmost Definicin II.12 Leftmost. Consiste en derivar, en cada paso, el elemento no terminal
colocado ms a la izquierda. Se deja para el lector el arduo trabajo de deducir que
significa una derivacin rightmost.
Esto nos lleva a definir un nuevo concepto:

12 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ambigedad Definicin II.13 Ambigedad. Una gramtica se define como ambigua si existen dos
o ms rboles de derivacin distintos para la misma sentencia.
Otra forma de definirlo sera considerar ambiguas aquellas gramticas para las que
existen dos derivaciones leftmost (o rightmost) distintas para la misma sentencia.

Ejemplo: Consideremos la gramtica dada por las reglas:

E E + E|E E|I

I a|b|c

Se trata de una gramtica ambigua ya que la sentencia a + b c tiene dos deriva-


ciones distintas leftmost.

1. E E + E I + E a + E a + E E a + I E a + b E
a+bI a+bc

2. E E E E + E E I + E E a + E E a + I E
a+bE a+bI a+bc

Ya vimos que dos gramticas son equivalentes si generan el mismo lenguaje pero
vamos a recalcar que hay infinitas gramticas que generan el mismo lenguaje.
Dada una gramtica G=(T,N,S P) para obtener otra equivalente basta con hacer
otra:
G0 = (T, N {Z}, Z, P {Z E})

13 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo III

Autmatas finitos: deterministas


y no deterministas

Autmata Definicin III.1 Autmata finito determinista. Se representa como:


finito de-
terminista A = (Q, , , q0 , F )
donde:

Q = conjunto de estados
= alfabeto de entrada
= funcin de transicin: : Q Q
q0 = estado inicial Q
F = conjunto de estados finales, F Q

Funcin de Definicin III.2 Funcin de transicin extendida . Consiste en una extensin de


transicin la funcin de transicin a cadenas. Se representa como :
extendida
(q, w) = q1
Siendo w , q el estado en el que comenzamos y q1 el estado al que llegamos tras
procesar toda la palabra. Recordemos que es el alfabeto de entrada (conjunto de
smbolos) y es el conjunto formado por todas las posibles cadenas de smbolos que
puedes crear con dicho alfabeto.

Lenguaje Definicin III.3 Lenguaje aceptado por un AFD. El lenguaje aceptado por un
aceptado autmata finito determinista, A, es el conjunto de palabras que llevan al autmata a
por un un estado final.
AFD
L(A) = {w : (q0 , w) F }

Veamos algn ejemplo:

14 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejemplo: Queremos un autmata que reconozca el lenguaje: L={101,110}


El autmata resultado es:

Observacin: : Un autmata determinista tiene que tener todas las transiciones de-
finidas, se sobreentiende que las transiciones que no estn dibujadas van a un sexto
estado en el cual se quedan colgadas.
Este autmata es determinista y su transicin de estados dada una entrada "101"
sera:

entrada: 1 0 1
q0 q1 q3 q4

Por tanto "101" forma parte del lenguaje del autmata.


Pero podramos representar el mismo lenguaje con un autmata no determinista:

Y su transicin de estados dada una entrada "101" sera:

entrada: 1 0 1
q0 q1 q4 q5
q2 - -

Como al menos uno de los caminos lleva a un estado final, la cadena "101" forma
parte del lenguaje del autmata (los guiones indican transicin no definida, o a un
estado vaco).
La ventaja de un autmata no determinista es que podemos explorar varias ramas
en paralelo.

15 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Transicin Definicin III.4 Transicin . Transicin que puede ocurrir sin consumir ningn valor
de entrada. Un autmata finito que tenga transiciones de este tipo se considera no
determinista.

Autmata Definicin III.5 Autmata finito no determinista. AFN . Autmata con funcin
finito no de transicin de la forma:
deter-
: Q ( {}) 2Q
minista.
AFN Es decir, dado un estado y una entrada (posiblemente vaca) salta a un conjunto de
estados.

Funcin de Definicin III.6 Funcin de transicin de un AFN extendida . Consiste en una


transicin extensin de la funcin de transicin a cadenas. Se representa como :
de un AFN
extendida (q, w) = E
Siendo w , q el estado en el que empezamos y E el conjunto de estados a los que
llegamos tras procesar toda la palabra.

Lenguaje Definicin III.7 Lenguaje aceptado por un AFN. El lenguaje aceptado por un
aceptado autmata finito no determinista, A, es el conjunto de palabras que llevan al autmata
por un a un estado final.
AFN
L(A) = {w : (q0 , w) F 6= }

Ejemplo: Disear un autmata para el siguiente lenguaje


Tenemos el alfabeto: = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, , } con las siguientes res-
tricciones:

1. Signo puede o no aparecer


2. Parte decimal puede aparecer o no
3. Parte entera puede o no aparecer
4. Debe haber al menos parte entera o decimal.

El autmata queda:

16 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Fuentes de Definicin III.8 Fuentes de indeterminismo de un AF. Un autmata finito no


indetermi- determinista se caracteriza por tener alguna de las siguientes propiedades:
nismo de
un AF
1. Con la misma entrada, varias transiciones posibles para un mismo estado.

2. Hay transiciones lambda

3. Se puede transitar a (transiciones no definidas)

Ejemplo: Otro ejemplo de autmata no determinista podra ser:

Cuya transicin de estados dada una entrada "101" sera:

Estados 1 0 1
q0 - - -
q1 q2 q4 q5

En este autmata, podemos avanzar al estado q1 a travs de la transicin ,


aunque el primer smbolo de la entrada sea un 1, (segunda lnea de la tabla). Sin
embargo en el camino en el que nos mantenemos en el estado q0 (primera lnea de
la tabla), no tenemos la transicin definida con entrada 1 y vamos al estado vaco.
Llegamos a un estado final, por tanto la palabra "101" pertenece al lenguaje de este
autmata.

Teorema III.1. Los autmatas finitos no deterministas y deterministas son equi-


valentes.

Esto significa que dado un autmata finito determinista que acepta un determinado
lenguaje, existe otro no determinista que acepta el mismo lenguaje, y viceversa. Se
utilizan los AFN por comodidad, porque las demostraciones formales son ms sencillas.

17 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

III.1. Equivalencia entre AF y ER


Vamos a ver cul es la relacin existente entre los autmatas finitos y las expresiones
regulares.
Como ya vimos una gramtica puede expresarse como una cudrupla G=(N,T,S,R),
es decir, consta de smbolos no terminales, smbolos terminales, un smbolo inicial o
axioma y unas reglas de produccin.
Recordamos tambin que una gramtica regular es aquella que es lineal por la
derecha o lineal por la izquierda
Hay 4 formas de representar un lenguaje regular, y en ellas reside la equivalencia
entre autmatas finitos y expresiones regulares. Las 4 formas de representar un lenguaje
regular son:

1. Describiendo todos sus componentes

2. Con una gramtica regular

3. Con una expresin regular

4. Mediante un AFN/AFD

18 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo IV

Autmatas a pila

Dado el lenguaje:
L = {wwR  w (0 + 1) }
que representa palabras capicas sobre {0, 1} con un nmero par de smbolos, vamos
a intentar construir un autmata finito para l.
Esto no es posible ya que siempre necesito llegar hasta la mitad de la palabra
almacenando lo que hemos ledo para despus comprobar que lo leemos al revs.
Puesto que la palabra puede tener longitud arbitraria, necesitaremos una cantidad de
memoria arbitraria y esto no es viable (sera necesario un autmata con un nmero
infinito de estados).
Es aqu donde surgen los autmatas a pila. Estos autmatas se caracterizan por
que en cada salto indicamos una entrada, saca el smbolo de la cima de la pila y aade
una cadena a la pila.
Para el lenguaje dado, el autmata a pila que lo representa sera:

En teora, las etiquetas de los arcos del autmata son de la forma:

Acb

donde A sera la entrada leda, b el elemento que extraemos del tope de la pila y c la
cadena que insertamos en la pila. Por tanto una transicin solo se puede dar si aparte
de tener la entrada correspondiente, la cima de la pila coincide con lo que vamos a
extraer de ella. Introducir az implica que la a se queda como cima de la pila, y la z
detrs.
En algunos ejercicios usaremos la notacin {b, A, c} con idntico significado.

19 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Autmata Definicin IV.1 Autmata a pila. Un autmata a pila se representa como:


a pila
A = (Q, , , q0 , F, T , A0 )

siendo:

Q: conjunto de estados

: alfabeto de entrada

: funcin de transicin: : Q ( {}) T 2QT

q0 : estado inicial Q

F : conjunto de estados finales

T : alfabeto de la pila

A0 : smbolo inicial de la pila

Nota: En realidad el codominio de es el conjunto de subconjuntos finitos de Q T .


Bsicamente consiste en un autmata, como los vistos hasta ahora, acompaado
de una pila en la que realizaremos inserciones y extracciones en cada transicin.
Vamos a ver un pequeo ejemplo que explica cmo entender la funcin de transi-
cin:

Ejemplo: La evaluacin de la funcin de transicin:

(q, a, x) = {(p, y)}

con q, p Q, a , x T y y T . Implica que, estando en el estado q, ante una


entrada a, habiendo en la cima de la pila un x pasamos al estado p, insertando en
la pila y, y sacando la x.
En estos autmatas los conceptos de determinismo o no determinismo se man-
tienen. Es decir, un autmata a pila ser no determinista si dada una entrada y un
elemento a extraer de la cima de la pila tiene varias acciones que puede llevar a ca-
bo (varios pares (estado,insercin en pila)). Profundizaremos ms adelante en este
concepto.

Observacin: Aunque un autmata finito determinista es equivalente a uno no de-


terminista, con autmatas a pila no ocurre lo mismo.

Autmata Definicin IV.2 Autmata a pila determinista. Un autmata a pila ser determi-
a pila de- nista si cumple las siguientes condiciones:
terminista
No hay transiciones o, si las hay, no hay ninguna otra transicin con un smbolo
diferente. Es decir, si desde un estado p y con a en la pila pudieras pasar a otro
q por una transicin lambda, no habra otra posible transicin desde el estado p
y con a en la pila.

20 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Dada una situacin (estado p, smbolo de entrada x y smbolo a en la cima de


la pila) (p, x, a) contiene como mucho un elemento (q, b).

Descripcin Definicin IV.3 Descripcin instantnea. Se trata de una representacin de la si-


instant- tuacin actual del autmata. (q,X,A) es una descripcin instantnea donde:
nea

1. q = Nodo/estado en el que nos encontramos

2. X = Entrada que falta por leer, X

3. A = Contenido de la pila, A T

Dada una descripcin instantnea podemos continuar el procesamiento de la cadena


sin perder informacin.

Precedencia Definicin IV.4 Precedencia entre descripciones instantneas. Decimos que una
entre des- descripcin instantnea precede a otra:
cripciones
instant- (q, xX, aA) ` (p, X, bA)
neas
si:
(p, b) (q, x, a)
Siendo p,q nodos del autmata, x el siguiente smbolo de entrada que se va a leer,
X el resto de la cadena de entrada; a el carcter que hay en la cima de la pila, A el
resto del contenido de la pila y,b una cadena de smbolos que insertamos en la pila.
En este transicin se lee x, se saca a de la cima de la pila y se introduce b.
Es decir, una descripcin instantnea precede a otra si hay una transicin que nos
lleva de una a otra.

Precedencia Definicin IV.5 Precedencia *. Decimos que hay precedencia * entre dos descrip-
* ciones instantneas:
(q, X, A) ` (p, Y, B)
cuando hay una secuencia d0 , d1 , ..., dn de descripciones instantneas tales que:

(q, X, A) = d0 ` d1 ` ... ` dn = (p, Y, B)

con p, q Q, X, Y y A, B T .
Basndonos en estas definiciones, podemos representar el lenguaje aceptado por
un autmata a pila como:

L(A) = {w  (q0 , w, A0 ) ` (p, , X)}

con p F, X T

21 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejemplo: Queremos encontrar un autmata que represente el lenguaje:

L = {an bn , n 0}

El autmata de pila que representa este lenguaje es:

22 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo V

Gramticas de atributos

Un compilador se encarga de generar el cdigo mquina a partir de un cdigo dado.


En primer lugar debemos saber que un compilador realiza tres tareas:

1. Anlisis morfolgico. A estas alturas consideramos que ya nos viene hecho y


no nos preocupamos por ello.

2. Anlisis sintctico. Consiste en construir el rbol de derivacin. Es decir, se


comprueba que la sentencia obtenida sale de derivar el axioma.

3. Anlisis semntico. Consiste en recorrer el rbol de derivacin calculando atri-


butos y realizando comprobaciones semnticas.

Vamos a centrarnos ahora en anlisis semntico.

V.1. Anlisis semntico


Vamos a explicar brevemente la idea que hay detrs de esto:
Partiendo de una gramtica independiente del contexto, y derivando el axioma
hasta obtener una sentencia, queremos obtener alguna funcin especfica de nuestra
gramtica.
Es entonces cuando surgen las gramticas de atributos, que aaden lo siguiente a
la gramtica independiente del contexto:

Incorporan atributos a los nodos no terminales.

Incorporan funciones sobre esos atributos en las reglas de derivacin. (Adems


veremos que estas funciones se podrn realizar en instantes concretos).

Incorporan una informacin global a la gramtica. La informacin global est


formada por un conjunto de variables que son accesibles desde cualquier nodo
del rbol.

23 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Por tanto, una vez obtenido el rbol de derivacin, el anlisis semntico recorrer dicho
rbol utilizando el recorrido en profundidad por la izquierda y con vuelta atrs
(lo explicamos ms adelante) corroborando el buen funcionamiento de estas nuevas
funciones.
El paso de informacin de un nodo a otro del rbol se podr realizar mediante tres
mtodos:

Sntesis: la informacin se propaga del nodo inferior al nodo superior.


Herencia: la informacin se propaga del nodo superior al nodo inferior.
Usando la informacin global.

Vamos a ver un ejemplo con detalle, explicando sobre l algunos de los conceptos:
Como hemos dicho, la idea es que dada una gramtica independiente del contexto,
podemos conseguir que esta realice funciones especficas. Lo conseguimos aadiendo
atributos y especificaciones a las reglas de derivacin.

Ejemplo: Consideremos la gramtica:


G = {{(, )}, {L, I}, L, P }
Con las reglas de derivacin P:

L (I)
I (I)
I II
I

En primer lugar vamos a derivar el axioma y obtener una sentencia, nos queda (por
ejemplo) el siguiente rbol de derivacin:

I I

I I

( ( ) ( ( ) ) )

24 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Vemos que sintcticamente es correcto ya que se obtiene de derivar el axioma L.


Queremos hacer que esta gramtica nos devuelva la profundidad de una expresin,
es decir, el mximo nmero de parntesis contenidos unos en otros.
Para ello, vamos a utilizar gramtica de atributos, en primer lugar debemos aadir
a los elementos L e I un atributo profundidad.
Vamos a intentar hacerlo propagando el atributo profundidad hacia arriba (es decir,
usando sntesis). Por ello, un nodo terminal como sera debera tener profundidad 0.
Por lo que la cuarta regla queda de la forma:

I {I.prof = 0}

En las dos primeras reglas, debemos realizar una propagacin hacia arriba, aumen-
tando en uno la profundidad. As estas dos primeras reglas quedan de la forma:

L (I){L.prof = I.prof + 1}

I1 (I2 ){I1 .prof = I2 .prof + 1}

Para la tercera regla, podemos ver que la profundidad que asciende ser el mximo
de las profundidades de cada uno de los smbolos en los que deriva. La tercera regla
quedara:
I1 I2 I3 {I1 .prof = max(I2 .prof, I3 .prof )}

Si ahora analizamos los instantes en que se realizara la funcin de cada regla y


agrupamos todo lo indicado anteriormente llegamos a:

G = {{(, )}, {L(prof ), I(prof )}, L, P, }

Con P:

L (I){2 : L.prof = I.prof + 1}

I1 (I2 ){2 : I1 .prof = I2 .prof + 1}

I1 I2 I3 {2 : I1 .prof = max(I2 .prof, I3 .prof )}

I {0 : I.prof = 0}

As, hemos conseguido una gramtica de atributos que realiza una funcin especfica
(obtener la profundidad). Lo hemos logrado a partir de una gramtica independiente
del contexto aadiendo atributos y el instante en el que debo realizar cada asignacin
en las reglas de derivacin.
Adems, una gramtica de atributos contiene una informacin global. En este caso
no la vamos a usar por lo que la declaramos vaca (es el ltimo smbolo que se ha
aadido a G).
Tambin debemos saber que el rbol se recorre en profundidad por la izquierda y
con vuelta atrs. Esta tcnica consiste en recorrer siempre el hijo ms a la izquierda,
cuando no queden hijos a la izquierda, continuamos con el siguiente hijo ms a la
izquierda. Cuando no queden hijos volvemos al nodo superior y as sucesivamente.

25 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Si suponemos un caso simple en el que un nodo raz tiene n hijos inmediatos,


podemos ver que al aplicar este procedimiento recorremos el nodo raz n+1 veces. Por
tanto el nodo raz tendr n+1 instantes.
Vamos a dejar claro a qu nos referimos con el instante en el que realizo la funcin
de cada regla. Para ello, debemos saber que al realizar el anlisis semntico cada nodo
sabe qu regla de derivacin se ha usado sobre l, y por tanto conocer el nmero
de hijos inmediatos que tiene. As, por ejemplo un nodo I al que le aplicamos la regla
I1 I2 I3 , tiene 3 instantes:
-El instante 0, en el que se visita el nodo I1 .
-El instante 1, en el que se vuelve al nodo I1 despus de haber visitado el nodo I2 .
-El instante 2, en el que se vuelve al nodo I1 despus de haber visitado el nodo I3 .
Veamos ahora como queda el rbol realizando el recorrido en profundidad por la
izquierda y con vuelta atrs y aplicando las distintas funciones:
L
0:nada
p=2 en instante 2

I1
p=2 en instante 2

I2 I3
p=1 en instante 2 p=2 en instante 2

I4 I5
p=0 en instante 0 p=1 en instante 2

I6
p=0 en instante 0

( ( ) ( ( ) ) )

Hemos puesto superndices a las I para poder referirnos ahora a ellas:


El recorrido en profundidad de est rbol quedara:
Empezamos en L, estamos en el instante 0 de L... bajamos a (, como es terminal no
hacemos nada... subimos a L, instante 1 de L... bajamos a I 1 , instante 0 de I 1 ...bajamos
a I 2 , instante 0 de I 2 ... bajamos a ( como es terminal no hacemos nada... subimos a
I 2 , instante 1 de I 2 ...bajamos a I 4 , instante 0 de I 4 , que como es un nodo que deriva
con la regla I le aplicamos la funcin I.prof = 0... subimos a I 2 , instante 2 de
I 2 , que como es un nodo que deriva con la regla I1 (I2 ), le aplicamos la funcin
I1 .prof = I2 .prof + 1, por tanto tenemos ahora mismo I 2 .prof = 1... bajamos a
), como es un nodo terminal no hacemos nada... subimos a I 2 , instante 3 de I 2 ...
subimos a I 1 , instante 1 de I 1 ... bajamos a I 3 , instante 0 de I 3 ... etc etc etc.

26 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejemplo: Vamos a apoyarnos en la gramtica definida en el ejemplo anterior y a


modificar simplemente las acciones, con el fin de obtener un programa que cuente el
nmero de listas (parejas de parntesis).
Vamos a realizarlo de tres formas distintas: con sntesis, herencia y con informa-
cin global. Estas diferentes formas dan lugar a diferentes acciones, pero el rbol de
derivacin sigue siendo el mismo.
Cada una de las reglas de derivacin seran:

Sntesis
G = {{(, )}, {L(n), I(n)}, L, P }

L (I){2 : L.n = I.n + 1}


I1 (I2 ){2 : I1 .n = I2 .n + 1}
I1 I2 I3 {2 : I1 .n = I2 .n + I3 .n)}
I {0 : I.n = 0}

Herencia
G = {{(, )}, {L(n), I(antes, despues)}, L, P }

L (I){0 : I.antes = 1, 2 : L.n = I.despues}


I1 (I2 ){0 : I2 .antes = I1 .antes + 1, 2 : I1 .despues = I2 .despues}
I1 I2 I3 {0 : I2 .antes = I1 .antes, 1 : I3 .antes = I2 .despues, 2 :
I1 .despues = I3 .despues}
I {0 : I.despues = I.antes}

Hemos usado alguna accin que se sale de un esquema puro de herencia por ser
imposible realizarlo de otra forma.

Informacin global

G = {{(, )}, {L, I}, L, P, {n}}

L (I){0 : n = 0; 1 : n = n + 1}
I1 (I2 ){0 : n = n + 1}
I1 I2 I3
I

Este caso es bastante ms sencillo, pues en cada derivacin tienes acceso al


contador global y basta con incrementarlo, sin preocuparte por los sucesores.
Usando informacin global es realmente importante indicar los instantes en
que se realiza cada accin puesto que de lo contrario habra lugar a confusin.
(En los casos anteriores los atributos imponan un orden sin ambigedad).

En las transparencias podis ver estos tres ejemplos para diferenciar la herencia, la
sntesis y la informacin global (llamada tabla de smbolos):

27 de 100 11 de febrero de 2016 14:29


Ejemplo 1 (sntesis) Ejemplo 1 (sntesis)

Gramatica independiente del contexto: Gramatica de atributos:


G = {{+, , (, ), c, i}, {E }, E , P} G = {{+, , (, ), c(tipo, valor ), i}, {E (tipo, valor )}, E , P}
Conjunto de reglas de produccion P: Conjunto de reglas de produccion P:
E ::= E + E E1 ::= E2 + E3 {E1 .valor = E2 .valor + E3 .valor ; E1 .tipo = E2 .tipo}
E ::= E E E1 ::= E2 E3 {E1 .valor = E2 .valor E3 .valor ; E1 .tipo = E2 .tipo}
E ::= (E ) E1 ::= (E2 ) {E1 .valor = E2 .valor ; E1 .tipo = E2 .tipo}
E ::= i E ::= i
E ::= c E ::= c {E .valor = c.valor ; E .tipo = c.tipo}

AutLen () Gramaticas de atributos 7 de octubre de 2014 2 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 3 / 27

Ejemplo 1 (sntesis) Ejemplo 1 (sntesis)


Analizador morfologico

E E

E E

E E

E E

c c c
c c c
c.valor = 4 c.valor = 2 c.valor = 3
c.tipo = int c.tipo = int c.tipo = int

( 4 + 2 ) * 3

( 4 + 2 ) * 3

AutLen () Gramaticas de atributos 7 de octubre de 2014 4 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 5 / 27

Ejemplo 1 (sntesis) Ejemplo 1 (sntesis)


E ::= c E ::= E + E

E E

E E E E

E
E E.valor = 6
E.tipo = int

E E E E
E.valor = 4 E.valor = 2 E.valor = 4 E.valor = 2
E.tipo = int E.tipo = int E.tipo = int E.tipo = int

c c c c c c
c.valor = 4 c.valor = 2 c.valor = 3 c.valor = 4 c.valor = 2 c.valor = 3
c.tipo = int c.tipo = int c.tipo = int c.tipo = int c.tipo = int c.tipo = int

( 4 + 2 ) * 3 ( 4 + 2 ) * 3

AutLen () Gramaticas de atributos 7 de octubre de 2014 6 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 7 / 27

Ejemplo 1 (sntesis) Ejemplo 1 (sntesis)


E ::= (E ) E ::= c E ::= E E

E
E E.valor = 18
E.tipo = int

E E E E
E.valor = 6 E.valor = 3 E.valor = 6 E.valor = 3
E.tipo = int E.tipo = int E.tipo = int E.tipo = int

E E
E.valor = 6 E.valor = 6
E.tipo = int E.tipo = int

E E E E
E.valor = 4 E.valor = 2 E.valor = 4 E.valor = 2
E.tipo = int E.tipo = int E.tipo = int E.tipo = int

c c c c c c
c.valor = 4 c.valor = 2 c.valor = 3 c.valor = 4 c.valor = 2 c.valor = 3
c.tipo = int c.tipo = int c.tipo = int c.tipo = int c.tipo = int c.tipo = int

( 4 + 2 ) * 3 ( 4 + 2 ) * 3

AutLen () Gramaticas de atributos 7 de octubre de 2014 8 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 9 / 27
Ejemplo 2 (herencia) Ejemplo 2 (herencia)

Gramatica independiente del contexto: Gramatica de atributos:


G= {{int, float, i,00 ,00 }, {D, T , L}, D, P} G = {{int, float, i(nombre),00 ,00 }, {D(tipo), T (tipo), L(tipo)}, D, P}
Conjunto de reglas de produccion P: Conjunto de reglas de produccion P:
D ::= TL D ::= TL{D.tipo = T .tipo; L.tipo = T .tipo}
T ::= int T ::= int{T .tipo = int}
T ::= float T ::= float{T .tipo = float}
L ::= L, i L1 ::= L2 , i{L2 .tipo = L1 .tipo; i.tipo = L1 .tipo}
L ::= i L ::= i{i.tipo = L.tipo}

AutLen () Gramaticas de atributos 7 de octubre de 2014 10 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 11 / 27

Ejemplo 2 (herencia) Ejemplo 2 (herencia)


T := int
D
D

T
L
T L T.tipo = int

L
L

L
L

i i i
i i i
i.nombre = x i.nombre = y i.nombre = z
i.nombre = x i.nombre = y i.nombre = z

int x , y , z
int x , y , z

AutLen () Gramaticas de atributos 7 de octubre de 2014 12 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 13 / 27

Ejemplo 2 (herencia) Ejemplo 2 (herencia)


D ::= TL L ::= L, i
D D
D.tipo = int D.tipo = int

T L T L
T.tipo = int L.tipo = int T.tipo = int L.tipo = int

L L
L.tipo = int

L L

i i i i i i
i.nombre = x i.nombre = y i.nombre = z i.nombre = x i.nombre = y i.nombre = z

int x , y , z int x , y , z

AutLen () Gramaticas de atributos 7 de octubre de 2014 14 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 15 / 27

Ejemplo 2 (herencia) Ejemplo 2 (herencia)


L ::= L, i L ::= i
D D
D.tipo = int D.tipo = int

T L T L
T.tipo = int L.tipo = int T.tipo = int L.tipo = int

L L
L.tipo = int L.tipo = int

L L
L.tipo = int L.tipo = int

i i i i i i
i.nombre = x i.nombre = y i.nombre = z i.nombre = x i.nombre = y i.nombre = z

int x , y , z int x , y , z

AutLen () Gramaticas de atributos 7 de octubre de 2014 16 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 17 / 27
Ejemplo 3 (informacion global) Ejemplo 3 (informacion global)
Gramatica de atributos:
Gramatica independiente del contexto:
G = {{int, float, c(valor , tipo), i(nombre),00 ,00 , +, , (, ), =},
G = {{int, float, c, i,00 ,00 , +, , (, ), =}, {P, D, A, T , L, E }, P, R}
{P, D(tipo), A(valor , tipo), T (tipo), L(tipo), E (valor , tipo)}, P, R}
Conjunto de reglas de produccion R:
Conjunto de reglas de produccion R:
P ::= DA
P ::= DA
D ::= TL
D ::= TL{D.tipo = T .tipo; L.tipo = T .tipo}
T ::= int
T ::= int{T .tipo = int}
T ::= float
T ::= float{T .tipo = float}
L ::= L, i
L1 ::= L2 , i{L2 .tipo = L1.tipo; st(i.nombre, L1 .tipo)}
L ::= i
L ::= i{st(i.nombre, L.tipo)}
A ::= i = E
A ::= i = E {A.valor = E .valor ; A.tipo = E .tipo; sv (i.nombre, E .valor )}
E ::= E + E
E1 ::= E2 + E3 {E1 .valor = E2 .valor + E3 .valor ; E1 .tipo = E2 .tipo}
E ::= E E
E1 ::= E2 E3 {E1 .valor = E2 .valor E3 .valor ; E1 .tipo = E2 .tipo}
E ::= (E )
E1 ::= (E2 ){E1 .valor = E2 .valor ; E1 .tipo = E2 .tipo}
E ::= i
E ::= i{E .valor = gv (i.nombre); E .tipo = gt(i.nombre)}
E ::= c
E ::= c{E .valor = c.valor ; E .tipo = c.tipo}

AutLen () Gramaticas de atributos 7 de octubre de 2014 18 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 19 / 27

Ejemplo 3 (informacion global) Ejemplo 3 (informacion global)


T ::= int
P

D A

D A

T L E
T
L E
T.tipo = int

L E E

L E E

c c
i i i
c.valor = 3 c.valor = 5
i.nombre = x i.nombre = y i.nombre = x c c
c.tipo = int c.tipo = int i i i
c.valor = 3 c.valor = 5
i.nombre = x i.nombre = y i.nombre = x
c.tipo = int c.tipo = int

int x , y x = 3 + 5

int x , y x = 3 + 5

TS

TS

AutLen () Gramaticas de atributos 7 de octubre de 2014 20 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 21 / 27

Ejemplo 3 (informacion global) Ejemplo 3 (informacion global)


D ::= TL L ::= L, i

P P

D D
A A
D.tipo = int D.tipo = int

T L T L
E E
T.tipo = int L.tipo = int T.tipo = int L.tipo = int

L E E L
E E
L.tipo = int

c c c c
i i i i i i
c.valor = 3 c.valor = 5 c.valor = 3 c.valor = 5
i.nombre = x i.nombre = y i.nombre = x i.nombre = x i.nombre = y i.nombre = x
c.tipo = int c.tipo = int c.tipo = int c.tipo = int

int x , y x = 3 + 5 int x , y x = 3 + 5

TS TS
y(int, ?)

AutLen () Gramaticas de atributos 7 de octubre de 2014 22 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 23 / 27

Ejemplo 3 (informacion global) Ejemplo 3 (informacion global)


L ::= i E ::= c

P P

D D
A A
D.tipo = int D.tipo = int

T L T L
E E
T.tipo = int L.tipo = int T.tipo = int L.tipo = int

E E
L L
E E E.valor = 3 E.valor = 5
L.tipo = int L.tipo = int
E.tipo = int E.tipo = int

c c c c
i i i i i i
c.valor = 3 c.valor = 5 c.valor = 3 c.valor = 5
i.nombre = x i.nombre = y i.nombre = x i.nombre = x i.nombre = y i.nombre = x
c.tipo = int c.tipo = int c.tipo = int c.tipo = int

int x , y x = 3 + 5 int x , y x = 3 + 5

TS TS
y(int, ?) y(int, ?)
x(int, ?) x(int, ?)

AutLen () Gramaticas de atributos 7 de octubre de 2014 24 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 25 / 27
Ejemplo 3 (informacion global) Ejemplo 3 (informacion global)
E ::= E + E A ::= i = E

P P

A
D D
A A.valor = 8
D.tipo = int D.tipo = int
A.tipo = int

E E
T L T L
E.valor = 8 E.valor = 8
T.tipo = int L.tipo = int T.tipo = int L.tipo = int
E.tipo = int E.tipo = int

E E E E
L L
E.valor = 3 E.valor = 5 E.valor = 3 E.valor = 5
L.tipo = int L.tipo = int
E.tipo = int E.tipo = int E.tipo = int E.tipo = int

c c c c
i i i i i i
c.valor = 3 c.valor = 5 c.valor = 3 c.valor = 5
i.nombre = x i.nombre = y i.nombre = x i.nombre = x i.nombre = y i.nombre = x
c.tipo = int c.tipo = int c.tipo = int c.tipo = int

int x , y x = 3 + 5 int x , y x = 3 + 5

TS TS
y(int, ?) y(int, ?)
x(int, ?) x(int, 8)

AutLen () Gramaticas de atributos 7 de octubre de 2014 26 / 27 AutLen () Gramaticas de atributos 7 de octubre de 2014 27 / 27
Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejemplo: Para ver claramente las diferencia entre anlisis semntico y sintctico
nos podemos fijar en lo siguiente, segn el ejemplo 1, el cdigo:

int _x,_y
_x=7

es correcto semntica y sintcticamente, mientras que el cdigo:

int _x,_y
_z=7

es sintcticamente correcto pero no semnticamente.

Ejemplo: Vamos a tomar un caso sencillo con dos reglas sacadas del ltimo ejemplo
mostrado en las transparencias. La semntica es:

L i{st(i.nombre, L.tipo}

A i = E{inT S(i.nombre) == true; gt(i.nombre) == E.tipo; sv(i.nombre, E.valor)}

Para la primera regla, el orden en que se recorrera el rbol de derivacin es:

- En el instante 0 bajamos del nodo L al nodo i,


- En el instante 1 volvemos al nodo L.

Como es lgico, la operacin de setType representada en la gramtica no puede


realizarse hasta conocer el tipo de L y el nombre de i, por lo que se realiza en el instante
1.
Lo representaramos como:

L i{1 : st(i.nombre, L.tipo}

Vamos ahora con la segunda regla. El orden en el que se recorrera el rbol de


derivacin seria:

- En el instante 0 bajamos del nodo A al nodo i, en el instante 1 volvemos al A.


- En ese instante bajaramos al nodo =, del que volveramos en el instante 2.
- Por ltimo bajaramos al nodo E y volveramos del mismo en el instante 3

Siguiendo esta secuencia y analizando en qu momento tenemos disponibles los


valores para cada operacin la segunda regla de la gramtica sera de la forma:

A i = E{1 : inT S(i.nombre) == true; 3 : gt(i.nombre) == E.tipo; 3 : sv(i.nombre, E.valor)}

En este tercer ejemplo es importante aadir algunas comprobaciones ms en las


reglas, que no vienen en las transparencias:

32 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

En la regla A i = E comprobar inT S(i.nombre) == true (es decir, est


en la tabla de smbolos i.nombre?)

En la regla E1 E2 + E3 y E1 E2 E3 comprobar que E2 .tipo = E3 .tipo

En la regla E i comprobar inT S(i.nombre) == true y gt(i.nombre) ==


E.tipo con gt=getType (es decir, es el parmetro tipo de i.nombre igual al de
E?).

33 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo VI

Analizador morfolgico

Empezamos este captulo recordando la funcin de un compilador.


Dado un archivo fuente, este archivo pasar a travs de un analizador de cdigo,
que realiza tres funciones, utilizando para ello una tabla de smbolos que l mismo
genera:

Anlisis morfolgico
Anlisis sintctico
Anlisis semntico

Tras ser analizado, se genera un rbol de derivacin como los vistos hasta ahora.
Nos centramos ahora en el analizador morfolgico (tambin llamado lxico o scan-
ner). Este realiza principalmente la siguiente funcin:
Obtencin de unidades sintcticas. Son los llamados tokens. Estos pueden ser
identificadores, constantes, palabras reservadas (if , them, f or,...) u otros smbolos
(simples: +, =,... o dobles: :=,...).

No obstante, el analizador morfolgico tambin es importante en la consecucin de


las siguientes tareas secundarias:

1. Eliminar delimitadores (espacios en blanco, tabuladores, saltos de lnea...).


2. Eliminacin de comentarios en el cdigo.

3. Detecta errores morfolgicos. (Smbolos invlidos, constantes e identificadores


mal construidos...)

4. Inicializa algunas tareas semnticas, es decir, calcula el valor de algunos atributos


de constantes o identificadores.

Lo vemos con un ejemplo: tenemos un lenguaje que admite el siguiente tipo de


objetos:

Identificadores: letra seguida de cero o ms dgitos y letras.

34 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Constantes: (nmeros enteros).

Palabras reservadas: begin, end, int, print.

Smbolos: tanto simples: ; como dobles: :=.

Con este lenguaje, y dado el siguiente fichero de entrada fuente.

begin
int A;
A := 100;
print A;
end

El analizador morfolgico generar un fichero de salida semejante al siguiente:

<"begin",TOK_BEGIN>
<"int",TOK_INT>
<"A",TOK_ID, valor=A>
.
.
.
<"100",TOK_CONST, valor=100>
.
.
.

La 4a tarea secundaria, que tena el analizador morfolgico, es la que realiza la


funcin de crear un atributo valor e inicializarlo.

35 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo VII

Analizador sintctico

VII.1. Introduccin
Para llevar a cabo el anlisis sintctico de una entrada se emplean tablas de anlisis.
Estas permiten analizar una sentencia, con el fin de saber si se trata de una sentencia
vlida para una gramtica dada o no.
Existen dos tipos de anlisis: ascendente y descendente
Veamos un ejemplo:

Ejemplo: Dada la gramtica:

1) E E + E

2) E E x E

3) E -E

4) E (E)

5) E id

Vamos a realizar un anlisis ascendente partiendo de la siguiente sentencia:

(id+id)xid

Para ello vamos a contar con la ayuda de una pila y nos basaremos en dos reglas
bsicas:

1. Reduccin Se aplicar siempre que sea posible. No hay eleccin.


Se lleva a cabo cuando los elementos de la cima de la pila coinciden con la parte
derecha de alguna regla de nuestra gramtica.
En este caso se extraen los elementos de la pila y se sustituyen por la parte
izquierda de la regla indicada anteriormente.

36 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

2. Desplazamiento Se aplica cuando no puede realizarse ninguna reduccin.


Consiste en introducir en la cima de la pila el siguiente elemento de la sentencia
que estamos analizando

Aplicando estas reglas a nuestra sentencia obtenemos el siguiente resultado:

Instante Entrada Pila Accin


0 (id+id)xid - Desplazamiento
1 id+id)xid ( Desplazamiento
2 +id)xid (id Reduccin(5)
3 +id)xid (E Desplazamiento
4 id)xid (E+ Desplazamiento
5 )xid (E+id Reduccin(5)
6 )xid (E+E Reduccin(1)
7 )xid (E Desplazamiento
8 xid (E) Reduccin(4)
9 xid E Desplazamiento
10 id Ex Desplazamiento
11 - Exid Reduccin(5)
12 - ExE Reduccin(2)
13 - E Fin

Puesto que en la pila slo queda el axioma, concluimos que la sentencia es vlida para
este lenguaje.
Tras este ejemplo podemos definir formalmente el algoritmo de anlisis ascendente.

Anlisis Definicin VII.1 Anlisis ascendente. Este algoritmo consiste de dos pasos:
ascenden-
te
Mientras queden elementos en la entrada:
desplazamos
mientras podemos reducir:
reducimos

Si en la pila slo est el axioma:


OK.
En caso contrario:
ERROR.

Una vez visto el anlisis ascendente el siguiente paso es estudiar el anlisis descen-
dente.

Anlisis Definicin VII.2 Anlisis descendente. Algoritmo para determinar si una entrada es
descen- vlida o no para una gramtica dada mediante derivaciones (partiendo del axioma)
dente
Es decir, tomamos el axioma y aplicamos derivaciones sucesivas intentando llegar
a la sentencia que queremos analizar.

37 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Si logramos generar la sentencia que estamos analizando, esta ser vlida. (En caso
contrario no)
Vamos a trabajar con gramticas sencillas en las que slo haya una derivacin
posible en cada paso. En caso de no ser as deberamos avanzar todo lo posible para
despus hacer backtracking, comprobando que no dejamos caminos sin explorar.
Vemoslo con un ejemplo:

Ejemplo: Dada la gramtica:

E TB

B +TB |

T FX

X *FX |

F i | (E)

Vamos a usar un anlisis descendente para comprobar si es vlida la sentencia:

i*i

Para hacerlo apoyndonos en una pila, como en el ejemplo anterior, los pasos a seguir
son los siguientes:
Instante Pila Accin
1 E Derivamos
2 B|T Derivamos
3 B|X|F Derivamos
4 B|X|i Extraemos, pues i est en la sentencia dada
5 B|X Derivamos
6 B | X | F | * Extraemos, pues * est en la sentencia dada
7 B|X|F Derivamos
8 B|X|i Extraemos, pues i est en la sentencia dada
9 B|X Derivacin
10 B Derivacin
Si al finalizar nos queda la pila vaca concluimos que la sentencia estudiada es
correcta.
A lo largo de esta seccin profundizaremos sobre el anlisis ascendente y el anlisis
descendente.

VII.2. Tablas de anlisis ascendente


Vamos a estudiar ahora diferentes tablas de anlisis (y autmatas asociados) que
se utilizan para realizar el anlisis ascendente.

38 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

VII.2.1. Tablas LR(0)

Tabla Definicin VII.3 Tabla LR(n). Tabla empleada para el procesamiento de entrada
LR(n) desde la izquierda (Left) mediante derivaciones Right-most con n smbolos de entrada.
Veamos un ejemplo de como funciona esta tabla de anlisis

Ejemplo: Consideremos la gramtica G=(T, N, E, P):

E T | E+T

T i | (E)

El primer paso para realizar el anlisis LR(O) consiste en aadir un axioma E y la


regla:

E E$

De forma que se obtiene la siguiente gramtica extendida:

E E $

ET

E E+T

Ti

T (E)

Ahora lo que hacemos es aadir un . delante del smbolo que estemos analizando
en cada paso.
Para realizar el anlisis por este mtodo vamos a construir un autmata finito
determinista, que procesa una cadena de smbolos, empezando por el estado S0:

39 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Si aplicamos el algoritmo de anlisis LR(0) a lo bruto, tras cada reduccin todo lo


que hay en la pila (una vez aplicado el correspondiente cambio fruto de la reduccin)
pasa al inicio de la cadena de entrada y saltamos al estado S0 para continuar con el
anlisis.
No obstante, esta prctica implica deshacer lo andado muchas veces y alarga mucho
el desarrollo del algoritmo. Para evitar esto, en la pila guardamos, adems de la ltima
entrada leda, el estado en que nos encontramos y tras una reduccin nos desplazamos
al estado indicado en la pila justo antes de la reduccin y aadimos la nueva cadena
(fruto de la reduccin) al inicio de la cadena de entrada.
A continuacin explicamos cmo se realiza el anlisis a lo bruto.
Si el anlisis de una cadena llega al estado de aceptacin (Sacc ) en este autmata,
se termina el anlisis concluyendo que la cadena es sintcticamente correcta.
Para construir el autmata seguimos los siguientes pasos:

Partimos en el estado S0 del axioma de la gramtica extendida (E 0 ).


Situamos un . delante del smbolo que analizamos, en este caso empezamos
por el smbolo E. Ya que la regla de derivacin del axioma es E 0 E$. Por
tanto nos queda E 0 .E$
Ahora tenemos que cerrar el smbolo que esta inmediatamente despus del pun-
to. Si es un terminal ya estara cerrado. Si es un no terminal lo cerramos escri-
biendo las reglas de derivacin del mismo, poniendo de nuevo un . delante del
primer smbolo de cada una de las reglas y cerrando el smbolo inmediatamente
posterior al .. As terminamos el estado S0
Creamos los siguientes estados. La transicin de un estado a otro se da a partir de
la entrada de un smbolo. Si entra un smbolo que se encuentra inmediatamente

40 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

despus del ., entonces se ir a un nuevo estado del autmata en el que ahora el


. se encontrar en la siguiente posicin dentro de la regla de derivacin. Si llega
un smbolo que no est inmediatamente despus del ., se saltar a un estado
de error.

Si se llega a un estado en el que el . queda a la derecha de la regla de derivacin


(sin ningn smbolo inmediatamente despus), este estado ser un estado final.
Esto implica que nada ms llegar a este estado se reducir la regla (introdu-
ciendo en la entrada la pare izquierda de la regla )y volveremos al estado inicial
S0 .

A partir de este autmata se puede crear una tabla, denominada tabla de anlisis
LR(0) que resume el funcionamiento del autmata:

En la cual vemos que se indica la accin a realizar segn el estado en el que nos
encontremos y el smbolo de entrada que leamos.
As, para realizar el anlisis de una entrada nos basta con utilizar esta tabla y una
pila en la que vayamos guardando las acciones que vamos realizando.
A la hora de analizar una entrada realizamos los siguientes 5 tipos de acciones:

ERROR: si llegamos a una casilla en blanco de la tabla se deduce que la entrada


es incorrecta.

Desplazar (smbolo terminal): Avanzamos un smbolo en la entrada y lo introdu-


cimos en la pila junto con el nmero del estado al que saltas. Corresponde a las
casillas dx, siendo x el estado al que saltamos.

Reducir: Sacar de la pila la parte derecha de la regla (doble de smbolos de los


que tiene la parte derecha ya que sacamos smbolo y nmero de estado al que
salt). Tras la reduccin se considera que volvemos al estado S0 con smbolo de
entrada el de la parte izquierda de la regla que se acaba de reducir. Corresponde
a las casillas rx, siendo x la regla de la gramtica que reducimos.

41 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ir a (desplazamiento de smbolo no terminal). Saltar al estado indicando introdu-


ciendo en la pila el no terminal y el estado al que se salta. Se aplica justo despus
de realizar una reduccin. No se avanza por tanto en la cadena de entrada. Co-
rresponde a las casillas de la tabla en la que hay solo un nmero (estado al que
saltamos).

Aceptar: Se acepta el smbolo e entrada si llegamos al estado de aceptacin Sacc .

La siguiente tabla recoge el resultado detallado del anlisis de la entrada (por


comodidad mostramos en anlisis mejorado, guardando en la pila el estado en que nos
encontramos):
i + i + i$
Instante Entrada Pila2 Accin
0 i+i+i$ 0 d4: desplazar i, saltar a 4
1 +i+i$ 0i4 r3: Reduccin con regla 3, T -> i
2 +i+i$ 0 7: desplazar T, ir a 7
3 +i+i$ 0T7 r1: reduccin E -> T
4 +i+i$ 0 1: desplazar E, ir a 1
5 +i+i$ 0E1 d2: desplazar +, saltar a 2
6 i+i$ 0E1+2 d4: desplazar i, saltar a 4
7 +i$ 0E1+2i4 r3: reduccin T -> i
8 +i$ 0E1+2 3: desplazar T, ir a 3
9 +i$ 0E1+2T3 r2: reduccin E -> E+T
10 +i$ 0 1: desplazar E, ir a 1
11 +i$ 0E1 d2: desplazar +, saltar a 2
12 i$ 0E1+2 d4: desplazar i, saltar a 4
13 $ 0E1+2i4 r3: reduccin T -> E
14 $ 0E1+2 3: desplazar T, ir a 3
15 $ 0E1+2T3 r2: reduccin E -> E+T
16 $ 0 1: desplazar E, ir a 1
17 $ 0E1 Acepar: desplazas $ y saltas a Sacc

Ejemplo: Veamos un ejemplo del anlisis de una expresin que termina en error:

42 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

VII.2.1.1. Conflictos, y herramientas para solucionarlos

Vamos a definir nuevos conceptos que pondremos en prctica en esta seccin.


Las tablas LR(0) no son suficientemente potentes para representar todo tipo de
gramticas. Podemos encontrarnos dos tipos de conflictos:

Conflicto desplazamiento/reduccin: Se producen cuando te encuentras en un


estado final y adems de la reduccin, existe la posibilidad de desplazar.
Conflicto reduccin/reduccin: Se producen cuando te encuentras en un estado
final y puedes realizar una reduccin utilizando dos reglas diferentes.

Para solucionar estos conflictos definimos primero(x) y siguiente(x):

Primero(A) Definicin VII.4 Primero(A). El primero de A es el conjunto de terminales que pueden


aparecer al principio de una cadena derivada de A.
Veamos cmo calcular el primero de A. Para ello observamos que existen tres
diferentes casos para una regla de la forma A :

1. T (Si es un smbolo terminal): primero(A)=


2. N (Si es un smbolo no terminal): primero(A)=primero()

Veamos un ejemplo

Ejemplo: Dada la gramtica:

E T E0
E 0 +T E 0
E0
T FT0
T 0 F T 0
T0
F (E)
F i

Vamos a calcular el primero de algunos smbolos. Por ejemplo:


primero(E)={+, }
primero(T)={, }
primero(F)={(, i}
primero(T)={(, i}
primero(E)={(, i}

43 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejemplo: Si tuviramos la misma gramtica que en el apartado anterior cambiando


la regla T 0 por T 0 T , entonces:
primero(T)={, , (, i}

Siguiente(A) Definicin VII.5 Siguiente(A). Dada una gramtica, el siguiente de un elemento,


A, es el conjunto de smbolos terminales que pueden aparecer justo despus de A en
alguna forma sentencial derivada del axioma.

P Para calcularlo formalmente, dada una regla : X 7 A{1 , 2 , ...}, con , i

1. aadimos primero(1 ) \ a siguiente(A).

2. si primero(1 ), repetimos (1) con 2 .

iteramos hasta que


/ primero(j ) o se acaben los smbolos a su derecha.

si se acaban los smbolos a su derecha, aadimos siguiente(X) a siguiente(A).

si el algoritmo te lleva a que en siguiente de un smbolo se debe unir siguiente


de ese mismo smbolo, se ignora.

Observacin: $ Siguiente(axioma) siempre (Al formar la gramtica extendida). En


este caso como el axioma es E, y ya existe un E, habra que definir una nueva regla
del tipo E 00 E$
Veamos un ejemplo para poner en prctica lo aprendido:

Ejemplo: Considerando la misma gramtica del ejemplo anterior, tenemos:


E es el axioma, y por tanto tenemos que:
siguiente(T)=primero(E) siguiente(E) siguiente(E) = {+, ), $}
siguiente(E)=siguiente(E) = {), $}
siguiente(E)={), $}
siguiente(F)=primero(T) siguiente(T) siguiente(T) = {+, , ), $}
siguiente(T)=siguiente(T) = {+, ), $}

VII.2.2. Tablas SLR(1)


Las tablas de anlisis SLR(1) surgen para solucionar los conflictos desplazamien-
to/reduccin. Lo vemos con un ejemplo:

44 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejemplo: Definimos la siguiente gramtica extendida para aplicarle la tabla de


anlisis LR(0):

(0) B B $

(1) B bD;Ef

(2) D d

(3) D D;d

(4) E e

(5) E e;E

Genera el siguiente autmata:

En el cual podemos observar que en el estado final S7 tenemos dos posibles acciones
si entra un ;, la de reducir (por ser estado final y encontrarse el . a la derecha de la
regla) o la de desplazar al estado S10
Por tanto nos quedara la siguiente tabla de anlisis LR(0):

45 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Concluimos que no es por tanto un autmata LR(0) ya que tenemos conflictos que
debemos solucionar. Para ello usaremos SLR(1).

Tabla Definicin VII.6 Tabla SLR(1). Tabla que mejora la tabla de anlisis LR(0) modifi-
SLR(1) cando las transiciones de los estados finales del autmata.
En el caso de LR(0) realizaban una reduccin siempre, mientras que en SLR(1) se
especfica cundo hay que realizar una reduccin, cundo un desplazamiento, y cundo
vamos a un estado de error.
Por tanto el autmata quedar igual a simple vista (slo que ahora habr ms
transiciones a estados de error aunque estas no aparezcan dibujadas). Los cambios los
mostraremos en la tabla de anlisis.
La idea principal del anlisis SLR(1) es que slo aplicaremos las reducciones de
reglas de la forma X algo, delante del Siguiente(X).
Vamos a calcular los elementos siguientes de los no terminales B, D y E.

siguiente(B) $, por tanto las reducciones de B slo se producirn delante del


smbolo $.

siguiente(D) ;, por tanto las reducciones de B slo se producirn delante del


smbolo $.

siguiente(E) f, por tanto las reducciones de B slo se producirn delante del


smbolo $.

Se eliminan as los conflictos, quedando la tabla de anlisis de la siguiente manera:

Como podemos observar, en el estado S7, se reduce siguiendo la regla (4) (ver
las reglas de la gramtica definidas al principio del ejemplo), pero slo si el siguiente
elemento de la entrada es una f, ya que siguiente(E)=f.

46 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Conclusin: Para realizar una tabla de anlisis SLR(1) basta con:

1. Hacer la tabla de anlisis LR(0).

2. Calcular los elementos siguientes de los smbolos no terminales.

3. Modificar las filas de la tabla que correspondan a estados finales. Poniendo huecos
en blanco en todas las casillas salvo en aquellas en las que haya desplazamiento
y aquellas en las que realmente reduzcamos, es decir, en las que el siguiente
elemento del que vayamos a reducir coincida con el de la entrada.

VII.2.3. Tablas LR(1)


Las tablas LR(1) surgen para corregir los conflictos desplazamiento/reduccin que
no es capaz de solventar el anlisis SLR(1).
Veamos dos ejemplos en los que el anlisis SLR(1) falla:

Ejemplo: Definimos la siguiente gramtica extendida para aplicarle la tabla de


anlisis SLR(1):

(0) E E $

(1) E E+E

(2) E E*E

(3) E i

Genera el siguiente autmata:

En el cual podemos observar que en el estado final S6 podramos desplazar o reducir


para los smbolos + y *. Ya que siguiente(E)={+, $}.

47 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Por tanto nos quedara la siguiente tabla de anlisis:

Ejemplo: Definimos la siguiente gramtica extendida para aplicarle la tabla de


anlisis SLR(1):

(0) S S $

(1) S xb

(2) S A

(3) A aAb

(4) A x

Genera el siguiente autmata:

48 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

En el cual vuelve a ocurrir algo parecido a lo del ejemplo anterior. En este caso
tenemos que:

siguiente(S)={$}
siguiente(A)={b, $}

Por tanto nos quedara la siguiente tabla de anlisis:

Mediante el anlisis SLR(1) no aadamos ningn estado ms al autmata, nica-


mente cambibamos la tabla de anlisis. Ahora, con LR(1) vamos a aadir ms estados
a nuestro autmata. As, para formar un autmata LR(1) realizamos los siguientes pa-
sos:

1. Ahora la gramtica extendida no va a tener una regla que sea S 0 S$ sino que
esta regla ser S 0 S{$}.
2. Vamos a formar cada estado como en LR(0), poniendo un . delante del smbolo
que estamos evaluando y cerrando ese smbolo como ya explicamos anterior-
mente.
3. A cada regla que aparezca en cada estado del autmata se deber aadir entre
corchetes lo que llamaremos el smbolo de adelanto.
Este smbolo es el siguiente(X) si tenemos X ABC..., es decir, el siguiente
del smbolo no terminal situado a la izquierda de la regla.
Esto es algo ms complicado de lo que parece.
El procedimiento a aplicar, consiste en partir nicamente de la regla que est
generando el autmata (En el estado inicial esta regla ser la derivacin del
axioma y en otros estados la regla que acabamos de derivar).
Para esta regla ya conocemos el smbolo de adelanto: si es un estado intermedio
conserva el smbolo de adelanto del estado anterior y si es el estado inicial su
smbolo de adelanto es $.
Una vez tenemos la regla inicial, calculamos su cierre en pequeos pasos. Es
decir, primero aadimos las reglas que se derivan del no terminal situado inme-
diatamente despus del punto (hasta aqu un paso), luego aplicamos calculamos
el cierre de cada una de estas nuevas reglas (por cada regla un paso).

49 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Por qu realizamos esta distincin entre pasos que antes no hacamos? Por que
ahora ser necesario realizar un pequeo trabajo entre estos pasos.
En cada paso tomamos nicamente la regla que estamos cerrando y las reglas que
acabamos de aadir y, restringindonos a ese subconjunto de reglas, calculamos
los smbolos de adelanto de las mismas.

Como resultado, tendremos un mayor nmero de estados ya que si el smbolo de


adelanto cambia, habr que definir un nuevo estado.

Ejemplo: Usando la gramtica del ejercicio anterior, generamos el siguiente aut-


mata usando LR(1):

Observacin: En este ejemplo hay una errata. En los estados S0 , S3 y S7 la regla


A ::== .Ab{$} debera ser A ::== .Ab{b}, puesto que Siguiente(A) ={b} y la regla
A ::== .x{$} debera ser A ::== .x{b}
Como podemos observar, en este autmata se eliminan los conflictos que tenamos
antes. Nos fijamos en la clave de esto.
Nos quedara la siguiente tabla de anlisis:

50 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

VII.2.4. Tablas LALR(1)


El anlisis LALR(1) supone reducir el tamao de la tabla de anlisis de LR(1), a
cambio de la posibilidad de aparicin de conflictos reduccin/reduccin.
Debemos tener en cuenta que buena parte de la complejidad del algoritmo recae
en el coste de procesar la entrada siguiendo un autmata y que, cuando menor sea el
mismo menor ser el coste.
La principal diferencia que aporta el anlisis LALR(1) consiste en la agrupacin de
estados finales que slo difieran en los smbolos de adelanto.
Veamos como transformar un autmata LR(1) en un autmata LALR(1).

VII.3. Anlisis descendente


Vamos a estudiar cmo se desarrollan los algoritmos de anlisis descendente.
Ya los mencionamos anteriormente pero, para ver cmo funcionan, vamos a realizar
algunos ejemplos por fuerza bruta, para captar la idea del asunto.

Ejemplo: Empezaremos por una gramtica sencillita:

S aSb

S ab

y trataremos de ver si la cadena aabb se deriva de esta gramtica.


Para empezar a estudiar el ejemplo, debemos tener en cuenta dos mximas del
anlisis descendente:
La cadena se lee desde la izquierda
Realizaremos siempre derivaciones Leftmost

51 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Vamos a realizar el ejercicio por fuerza bruta.

Para empezar derivamos el axioma con la primera regla (en realidad dara igual
cual coger).
Obtenemos por tanto S->aSb y vemos que es compatible con la cadena buscada.

Tomamos ahora el elemento no terminal situado ms a la izquierda y lo derivamos.


Obtenemos as S->aSb->aaSbb que vemos que es compatible con la entrada.

Derivamos una vez ms el siguiente elemento no terminal ms a la izquierda.


En esta ocasin llegamos a S->...->aaaSbbb que ya no es compatible con la
cadena de modo que deshacemos la ltima operacin.

Tratamos de aplicar la segunda regla.


As obtenemos S->...->aaabbb que tampoco es compatible por lo que volvemos
a deshacer el ltimo paso.

Nos hemos quedado sin reglas por aplicar, de modo que debemos deshacer una
accin ms. Volvemos al estado S->aSb y tratamos de aplicar la segunda regla:
Llegamos a S->aSb->aabb y vemos que coincide con la cadena buscada.

Al explicar el algoritmo empleado hemos hecho alusin a la compatibilidad. Defi-


nmosla formalmente.

Compatibilidad Definicin VII.7 Compatibilidad. Para comprobar si la cadena que tenemos ahora
mismo es compatible con la cadena que estamos buscando simplemente vemos si los
primeros smbolos terminales (hasta el primer no terminal) coinciden.
Tal y como lo hemos explicado ,el algoritmo de anlisis descendente presenta dos
problemas graves:

1. Es extremadamente ineficiente
2. Recursividad por la izquierda.
Si nos encontramos con una gramtica del tipo
Sb
S Sb
y buscamos la cadena abb entraramos en un problema de recursin infinita pues
aplicar la primera regla no nos da la solucin final en ningn caso y con la segunda
regla tendremos siempre al inicio de la cadena un smbolo que no es terminal.

Para clasificar las gramticas segn puedan causarnos o no este problema vamos a
definir un nuevo concepto

Gramtica Definicin VII.8 Gramtica LL(1). Gramtica en la que todas las reglas presentan
LL(1) en la parte derecha 1 smbolo no terminal seguido de un smbolo cualquiera (terminal
o no terminal).

52 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Adems, dos reglas con la misma parte izquierda deben un terminal distinto al
inicio de su parte derecha.
Estas gramtica son muy interesantes ya que presentan un claro determinismo, que
nos evita de hacer backtracking con lo que hacen la bsqueda muy eficiente.
Veremos dos mtodos para el anlisis de gramticas de este tipo pero antes debemos
definir un nuevo concepto muy importante de cara al anlisis descendente: Forma
normal de Greigbach

VII.3.1. Forma normal de Greigbach

Forma Definicin VII.9 Forma normal de Greigbach. Decimos que una gramtica est en
normal de forma normal de Greigbach si todas las reglas son de la forma:
Greigbach
A a donde a T, N

Observacin: Todas las gramticas pueden expresarse en forma normal de Greigbach.


Una vez que una gramtica est expresada de esta forma, comprobamos si es,
adems, LL(1) y si es as ya lo tenemos.
Vamos a ver cmo tratar una gramtica que no est expresada en forma normal de
Greigbach. En estos casos debemos solucionar, antes de nada, los dos problemas que
nos impiden que la gramtica est en esta forma normal

1. Eliminacin de reglas recursivas por la izquierda


Dada una gramtica de la forma

A A
A

la convertimos en otra

A X
X X|

2. Eliminar smbolos no terminales del principio de la parte derecha de


las reglas.
Vamos a clasificar las reglas en tres tipos:

a) A aZ
b) Ai Aj con Ai precediendo a Aj
c) Ai Aj con Aj precediendo a Ai

El algoritmo a seguir sera:

53 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

a) Dejamos las reglas de Tipo a) como estn.


b) Eliminamos las reglas de Tipo c), empezando con aquellas cuyo smbolo de
la parte derecha tiene mayor precedencia
c) Eliminamos las reglas de Tipo b), empezando con aquellas cuyo smbolo de
la parte izquierda tenga menor precedencia.

3. Eliminar smbolos terminales de ms.


Para ello, dada una regla
A abX

pasamos a dos reglas:


A aBX
Bb

4. Eliminar reglas

5. Eliminar indeterminismo
Dadas reglas de la forma

a) A aZ
b) A aB

sacamos factor comn y llegamos a

a) A aW
b) W B
c) W Z

Tras este paso vemos si aparecen reglas recursivas. En caso afirmativo, las eli-
minamos antes de seguir.

6. Volvemos al primer paso y repetimos

Observacin: Si la gramtica no es LL(1) este algoritmo no converge

Veamos un ejemplo de cmo aplicar este algoritmo

Ejemplo: Tomamos la gramtica:

E E+T

ET

T T T

T F

F i

54 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Primero eliminamos las reglas recursivas por la izquierda y nos quedamos en:

E T X (tipo 2)

X +T X| (tipo 1)

T F Y (tipo 2)

Y T Y | (tipo 1)

F i (tipo 1)

donde hemos indicado el tipo de cada regla, preparndonos as para el paso siguiente.
Ahora tenemos que eliminar los smbolos no terminales del principio de la parte
derecha de las reglas. Para ello aplicamos las siguientes transformaciones

T FY = T iY

E T X = E F Y X = F iY X

en el orden exacto en que se han indicado.


El resultado por el momento es:

E iY X

X +T X

T iY

Y T Y

F i

Pero a esta gramtica an le falta algo para ser de Greibach, tenemos que eliminar
las transiciones vacas, obteniendo:

E iY X

E iY

E iX

Ei

X +T X

X +T

T iY

55 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

T i

Y T Y

Y T

F i

El mtodo seguido se basa en la duplicacin de aquellas reglas que contengan Y X


(los no terminales que ocasionaban transiciones ) aadindoles una opcin sin esas
variables, que es lo que obtendramos si emplesemos la derivacin
El ltimo paso llevado a cabo en el ejemplo (eliminacin de reglas ) no es siempre
necesario.
Recordemos que queramos saber si una gramtica era de forma normal de Greibach
con el fin de reconocer si era LL(1). Desde el ltimo estado que hemos alcanzado en
la gramtica, para convertirla en una gramtica LL(1) deberamos eliminar los no
terminales que aparecen repetidos en numerosas reglas.
Sin embargo, desde el paso anterior tendramos directamente que la gramtica es
LL(1).
La pregunta que surge ahora est clara:

VII.3.2. Cundo nos interesa eliminar las transiciones ?


En general, nos interesar eliminar las transiciones siempre que al hacerlo no este-
mos generando una gramtica no LL(1). Es decir, queremos eliminar estas transiciones
sin dar lugar a gramticas no deterministas.
En general,

primero(X) siguiente(X) = = X no molesta para LL(1)

En el ejemplo anterior ninguna de las reglas nos molestaban de modo que poda-
mos prescindir del ltimo paso para garantizar que la gramtica es LL(1)

VII.3.3. Anlisis LL(1) usando la tabla


El algoritmo a seguir es el siguiente

1. Inicializamos la pila con S$

2. Inicializamos la entrada al primer elemento de la cadena

3. Comparamos la pila con la entrada

a) pila=entrada=$ FIN
b) pila contiene x T
1) x = entrada = desplazamos entrada y pop

56 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

2) x 6= entrada = ERROR
c) pila contiene x N = saco x de la pila y meto .

Veamos un pequeo ejemplo de cmo aplicar este algoritmo.

Ejemplo: Consideremos la gramtica:

S E$

E T E0

E 0 +T E 0

E0

T FT0

T 0 F T 0

T0

F i

F (E)

Y vamos a analizar con ella la entrada

i + i i$

La tabla queda:

Smbolo + * i ( ) $
E E TE E T E0
E E 0 +T E 0 E0 E0
T T FT0 T FT0
T T0 T 0 F T 0 T0 T0
F F i F (E)

y el anlisis resulta:

57 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

0 i+i*i$ S$ derivar ETE


1 i+i*i$ TE$ derivar T FT
2 i+i*i$ FTE$ derivar Fi
3 i+i*i$ iTE$ desplazar entrada
4 +i*i$ TE$ derivar T
5 +i*i$ E$ derivar E TE
6 +i*i$ +TE$ desplazar
7 i*i$ TE$ derivar T FT
8 i*i$ FTE$ derivar F i
9 i*i$ iTE$ desplazar
10 *i$ TE$ T *FT
11 *i$ *FTE$ desplazar
12 i$ FTE$ Fi
13 i$ iTE$ desplazar
14 $ TE$ T
15 $ E$ E
16 $ $ OK

Ejemplo: Consideremos la gramtica:

P iEtP P 0 $
P a
P 0 eP
P0
Eb

Vamos a construir ahora la tabla de anlisis asociado.


Para ello tenemos que ver cul es el siguiente de cada elemento no terminal y dejar
claro en la tabla que slo aplicamos la reduccin delante del siguiente
La tabla de anlisis asociada sera:

Smbolo a t e b i $
P P a P iEtP P 0
P P 0 EP P0
P0
E Eb

Como podemos observar, esta gramtica no es LL(1)


Vamos a hacer hincapi en la diferencia entre gramtica LL(1) y lenguaje LL(1)

Gramtica Definicin VII.10 Gramtica LL(1).


LL(1)
Gramtica cuya tabla de anlisis LL(1) no presenta conflictos

Lenguaje Definicin VII.11 Lenguaje LL(1).


LL(1)
58 de 100 11 de febrero de 2016 14:29
Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Lenguaje para el cual existe una gramtica LL(1) que lo genera

Ejemplo: La gramtica

S aSb

S ab

no es una gramtica LL(1), cosa que podemos comprobar construyendo su tabla de


anlisis LL(1). Sin embargo, su lenguaje asociado si que es LL(1) ya que podemos
transformarla en

Bb

S aW

W aW b

W b

que si es LL(1) (de nuevo lo comprobamos construyendo su tabla de anlisis LL(1)).

VII.3.4. Anlisis LL(2) usando la tabla


La principal diferencia del anlisis LL(2) respecto al LL(1) radica en que ahora
vamos a tomar dos smbolos de adelanto
Vemoslo para el caso particular de la gramtica

S aSb

S ab

En este caso sera tremendamente sencilla la tabla de smbolos:

Smbolo aa ab
S S ab S aSb

Pero an quedan casos en los que no podemos resolver los conflictos ni usando
LL(2).
Por ejemplo, en la gramtica

FUNCION -> TIPO ID (ARGS);

FUNCION -> TIPO ID (ARGS) {CUERPO}

ARGS ->

ARGS -> ARG ARGS

59 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

TIPO -> int | float

ARG -> ID

ID -> (a + ... + z)(a + ... + z)

A la hora de trabajar con la regla FUNCION -> TIPO ID (ARGS) no sabemos


cuntos argumentos vamos a encontrar.
La solucin para este problema pasa por usar expresiones regulares, lo que nos lleva
al anlisis LL(*)

VII.3.5. Anlisis LL(*)


Consiste en emplear expresiones regulares en lugar de smbolos de adelanto.
Continuando con el ejemplo anterior, para resolver el problema con LL(*) conside-
ramos la expresin regular:

r = (int + f loat).(a z)+ .(.[(a z)+ ] .)

y la tabla quedara (para la regla que causaba el problema)

Smbolo r.";" r.""


FUNCION FUNCION -> TIPO ID (ARGS); FUNCION -> TIPO ID (ARGS) {CUERPO}

En este caso no hay problemas pues es bastante sencilla la tabla mostrada. No obstante,
en un caso ms general sera necesario cuidar que no se solapen las expresiones regulares
empleadas en el anlisis.

60 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Captulo VIII

ltimos detalles: lemas,


equivalencias y reduccin de
automtas...

VIII.1. Minimizar autmatas finitos


En esta seccin vamos a tratar de reducir los estados de un autmata finito. Para
ello seguimos dos pasos:

1. Eliminar estados inaccesibles.


Se realizar mediante una bsqueda en anchura dentro del rbol, se parar la
expansin de las ramas del rbol segn se vayan encontrando estados repetidos.
Aquellos estados que no aparezcan en el rbol podrn ser eliminados del autmata
directamente ya que nunca podremos llegar a ellos.

2. Unir estados equivalentes. Para ello primero debemos encontrarlos, definimos la


siguiente relacin de equivalencia entre estados:
Sean P, Q estados del autmata, F el conjunto de estados finales y el alfabeto
del autmata.

p EQ0 q o bien p F y q F o p /Fyq / F. (es decir, dos estados


son equivalentes a nivel 0 si los dos pertenecen al conjunto de los estados
finales o los dos pertenecen al conjunto de los estados NO finales)
p EQ1 p EQ1 q y a se cumple que (p, a) EQ0 (q, a)
.
.
.
p EQn p EQn1 q y a se cumple que (p, a) EQn1 (q, a)
paramos cuando lleguemos a un paso en los que tengamos las mismas clases
de equivalencia con los mismos elementos que en el paso anterior.

61 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejemplo: Vamos a reducir el siguiente autmata:

1. Vemos que no tiene ningn estado inaccesible.


2. Vamos a ir viendo los estados equivalentes
EQ0 : C1 = {A, B} (estados finales) y C2 = {C} (estados NO finales).
Ahora se revisan los grupos equivalentes del paso anterior y se comprueba
si son equivalentes en un nivel ms.
Con el estado C ya no debemos hacer nada, ya que este es equivalente
consigo mismo.
Si desde A se sale con un 0 llegamos a B, que pertenece al grupo C1 de
la equivalencia anterior. Si se sale con un 1 llegamos a C que pertenece al
grupo C2 .
Si desde B se sale con un 0 llegamos a B, que pertenece al grupo C1 de
la equivalencia anterior. Si se sale con un 1 llegamos a C que pertenece al
grupo C2 .
Por tanto llegamos a estados pertenecientes al mismo grupo de equivalencia
tanto desde A como desde B. Y es por eso que A y B son tambin EQ1
entre ellos.
Como hemos llegado a dos pasos consecutivos en el que nuestros grupos
de equivalencia han coincidido ( C1 = {A, B} y C2 = {C}), paramos el
algoritmo y concluimos: A y B son equivalentes entre si.

Transformamos el autmata y nos queda:

Ejemplo: Dado el siguiente autmata:

62 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

1. Realizamos el rbol de bsqueda en anchura y obtenemos lo siguiente:

B F

G C

Podemos deducir de ello que el nodo D es inaccesible, y por tanto lo eliminamos


del autmata.

2. Vamos a ir viendo los estados equivalentes

EQ0 : C1 = {C} (estados finales) y C2 = {A, B, E, F, G, H} (estados NO


finales).
Ahora se revisan los grupos equivalentes del paso anterior y se comprueba
si son equivalentes en un nivel ms.
Con el estado C ya no debemos hacer nada, ya que este es equivalente
consigo mismo.
Si desde A se sale con un 0 llegamos a B, que pertenece al grupo C2 de
la equivalencia anterior. Si se sale con un 1 llegamos a F que pertenece al
grupo C2 tambin.
Si desde B se sale con un 0 llegamos a G, que pertenece al grupo C2 de
la equivalencia anterior. Si se sale con un 1 llegamos a C que pertenece al
grupo C1 .
Por tanto llegamos a estados pertenecientes a distintos grupos de equiva-
lencia. Y concluimos que A y B no son equivalentes.
Repetimos el mismo procedimiento con todas las parejas de nodos. Marca-
mos con X si NO son equivalentes y con V si SI son equivalentes.

A-B -> X B-E -> X E-F -> X F-G -> X G-H -> X
A-E -> V B-F -> X E-G -> V F-H -> X
A-F -> X B-G -> X E-H -> H
A-G -> V B-H -> V
A-H -> X

Por tanto las nuevas equivalencias quedaran: EQ1 : C1 = {C}, C2 =


{A, E, G}, C3 = {B, H}, C4 = {F }
Continuamos con la siguiente equivalencia. Los grupos C1 y C4 ya estn
terminados. Miramos los grupos C2 y C3 .

63 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Empezamos con C2 . Si desde A se sale con un 0 llegamos a B, que pertenece


al grupo C3 de la equivalencia anterior. Si se sale con un 1 llegamos a F
que pertenece al grupo C4 .
Si desde E se sale con un 0 llegamos a H, que pertenece al grupo C3 de
la equivalencia anterior. Si se sale con un 1 llegamos a F que pertenece al
grupo C4 .
Por tanto A y E son equivalentes. Repetimos el mismo proceso con el resto
de parejas y obtenemos:
A-E -> V
G-E -> X
A-G -> X
Por tanto del grupo de equivalencia C2 obtenemos 2. C2 = {A, E} y
C5 = {G}
Ahora miramos el grupo C3 , y se observa que B y H siguen siendo equiva-
lentes.
Nos queda: EQ2 : C1 = {C}, C2 = {A, E}, C3 = {B, H}, C4 = {F },
C5 = {G} Como los grupos de equivalencia han cambiado, tenemos que
avanzar un nivel ms.
Solo tenemos que mirar los conjuntos C2 y C3 . Observamos que no se
forman nuevos grupos de equivalencia, y tenemos:
EQ3 : C1 = {C}, C2 = {A, E}, C3 = {B, H}, C4 = {F }, C5 = {G}
Por tanto llegamos a la conclusin parada y construimos el autmata re-
sultante:

VIII.2. Equivalencia AFN - AFD


Vamos a ver que un autmata finito no determinista se puede transformar en un
autmata finito determinista equivalente.
Sea (q) el conjunto formado por los estados accesibles dado un estado q con
transiciones .
Sea C0 = {qo } (q) el conjunto de transiciones posibles desde C0 .
Vamos a transformar el siguiente AFN en un AFD:

Ejemplo:

64 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

y nos queda:

NOTA: Si tuviramos un autmata que empezar en un estado A y pudiese pasar a


otro B a travs de una transicin , el estado inicial quedara C0 = {A, B}.

VIII.3. Propiedades del cierre (regulares)


Sean L1 y L2 lenguajes regulares.

L1 L2 , L1 .L2 y L1 L2 son regulares


Lc1 = L es regular
L1 L2 = L1 Lc2 es regular.

65 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

VIII.4. Lemas del Bombeo

VIII.4.1. Lema del bombeo (Lenguajes regulares)


Sea L un lenguaje regular, infinito: m 0 tal que cualquier w L puede des-
componerse como w = xyz con |xy| m y |y| 1 de tal modo que xy i z L
i = 0, 1, 2, ....

Ejemplo: Sea el lenguaje L = {an bn , n 0} queremos ver si es un lenguaje regular.


Vamos a intentar demostrar que no es regular.

1. Elegimos un nmero m cualquiera.

2. Elegimos una palabra w L con |w| m. Cogemos w = am bm que tiene


|w| = 2m m

3. Manipulamos la palabra y vemos como separarla.


Tenemos: a, a, ..., a b, b, ..., b
| {z } | {z }
m m

Como |xy| m podemos escoger un xy que sean todo as, de manera que xy i z
tendra mas as que bs y por tanto no pertenecera a L.
Hemos encontrado una palabra w que no cumple las condiciones que debera
cumplir toda palabra si el lenguaje fuese regular. Concluimos que el lenguaje no
es regular.

El truco esta en coger una palabra que no cumpla la implicacin, con la cual si
tenemos un A B y B no se cumple, se deduce que A tampoco. B A
Veamos otro ejemplo:

Ejemplo: Sea el lenguaje L = {wwc , w {a, b} } queremos ver si es un lenguaje


regular. Vamos a intentar demostrar que no es regular.

1. Elegimos un nmero m cualquiera.

2. Elegimos una palabra w L con |w| m. Cogemos w = am bm bm am que tiene


|w| = 4m m

3. Manipulamos la palabra y vemos como separarla.


Tenemos: a, a, ..., a b, b, ..., b b, b, ..., b a, a, ..., a
| {z } | {z } | {z } | {z }
m m m m

Como |xy| m podemos escoger un xy que sean todo as de la parte izquierda,


de manera que xy i z no sera simtrica.
Hemos encontrado una palabra w que no cumple las condiciones que debera
cumplir toda palabra si el lenguaje fuese regular. Concluimos que el lenguaje no
es regular.

66 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Demostrar que el lenguaje L = (ab)n ak |n > k, k 0 no es regular.



Ejemplo:

1. Elegimos una m cualquiera

2. Elegimos una palabra de la forma w = (ab)m+1 am , que tiene |w| = 2(m + 1) +


mm

3. Tenemos: abab
| {z . . . ab} ab |aa {z
. . . a}
2m m

Ahora descomponemos w = xyz, con |xy| m y |y| 1.


De este modo xy est forzado a aparecer en la parte de las ab:

2m
z }| {
m m
z }| { z }| {
abab
| {z . . . ab} . . . ab ab aa . . . a
xy

Y por tanto y slo puede ser igual a las siguientes cadenas:

a) a . . . a, para esta situacin cogemos i = 0 y nuestra cadena bien empieza


por b (en caso de que |x| = 0), bien tendr 2 b seguidas. Por tanto
xy 0 z / L.
b) a . . . b, para esta situacin cogemos i = 0 y ya no se cumplir la condicin
n > k del lenguaje. Por tanto xy 0 z / L.
c) b . . . a, hacemos lo mismo que en el caso anterior.
d) b . . . b, otra vez tomamos i = 0 y nuestra cadena pasara a tener 2 a
seguidas en las primeras m letras. Y por tanto xy 0 z
/ L.

VIII.4.2. Lema del bombeo (Lenguajes independientes del


contexto)
Sea L un lenguaje independiente del contexto, infinito y que no contiene a ,
entonces: m 0 tal que cualquier w L con |w| m puede descomponerse como
w = uxyzv con |xyz| m y |xy| 1 de modo que uxi yz i v L i = 0, 1, 2, ....

Ejemplo: Sea el lenguaje L = {an bn cn , n 0} queremos ver si es un lenguaje


independiente del contexto.

1. Elegimos un nmero m cualquiera.

2. Elegimos una palabra w L con |w| m. Cogemos w = am bm cm que tiene


|w| = 3m m

3. Manipulamos la palabra y vemos como separarla.


Tenemos: a, a, ..., a b, b, ..., b c, c, ..., c
| {z } | {z } | {z }
m m m

67 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Como |xyz| m tenemos que en xyz o bien no hay as o bien no hay cs, y por
tanto ux0 yz 0 v
/ L.
Hemos encontrado una palabra w que no cumple las condiciones que debera
cumplir toda palabra si el lenguaje fuese independiente del contexto. Concluimos
que el lenguaje no es independiente del contexto.

Veamos otro ejemplo:

Ejemplo: Sea el lenguaje L = {ww, w {a, b} } queremos ver si es un lenguaje


independiente del contexto.

1. Elegimos un nmero m cualquiera.

2. Elegimos una palabra w L con |w| m. Cogemos w = am1 bam1 b que tiene
|w| = 2m m

3. Manipulamos la palabra y vemos como separarla.


Tenemos: a, a, ..., a b a, a, ..., a b
| {z } | {z }
m1 m1

Vemos que si escogemos xyz = a, a, ..., b, a, a, ..., a, con esta divisin la palabra
ux0 yz 0 v L, y por tanto no nos vale como contraejemplo.
Se deja como ejercicio para e lector comprobar que la eleccin correcta es coger
un w = am bm am bm . Con esta palabra conseguiremos demostrar que el lenguaje
no es independiente del contexto.

VIII.5. Propiedades del cierre (independientes del


contexto)
Sean L1 y L2 lenguajes independientes del contexto, y LR un lenguaje regular.

L1 L2 es I.C. (Podemos construir la gramtica G G1 |G2 ).

L1 .L2 es I.C. (Podemos construir la gramtica G G1 G2 ).

L1 es I.C. (Podemos construir la gramtica G G1 G|).

L1 L2 no tiene por qu ser I.C. Veamos el siguiente contraejemplo:

 n n m
Ejemplo: Tomemos el lenguaje L1 = a b c |n, m 1 generado por la
gramtica:

S AB
A aAb| ab
B cB| c

68 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Que podemos ver que es I.C.



Ahora tomemos el lenguaje L2 = an bm cm |n, m 1 generado por la gramti-
ca:

S AB
A aA| a
B bBc| bc

Que tambin podemos ver que es I.C.



En este caso tendremos que L1 L2 = an bn cn |n 1 . Y ya habamos demos-
trado anteriormente que este lenguaje no es I.C.

L1 LR es I.C.

L1 no tiene por qu ser I.C. Veamos por qu:

Demostracin. Supongamos que L1 y L2 son lenguajes I.C., y que fuera cierto


que se cumple la propiedad.
En ese caso tendramos que L1 L2 sera I.C., y por tanto:

L1 L2 = L1 L2 = L1 L2

Pero sin embargo acabamos de ver que L1 L2 no tiene por qu ser I.C.

L1 L2 no es necesariamente I.C.

69 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Apndice A

Ejercicios

A.1. Ejercicios

Ejercicio 1.1: Encontrar el lenguaje definido por la gramtica:

S abB

A aaBb

B bbAa

L(G) = ab(bbaa)n bba(ba)n

Ejercicio 1.2: Dado el lenguaje = {a, b} queremos encontrar las gramti-


cas, las expresiones regulares y los autmatas finitos deterministas que representen:

1. Cadenas con exactamente una a

2. Cadenas con al menos una a

3. Cadenas con, como mucho, 3 as

1. La expresin regular sera: b ab


La gramtica que lo representa:

S BaB
B Bb
B

70 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

El autmata sera:

2. La expresin regular sera: (a + b) a(a + b)


La gramtica que lo representa es:

S XaX
X XZ|
Z a|b

El autmata sera:

3. La expresin regular sera: b ((a + b) + (a + b)2 + (a + b)3 )b


Otra expresin podra ser: b (a + b + )b (a + b + )b (a + b + )b
La gramtica que lo representa es:

El autmata sera:

Ejercicio 1.3: Dados los lenguajes:

71 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

1. L = {a2n bn+1 }

2. L = {an bm  n > m 0}

3. L = {an bm ck  k = n + m}

Encontrar la gramtica y los autmatas a pila que los representan:

1. Gramtica

S aaSb|b

Autmata

2. Gramtica

S aSb|aS|a

Autmata

3. Gramtica

S aSc|aAc|
A bAc|

Autmata

72 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Apndice B

Ejercicios 1a Hoja

B.1. Ejercicios sobre autmatas finitos y lengua-


jes regulares

Ejercicio 1.1: Disea expresiones regulares para los siguientes lenguajes:


a) L(A) = {an bm : n + m es impar }
b) Conjunto de nmeros binarios que contienen la subcadena 1010
c) Identificadores de un lenguaje de programacin que empiezan con el smbolo
@, seguido de una letra minscula y cualquier combinacin de letras minsculas o
nmeros.

Apartado a)
(aa) .(a + b).(bb)

Apartado b)
(1 + 0) .1010.(1 + 0)

Apartado c)
@.(a + b + ... + z).(0 + 1 + ... + 9 + a + b + ... + z)

Ejercicio 1.2: Disea un autmata finito (determinista o no determinista)


que reconozca cada uno de los siguientes lenguajes:
a) Conjunto de nmeros binarios que contienen la subcadena 1010
b) Identificadores de un lenguaje de programacin que empiezan con el smbolo
@, seguido de una letra minscula y cualquier combinacin de letras minsculas o
nmeros.

73 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Escojo hacer los diagramas deterministas:


Apartado a)

Apartado b)
Las transiciones no indicadas sobreentendemos que van a un nodo residuo.

Ejercicio 1.3: Indica cul es el lenguaje aceptado por el siguiente autmata:

Expresin regular: L(A) = b .a + b .a.(a + b) .b

74 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Aunque nos pida el lenguaje nos vale con poner la expresin regular.

Ejercicio 1.4: Construye un autmata finito determinista que acepte cadenas


sobre el alfabeto 0,1 que representen nmeros enteros y mltiplos de 5 expresados
en representacin binaria.

Explicacin: Los estados representan el resto de dividir el nmero entre 5. Se tiene


en cuenta que si tienes un numero cualquiera (por ejemplo 101) al aadirle un 0, es
como multiplicarlo por 2, por tanto su resto es el doble, y al aadirle un 1, es como
multiplicarle por 2 y sumarle 1.

Ejercicio 1.5: Para el autmata siguiente encuentra (q0 , 1011) y (q1 , 01)

Explicacin: Nos piden la salida del autmata dada un estado inicial y una palabra.

(q0 , 1011) = q2

Estados 1 0 1 1
q0 q1 q0 q1 q2
q2 - -
q2 - - - -

75 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

(q1 , 01) = q1

Estados 0 1
q1 q0 q1
q2 -

Ejercicio 1.6: Construye un autmata finito no determinista con tres estados


que acepte el lenguaje L = {ab, abc} , es posible hacerlo con menos de tres
estados?

76 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

B.2. Ejercicios sobre autmatas a pila y gramti-


cas independientes del contexto

Ejercicio 2.1: Disea una gramtica independiente del contexto que


genere el lenguaje de los nmeros capica formados con el alfabeto =
0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Los nmeros de una sola cifra no se consideran capica.

En cada regla, si aparecen dos X estas tienen que acabar en el mismo smbolo
terminal. La otra opcin era poner muchas reglas ms tipo X0 , ..., X9 .
S XZX
Z XZX|X|
X 0|1|2|3|4|5|6|7|8|9

Ejercicio 2.2: Disea una gramtica independiente del contexto que genere
el lenguaje de los nmeros formados con el alfabeto = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 que
tengan el mismo nmero de dgitos pares e impares. Puede suponer por simplicidad
que los nmeros pueden tener ceros a la izquierda.

S P SI|ISP |P I|IP |SS


P 0|2|4|6|8
I 1|3|5|7|9

Ejercicio 2.3: Disea un autmata a pia que reconozca el lenguaje del


ejercicio 1.

Explicacin: Cuando pongo x o y quiero decir un smbolo del conjunto


{0,1,2,3,4,5,6,7,8,9}. Cuando pongo x e y en la misma transicin, x 6= y.

77 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejercicio 2.4: Demuestra que la siguiente gramtica es ambigua:


S AB|aaB
A a|Aa
B b

Si derivamos usando la primera regla de S obtenemos:


S AB AaB aaB aab
Si derivamos usando la segunda regla de S obtenemos:
S aaB aab

Ejercicio 2.5: Encuentra una gramtica independiente del contexto para el


siguiente lenguaje:
L = {an wwR bn : w {a, b} , n 1}

wR , es la imagen simtrica de la cadena w. Si w es aab, wR es baa.


S aSb|aXb|
X aXa|bXb|

Ejercicio 2.6: Indica cul es el lenguaje aceptado por el siguiente autmata


a pila:
A = ({q0 , q1 , q2 }, {a, b}, {a, b, z}, , q0 , z, {q2 })
(q0 , a, z) = {(q1 , a), (q2 , )}
(q1 , b, a) = {(q1 , b)}
(q1 , b, b) = {(q1 , b)}
(q1 , a, b) = {(q2 , )}

El autmata a pila sera el siguiente:

El lenguaje consiste en expresiones del tipo {a} {abn a


f oralln > 0}

78 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Apndice C

Ejercicios 2a Hoja

C.1. Ejercicios sobre Gramticas de Atributos


La gramtica:

axioma ::= USUARIO peliculas


peliculas ::= peliculas peliculas | pelicula
pelicula ::= TITULO valoraciones
valoraciones ::= valoraciones valoracion valoracion
valoracion ::= (USUARIO:NUMERO)

genera frases que consisten en una secuencia de pelculas con sus respectivas valora-
ciones realizadas por los usuarios.Al principio de las frases generadas por la gramtica
siempre aparece el nombre de un usuario. A continuacin se muestran tres ejemplos:
jaime Star_Wars(jaime:10)(ana:10) Spiderman(ana:10)(pepe:1)
ana Kapax(pepe:100)(jaime:1) Avatar(ana:40) Pi(pepe:100)(ana:1)
mike Kapax(pepe:100)(jaime:1) Avatar(ana:40) Pi(pepe:100)(ana:1)
Se desa aadir a esta gramtica un sistema de atributos que haga lo siguiente:

1. Calcular el nmero total de pelculas valoradas


2. Indicar el ttulo y la valoracin de la pelcula mejor valoradas por el usuario
indicado al principio de la cadena. Si no hay ninguna pelculas valorada por dicho
usuario debe indicarse tal circunstancia.

Por ejemplo, para las tres cadenas anteriores se mostraran respectivamente los
mensajes siguientes:
Se han valorado 2 pelculas. La mejor valorada por jaime es Star_Wars, con una
valoracin de 10.
Se han valorado 3 pelculas. La mejor valorada por ana es Avatar, con una valoracin
de 40.
Se han valorado 3 pelculas. Ninguna pelcula ha sido valorada por mike.
Notas:

79 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Puede considerarse que existe un proceso de anlisis morfolgio que asigna a


los smbolos terminales los siguientes atributos semnticos: USUARIO.nombre
(nombre de usuario), TITULO.titulo (ttulo de la pelcula), NUMERO.valor (valor
numrico del nmero)

Debe comprobarse que el usuario que aparece al principio de la cadena no valora


ms de una vez la misma pelcula. No es necesario realizar esta comprobacin
para el resto de usuarios.

No est permitido el uso de informacin global

Debe responderse a cada una de las cuestiones usando las plantillas correspon-
dientes

80 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejercicio 1.1: Describa explcita y brevemente el significado de cada atributo


que utilice, as como el proceso de actualizacin de cada uno de ellos mencionando
si se realiza herencia o sntesis en su propagacin. Responde rellenando la tabla:

SMBOLO ATRIBUTOS DESCRIPCIN


USUARIO nombre Nombre del usuario.
TITULO titulo Ttulo de la pelcula.
NMERO valor Valor numrico del nmero.
valoracin nota nota de la valoracin (por sntesis)
usuario usuario que da la valoracin (por sntesis)
valoraciones usuario_actual Usuario inicial (por herencia)
notaMax nota mxima (por sntesis)
nota Nota mxima de la pelcula (por sntesis)
pelcula titulo titulo de la pelcula (por sntesis)
usuario_actual Usuario inicial (por herencia)
num Nmero de pelculas valoradas (por sntesis)
pelculas usuario_actual Usuario inicial (por herencia)
titulo titulo de la pelcula mejor valorada (por sntesis)
nota nota de la pelcula mejor valorada (por sntesis)

Ejercicio 1.2: Define formalmente la gramtica utilizando la notacin ex-


plicada en el temario de esta asignatura. Utiliza la siguiente tabla, en la que debes
indicar, para cada regla de la gramtica, las acciones semnticas asociadas junto
con el instante en que se deben ejecutar.

81 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

INSTATE ACCIN
axioma ::= USUARIO peliculas
1 peliculas.usuario_actual = USUARIO.nombre
2 print("Se han valorado " + peliculas.num + " pelculas")
print("la mejor valorada por " + USUARIO.nombre + " es " + peliculas.titulo
+ " con una valoracin de " + peliculas.nota + ".")
peliculas_1 ::= peliculas_2 pelicula
0 peliculas_2.usuario_actual = peliculas_1.usuario_actual
pelicula.usuario_actual = peliculas_1.usuario_actual
2 if(peliculas_2.nota>pelicula.nota){
peliculas_1.nota=peliculas_2.nota
peliculas_1.titulo=peliculas_2.titulo}
else{peliculas_1.nota=pelicula.nota
peliculas_1.titulo=pelicula.titulo}
peliculas_1.num = peliculas_2.num+1
peliculas ::= pelicula
0 pelicula.usuario_actual = peliculas.usuario_actual
1 peliculas.titulo = pelicula.titulo
peliculas.nota = pelicula.nota
peliculas.num=1
pelicula ::= TITULO valoraciones
0 valoraciones.usuario_actual = pelicula.usuario_actual
1 pelicula.titulo = TITULO.titulo
2 pelicula.nota=valoraciones.notamax
valoraciones_1 ::= valoraciones_2 valoracion
0 valoraciones_2.usuario_actual = valoraciones_1.usuario_actual
2 if(valoraciones_1.usuario_actual==valoracion.usuario AND valoraciones_2.notamax
6= 0){
print("ERROR")
}else if(valoraciones_1.usuario_actual==valoracion.usuario)}
valoraciones_1.notamax=valoracion.nota
}else if(valoraciones_2.notamax 6=0){
valoracion_1.notamax=valoraciones_2.notamax
}else{valoraciones_1.notamax=0}
valoraciones ::= valoracion
0 valoraciones.notamax=0
1 if(valoraciones.usuario_actual==valoracion.usuario){
valoraciones.notamax=valoracion.nota}
valoracion ::= (USUARIO:NUMERO)
2 valoracion.nota = NUMERO.valor
valoracion.usuario=USUARIO.nombre

Ejercicio 1.4: Considrese la siguiente gramtica independiente del contexto:

axioma ::= DINERO lista_compra


lista_compra ::= compra lista_compra | compra
compra ::= [PRODUCTO, PRECIO]

82 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Esta gramtica genera sentencias que consisten en una cantidad de DINERO se-
guida de una lsita de compras, cada una con un PRODUCTO y el PRECIO del
mismo. Tanto el DINERO como el PRECIO son nmeros reales.
Se desa aadir a esta gramtica un sistema de atributos que compruebe si
se puede hacer la compra con el dinero disponible. Se indicarn los productos de
la lista que se pueden comprar y el saldo disponible al final. Se supone que los
productos se adquieren en el mismo orden en el que aparecen en la lista.
Notas:

Puede considerarse que existe un proceso de anlisis morfolgico que asig-


na a los smbolos terminales los siguientes aributos semnticos: PRODUC-
TO.nombre (nombre del producto), PRECIO.valor (valor numrico del pre-
cio) y DINERO.valor (valor numrico del dinero).

No est permitido el uso de informacin global

Los atributos que debemos aadir son:

lista_compra Aadimos los atributos: items, coste y saldo

compra Aadimos los atributos: item y coste

La gramtica de atributos resultante sera:

axioma ::= DINERO lista_compra


{Herencia; lista_compra.saldo = DINERO}

lista_compra_1 ::= compra lista_compra_2


{Herencia;
if lista_compra_1.saldo < compra.coste:
lista_compra_2.saldo = lista_compra_1.saldo
else
lista_compra_1.saldo = lista_compra_2.saldo - compra.coste
print compra}

lista_compra ::= compra


{Herencia;
if lista_compra.saldo >= compra.coste:
print compra}

compra ::= [PRODUCTO, PRECIO]


{compra.coste = PRODUCTO}
{Sntesis; compra.item = PRODUCTO}

83 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejercicio 1.5: Considrese la siguiente gramtica independiente del contexto:

romano ::= IList | I V | V IList


IList ::= IList I |

Esta gramtica genera sentencias entre las que se encuentran los nmeros romanos
hasta el 8.
Se pide aadir a la gramtica un sistema de atributos que compruebe si la
sentencia corresponde a un nmero romano correcto y, en caso afirmativo, imprima
su valor numrico.
No est permitido el uso de informacin global

romano ::= IList


{romano.esValido = IList.esValido}

romano ::= I V
{romano.esValido = true}

romano ::= V IList


{sntesis; romano.esValido = IList.esValido}

IList_1 ::= IList_2 I


{Sntesis; if IList_2.esValido & IList_2.items < 3 , IList_1.esValido = true}
{Sntesis; IList_1.items = IList_2.items + 1}

IList ::=
{IList.esValido = true}
{IList.items = 0}

Ejercicio 1.6: Considrese la gramtica independiente del contexto resultante


de aadir a la del ejercicio 5 el siguiente axioma:

S ::= romano = IList

Esta gramtica genera sentencias formadas por dos cadenas separadas por el signo
=. La primera cadena es igual que las generadas por la gramtica del ejercicio 5.
La segunda cadena es una lista de smbolos I.
Se pide aadir a la gramtica un sistema de atributos que compruebe si, en el
caso de que la primera cadena sea un nmero romano correcto, el valor del mismo
coincide con el nmero de smbolos I en la segunda cadena.
No est permitido el uso de informacin global

84 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

S ::= romano = IList


{Sntesis; if (romano.esValido & romano.value == IList.items), OK}

romano ::= IList


{Sntesis; romano.esValido = IList.esValido}
{Sntesis; if (IList.esValido), romano.value=IList.items}

romano ::= I V
{Sntesis; romano.esValido = true}
{Sntesis; romano.value = 4}

romano ::= V IList


{Sntesis; romano.esValido = IList.esValido}
{Sntesis; if (Ilist.esValido) romano.value = IList.items + 5}

IList_1 ::= IList_2 I


{Sntesis; if (IList_2.esValido & IList_2.items < 3) , IList_1.esValido = true}
{Sntesis; IList_1.items = IList_2.items + 1}

IList ::=
{IList.esValido = true}
{IList.items = 0}

85 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Apndice D

Ejercicios 3a Hoja

D.1. Ejercicios de anlisis

Ejercicio 1.1: Sea la siguiente gramtica:

S ::= A

S ::= B

A ::= cA+b

A ::= a

B ::= cB+a

B :== b

Calcula los conjuntos primero y siguiente para cada smbolo no terminal

Primeros:

Primero(A) ={c, a}

Primero(B) ={c, b}

Primero(S) ={a, c, b}

Sigueintes

siguiente(A) ={$, +}

siguiente(B) ={$, +}

siguiente(S) ={$}

86 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Ejercicio 1.2: Sea la siguiente gramtica LR(0):

E ::= T

E ::= E + T

T ::= i

T ::= (E)

Calcula el cierre de la configuracin inicial: E ::= .ES

E ::= .ES

E ::= .T

E ::= .E + T

T ::= .i

T ::=.(E)

Ejercicio 1.3: Sea la siguiente gramtica LR(0):

E ::= (L)

E ::= i

L ::= L,E

L ::= E

a) Calcula el cierre de la configuracin E ::= (.L)


b) Calcula el estado al que se llega desde el estado anterior tras conocer el
smbolo no terminal L.

a)

E ::= (.L)

L ::= .L,E

L ::= .E

E ::= .(L)

E ::= .i

87 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

b)

E ::= (L.)

puesto que el punto se encuentra delante de smbolos terminales no es necesario cerrar


la configuracin.

Ejercicio 1.4: Sea la siguiente gramtica

D ::= iPSn

P ::= :n

S ::=

S ::= n

a) Dibuja el diagrama de estados del analizador LR(0) para dicha gramtica


b) Calcula la tabla de anlisis para el analizador LR(0)
c) Indica justificadamente si la gramtica es LR(0). Indica justificadamente si
es SLR(1)

Para trabajar con esta gramtica primero aadimos la regla: D ::= D$, con lo que
nos queda el conjunto de reglas:

(0) D ::= .D$

(1) D ::= .iPSn

(2) P ::= .:n

(3) S ::= .

(4) S ::= .n

a)

88 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Estado i n : $ D P S
S0 d1 2
S1 d3 F3
S2 dacc F5
SF3 r3 r3/df4 r3 r3 4
b)
S3 dF2
SF4 r4 r4 r4 r4
S4 dF5
SF2 r2 r2 r2 r2
SF5 r1 r1 r1 r1
c) No se trata de una gramtica LR(0) ya que hay ocasiones en las que
observamos un conflico desplazamiento-reduccin. Por ejemplo, en el estado inicial
podemos reducir la S o desplazar segn la entrada dada.
Para ver si se trata de una gramtica SLR(1) vamos a ver si somos capaces de
solucionar los conflictos sabiendo cuales son los elementos siguientes:

siguiente(D)=$ : solo reducimos la regla 1 si despus hay un $.


siguiente(P)=n : solo reducimos la regla 2 si despus hay una n.
siguiente(S)=n : solo reducimos las reglas 3 y 4 si despus hay una n.

Sin embargo, tampoco se trata de una gramtica SLR(1) ya que si forzamos


a que las reducciones se produzcan en presencia del siguiente elemento no evitamos
el conflicto. Como el siguiente de S es n, en presencia de esta n podremos aplicar la
reduccin S ::= o desplazar segn la regla S ::= n. Quedando la siguiente tabla
SLR(1):

89 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Estado i n : $ D P S
S0 d1 2
S1 d3 F3
S2 dacc F5
SF3 r3/df4 4
S3 dF2
SF4 r4
S4 dF5
SF2 r2
SF5 r1

Ejercicio 1.5: Sea la siguiente gramtica:

S ::= bLd

L ::= E;L

L ::=

E ::= i=c

E ::= b

a) Dibuja el diagrama de estados del analizador LR(0) para dicha gramtica


b) Calcula la tabla de anlisis para el analizador LR(0)
c) Indica justificadamente si es SLR(1)

a) Extendemos la gramtica para realizar el anlisis LR(0):

(0) S ::= S $

(1) S ::= bLd

(2) L ::= E;L

(3) L ::=

(4) E ::= i=c

(5) E ::= b

90 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Estado i = c ; b d $ L E S
S0 dF0 1
S1 dacc
SF0 r3/d7 r3 r3 r3 r3/dF3 r3 r3 3 4
S3 dF1
SF1 r1 r1 r1 r1 r1 r1 r1
b) S4 dF4
SF4 r3 r3 r3 r3 r3 r3 r3 F5 4
SF5 r2 r2 r2 r2 r2 r2 r2
SF3 r5 r5 r5 r5 r5 r5 r5
S7 d8
S8 dF2
SF2 r4 r4 r4 r4 r4 r4 r4
c) No se trata de una gramtica LR(0) ya que hay ocasiones en las que
observamos un conflicto desplazamiento-reduccin.
Para ver si se trata de una gramtica SLR(1) vamos a ver si somos capaces de
solucionar los conflictos sabiendo cuales son los elementos siguientes:

siguiente(L)=d : solo reducimos las reglas 2 y 3 si despus hay una d.

siguiente(E)=; : solo reducimos las reglas 4 y 5 si despus hay un ;.

siguiente(S)=$ : solo reducimos la regla 1 si despus hay un $.

91 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Se corrigen los dos conflictos que hay ya que en el estado SF0 solo reduciremos
si llega una d, por tanto en el caso de que llegue una b o una i desplazaremos.
Quedando la tabla as:
Estado i = c ; b d $ L E S
S0 dF0 1
S1 dacc
SF0 d7 dF3 r3 3 4
S3 dF1
SF1 r1
S4 dF4
SF4 r3 F5 4
SF5 r2
SF3 r5
S7 d8
S8 dF2
SF2 r4

Ejercicio 1.6: Calcula los conjuntos primero y siguiente de todos los smbolos
no terminales de las gramticas siguientes
a)

X ::= Ye

X ::= eYZf

Y ::= g

Y ::= Yg

Z ::= h

b)

Q ::= fXY

X ::= cQ

X ::=

Y ::= iQ

Y ::=

c)

A ::= BXB

X ::= ,

92 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

X ::= .

X ::= e

B ::= 0B

B ::= 1B

B ::=

Apartado a)

primero(X)={e,g}

primero(Y)={g}

primero(Z)={h}

siguiente(X)={$}

siguiente(Y)={$,e,h}

siguiente(Z)={$,f}

93 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Apartado b)

primero(Q)={f}

primero(X)={c,}

primero(Y)={i,}

siguiente(Q)={$} siguiente(X) siguiente(Y) = {$, i}

siguiente(X)={i} siguiente(Q) = {$, i}

siguiente(Y)=siguiente(Q) = {$, i}

Apartado c)

primero(X)={",",.,e}

primero(A)={0,1,",",.,e}

primero(B)={0,1,",",.,e}

siguiente(X)={$,0,1}

siguiente(A)={$,}

siguiente(B)={$,",",.,e}

Ejercicio 1.7: Cacula los smbolos de adelanto para el cierre de las siguientes
reglas y gramticas:
a) Cierre de E ::= .E {$} para la siguiente gramtica

E ::= E

E ::= T

E ::= E+T

T ::= i

T ::= (E)

b) Cierre de S ::= .s {$} para la siguiente gramtica

S ::= S

S ::= L=R

94 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

S ::= R

L ::= *R

L ::= i

R ::= L

c) Cierre de E ::= (.E) {$} para la siguiente gramtica

E ::= (L)

E ::= a

L ::= L,E

L ::= E

a) El cierre, con los conjuntos de adelanto, sera

E ::= .E {$}

E ::= .T {$}

E ::= .E+T {+, $}

T ::= .i {+, $}

T ::= .(E) {$}

b)

S ::= .S {$}

S ::= .L=R {$}

S ::= .R {$}

L ::= .*R {=, $}

L ::= .i {=, $}

R ::= .L {$}

c)

E ::= (.L) {$}

L ::= .L,E {, , )}

L ::= .E {, , )}

95 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

E ::= .a {, , )}

E ::= .(L) {, , )}

Ejercicio 1.8: Sea la siguiente gramtica independiente del contexto:

S ::= aSb

S ::= ab

a) Dibuja el diagrama de estados del analizador LR(1) para dicha gramtica


b) Calcula la tabla de anlisis para el analizador LR(1)
c) Usa la tabla de anlisis para analizar la sentencia aabb
d) Dibuja esquemticamente el diagrama de estados LALR(1). Es suficiente
con indicar los nombres de los estados, especificando cules son la unin de otros
en LR(1).

a)

96 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

Estado S a b $
S0 S2 S1
S1 S3 S4 SF4
S2 ACC
S3 SF2
b) S4 S5 S4 SF1
S5 SF3
SF1 r3
SF2 r2
SF3 r2
SF4 r3
c) La secuencia de acciones sera la siguiente:

Cadena: .aabb / Leemos a y pasamos a S1


Cadena: a.abb / Leemos a y pasamos a S4
Cadena: aa.bb / Leemos b y pasamos a SF1
Cadena: aab.b / Como el siguiente elemento a leer es b reducimos y volvemos a S0
Cadena: .aSb / Leemos a y pasamos a S1
Cadena: a.Sb / Leemos S y pasamos a S3
Cadena: aS.b / Leemos b y pasamos a SF2
Cadena: aSb. / Como el siguiente elemento a leer es $, reducimos y volvemos a S0
Cadena: .S / Leemos S y pasamos a S2
Cadena: . / Fin de cadena. Llegados a este punto aceptamos la entrada

d) Cuando pasemos de LR(1) a LALR(1) vamos a agrupar los nodos SF4 y SF1
en uno solo as como SF2 y SF3, manteniendo las mismas reglas en cada caso y
estableciendo como smbolos de adelanto la unin de los smbolos de adelanto de las
reglas de los estados a unir.

Ejercicio 1.9: Sea la siguiente gramtica independiente del contexto:

S ::= XX

X ::= aX

X ::= b

a) Dibuja el diagrama de estados del analizador LR(1) para dicha gramtica


b) Calcula la tabla de anlisis para el analizador LR(1)
c) Usa la tabla de anlisis para analizar la sentencia aabb
d) Dibuja esquemticamente el diagrama de estados LALR(1). Es suficiente
con indicar los nombres de los estados, especificando cules son la unin de otros
en LR(1).

a) Extendemos la gramtica para realizar el anlisis LR(1):

97 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

(0) S ::= S
(1) S ::= XX
(2) X ::= aX
(3) X ::= b

Estado a b X S
S0 d1 dF0 acc 2
SF0 r3 r3
S1 d1 dF3 F4
SF3 r3 r3
b) SF4 r2 r2
S2 d3 dF2 F1
SF1 r1 r1
S3 d3 dF2 F5
SF5 r2 r2
SF2 r3 r3

Ejercicio 1.10: Sea la siguiente gramtica

D ::= iPSn

P ::= :n

98 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

S ::=

S ::= n

a) Dibuja el diagrama de estados del analizador LR(1) para dicha gramtica


b) Calcula la tabla de anlisis para el analizador LR(1)
c) Indica justificadamente si la gramtica es LR(1). Indica justificadamente si
es SLR(1)

a) Extendemos la gramtica para realizar el anlisis LR(1):

(0) S ::= S

(1) S ::= XX

(2) X ::= aX

(3) X ::= b

Estado i n : $ D P S
S0 d1 2
S1 d3 F3
S2 dacc F5
SF3 r3 r3/df4 r3 r3 4
b)
S3 dF2
SF4 r4 r4 r4 r4
S4 dF5
SF2 r2 r2 r2 r2
SF5 r1 r1 r1 r1

99 de 100 11 de febrero de 2016 14:29


Autmatas y lenguajes - 2014/2015 - UAM Pedro Valero y Alberto Parramn

c) No es LR(1) porque sigue habiendo conflictos.

100 de 100 11 de febrero de 2016 14:29

Vous aimerez peut-être aussi