Upload
tranbao
View
218
Download
0
Embed Size (px)
Citation preview
Gramaticas de AtributosTeorıa de Lenguajes
Facultad de Ciencias Exactas y NaturalesUniversidad de Buenos Aires
Gramaticas de Atributos
Etapas de un Compilador
AnalizadorLexico
AnalizadorSintactico(Parser)
...
Lexer:
Genera secuencia de tokens
Reporta errores lexicos
Parser:
Genera arbol de derivacion
Reporta errores sintacticos
Gramaticas de Atributos
Etapas de un Compilador
AnalizadorLexico
AnalizadorSintactico(Parser)
AnalizadorSemantico
Asocia informacion a la cadena de entrada
Reporta errores semanticos
Herramientas
Gramatica de Atributos (hoy)
Traduccion Dirigida por Sintaxis (TDS)
Gramaticas de Atributos
Gramatica de Atributos
Atributo: Propiedad que se asocia a los sımbolos no terminales.
Notacion: simbolo . nombre atributo
Tipados
Gramatica de Atributos
Gramatica Libre de Contexto extendida, con
Atributos en los no terminales.
Reglas semanticas asociadas a las producciones.
Gramaticas de Atributos
Gramatica de Atributos
Reglas Semanticas:
{A.a = f (B.b,C .c , ...)}
Asociadas a una produccion
A,B,C ∈ VN
a, b, c atributos asociados
f funcion. Computa el valor del atributo A.a en base al valorde otros atributos.Gramatica de Atributos: f no debe tener efectos colaterales
Gramaticas de Atributos
Gramatica de Atributos
Funciones:
IF(expr, val1, val2)
Evalua expr, devuelve val1 si es verdadero, y val2 si es falso.
CONDITION(expr)
Rechaza la cadena si expr es falso.
Las gramaticas de atributos son mas expresivas que las GLC.
Gramaticas de Atributos
Tipos de Atributos
Sintetizados: Su valor se calcula en base al valor de losatributos en los nodos hijos.Ejemplo: A→ BC {A.a = f1(B.b,C .c)}
Heredados: Su valor se calcula en base al valor de losatributos en los nodos hermanos, o padre.Ejemplo: A→ BC {B.val = f2(A.a,C .c)}
Gramaticas de Atributos
Tipos de Atributos
Todos los atributos son, o sintetizados, o heredados.
Ejercicios: siempre aclarar que tipo de atributo es.
Ningun atributo puede ser sintetizado en unaproduccion, y heredado en otra.
Gramaticas de Atributos
Grafo de Dependencias
Grafo dirigido, que muestra las dependencias entre losatributos para un determinado arbol de derivacion.
Para que los atributos puedan calcularse el grafo no debetener ciclos.
Implementacion de una Gramatica de Atributos:
1 Parsear la cadena y generar el arbol de derivacion.2 Calcular el grafo de dependencias.3 Elegir un ordenamiento de ese grafo.4 Recorrer el arbol en orden y calcular los valores.
Gramaticas de Atributos
Grafo de Dependencias
Gramaticas de Atributos eficientes:
S-atribuidas: Todos sus atributos son sintetizados.Se implementa con parser LR
L-atribuidas: Atributos sintetizados y heredados, pero si sonheredados, deben depender solamente de:
Los atributos que estan a su izquierda, en la produccion, oLos atributos heredados del padre.
Se implementa con parser recursivo descendente
Gramaticas de Atributos
Ejercicio 1
Sea la siguiente gramatica:
S → aS | bS | λ
Computar atributo que cuente el numero mayor de a-esconsecutivas.
Gramaticas de Atributos
Ejercicio 1 - Solucion
Atributos:
S.cantA int sintetizadoS.mayor int sintetizado
Gramatica:
S → λ {S .cantA = 0, S .mayor = 0}S1 → aS2 {IF (S2.cantA + 1 > S2.mayor ,S1.mayor = S2.cantA + 1,
S1.mayor = S2.mayor),
S1.cantA = S2.cantA + 1}S1 → bS2 {S1.cantA = 0, S1.mayor = S2.mayor}
Gramaticas de Atributos
Ejercicio 2
Sea la siguiente gramatica:
S → E (num)E → E + T | TT → T ∗ F | FF → num | (E ) | x
Sintetizar el valor de la expresion, reemplazando x por el numeroindicado entre parentesis.
Gramaticas de Atributos
Ejercicio 2 - Solucion
Atributos:
T.x int heredadoE.x int heredadoF.x int heredadoT.val int sintetizadoE.val int sintetizadoF.val int sintetizadoS.val int sintetizado
Gramaticas de Atributos
Ejercicio 2 - Solucion
Gramatica:
S → E (num) {E .x = num.val , S .val = E .val}E1 → E2 + T {E2.x = E1.x ,T .x = E1.x ,E1.val = E2.val + T .val}E → T {T .x = E .x ,E .val = T .val}T1 → T2 ∗ F {T2.x = T1.x ,F .x = T1.x ,T1.val = T2 ∗ F}T → F {F .x = T .x ,T .val = F .val}F → num {F .val = num.val}F → (E ) {E .x = F .x ,F .val = E .val}F → x {F .val = F .x}
Gramaticas de Atributos
Ejercicio 3
D → T id [num] = {LV }T → int | float
LV → num | LV , num
Validar:
1 Que la dimension sea de tipo int.
2 Que la dimension sea la declarada.
3 Que todos los elementos sean del tipo declarado.
Gramaticas de Atributos
Ejercicio 3 - Solucion
Atributos:
LV.cant int sintetizadoLV.tipo string heredadoT.tipo string sintetizado
Gramaticas de Atributos
Ejercicio 3 - Solucion
Gramatica:
D → T id [num] = {LV } {CONDITION(num.tipo = ”int”),
CONDITION(num.val = LV .cant),
LV .tipo = T .tipo}T → int {T .tipo = ”int”}T → float {T .tipo = ”float”}LV → num {LV .cant = 1,
CONDITION(LV .tipo = num.tipo)}LV1 → LV2, num {LV1.cant = LV2.cant + 1,
CONDITION(LV1.tipo = num.tipo),
LV2.tipo = LV1.tipo}
Gramaticas de Atributos
Ejercicio 3 - Otra Solucion
Atributos:
LV.cant int sintetizadoLV.tipo string sintetizadoT.tipo string sintetizado
Gramaticas de Atributos
Ejercicio 3 - Otra Solucion
Gramatica:
D → T id [num] = {LV } {CONDITION(num.tipo = ”int”),
CONDITION(num.val = LV .cant),
CONDITION(LV .tipo = T .tipo)}T → int {T .tipo = ”int”}T → float {T .tipo = ”float”}LV → num {LV .cant = 1, LV .tipo = num.tipo}LV1 → LV2, num {LV1.cant = LV2.cant + 1,
CONDITION(LV2.tipo = num.tipo),
LV1.tipo = LV2.tipo}
Gramaticas de Atributos