Académique Documents
Professionnel Documents
Culture Documents
Anlisis Semntico
Jos M. Castao
Teora de Lenguajes 2011 Departamento de Computacin FCEyN, UBA
Compiladores
Introduccin
Anlisis Lxico Anlisis Sintctico Anlisis Semntico Generacin Cdigo Intermedio Optimizacin Generacin Cdigo
Introduccin
Introduccin
Introduccin
Introduccin
palabra
Anlisis sintctico: condiciones de buena formacin a
nivel estructural.
Anlisis semntico: condiciones de buena formacin a
nivel interpretacin.
la sintaxis particular)
Elimina smbolos intiles Elimina nodos internos Traduccin ltima.
Acciones semnticas Asociar el cdigo con cada produccin Mientras se hace el anlisis sintctico se ejecuta el
Anlisis Semntico
Introduccin
interpretacin.
Vericar propiedades que no se pueden vericar al
interpretacin
Aceptar el mayor nmero de programas correctos. Hacerlo lo ms rpido posible.
Introduccin
Algunas preguntas...
Se declar x antes de usarlo? Se declar x pero no se usa? Es el tipo de una expresin el que corresponde? La referencia a una posicin en un array est dentro de
sus lmites?
...
Ms all de CFL
Introduccin
una CFG?
Usamos una estructura de datos adicional? Una pila
Ms all de CFL
Introduccin
atributos
Claridad formal Base para la prctica ad-hoc
Anlisis Semntico
Introduccin
Dos enfoques:
Gramtica de Atributos Aumentar CFG Traduccin dirigida por la sintaxis Recorrer recursivamente el AST Construir el AST Usar funciones y recursin para explorar el rbol.
Propagacin de la informacin
Introduccin
Atributos
Introduccin
atributos.
Notacin similar a Java: atributos de un objeto o en C:
Gramtica de Atributos
Introduccin
Una CFG aumentada con atributos Cada smbolo gramatical tiene un conjunto de atributos
asociados.
Cada produccin tiene una regla semntica asociada Traduccin Dirigida por la Sintaxis (SDD) Usar los atributos para el anlisis/traduccin
semntica.
Chequeo de tipos. Generacin del cdigo intermedio
Ms sobre atributos
Introduccin
Propagacin (de atributos): Clculo de los atributos en funcin de los valores de los
que dependen
Atributos sintetizados Los valores de los atributos se evalan bottom up El valor del nodo superior se dene por los valores de los hijos El valor del smbolo a izquierda depende del RHS de la regla Atributos heredados Los valores de los atributos se evalan top down El valor de un nodo se dene en trminos de los valores del nodo superior o nodos hermanos Se dene el valor de elementos en RHS por elementos en RHS o LHS. Reglas de atributos Informacin local: slo se reeren a smbolos en la producci n correspondiente.
Ejemplo
Introduccin
E E T T
T +E T int int T
E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val
Introduccin
Observaciones Generales
Introduccin
Gramtica de atributos-S
Introduccin
E T T int T int T
E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val
Propagacin en gramtica-S
Introduccin
E T int int.val=4 int int.val=2 + E T * int E E T T T +E T int int T E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val T int.val=3
Propagacin en gramtica-S
Introduccin
E T int T.val=4 int.val=4 int int.val=2 + E T * int E E T T T +E T int int T E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val T int.val=3
Propagacin en gramtica-S
Introduccin
E T int T.val=4 int.val=4 int int.val=2 + E T * T T.val=3 int E E T T T +E T int int T E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val int.val=3
Propagacin en gramtica-S
Introduccin
E T int T.val=4 int.val=4 int + T int.val=2 E T.val=6 * T int E E T T T +E T int int T E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val T.val=3 int.val=3
Propagacin en gramtica-S
Introduccin
E T int T.val=4 int.val=4 int + E T int.val=2 E.val=6 T.val=6 * T int E E T T T +E T int int T E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val T.val=3 int.val=3
Propagacin en gramtica S
Introduccin
E E T T
T +E T int int T
E1 .val = T .val + E2 .val E .val = T .val T .val = int .val T1 .val = int .val T2 .val
Gramtica de atributos-L
Introduccin
D TL T int T real L L, i L id
Gramtica de atributos-L
Introduccin
izquierda.
D TL
T int T real L L1 , i Li
L.type = T .type T .type = entero T .type = real L1 .type = L.type, i.type = L.type i.type = L.type
Propagacin en Gramtica-L
Introduccin
Propagacin en Gramtica-L
Introduccin
Propagacin en Gramtica-L
Introduccin
Propagacin en Gramtica-L
Introduccin
Propagacin en Gramtica-L
Introduccin
Introduccin
sintetizados.
Se usa con un parser bottom-up.
Introduccin
reglas semnticas asociadas. Resulta en rbol anotado con valores de los atributos en cada nodo. Atributos de los smbolos: informacin local de las reglas. Es posible modicar alguna estructura de datos o informacin general del compilador (global a todas las reglas).
Introduccin
Introduccin
Introduccin
Introduccin
Introduccin
Introduccin
Introduccin
Introduccin
Introduccin
Introduccin
Introduccin