Beruflich Dokumente
Kultur Dokumente
Lenguajes y Compiladores
Aspectos Formales (Parte 2)
Compiladores
2007
1
Derivaciones
Compiladores
2007 2
Definiciones
Si:
X →* α X β
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
recursivo 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 α.
Compiladores *
2007 4
Jerarquía de gramáticas
Compiladores
2007 5
Jerarquía de gramáticas
Compiladores
2007 6
Definición de CHOMSKY:
G = ( N, T, P, S )
Es un cuarteto formado por:
N = Vocabulario No Terminal : Son sentencias que no
pertenecen al lenguaje, pueden ser variables y
nombre de procedimientos, se representan con
letra mayúscula.
A No Terminal
<A> No Terminal
[A] No Terminal
Compiladores
2007 7
Definición de CHOMSKY
R3 : <B> → x y z
R4 : <C> → a b c
Donde :
N = {<S>, <A>, <B>, <C>}
T = {w, x, do, if …}
Compiladores
2007 9
Tipos de Gramática
Definición Chomsky
G = ( N, T, P, S)
α→β donde : α ∈ ( N U T )+
β ∈ ( N U T )*
Ejemplos :
Compiladores
2007 11
Tipos de Gramática
α→β
θAϒ→ θ wϒ donde :
ϒ θ ∈ (NUT)* → puede ser nulo.
A∈N
Ejemplos :
α→β donde :
α∈N
β ∈ (NUT)*
Ejemplos :
R1: <S> → w x d <B>
R2: <B> → i x t <A>
R3: <A> → s c x <c>
R4: <C> → λ
Compiladores
2007 13
Tipos de Gramática
donde : <A> ∈ N
<B> ∈ N*
Compiladores
a ∈ T+
2007 14
Tipos de Gramática
Compiladores
a ∈ T+
2007 15
Tipos de Gramática
Compiladores
2007 16
Tipos de Gramática
Compiladores
2007 17
Ejemplo
Ejemplo :
S → abc aAbc
Ab → bA
Ac → Bbcc
bB → Bb
aB → aa aaA
Ejemplo de cadena: ?
¿Qué tipo de cadenas genera este lenguaje?
Compiladores *
2007 18
Lenguaje Definido por una Gramática
En una gramática α → β
α va producir β siempre que se transforme, cambie o se
derive hasta llegar a ser igual a β a estos cambios se le
denomina derivación de longitud.
α → ϒ0 → ϒ1 → ϒ2 ….. ϒn = β
Derivación de longitud n
→ cambios
α→+β Derivación de Longitud transitiva
α→*β incluye el elemento nulo o Tira a Nulo.
Compiladores
2007 19
Lenguaje Definido por una Gramática
Definición de un lenguaje
L(G)= { x / <S> → * x .and. x ∈ T* }
“Un lenguaje definido por una gramática G está
compuesto por símbolos x, tal que x es la tira de
símbolos terminales o sentencia del lenguaje L(G) que
se obtiene al seguir una serie de derivaciones directas
partiendo de <S>”
Ejemplo
Un lenguaje tiene las siguientes reglas.
R1: <S> → while <A> end
Compiladores
2007
R2: <A> → while end 20
Lenguaje Definido por una Gramática
Compiladores
2007 22
a. Determine si abaaab pertenece L(G)
Solución:
R1 : <S> → a <B>
XR7 : <S> → ab <S>
XR1 : <S> → aba <B>
XR8 : <S> → abaa <B> <B>
XR8 : <S> → abaaa <B> <B> <B>
XR6 : <S> → abaab <B> <B>
XR9 x R9 : <S> → abaaab λ λ
Compiladores
2007 ∴ abaaab ∈ L (G) 23
b. Determine si baaaabb pertenece L(G)
Solución:
xR2: <S> → b <A>
xR4: <S> → ba <S>
xR1: <S> → baa <B>
xR8: <S> → baaa <B> <B>
xR8: <S> → baaaa <B> <B> <B>
xR6 xR6xR9: <S> → baaaabb λ
∴ baaaabb ∈ L (G)
Compiladores
2007 24
Ejercicio
a. Reconocer w d d w d
b. Reconocer w w w d d w d d
Compiladores
2007 25
a. Reconocer wddwd
Solución:
xR1: <S> → w <A> <S>
xR4: <S> → wd <S> <A> <S>
xR2: <S> → wdd <A> <S>
xR3: <S> → wddw <S>
xR2: <S> → wddwd
∴ wddwd ∈ L(G)
Compiladores
2007 26
b. Reconocer wwwddwdd
Compiladores
2007 30
Técnicas de análisis
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
Nudo Ramas (derecha)
<A> nudo
a <B> b Ramas
Compiladores
2007 31
Aná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 = {Enn}
Para analizar la frase 123, se comienza con la raíz
Enn que deriva a Enn Digito.
Enn
Enn Digito
Compiladores
2007 32
Análisis descendente
Enn Digito
Enn Digito
Compiladores
2007 33
Análisis descendente
Enn
Enn Digito
Enn Digito
Digito
Compiladores
2007 34
Análisis descendente
Enn
Enn Digito
Enn Digito
Digito
1 2 3
Podemos ver que el árbol crece hacia abajo conforme se va
leyendo la frase de izquierda a derecha.
Compiladores
2007 35
Análisis ascendente
1 2 3
Compiladores
2007 36
Análisis ascendente
Enn
Digito
1 2 3
Y luego
Enn Digito
Digito
1 2 3
Compiladores
2007 37
Análisis ascendente
Enn Digito
Digito
1 2 3
Repitiendo el uso de las mismas derivaciones llegamos a
obtener:
Compiladores
2007 38
Análisis ascendente
Enn
Enn Digito
Enn Digito
Digito
1 2 3
Compiladores
2007 39
Análisis sintáctico
Compiladores
2007 40
Análisis sintáctico
Compiladores
2007 41
Tarea
Compiladores
2007 42
Ejercicio
1. Se tienen las siguientes reglas.
R1: <S> → a
R2: <S> → a <A> a
R3: <A> → b
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
Compiladores
2007 43
Ejercicio
2. Se tienen las siguientes Reglas
R1: <S> → do <B>
R2: <S> → ; <A>
R3: <A> → do Reconocer mediante el árbol
sintáctico
R4: <A> → do <S>
R5: <A> → ; <A> <A>
a) do ; do do do ;
R6: <B> → ;
b) do; do ; ; ; do do do ;
R7: <B> → ; <S>
c) ; do do do ; do do ; do
R8: <B> → do <B> <B>
R9: <B> → λ
Compiladores
2007 44
Notación ampliada de las reglas EBNF
Compiladores
2007 45
Notación ampliada de las reglas EBNF
Variantes
1. Alternativa de una regla.- Varias reglas tienen el
mismo símbolo no terminal (N) en la parte izquierda,
varias reglas pueden expresarse en una regla.
R1 : <S> → a <B> a
R2 : <S> → b <A>
R3 : <S> → a <S> a
R4 : <S> → b
R5 : <S> → λ
<S>→a <B> a |b<A>|a<S>a |b| λ
R1 R2 R3 R4 R5
Compiladores
2007 46
Notación ampliada de las reglas EBNF
R1 : <S> → <A> a
R2 : <A> → b <S> → <A> a
R3 : <A> → bb <A> → {b}51
R4 : <A> → bbb
R5 : <A> → bbbb
R6 : <A> → bbbbb
Compiladores
2007 47
Notación ampliada de las reglas EBNF
[ X ] = { X }1
0
Se puede usar o no se
puede usar
Compiladores
2007 49
Ejercicio
Compiladores
2007 50