formales2

50
Facultad de Ingeniería de Sistemas Facultad de Ingeniería de Sistemas Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores 2007 1

Upload: leiner-pachas

Post on 22-Sep-2015

212 views

Category:

Documents


0 download

DESCRIPTION

nn

TRANSCRIPT

  • Facultad de Ingeniera de SistemasFacultad de Ingeniera de Sistemas

    Lenguajes y Compiladores

    Aspectos Formales (Parte 2)

    Compiladores2007

    1

  • DerivacionesDerivaciones

    El proceso de bsqueda de un rbol sintctico para unacadena se llama anlisis sintctico.

    El lenguaje generado por una gramtica es igual alconjunto de cadenas que pueden ser generadas por unrbol sintctico a travs del uso de las producciones deesa gramtica..

    Compiladores2007 2

    esa gramtica.. Se dice que una gramtica es ambigua si para una

    misma frase encontramos dos rboles sintcticosdiferentes. Por ejemplo la gramtica G0 es ambigua yaque para la frase 6 + 9 - 5 podemos graficar dosrboles sintcticos diferentes. (Cules?)

  • DefinicionesDefiniciones

    Podemos definir un lenguaje L(G) como:

    L(G) = { | S * y T * } Producciones libres de contexto: tienen la forma

    v con (N T) *Expresa que un smbolo no terminal v puede sersustituido por sin importar el contexto donde

    Compiladores2007 3

    sustituido por sin importar el contexto dondeaparece v

    Derivaciones por la izquierda (derecha): siempre se reemplazael no terminal mas a la izquierda (o ms a la derecha)

    Una gramtica independiente del contexto es no ambigua si ysolo si existe una sola derivacin por la izquierda (o por laderecha) y por ende un solo rbol de anlisis sintctico.

    *

  • DefinicionesDefiniciones

    Si:

    se dice que X es recursivo.

    Si = se dice que es recursivo por la izquierda.

    Si la gramtica tiene un smbolo no terminal

    X* X

    Compiladores2007 4

    Si la gramtica tiene un smbolo no terminalrecursivo se dice que la gramtica es recursiva.

    La inversa de la derivacin es la reduccin:es equivalente

    puede derivarse directamente de o puede reducirse directamente a .

    *

  • Jerarqua de gramticasJerarqua de gramticas

    Las gramticas fueron clasificadas deacuerdo a su complejidad, y a esta

    Compiladores2007 5

    acuerdo a su complejidad, y a estaclasificacin se le conoce con el nombre deJerarqua de Chomsky

  • Jerarqua de gramticasJerarqua de gramticas

    Tipo 0 : sin restricciones

    Tipo 1 : sensibles al contexto X Tipo 2 : independiente del contexto X

    Tipo 3 : regulares

    Compiladores2007 6

    Tipo 3 : regulares

    A Ba o A a oA aB o A a

  • Gramtica de un Lenguaje (G)

    G = ( N, T, P, S )

    Es un cuarteto formado por:N = Vocabulario No Terminal : Son sentencias que no

    Definicin de CHOMSKY:

    Compiladores2007 7

    N = Vocabulario No Terminal : Son sentencias que nopertenecen al lenguaje, pueden ser variables ynombre de procedimientos, se representan conletra mayscula.

    A No Terminal No Terminal[A] No Terminal

  • T = Vocabulario Terminal. sentencias que pertenecen al lenguaje, se representan con minsculas.

    if x then w z

    P = Reglas de produccin o Reglas de derivacin.

    Definicin de CHOMSKY

    Compiladores2007 8

    P = Reglas de produccin o Reglas de derivacin.

    do while xProduce o deriva.

    Axioma Principal.S = Es el axioma principal o smbolo distinguido.

    da inicio a las reglas de produccin. pertenece al vocabulario no terminal.

  • Si se tiene las siguientes reglas:R1 : w x do

    R2 : if z then else

    R3 : x y z

    Definicin de CHOMSKY

    Compiladores2007 9

    R3 : x y z

    R4 : a b c

    Donde : N = {, , , }

    T = {w, x, do, if }

  • Definicin Chomsky

    G = ( N, T, P, S)

    Gramtica.- Se clasifica en 4 tipos.

    Tipos de Gramtica

    Compiladores2007 10

    A. Gramtica Estructura de Base.B. Gramtica Sensible al Contexto.C. Gramtica de Contexto Libre.D. Gramtica Regulares.

    Regla de Produccin

  • A. Gramtica Estructura de Base Tipo 0.- No existe restriccin en las Reglas.

    donde : ( N U T )+ ( N U T )*

    Tipos de Gramtica

    Compiladores2007 11

    Ejemplos :

    R1 : w x if x then R2 : a b c d aR3 : w a

  • B. Gramtica Sensible contexto Tipo 1.

    donde :(NUT)*

    A w

    Tipos de Gramtica

    Compiladores2007 12

    donde : (NUT)* puede ser nulo.W (NUT)+ no puede ser nulo.

    A NEjemplos :

    R1: w d abcR2: a c

    A w

  • C. Gramtica Tipo 2 contexto Libre.- En la parte izquierda tiene solo un smbolo del vocabulario no termina.

    donde : N (NUT)*

    Tipos de Gramtica

    Compiladores2007 13

    N (NUT)*

    Ejemplos :R1: w x d R2: i x t R3: s c x R4:

  • D. Gramtica Regular Tipo 3.- En la parte izquierda y derecha debe existir un No Terminal como mximo

    I).Gramticas regulares por la izquierda:

    Se dice que G (T, N, P, S) es regular por la izquierda si cada produccin P tiene la forma

    Tipos de Gramtica

    Compiladores2007 14

    si cada produccin P tiene la forma

    o bien

    donde : N

    N*

    a T+

    a a

  • Estas gramticas tambin se conocen como regulares o de estado finito.

    II). Gramticas regulares por la derecha:

    Se dice que G (T, N, P, S) es regular por la derecha si cada produccin P tiene la forma.

    Tipos de Gramtica

    Compiladores2007 15

    cada produccin P tiene la forma.

    o bien

    donde : N

    N*

    a T+

    a a

  • En general los lenguajes de programacin no se puedenexpresar totalmente con gramticas regulares, peroestas gramticas si definen la sintaxis de losidentificadores, nmeros, cadenas, etc.

    S aS bB bB cC

    Tipos de Gramtica

    Compiladores2007 16

    B cC

    C aS

    En compiladores interesan las gramticas tipo 2 y 3.

    Con las gramticas tipo 2 se puede controlar lapresencia correcta de pares de smbolos como Begin,end o parntesis.

  • Sin embargo hay caractersticas que no puedenexpresarse a travs de gramticas tipo 2 o 3. Porejemplo, para que la instruccin X := B est correctaes necesario:

    X y B estn declarados

    X y B sean de tipos compatibles

    Tipos de Gramtica

    Compiladores2007 17

    X y B sean de tipos compatibles

    B tenga un valor definido.

    Estas caractersticas se verifican con el analizadorsemntico usando la tabla de smbolos.

  • Ejemplo :

    S abc aAbcAb bAAc BbccbB Bb

    EjemploEjemplo

    Compiladores2007 18

    bB BbaB aa aaA

    Ejemplo de cadena: ?Qu tipo de cadenas genera este lenguaje?

    *

  • En una gramtica

    va producir siempre que se transforme, cambie o sederive hasta llegar a ser igual a a estos cambios se ledenomina derivacin de longitud.

    Lenguaje Definido por una Gramtica

    0 1 2 .. n =

    Compiladores2007 19

    Derivacin de longitud n

    cambios

    + Derivacin de Longitud transitiva * incluye el elemento nulo o Tira a Nulo.

    0 1 2 .. n =

  • Definicin de un lenguaje

    Un lenguaje definido por una gramtica G estcompuesto por smbolos x, tal que x es la tira desmbolos terminales o sentencia del lenguaje L(G) que

    L(G)= { x / * x .and. x T* }

    Lenguaje Definido por una Gramtica

    Compiladores2007 20

    smbolos terminales o sentencia del lenguaje L(G) quese obtiene al seguir una serie de derivaciones directaspartiendo de

    Ejemplo

    Un lenguaje tiene las siguientes reglas.

    R1: while end

    R2: while end

  • A. Determine si while while end end pertenece al lenguaje

    L(G)= {x / * x .and. x T* }

    X elemento terminal que se analiza

    Solucin. Se parte de L(G)

    Lenguaje Definido por una Gramtica

    Compiladores2007 21

    Solucin. Se parte de L(G)

    R1 while end

    xR2 while while end end

    while while end end L(G)

  • Ejercicio

    1. Se tienen las siguientes reglas.

    R1: a

    R2: b

    R3: a

    R4: a

    Compiladores2007 22

    R5: b

    R6: b

    R7: b

    R8: a

    R9: < B>

    Determine si Pertenece L (G)

    a) a b a a a b

    b) b a a a a b b

  • Solucin:

    R1 : a

    XR7 : ab

    XR1 : aba

    XR8 : abaa

    a. Determine si abaaab pertenece L(G)

    Compiladores2007 23

    XR8 : abaa

    XR8 : abaaa

    XR6 : abaab

    XR9 x R9 : abaaab

    abaaab L (G)

  • Solucin:

    xR2: b

    xR4: ba

    xR1: baa

    b. Determine si baaaabb pertenece L(G)

    Compiladores2007 24

    xR8: baaa

    xR8: baaaa

    xR6 xR6xR9: baaaabb

    baaaabb L (G)

  • 2. Se tienen las siguientes reglas

    R1: w

    R2: d

    R3: w

    Ejercicio

    Compiladores2007 25

    R4: d

    a. Reconocer w d d w d

    b. Reconocer w w w d d w d d

  • Solucin:

    xR1: w

    xR4: wd

    xR2: wdd

    a. Reconocer wddwd

    Compiladores2007 26

    xR2: wdd

    xR3: wddw

    xR2: wddwd

    wddwd L(G)

  • L(G) = {x / * x .and. x T* }

    Solucin:

    xR1: w

    xR3: w w

    b. Reconocer wwwddwdd

    Compiladores2007 27

    xR1: w w w

    xR4: w w w d

    xR2: w w w dd

    xR3: w w wddw

    xR2: w w w d d w d

    wwwddwdd L(G)

  • A. Tipos Gramtica.

    1. Estructura de Base Tipo 0 :

    donde : ( N U T )+ ( N U T )*

    2. Sensible Contexto Tipo 1:

    Resumen

    Compiladores2007 28

    2. Sensible Contexto Tipo 1:

    donde : (NUT)*

    W (NUT)+

    A N

    A w

  • 3. Contexto Libre Tipo 2

    donde : N (NUT)*4. Regular Tipo 3

    Acepta como mximo un noterminal en la izquierda y derecha.

    a

    Resumen

    Compiladores2007 29

    Acepta como mximo un noterminal en la izquierda y derecha.

    B. Lenguaje Reconocido por una Gramtica.

    Axioma Principal

    a

    b

    L (G) = { x / * x .and. x T *}

  • Tcnicas de anlisisTcnicas de anlisis

    La tarea de un compilador no es generar frases, uncompilador debe verificar si una frase pertenece allenguaje o no.

    El anlisis sintctico es el proceso de bsqueda de unrbol sintctico correspondiente a una frase.

    Normalmente se usan dos mtodos:

    Compiladores2007 30

    Normalmente se usan dos mtodos:

    Anlisis sintctico descendente: parte de la raz ybaja hacia las hojas

    Anlisis sintctico ascendente: comienza por las hojase intenta llegar a la raz

  • Representacin Grfica Arbol Sintctico

    Implica usar un rbol ordenado, est formado por un Nudo (Elemento no Terminal parte Izquierda) y por ramas que sern la parte derecha de la regla.

    a b

    Tcnicas de anlisisTcnicas de anlisis

    Compiladores2007 31

    a b

    Nudo Ramas (derecha)

    nudo

    a b Ramas

  • Anlisis descendenteAnlisis descendente

    T = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}N = { Digito, Enn}P = { Enn Digito | Enn Digito

    Digito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }S =

    Compiladores2007 32

    S = {Enn}Para analizar la frase 123, se comienza con la raz

    Enn que deriva a Enn Digito.Enn

    Enn Digito

  • Anlisis descendenteAnlisis descendente

    Aplicando la misma produccin:

    Enn

    Enn Digito

    Compiladores2007 33

    Enn Digito

    Con la produccin Enn Digito seguimos construyendo el rbol

  • Anlisis descendenteAnlisis descendente

    Enn Digito

    Enn Digito

    Enn

    Compiladores2007 34

    Digito

    Con la produccin Digito 1 seguimos construyendo el rbol y obtenemos

  • Anlisis descendenteAnlisis descendente

    Enn

    Enn Digito

    Enn Digito

    Compiladores2007 35

    Digito

    1 2 3Podemos ver que el rbol crece hacia abajo conforme se valeyendo la frase de izquierda a derecha.

  • Anlisis ascendenteAnlisis ascendente

    Veremos como se realiza el anlisis ascendente para la misma frase 123.

    Slo conocemos la raz y la frase.

    Con la reduccin 1 Digito obtenemos

    Compiladores2007 36

    Digito

    1 2 3

    Con la reduccin Digito Enn llegamos a:

  • Anlisis ascendenteAnlisis ascendente

    Enn

    Digito

    1 2 3

    Y luego

    Compiladores2007 37

    Y luegoEnn Digito

    Digito

    1 2 3

  • Anlisis ascendenteAnlisis ascendente

    Podemos usar la reduccin Enn Digito EnnEnn

    Enn Digito

    Compiladores2007 38

    Digito

    1 2 3Repitiendo el uso de las mismas derivaciones llegamos a obtener:

  • Anlisis ascendenteAnlisis ascendente

    Enn

    Enn Digito

    Enn Digito

    Compiladores2007 39

    Digito

    1 2 3

  • Anlisis sintcticoAnlisis sintctico

    En cualquiera de los mtodos usados llegamos a lasolucin porque se tenia conocimiento de la frasecompleta (conocer el programa completo?)

    Si no hay un preanlisis se podran tomar decisionescomo (para un anlisis descendente):

    Compiladores2007 40

    como (para un anlisis descendente):

    Enn

    Digito

    1

    Lo que nos llevara a una situacinsin salida (deadlock) ya que llegamosde la hoja a la raz y todava noterminamos de recorrer la frase.

  • Anlisis sintcticoAnlisis sintctico

    Para resolver este problema se definen losconjuntos Primero y Siguiente que permitirnrealizar el anlisis sintctico sin bloqueos mutuos.

    La idea bsica es que mirando un nmero fijo decaracteres hacia adelante se pueda determinar

    Compiladores2007 41

    caracteres hacia adelante se pueda determinarexactamente cual es el rbol que corresponde.

  • TareaTarea

    Seleccione una grafo sintctico del Pascal y escribala produccin correspondiente.

    Deber tener por lo menos: Alternativas ( | ) Una repeticin de elementos ( { } )

    Compiladores2007 42

    Una repeticin de elementos ( { } ) Un elemento opcional ( [ ] )

  • 1. Se tienen las siguientes reglas.

    R1: a

    R2: a a

    R3: b

    EjercicioEjercicio

    Compiladores2007 43

    R4: b

    Reconocer mediante el rbol sintctico

    a) a b b a

    b) a b b b b a

    c) a a a b b a

  • 2. Se tienen las siguientes Reglas

    R1: do

    R2: ;

    R3: do

    R4: do

    Reconocer mediante el rbol sintctico

    EjercicioEjercicio

    Compiladores2007 44

    R4: do

    R5: ;

    R6: ;

    R7: ;

    R8: do

    R9:

    a) do ; do do do ;

    b) do; do ; ; ; do do do ;

    c) ; do do do ; do do ; do

  • En un lenguaje, se utilizan ms de un centenar de

    reglas Backus Normal Form para describir la

    gramtica de un lenguaje por lo que se ha ido

    Notacin ampliada de las reglas EBNF

    Compiladores2007 45

    gramtica de un lenguaje por lo que se ha ido

    introduciendo simplificaciones o formas compactas

    llamadas Extended Backus Form

  • 1. Alternativa de una regla.- Varias reglas tienen elmismo smbolo no terminal (N) en la parte izquierda,varias reglas pueden expresarse en una regla.

    R1 : a aR2 : b

    Notacin ampliada de las reglas EBNF

    Variantes

    Compiladores2007 46

    R2 : b R3 : a aR4 : bR5 :

    < S > a < B > a | b < A > | a < S > a | b | R1 R2 R3 R4 R5

  • 2. Uso de Llaves.- Las llaves nos indica que el smbolo que encierra se repite desde cero hasta un nmero arbitrario de veces

    R1 : a

    Notacin ampliada de las reglas EBNF

    Compiladores2007 47

    R1 : a

    R2 : b a

    R3 : bb {b}5R4 : bbbR5 : bbbbR6 : bbbbb

    1

  • 3. Uso de parntesis cuadrados (Corchetes).- Es un caso particular de las llaves.

    0[ X ] = { X }1

    Se puede usar o no se

    Notacin ampliada de las reglas EBNF

    Compiladores2007 48

    < S > a < B > c < S > [ b < S > ]Se puede hacer 1 vezo ninguna vez

    0

    Se puede usar o no sepuede usar

  • 1. Se tiene las siguientes reglas:

    R1:

    R2: + | R3:

    Reconocer con el rbol sintctico

    1) a*(a+a)

    EjercicioEjercicio

    Compiladores2007 49

    R4: * | R5: ( ) | a

    1) a*(a+a)

    2) (a+a)*a*(a+a)

    3) a+a+a+a+(a+a)*a

  • 2. Se tiene las siguientes reglas

    R1: ( )

    R2:

    R3: + | Reconocer con el rbol

    sintctico

    1) ((a) + (a) + a+a)

    EjercicioEjercicio

    Compiladores2007 50

    R3: + | R4: | a 1) ((a) + (a) + a+a)

    2) (a+a+(a)+a+(a))

    3) (a+a+a+(a+a)+a)