Sunteți pe pagina 1din 23

Anlisis semntico

Tabla de smbolos, chequeo de tipos y


representaciones internas

c
Analisis sematico v1.2 2005
Jose Fortes p.1

Anlisis? ... semntico?


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

c
Analisis sematico v1.2 2005
Jose Fortes p.2

Anlisis? ... semntico?


La semntica corresponde al significado 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...

c
Analisis sematico v1.2 2005
Jose Fortes p.2

Anlisis? ... semntico?


La semntica corresponde al significado 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:

c
Analisis sematico v1.2 2005
Jose Fortes p.2

Anlisis? ... semntico?


La semntica corresponde al significado 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
c
Analisis sematico v1.2 2005
Jose 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
identificador 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 conflictos y as evitar
modificar la gramtica o el lenguaje

c
Analisis sematico v1.2 2005
Jose Fortes p.3

Tabla(s) de smbolos
Va conteniendo un registro por cada identificador
definido/declarado por el programador, aadindose
informacin asociada:
Ristra del identificador (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 definido; etc.
c
Analisis sematico v1.2 2005
Jose 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: ficheros con tablas
Su implementacin fsica ms eficiente 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 (identificadores, constantes) pueden ir en


lista(s) aparte.

c
Analisis sematico v1.2 2005
Jose 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

c
Analisis sematico v1.2 2005
Jose 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

c
Analisis sematico v1.2 2005
Jose 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

c
Analisis sematico v1.2 2005
Jose 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

c
Analisis sematico v1.2 2005
Jose 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

c
Analisis sematico v1.2 2005
Jose 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

c
Analisis sematico v1.2 2005
Jose 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:
(k2 )
1)
+
jh
Hj = (h(k
n
n ) mod T, j = 0, 1,
c
Analisis sematico v1.2 2005
Jose 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 polimrficas,
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).

c
Analisis sematico v1.2 2005
Jose Fortes p.8

Definiciones 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 definiciones incompletas (declaraciones) son necesarias para definiciones recursivas: entrada en tabla provisionalmente vaca para tipo base.
c
Analisis sematico v1.2 2005
Jose 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
c
Analisis sematico v1.2 2005
Jose 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.
c
Analisis sematico v1.2 2005
Jose 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.

c
Analisis sematico v1.2 2005
Jose Fortes p.12

Representaciones internas (2/2)


Podemos clasificarlas 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.
c
Analisis sematico v1.2 2005
Jose 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.
c
Analisis sematico v1.2 2005
Jose Fortes p.14

Ejemplo de cudruplas

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

...
:=
:=
if >goto
L4:
...
if = goto
:= +
goto
L5:
...

i a
t8 b
i t8 L5
i t8 L5
i i 1
L4

c
Analisis sematico v1.2 2005
Jose Fortes p.15

S-ar putea să vă placă și