lenguajes y compiladores aspectos formales (parte...

Post on 04-Nov-2018

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Facultad de Ingeniería de SistemasFacultad de Ingeniería de Sistemas

Lenguajes y Compiladores

Aspectos Formales (Parte 2)

Compiladores2007

1

DerivacionesDerivaciones

� El proceso de búsqueda de un árbol sintáctico para unacadena se llama análisis sintáctico.

� El lenguaje generado por una gramática es igual alconjunto de cadenas que pueden ser generadas por unárbol sintáctico a través del uso de las producciones deesa gramática..

Compiladores2007 2

esa gramática..� Se dice que una gramática es ambigua si para una

misma frase encontramos dos árboles sintácticosdiferentes. Por ejemplo la gramática G0 es ambigua yaque para la frase 6 + 9 - 5 podemos graficar dosárboles sintácticos diferentes. (¿Cuáles?)

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 símbolo 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 más a la derecha)

� Una gramática independiente del contexto es no ambigua si ysolo si existe una sola derivación por la izquierda (o por laderecha) y por ende un solo árbol de análisis sintáctico.

*

DefinicionesDefiniciones

� Si:

se dice que X es recursivo.

Si α = ε se dice que es recursivo por la izquierda.

“Si la gramática tiene un símbolo no terminal

X→* α X β

Compiladores2007 4

“Si la gramática tiene un símbolo no terminalrecursivo se dice que la gramática es recursiva”.

� La inversa de la derivación es la reducción:es equivalente

β puede derivarse directamente de α o

β puede reducirse directamente a α.

*

β ← αα → β

Jerarquía de gramáticasJerarquía de gramáticas

“Las gramáticas fueron clasificadas deacuerdo a su complejidad, y a esta

Compiladores2007 5

acuerdo a su complejidad, y a estaclasificación se le conoce con el nombre deJerarquía de Chomsky”

Jerarquía de gramáticasJerarquía de gramáticas

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

Gramática de un Lenguaje (G)

G = ( N, T, P, S )

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

Definición de CHOMSKY:

Compiladores2007 7

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

A No Terminal<A> No Terminal[A] No Terminal

T = Vocabulario Terminal. sentencias que pertenecen al lenguaje, se representan con minúsculas.

<S> → if x then <B><B> → w z

P = Reglas de producción o Reglas de derivación.

Definición de CHOMSKY

Compiladores2007 8

P = Reglas de producción o Reglas de derivación.

<S> → do <A> while xProduce o deriva.

Axioma Principal.S = Es el axioma principal o símbolo distinguido.

<S> da inicio a las reglas de producción.<S> pertenece al vocabulario no terminal.

Si se tiene las siguientes reglas:R1 : <S> → w x do <A>

R2 : <A> → if z then <B> else <C>

R3 : <B> → x y z

Definición de CHOMSKY

Compiladores2007 9

R3 : <B> → x y z

R4 : <C> → a b c

Donde : N = {<S>, <A>, <B>, <C>}

T = {w, x, do, if …}

Definición Chomsky

G = ( N, T, P, S)

Gramática.- Se clasifica en 4 tipos.

Tipos de Gramática

Compiladores2007 10

A. Gramática Estructura de Base.B. Gramática Sensible al Contexto.C. Gramática de Contexto Libre.D. Gramática Regulares.

α → β Regla de Producción

A. Gramática Estructura de Base Tipo 0.- No existe restricción en las Reglas.

α → β donde : α ∈∈∈∈ ( N U T )+

β ∈∈∈∈ ( N U T )*

Tipos de Gramática

Compiladores2007 11

Ejemplos :

R1 : w x <A> → if x then <B>R2 : a b <S > → c d aR3 : w a <B> → ε

B. Gramática Sensible contexto Tipo 1.

donde :(NUT)*

α →→→→ β

θA ϒ →→→→ θ w ϒ

Tipos de Gramática

Compiladores2007 12

donde :ϒ θ ∈∈∈∈ (NUT)* → puede ser nulo.

W ∈∈∈∈ (NUT)+ → no puede ser nulo.

A ∈∈∈∈ NEjemplos :

R1: w <A> d → abcR2: <A> a → <B>c

θA ϒ →→→→ θ w ϒ

