Está en la página 1de 23

Anlisis semntico

Tabla de smbolos, chequeo de tipos y representaciones internas

An alisis sem atico v1.2 c 2005 Jos e Fortes p.1

Anlisis? ... semntico?


La semntica corresponde al signicado asociado a las estructuras formales (sintaxis) del lenguaje.

An alisis sem atico v1.2 c 2005 Jos e Fortes p.2

Anlisis? ... semntico?


La semntica corresponde al signicado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramticas (E)BNF adems normalmente limitadas a LR o LL no pueden describir todos los elementos sintcticos del lenguaje, se hace preciso algn anlisis adicional...

An alisis sem atico v1.2 c 2005 Jos e Fortes p.2

Anlisis? ... semntico?


La semntica corresponde al signicado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramticas (E)BNF adems normalmente limitadas a LR o LL no pueden describir todos los elementos sintcticos del lenguaje, se hace preciso algn anlisis adicional... As, se denomina tradicionalmente anlisis semntico a todo aquello que forma parte del frontal [front-end] ms all de lo que la gramtica utilizada nos permite:

An alisis sem atico v1.2 c 2005 Jos e Fortes p.2

Anlisis? ... semntico?


La semntica corresponde al signicado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramticas (E)BNF adems normalmente limitadas a LR o LL no pueden describir todos los elementos sintcticos del lenguaje, se hace preciso algn anlisis adicional... As, se denomina tradicionalmente anlisis semntico a todo aquello que forma parte del frontal [front-end] ms all de lo que la gramtica utilizada nos permite: Tabla de smbolos Chequeos de tipos (y otros) Generacin de representacin interna
An alisis sem atico v1.2 c 2005 Jos e Fortes p.2

Ejemplo de extensin del anlisis sintctico


La tabla de smbolos permite que el analizador lxico devuelva un token distinto segn la categora del identicador en ese contexto. Con esta tcnica: En el fondo, estamos introduciendo dependencia del contexto sobre una gramtica independiente del contexto. Por tanto, aumentamos la potencia del anlisis sintctico Podemos resolver algunos conictos y as evitar modicar la gramtica o el lenguaje

An alisis sem atico v1.2 c 2005 Jos e Fortes p.3

Tabla(s) de smbolos
Va conteniendo un registro por cada identicador denido/declarado por el programador, aadindose informacin asociada: Ristra del identicador (maysculas y minsculas?) Categora: variable, constante, tipo, campo, procedimiento, funcin, parmetro, clase, etiqueta, mdulo, macro, etc. A qu mbito pertenece (profundidad) Otra informacin segn categora: tamao; ubicacin; valor; enlaces a tipo, parmetros o campos; si incompletamente denido; etc.
An alisis sem atico v1.2 c 2005 Jos e Fortes p.4

Estructura de la tabla de smbolos


Su estructura lgica viene determinada por: El tipo de mbito (esttico o dinmico) Los mecanismos de mbito del lenguaje: procedimientos, bloques, herencia, mdulos, espacios de nombres, registros, with, ... Si se da ms de una pasada. Compilacin separada: cheros con tablas Su implementacin fsica ms eciente suele ser la de una tabla hash, asociada a pila de mbitos activos.
Truco: mover (insertar, al menos) el elemento actual a la cabeza de la lista

Las ristras (identicadores, constantes) pueden ir en lista(s) aparte.

An alisis sem atico v1.2 c 2005 Jos e Fortes p.5

Ejemplo con open hashing


int s(double, int); char c; int main() { typedef double real; while (c==0) { real x = 0.1; int c = 1; c = s(x, c); } } int s(double c, int d) { return c+d; }

s ? ? c main

An alisis sem atico v1.2 c 2005 Jos e Fortes p.6

Ejemplo con open hashing


int s(double, int); char c; int main() { typedef double real; while (c==0) { real x = 0.1; int c = 1; c = s(x, c); } } int s(double c, int d) { return c+d; }

s ? ? c main real

An alisis sem atico v1.2 c 2005 Jos e Fortes p.6

Ejemplo con open hashing


int s(double, int); char c; int main() { typedef double real; while (c==0) { real x = 0.1; int c = 1; c = s(x, c); } } int s(double c, int d) { return c+d; }

s ? ? c main real x c

An alisis sem atico v1.2 c 2005 Jos e Fortes p.6

Ejemplo con open hashing


int s(double, int); char c; int main() { typedef double real; while (c==0) { real x = 0.1; int c = 1; c = s(x, c); } } int s(double c, int d) { return c+d; }

s ? ? c main real

An alisis sem atico v1.2 c 2005 Jos e Fortes p.6

