You are on page 1of 31

11 Gramticas no ambiguas, limpias y bien formadas

Ejercicios 04 "Derivaciones y limpieza de gramticas"


Prof. Edgardo Adrin Franco Martnez http://computacion.cs.cinvestav.mx/~efranco efranco.docencia@gmail.com
@efranco_escom

Ambigedad en gramticas Gramticas limpias y bien formadas


Algoritmo para detectar smbolos muertos Algoritmo para detectar smbolos inaccesibles

Ejemplo de limpieza de gramticas Ejercicios 04

Compiladores (Lenguajes y gramticas - Edgardo A. Franco)

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Contenido

S SbS S ScS Sa

Ambigedad en gramticas

Considrese la gramtica:

Derivar la palabra abaca

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

S SbS | ScS | a
1. S => SbS => SbScS => SbSca => Sbaca => abaca 2. S => ScS => SbScS => abScS => abacS => abaca

Derivacin 1

Para una misma cadena, se obtuvieron rboles de derivacin distintos

Derivacin 2

S a

S S

a
4

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Ambigedad en gramticas

Una gramtica es ambigua cuando para una determinada cadena, se produce ms de un rbol de derivacin. S SbS | ScS | a
S S S a S S S a

S a

b S a

S a

S a

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Ambigedad en gramticas

Ambigedad en gramticas
Una gramtica es ambigua si existe una cadena w L(G) que tiene ms de una derivacin por la izquierda o ms de una derivacin por la derecha o si tiene dos o ms rboles de derivacin.
En caso de que toda cadena w L(G) tenga un nico rbol de derivacin, la gramtica es no ambigua. P.g: La gramtica S aS | Sa | a es ambigua porque aa tiene dos derivaciones por la izquierda
S aS aa
Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

(Definicin formal)

S a S a

S Sa aa

S S a
a 6

Una gramtica que refleja mejor el problema de ambigedad es la que valida expresiones aritmticas sobre id y num.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Ambigedad en gramticas

Ambigedad en gramticas
EE+E EEE E id E num E -E E (E)

La ambigedad puede producir serios problemas en lenguajes cuyo significado depende, en parte, de su estructura, como es el caso de los lenguajes naturales y los de programacin.

Es ambigua porque la cadena id + num id tiene dos rboles de derivacin:


rbol izquierdo representa (id + num) id rbol de la derecha representa id + (num id).

E E id + num E id E id

E + E id
8

num *

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

En la gramtica para expresiones aritmticas sobre id y num:

Ambigedad en gramticas
Eliminar la ambigedad en una gramtica requiere de un proceso de anlisis propio de cada gramtica que verifique que para ninguna palabra que esta genera se puedan generar ms de un rbol de derivacin. En algunos casos, la ambigedad de una gramtica se puede eliminar utilizando nuevas variables que eliminen los rboles de derivacin no deseados. Tambin existen los lenguajes inherentemente ambiguos para los que no existe una gramtica no ambigua equivalente.
Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

(Eliminacin)

Ambigedad en gramticas
En el ejemplo de los operadores aritmticos, adems de la variable E, que representa expresiones, tambin se utilizan las variables F para factores y T para trminos y se tienen las siguientes reglas:
EE+T TT*F F (E) F id ET TF T -F F num
Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

(Eliminacin)

10

Una gramtica bien formada facilita el correcto tratamiento y deteccin a la hora de ser impuesta en algn lenguaje. Para poder construir una gramtica adecuada se debe verificar la correcta escritura y reglas de produccin de la gramtica.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Gramticas limpias y bien formadas

11

Sin Reglas Innecesarias: A b, es una regla innecesaria si A no hace parte del lado derecho de otra regla. A es un smbolo inaccesible. Sin Reglas Superfluas: Dada la gramtica G = ( {a,b}, { S, A, B}, S, {S AB, A Aa|a, B Bb} ), la regla B Bb es superflua porque no puede derivar una cadena que solo contenga smbolos terminales.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Gramticas limpias y bien formadas

12

Sin Smbolos No Generativos: Dada la gramtica G= (N, , S, P), para cada smbolo A de N se construye la gramtica G(A)=(NA, A, A, PA), si L(G(A)) es vaco, entonces A es un smbolo no generativo.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Gramticas limpias y bien formadas

13

Sin Reglas No Generativas: U , es una regla no generativa. Si el lenguaje representado por la gramtica no contiene la palabra vaca es posible eliminar todas las reglas no generativas, de lo contrario se debe admitir la regla S. Sin Reglas de Redenominacin: A B es una regla de redenominacin.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Gramticas limpias y bien formadas

14

Llamamos smbolo vivo al smbolo a partir del cual se puede derivar una cadena de terminales. Llamamos smbolo muerto a los smbolos no-vivos, no generan una cadena del lenguaje. Llamamos smbolo inaccesible si nunca aparece en la parte derecha de una produccin. A las gramticas que contienen estos tipos de smbolos se les llama gramticas scias.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Gramticas limpias y bien formadas

15

Teorema 1: si todos los smbolos de la parte derecha de una produccin son smbolos vivos, entonces el smbolo de la parte izquierda tambin lo es. Teorema 2: si el smbolo no-terminal de la parte izquierda de una produccin es accesible, entonces todos los smbolos de la parte derecha tambin lo son.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Gramticas limpias y bien formadas

16

Para limpiar una gramtica primero se eliminan los smbolos muertos y despus los smbolos inaccesibles. Una gramtica est bien formada si es limpia y adems no contiene producciones

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Gramticas limpias y bien formadas

17