C. Gramática Tipo 2 contexto Libre.- En la parte izquierda tiene solo un símbolo del vocabulario no termina.

donde :α ∈ N β ∈ (NUT)*

Tipos de Gramática

αααα →→→→ ββββ

Compiladores2007 13

N β ∈ (NUT)*

Ejemplos :R1: <S> → w x d <B>R2: <B> → i x t <A>R3: <A> → s c x <c>R4: <C> → λ

D. Gramática Regular Tipo 3.- “En la parte izquierda y derecha debe existir un No Terminal como máximo”

I).Gramáticas regulares por la izquierda:

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

Tipos de Gramática

Compiladores2007 14

si cada producción P tiene la forma

o bien

donde : <A> ∈∈∈∈ N

<B> ∈∈∈∈ N*

a ∈∈∈∈ T+

<A> → a <B> <A> → a

“Estas gramáticas también se conocen como regulares o de estado finito”.

II). Gramáticas regulares por la derecha:

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

Tipos de Gramática

Compiladores2007 15

cada producción P tiene la forma.

o bien

donde : <A> ∈∈∈∈ N

<B> ∈∈∈∈ N*

a ∈∈∈∈ T+

<A> → <B> a <A> → a

� “En general los lenguajes de programación no se puedenexpresar totalmente con gramáticas regulares, peroestas gramáticas si definen la sintaxis de losidentificadores, números, cadenas, etc”.

S → aS bB b

B → cC

Tipos de Gramática

Compiladores2007 16

B → cC

C → aS

� En compiladores interesan las gramáticas tipo 2 y 3.

� Con las gramáticas tipo 2 se puede controlar lapresencia correcta de pares de símbolos como Begin,end o paréntesis.

� Sin embargo hay características que no puedenexpresarse a través de gramáticas tipo 2 o 3. Porejemplo, para que la instrucción X := B esté correctaes necesario:

� X y B estén declarados

X y B sean de tipos compatibles

Tipos de Gramática

Compiladores2007 17

� X y B sean de tipos compatibles

� B tenga un valor definido.

� Estas características se verifican con el analizadorsemántico usando la tabla de símbolos.

� 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 gramática

α va producir β siempre que se transforme, cambie o sederive hasta llegar a ser igual a β a estos cambios se ledenomina derivación de longitud.

Lenguaje Definido por una Gramática

αααα →→→→ ββββ

α →→→→ ϒ0 →→→→ ϒ1 →→→→ ϒ2 ….. ϒn = β

Compiladores2007 19

Derivación de longitud n

→→→→ cambios

α →→→→ + β Derivación de Longitud transitiva

α →→→→ * β incluye el elemento nulo o Tira a Nulo.

α →→→→ ϒ0 →→→→ ϒ1 →→→→ ϒ2 ….. ϒn = β

Definición de un lenguaje

“Un lenguaje definido por una gramática G estácompuesto por símbolos x, tal que x es la tira desímbolos terminales o sentencia del lenguaje L(G) que

L(G)= { x / <S> →→→→ * x .and. x ∈ T* }

Lenguaje Definido por una Gramática

Compiladores2007 20

símbolos terminales o sentencia del lenguaje L(G) quese obtiene al seguir una serie de derivaciones directaspartiendo de <S>”

Ejemplo

Un lenguaje tiene las siguientes reglas.

R1: <S> → while <A> end

R2: <A> → while end

A. Determine si while while end end pertenece al lenguaje

L(G)= {x / <S> →→→→ * x .and. x ∈ T* }

X elemento terminal que se analiza

Solución. Se parte de L(G)

Lenguaje Definido por una Gramática

Compiladores2007 21

Solución. Se parte de L(G)

R1 <S> → while <A> end

xR2 <S> → while while end end

∴∴∴∴ while while end end ∈∈∈∈ L(G)

Ejercicio

1. Se tienen las siguientes reglas.

R1: <S> → a <B>

R2: <S> → b <A>

R3: <A> → a

R4: <A> → a <S>

Compiladores2007 22

R5: <A> → b <A> <A>

R6: <B> → b

R7: <B> → b <S>

R8: <B> → a <B> <B>

R9: < B> → λ

Determine si Pertenece L (G)

