Professional Documents
Culture Documents
Árboles de derivación
Derivaciones
Podemos decir:
*
* y , entonces
*
Derivaciones
4 8 0
Sea la derivación
N CN CCN CCC 4CC 48C 480
Sea la gramática
S(L)|a
LL,S|S
¿Cuáles son los elementos no terminales?
¿Cuáles son los elementos terminales?
¿Cuáles es el símbolo inicial?
Realizar los árboles sintácticos de
(a , a)
(a , (a , a))
(a , ((a , a) , (a , a)))
Ambigüedad
E (15) Gramática
EE+E
EE*E
E + E (8) En
E (E)
E * E Producción
n EE+E
n+E
(7)
n n n+E*E
n+n*E
(4) (2) n+n*n
Gramática E (22)
EE+E
EE*E
En E(11) * E
E (E)
+ E
Producción E n
EE*E
E+E *E
n+E *E n n (2)
n+n *E (7) (4)
n+n *n
Sea la gramática
SaSbS
SbSaS
Sλ
Demostrar que es ambigua contruyendo dos
árboles sintácticos correspondientes a la frase
abab
Regla superfluas
Para no ser superfluo U ∈ N debe cumplir
+
U ⇒ x, x ∈ * T
Ciclos:
SA
Sa
AS
Reglas que ofrezcan caminos alternativos:
SA
SB
AB
Ejemplo
B B1 | λ
Ejemplo
Precedencia
La precedencia de un operador
especifica el orden relativo de cada
operador respecto a los demás
operadores.
Ej. 2%3#4 con mayor precedencia del #,
primero se operaría el 3 y el 4, y el
resultado con el 2
Ejemplo de precedencia
Gramática?
Departamento de Ciencias de la Computación
Solución al ejemplo de precedencia
EE+T
EE-T
ET
¿Cómo sería el árbol asociado a
TF*T la siguiente sentencia?
TF/T 12 - 4 - 6 / 2 / 2
TF
F (E)
Fn
TF/T T
F n F / T
(6)
TF F
n
F
n
F (E) n
(4)
(2)
n
(12)
Fn (2)
12 - 4 - 6 / 2 / 2
Departamento de Ciencias de la Computación
Gramática correcta
Lenguaje naturales
Lenguajes artificiales
Lenguajes de programación
Procesadores de lenguaje
Compilador
Interprete
Compilador-Interprete
Fases de un compilador
Programa fuente
Analizador léxico
Análisis
Analizador sintáctico
Tabla de Gestión
Analizador semántico de
símbolos
errores
Generación de código intermedio
Programa objeto
Departamento de Ciencias de la Computación
Organización de las fases en front end y
back end
Programa fuente
Código intermedio
Código objeto
Front end:
fases de análisis y generación de código
intermedio.
depende del lenguaje fuente y es
independiente del lenguaje objeto.
Back end:
fases de generación y optimización de código.
depende del lenguaje objeto y es
independiente del lenguaje fuente.
Descendente.
Análisis descendente: se parte de la raíz del
árbol (símbolo inicial de la gramática) y se
van aplicando reglas por la izquierda
obteniendo una derivación por la izda. del
símbolo inicial. Las hojas del árbol tendrán los
tokens que nos devuelve el analizador léxico.
Ascendente
Análisis ascendente: se empieza por las hojas
(tokens) y se van creando los nodos
intermedios hasta llegar a la raíz (símbolo
inicial).
Departamento de Ciencias de la Computación
Ejemplo
E T
T * F T T * F
num T F
F num
F num F num
T F
num F num
T Producciones:
F num
T F
T F T F num
T T * F
E T
F F F num
T F
Ejercicio
Sea la gramática
ScAd
Aab
Aa
y la cadena de entrada cad
Construir el árbol sintáctico
¿Qué paso realiza para la generación del
árbol?
Gramática
ScAd S
Aab
Aa
Aab c A d S
Aa
S
ScAd
a b c A d
c A d
error
a
Departamento de Ciencias de la Computación
Ejercicio
Sea la gramática
SaSbS
SbSaS
Sλ
y la cadena de entrada abab
Construir dos árboles sintáctico
¿Qué paso realiza para la generación del
árbol?
Gramática
SaSbS
SbSaS S Cadena S
Sλ abab
a S b S a S b S
λ
a S b S λ
b S a S
λ λ λ λ
Departamento de Ciencias de la Computación
Ejercicio
Ejemplo