1. Hacer una lista de no-terminales que tengan al menos una produccin con slo smbolos terminales en la parte derecha. 2. Dada una produccin, si todos los no-terminales de la parte derecha pertenecen a la lista, entonces podemos incluir en la lista al no-terminal de la parte izquierda de la produccin. 3. Cuando ya no se puedan incluir ms smbolos en la lista mediante la aplicacin del paso 2, la lista contendr los smbolos no-terminales vivos y el resto sern smbolos muertos.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Algoritmo para detectar smbolos muertos

18

1. Se inicializa una lista de no-terminales que sabemos que son accesibles con el axioma. 2. Si la parte izquierda de una produccin est en la lista, entonces se incluye en la misma al no-terminal que aparece en la parte derecha de la produccin. 3. Cuando ya no se pueden incluir ms smbolos a la lista mediante la aplicacin del paso 2, entonces la lista contendr todos los smbolos accesibles y el resto de los noterminales sern inaccesibles.

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Algoritmo para detectar smbolos inaccesibles

19

Ejemplo: limpiar la gramtica

SaAB|A|G AcBd|H Be|fS CgD|hDt Dx|y|z E AH | cB F AB | Ga G FG H Ha | bH | E

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Ejemplo de limpieza de gramticas

20

Smbolos VIVOS BDACEFH

Smbolos MUERTOS G

Los smbolos muertos aparecen en la parte derecha de las reglas superfluas lo que indica que las siguientes reglas son superfluas en la gramtica: S G F Ga G FG

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Ejemplo de limpieza de gramticas

21

Smbolos ACCESIBLES SABGHFE

Smbolos INACCESIBLES CD

Los smbolos inaccesibles aparecen en la parte izquierda de las reglas innecesarias lo que indica que las siguientes reglas son innecesarias en la gramtica: CgD ChDt Dx Dy Dz

Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Ejemplo de limpieza de gramticas

22

Gramtica limpia

Ejemplo de limpieza de gramticas


SaAB|A AcBd|H Be|fS E AH | cB F AB H Ha | bH | E
23
Teora computacional 11 Gramticas no ambiguas, limpias y bien formadas Prof. Edgardo Adrin Franco Martnez

Ejercicios 04

1. Considere la siguiente gramtica:

S SS + | SS * | a
y la cadena

aa + a *

a) Proporcione una derivacin por la izquierda para la

cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de derivacin para la cadena d) La gramtica es ambigua o no? Justifique su respuesta

Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

"Derivaciones y limpieza de gramticas"

24

Ejercicios 04

2. Considere la siguiente gramtica:

S 0 S1 | 01
y la cadena

000111

a) Proporcione una derivacin por la izquierda para la

cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de derivacin para la cadena d) La gramtica es ambigua o no? Justifique su respuesta

Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

"Derivaciones y limpieza de gramticas"

25

Ejercicios 04
3.

Considere la siguiente gramtica:

S S (S )S |

y la cadena

(()())

a) Proporcione una derivacin por la izquierda para la

cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de derivacin para la cadena d) La gramtica es ambigua o no? Justifique su respuesta

Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

"Derivaciones y limpieza de gramticas"

26

Ejercicios 04
4.

Considere la siguiente gramtica:


S S + S | SS | ( S ) | S * | a

y la cadena

(a + a) * a

a) Proporcione una derivacin por la izquierda para la

cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de derivacin para la cadena d) La gramtica es ambigua o no? Justifique su respuesta

Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

"Derivaciones y limpieza de gramticas"

27

Ejercicios 04
5.

Considere la siguiente gramtica: S aSbS | bSaS |

y la cadena

aabbab

a) Proporcione una derivacin por la izquierda para la

cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de derivacin para la cadena d) La gramtica es ambigua o no? Justifique su respuesta

Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

"Derivaciones y limpieza de gramticas"

28

Ejercicios 04

Disee gramticas para los siguientes lenguajes:


6.

El conjunto de todas las cadenas de 0s y 1s , de tal forma que justo antes de cada 0 vaya por lo menos un 1. El conjunto de todas las cadenas de 0s y 1s que sean palndromos; es decir, que la cadena se lea igual al derecho y al revs. El conjunto de todas las cadenas de 0s y 1s en donde 011 no aparece como subcadena.

7.

8.

Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

"Derivaciones y limpieza de gramticas"

29

Ejercicios 04

Realice la limpieza de las siguientes gramticas

9. E .aFB|F|C|Da

AgD|hDt Be|Fe|J C C b| G b| J e a c D x | y| z| J a FcGd|Ca GRea|eaR McFa|aBa NMea|Jac|Na RCe

10. <S>:: . a <B> <A>| <C> | <H>


<A>:: c <G> d |<G> <B>:: <E> | f <S> <C>:: g <D>| h <D> t <D>:: x | y | z |<C> <E>:: <A><H>| c<B> <F>:: <A><B> | <G>a <G>:: <F><G> |G>H> <H>:: <H>a | <b><H> | <E> <J>:: <H>a | <B><E> | asa

Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

"Derivaciones y limpieza de gramticas"

30

Grupo Contrasea
Teora computacional 09 Conversin de AFN a AFD Prof. Edgardo Adrin Franco Martnez

Ejercicios 04

2CM1 2CM4 2CM5

teoria2cm1 teoria2cm4 teoria2cm5

La fecha mxima de entrega de los ejercicios

es el viernes 04 de mayo de 2012 a las 23:59:59 horas, va web. (Ejercicios Individuales)


formato digital de los ejercicios (no escaneados).

El documento incluir portada, la redaccin y respuesta en Se deber de incluir encabezados en cada pgina. Enviar con el nombre: Ejercicios04_NombreAlumno.* Se debern de describir todos los procedimientos

31

necesarios

You might also like