a) a b a a a b

b) b a a a a b b

Solución:

R1 : <S> → a <B>

XR7 : <S> → ab <S>

XR1 : <S> → aba <B>

XR8 : <S> → abaa <B> <B>

a. Determine si abaaab pertenece L(G)

Compiladores2007 23

XR8 : <S> → abaa <B> <B>

XR8 : <S> → abaaa <B> <B> <B>

XR6 : <S> → abaab <B> <B>

XR9 x R9 : <S> → abaaab λ λ

∴ abaaab ∈ L (G)

Solución:

xR2: <S> → b <A>

xR4: <S> → ba <S>

xR1: <S> → baa <B>

b. Determine si baaaabb pertenece L(G)

Compiladores2007 24

xR8: <S> → baaa <B> <B>

xR8: <S> → baaaa <B> <B> <B>

xR6 xR6xR9: <S> → baaaabb λ

∴ baaaabb ∈ L (G)

2. Se tienen las siguientes reglas

R1: <S> → w <A> <S>

R2: <S> → d

R3: <A> → w

Ejercicio

Compiladores2007 25

R4: <A> → d <S> <A>

a. Reconocer w d d w d

b. Reconocer w w w d d w d d

Solución:

xR1: <S> → w <A> <S>

xR4: <S> → wd <S> <A> <S>

xR2: <S> → wdd <A> <S>

a. Reconocer wddwd

Compiladores2007 26

xR2: <S> → wdd <A> <S>

xR3: <S> → wddw <S>

xR2: <S> → wddwd

∴ wddwd ∈ L(G)

L(G) = {x / <S> →→→→ * x .and. x ∈T* }

Solución:

xR1: <S> → w <A> <S>

xR3: <S> → w w <S>

b. Reconocer wwwddwdd

Compiladores2007 27

xR1: <S> → w w w <A> <S>

xR4: <S> → w w w d <A> <S>

xR2: <S> → w w w dd <A> <S>

xR3: <S> → w w wddw <S>

xR2: <S> → w w w d d w d

∴wwwddwdd ∉ L(G)

A. Tipos Gramática.

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 máximo un noterminal en la izquierda y derecha.

α → β

<A> → a <B>

Resumen

Compiladores2007 29

Acepta como máximo un noterminal en la izquierda y derecha.

B. Lenguaje Reconocido por una Gramática.

Axioma Principal

<A> → a <B>

<A> → b

L (G) = { x / <S> →→→→ * x .and. x ∈ T *}

Técnicas de análisisTécnicas de análisis

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

� El análisis sintáctico es el proceso de búsqueda de unárbol sintáctico correspondiente a una frase.

Normalmente se usan dos métodos:

Compiladores2007 30

� Normalmente se usan dos métodos:

� Análisis sintáctico descendente: parte de la raíz ybaja hacia las hojas

� Análisis sintáctico ascendente: comienza por las hojase intenta llegar a la raíz

Representación Gráfica – Arbol Sintáctico

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

<A> → a <B> b

Técnicas de análisisTécnicas de análisis

Compiladores2007 31

<A> → a <B> b

Nudo Ramas (derecha)

<A> nudo

a <B> b Ramas

Análisis descendenteAnálisis 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 raíz

Enn que deriva a Enn Digito.Enn

Enn Digito

Análisis descendenteAnálisis descendente

Aplicando la misma producción:

Enn

Enn Digito

Compiladores2007 33

Enn Digito

Con la producción Enn → Digito seguimos construyendo el árbol

Análisis descendenteAnálisis descendente

Enn Digito

Enn Digito

Enn

Compiladores2007 34

Digito

Con la producción Digito → 1 seguimos construyendo el árbol y obtenemos

Análisis descendenteAnálisis descendente

Enn

Enn Digito

Enn Digito

Compiladores2007 35

Digito

1 2 3

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

Análisis ascendenteAnálisis ascendente

� Veremos como se realiza el análisis ascendente para la misma frase 123.

� Sólo conocemos la raíz y la frase.

� Con la reducción 1 ← Digito obtenemos

Compiladores2007 36

Digito

1 2 3

� Con la reducción Digito ← Enn llegamos a:

Análisis ascendenteAnálisis ascendente

Enn

Digito

