Vous êtes sur la page 1sur 46

Introduccin

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

Reconocer/Generar un lenguaje independiente de

contexto (CFL). Poder expresivo CFL


Anlisis lxico (tokenizacin, lexers, scanners) Anlisis sintctico

Mientras se reconoce se construye rbol (AST), para

hacer algo ms ...

Introduccin
Introduccin

Anlisis lxico: condiciones de buena formacin a nivel

palabra
Anlisis sintctico: condiciones de buena formacin a

nivel estructural.
Anlisis semntico: condiciones de buena formacin a

nivel interpretacin.

ASTs: Abstract Syntax Trees


Introduccin

rbol para codicar la estructura lgica (Abstraccin de

la sintaxis particular)
Elimina smbolos intiles Elimina nodos internos Traduccin ltima.

Cmo se construye el AST?


Introduccin

Acciones semnticas Asociar el cdigo con cada produccin Mientras se hace el anlisis sintctico se ejecuta el

cdigo para construir el AST


El orden exacto del cdigo depende del parsing Traduccin dirigida por la sintaxis

Anlisis Semntico
Introduccin

Vericar que el input tenga un signicado o

interpretacin.
Vericar propiedades que no se pueden vericar al

nivel sintctico. Desafo:


Rechazar el mayor nmeor de programas sin

interpretacin
Aceptar el mayor nmero de programas correctos. Hacerlo lo ms rpido posible.

Tambin guardar informacin que puede ser usada

posteriormente (alcance de variables, herencia, etc.)

Introduccin

Anlisis Semntico: Ms all de CFL

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

Usamos una gramtica de mayor poder expresivo que

una CFG?
Usamos una estructura de datos adicional? Una pila

semntica? Necesitamos guardar la informacin semantica.


Gramticas de Atributos

Usamos mtodos ad-hoc?

Ms all de CFL
Introduccin

Importancia del formalismo de las gramticas de

atributos
Claridad formal Base para la prctica ad-hoc

Limitaciondes de las GA motivan la prctica Computacin no-local Necesidad de informacin centralizada

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

El anlisis semntico requiere comparar informacin

que se tiene en distintas partes del rbol de derivacin.


Comparar declaracin de una variable con asignacin

de la misma variable. La informacin se propaga hacia un nodo comn para

llegar hasta el punto donde se la necesita.

Atributos
Introduccin

Para poder realizar un movimiento de informacin es

necesario extender la gramtica


Permitir que los smbolos (tanto terminales como no

terminales) tengan informacin asociada: atributo.


Cada smbolo puede tener asociado uno o ms

atributos.
Notacin similar a Java: atributos de un objeto o en C:

componente de una estructura :


nombreSmbolo.nombreAtributo Ej: no terminal E, con atributo val: E.val

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

Atributos: Es una asociacin de un nombre a un dominio de datos (par atributo, valor)


El atributo de nombre val tomar valores numricos Un atributo de nombre tipo que toma como valor los tipos permitidos

Propagacin (de atributos): Clculo de los atributos en funcin de los valores de los

que dependen

Dos tipos de atributos


Introduccin

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

rbol anotado o decorado con atributos


E T int T.val=4 int.val=4 int + E.val=10 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

Observaciones Generales
Introduccin

Las gramticas de atributos tienen el mismo poder

expresivo que las mquinas de Turing


Los atributos se pueden calcular usando pasadas

reiteradas sobre el AST


Evaluacin basada en las dependencias. El grafo de las dependencias debe ser acclico. La denicin de atributos puede ser cclica. Vericar si una gramtica de atributos es cclica es

decidible pero puede ser costoso.


Los atributos heredados pueden ser manipulados

usando una estructura de datos global (tabla de smbolos)


Subconjuntos tiles: gramtica de atributos S- y L-

Gramtica de atributos-S
Introduccin

Slo tiene atributos sintetizados Adecuada para parsing shift-reduce E T +E

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 T int T.val=4 int.val=4 +

E.val=10 E T int int.val=2 E.val=6 T.val=6 * T int T.val=3 int.val=3

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

Gramatica para declarar variables:


D: Declaracion T: Tipo L: Lista id identicador

D TL T int T real L L, i L id

Gramtica de atributos-L
Introduccin

Tiene slo atributos-L Determinados por nodo superior o hermano a

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

Input: int var1, x, y

Propagacin en Gramtica-L
Introduccin

Input: int var1, x, y

Propagacin en Gramtica-L
Introduccin

Input: int var1, x, y

Propagacin en Gramtica-L
Introduccin

Input: int var1, x, y

Propagacin en Gramtica-L
Introduccin

Input: int var1, x, y

Introduccin

Resmen Gramticas de atributos S y L

En una gramtica de atributos L los atributos

heredados se calculan de izquierda a derecha.


N ::= S1 S2 S3 Los atributos de S1 no dependen de S2 ni de S3.

Fcil de implementar en parser top-down, los nodos de

los que dependen los atributos ya fueron procesados


Una gramtica de atributos S, tiene slo atributos

sintetizados.
Se usa con un parser bottom-up.

Introduccin

Gramtica de atributos Extendida


Extensin de CFG en la que se permite: Cada smbolo tenga asociado 1 o ms atributos con un nombre y un tipo. Cada regla de produccin tenga asociada 1 o ms acciones semnticas, cada una de las cuales especica cmo cada atributo se puede calcular a partir de los atributos de otros smbolos de la regla de produccin. Datos globales, accesibles desde las reglas, no asociadas a ningn smbolo concreto. Se aplican las reglas de produccin y tambin las

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

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis

Introduccin

Traduccin dirigida por la sintaxis


Con la produccin A i := E , se asocia una accin de agregar el valor de E a i .

Vous aimerez peut-être aussi