Vous êtes sur la page 1sur 19

Anlisis semntico

Tabla de smbolos, chequeo de tipos y representaciones internas

An alisis sem atico c 2001 Jos e Fortes G alvez p.1

Anlisis? ... semntico?


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

An alisis sem atico c 2001 Jos e Fortes G alvez 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 c 2001 Jos e Fortes G alvez 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 front end ms all de lo que la gramtica utilizada nos permite: Tabla de smbolos Chequeos de tipos (y otros) Generacin de representaciones internas
An alisis sem atico c 2001 Jos e Fortes G alvez 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 c 2001 Jos e Fortes G alvez p.3

Tabla de smbolos
Va conteniendo un registro por cada identicador denido por el programador (o predenidos), 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 (nmero) Cul es su tipo (enlace) Otra informacin: tamao, ubicacin, valor, parmetros o campos (enlaces), refencia adelante o no, mbito que dene, etc.
e Fortes G alvez p.4 An alisis sem atico c 2001 Jos

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.

e Fortes G alvez p.5 An alisis sem atico c 2001 Jos

Una buena funcin hash


Si llamamos a los cdigos de los caracteres y longitud de la ristra:


la

 



"

Pueden usarse valores de (preferentemente) o (ms rpido pero peor distribucin)


" $  & %

An alisis sem atico c 2001 Jos e Fortes G alvez p.6

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 c 2001 Jos e Fortes G alvez p.7

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) subtipos annimos Referencias adelante o declaraciones de tipos, necesarias para deniciones recursivas: entrada en tabla provisionalmente vaca para tipo base.
An alisis sem atico c 2001 Jos e Fortes G alvez p.8

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 c 2001 Jos e Fortes G alvez p.9

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.
e Fortes G alvez p.10 An alisis sem atico c 2001 Jos

Representaciones intermedias (1/2)


Constituye la frontera entre front-ends y back-ends, y permite desacoplar los diseos de unos y otros. Orientadas a: 1. Su optimizacin (instruccines claras y simples) 2. Generar cdigo de distintas mquinas objeto El diseo debe permitir su fcil generacin por el analizador semtico.

An alisis sem atico c 2001 Jos e Fortes G alvez p.11

Representaciones intermedias (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 c 2001 Jos e Fortes G alvez p.12

Cudruplas
Operaciones con hasta tres direcciones, que pueden ser variables del programa o temporales:
0) 2 1

0) 7 6

4 ) 1 5 0 @ 

0)

2

0)

9 8 

2

, ...,

C

C

G F H

BA

BA

 

Podemos entenderlas como una linealizacin de un cierto tipo de rbol abstracto.


An alisis sem atico c 2001 Jos e Fortes G alvez p.13

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 c 2001 Jos e Fortes G alvez p.14

C/C++ como lenguaje objeto


Generar cudruplas en C/C++ aporta ventajas: Nos ahorramos programar (al menos inicialmente) la generacin de cdigo objeto real Permite descargar en C/C++ la mayor parte de la gestin de pila, heap, E/S, ... Permite aprovechar la optimizacin de un buen compilador de C/C++ Independencia de la mquina objeto (o casi: tamaos de referencias, p.e.) y del s.o. con los inconvenientes de que la eciencia de los ejecutables no ser ptima y de estar sujetos a las limitaciones del compilador de C/C++.

e Fortes G alvez p.15 An alisis sem atico c 2001 Jos

Cudruplas en C/C++
Slo instrucciones elementales de hasta 3 direcciones. Posible implementacin para lenguajes imperativos: Una funcin void C/C++ por cada rutina del lenguaje fuente Se crean localmente variables temporales conforme se necesitan (C++ ms prctico); el optimizador las podr eliminar en su caso Una union de vectores de tipos bsicos contendr las variables de cada mbito, incluyendo las auxiliares como enlaces, parmetros, ... Si reas locales englobadas: gestionar pila de punteros usando enlaces estticos o display
e Fortes G alvez p.16 An alisis sem atico c 2001 Jos

Conclusin
Elementos mnimos para la prctica de anlisis semntico: Implementar una tabla de smbolos (no es necesario que sea hash) Implementar al menos parte del chequeo de tipos del lenguaje Como mnimo, para la prtica de generacin de cdigo, cudruplas en C/C++. Se valorarn especialmente aportaciones adicionales.

An alisis sem atico c 2001 Jos e Fortes G alvez p.17