Ejemplo con open hashing


int s(double, int); char c; int main() { typedef double real; while (c==0) { real x = 0.1; int c = 1; c = s(x, c); } } int s(double c, int d) { return c+d; }

s ? ? c main

An alisis sem atico v1.2 c 2005 Jos e Fortes p.6

Ejemplo con open hashing


int s(double, int); char c; int main() { typedef double real; while (c==0) { real x = 0.1; int c = 1; c = s(x, c); } } int s(double c, int d) { return c+d; }

s c d c main

An alisis sem atico v1.2 c 2005 Jos e Fortes p.6

Una funcin hash


Si llamamos ci a los cdigos de los caracteres y n la longitud de la ristra: h0 = 0 hi = k (hi1 mod 220 ) + ci H = hn mod T Para una tabla de tamao T = 1008 pueden usarse valores de k1 = 613 (preferentemente) o k2 = 4 (ms rpido pero peor distribucin). Si open hashing:
k1 ) (k2 ) + jh Hj = (h( n n ) mod T, j = 0, 1,
An alisis sem atico v1.2 c 2005 Jos e Fortes p.7

Chequeos de tipos (y otros)


Un compilador debe realizar una serie de chequeos estticos, como chequeos de tipos: Consistencia: unicidad, existencia, no-ciclicidad, ... Equivalencia y compatibilidad de tipos Conversin explcita [cast] o forzada [coercion] Inferencia de tipos (en valores) Sobrecarga de funciones y operadores Funciones polimrcas, u otros (p.e., consistencia de instrucciones de control). En otros casos, debe generar cdigo para realizar chequeos dinmicos (p.e., valor dentro de rango).
An alisis sem atico v1.2 c 2005 Jos e Fortes p.8

Deniciones de tipos
Tambin llamadas expresiones de tipos, en las que el programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente construir un rbol/grafo: En caso de equivalencia estructural Para comprobacin de no-ciclicidad: type a=b; b=a; (Descomponer en) tipos annimos Las deniciones incompletas (declaraciones) son necesarias para deniciones recursivas: entrada en tabla provisionalmente vaca para tipo base.
An alisis sem atico v1.2 c 2005 Jos e Fortes p.9

El rbol sintctico abstracto (1/2)


En ingls (abstract) syntax tree, AST, para distinguirlo del rbol del anlisis segn la gramtica [parse tree].

if(a<3) {b=2*a;};
if-then

<

:=

a 3

2 a
An alisis sem atico v1.2 c 2005 Jos e Fortes p.10

El rbol sintctico abstracto (2/2)


Representacin compacta correspondiente a una gramtica sin limitaciones de mtodo de anlisis, caracterizada por que los nodos interiores son operadores, en sentido amplio. til para ser anotado o decorado con atributos en recorridos ulteriores, y a partir de ah: Realizar chequeos Generar cdigo (intermedio) Con frecuencia se puede simular su recorrido (sin construirlo) durante el anlisis sintctico.
An alisis sem atico v1.2 c 2005 Jos e Fortes p.11

Representaciones internas (1/2)


Intermedias entre frontal [front-end] y dorsal [back-end], permiten desacoplar los diseos de unos y otros. Orientadas a: Su optimizacin (instrucciones claras y simples) Generar cdigo de distintas mquinas objeto El diseo debe permitir su fcil generacin por el analizador semtico.

An alisis sem atico v1.2 c 2005 Jos e Fortes p.12

Representaciones internas (2/2)


Podemos clasicarlas por su nivel de abstraccin (distancia a la mquina objeto real): Alto: prxima al rbol abstracto, con correspondencia con las estructuras del lenguaje Medio: instrucciones de mquina virtual (a veces realmente implementada: P-code, bytecode), tales como tuplas de tres direcciones Bajo: mquina prxima al ensamblador, con un amplio nmero de registros Algunos compiladores pasan por varias representaciones de distintos niveles de abstraccin.
An alisis sem atico v1.2 c 2005 Jos e Fortes p.13

Cudruplas
Operaciones con hasta tres direcciones, que pueden ser variables del programa o temporales: x := y op z x := op z x := z x := y [z ] x[y ] := z if x op y goto L goto L param x1 , ..., param xn , call p(n) Podemos entenderlas como una linealizacin de un cierto tipo de rbol abstracto.
An alisis sem atico v1.2 c 2005 Jos e Fortes p.14

Ejemplo de cudruplas
... := := if >goto L4: ... if = goto := + goto L5: ... i a t8 b i t8 L5 i t8 L5 i i 1 L4

for i in a..b do ... endfor;

An alisis sem atico v1.2 c 2005 Jos e Fortes p.15