1 2 3

Y luego

Compiladores2007 37

Y luegoEnn Digito

Digito

1 2 3

Análisis ascendenteAnálisis ascendente

Podemos usar la reducción Enn Digito ← Enn

Enn

Enn Digito

Compiladores2007 38

Digito

1 2 3

Repitiendo el uso de las mismas derivaciones llegamos a obtener:

Análisis ascendenteAnálisis ascendente

Enn

Enn Digito

Enn Digito

Compiladores2007 39

Digito

1 2 3

Análisis sintácticoAnálisis sintáctico

� En cualquiera de los métodos usados llegamos a lasolución porque se tenia conocimiento de la frasecompleta (conocer el programa completo?)

� Si no hay un preanálisis se podrían tomar decisionescomo (para un análisis descendente):

Compiladores2007 40

como (para un análisis descendente):

Enn

Digito

1

Lo que nos llevaría a una situaciónsin salida (deadlock) ya que llegamosde la hoja a la raíz y todavía noterminamos de recorrer la frase.

Análisis sintácticoAnálisis sintáctico

� Para resolver este problema se definen losconjuntos Primero y Siguiente que permitiránrealizar el análisis sintáctico sin bloqueos mutuos.

� La idea básica es que mirando un número 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 sintáctico del Pascal y escribala producción correspondiente.

� Deberá tener por lo menos:� Alternativas ( | )� Una repetición de elementos ( { } )

Compiladores2007 42

� Una repetición de elementos ( { } )

� Un elemento opcional ( [ ] )

1. Se tienen las siguientes reglas.

R1: <S> → a

R2: <S> → a <A> a

R3: <A> → b

EjercicioEjercicio

Compiladores2007 43

R4: <A> → b <A>

Reconocer mediante el árbol sintáctico

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: <S> → do <B>

R2: <S> → ; <A>

R3: <A> → do

R4: <A> → do <S>

Reconocer mediante el árbol sintáctico

EjercicioEjercicio

Compiladores2007 44

R4: <A> → do <S>

R5: <A> → ; <A> <A>

R6: <B> → ;

R7: <B> → ; <S>

R8: <B> → do <B> <B>

R9: <B> → λ

a) do ; do do do ;

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

c) ; do do do ; do do ; do

“En un lenguaje, se utilizan más de un centenar de

reglas “Backus Normal Form” para describir la

gramática de un lenguaje por lo que se ha ido

Notación ampliada de las reglas EBNF

Compiladores2007 45

gramática 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 símbolo no terminal (N) en la parte izquierda,varias reglas pueden expresarse en una regla.

R1 : <S> →→→→ a <B> aR2 : <S> →→→→ b <A>

Notación ampliada de las reglas EBNF

Variantes

Compiladores2007 46

R2 : <S> →→→→ b <A>R3 : <S> →→→→ a <S> aR4 : <S> →→→→ bR5 : <S> →→→→ λ

< 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 símbolo que encierra se repite desde cero hasta un número arbitrario de veces

R1 : <S> →→→→ <A> a

Notación ampliada de las reglas EBNF

Compiladores2007 47

R1 : <S> <A> a

R2 : <A> →→→→ b <S> →→→→ <A> a

R3 : <A> →→→→ bb <A> →→→→ {b}5R4 : <A> →→→→ bbbR5 : <A> →→→→ bbbbR6 : <A> →→→→ bbbbb

1

3. Uso de paréntesis cuadrados (Corchetes).- Es un caso particular de las llaves.

0[ X ] = { X }1

Se puede usar o no se

Notación 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: <S> → <T> <F>

R2: <F> → + <T> <F> | λλλλ

R3: <T> → <E><L>

Reconocer con el árbol sintáctico

1) a*(a+a)

EjercicioEjercicio

Compiladores2007 49

R4: <L> → * <E><L>| λλλλ

R5: <E> → ( <S> ) | 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: <S> →→→→ ( <A> )

R2: <A> → <T> <F>

R3: <F> → + <A> | λλλλ

Reconocer con el árbol sintáctico

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

EjercicioEjercicio

Compiladores2007 50

R3: <F> → + <A> | λλλλ

R4: <T> → <S>| a 1) ((a) + (a) + a+a)

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

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

top related