Está en la página 1de 24

Anlisis semntico

Tabla de smbolos, chequeo de tipos y


representaciones internas
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.1 .
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 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 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 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 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 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 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 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 v1.2 c 2005 Jos e Fortes G alvez 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 G alvez 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 G alvez p.5 .
Ejemplo de tabla de smbolos
char c;
int s(double, int);
int main() {
typedef double real;
while (c==0) {
real y = 0.1;
int c = 1;
c = s(y, c);
}
}
int i = -1;
int s(double c, int d) {
return c+d;
}
main
?
?
s
c
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.6 .
Ejemplo de tabla de smbolos
char c;
int s(double, int);
int main() {
typedef double real;
while (c==0) {
real y = 0.1;
int c = 1;
c = s(y, c);
}
}
int i = -1;
int s(double c, int d) {
return c+d;
}
main
real
?
?
s
c
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.6 .
Ejemplo de tabla de smbolos
char c;
int s(double, int);
int main() {
typedef double real;
while (c==0) {
real y = 0.1;
int c = 1;
c = s(y, c);
}
}
int i = -1;
int s(double c, int d) {
return c+d;
}
main
real
y
c
?
?
s
c
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.6 .
Ejemplo de tabla de smbolos
char c;
int s(double, int);
int main() {
typedef double real;
while (c==0) {
real y = 0.1;
int c = 1;
c = s(y, c);
}
}
int i = -1;
int s(double c, int d) {
return c+d;
}
main
real
?
?
s
c
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.6 .
Ejemplo de tabla de smbolos
char c;
int s(double, int);
int main() {
typedef double real;
while (c==0) {
real y = 0.1;
int c = 1;
c = s(y, c);
}
}
int i = -1;
int s(double c, int d) {
return c+d;
}
main
?
?
s
c
i
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.6 .
Ejemplo de tabla de smbolos
char c;
int s(double, int);
int main() {
typedef double real;
while (c==0) {
real y = 0.1;
int c = 1;
c = s(y, c);
}
}
int i = -1;
int s(double c, int d) {
return c+d;
}
main
d
c
s
c
i
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.6 .
Ejemplo de tabla de smbolos
char c;
int s(double, int);
int main() {
typedef double real;
while (c==0) {
real y = 0.1;
int c = 1;
c = s(y, c);
}
}
int i = -1;
int s(double c, int d) {
return c+d;
}
main
s
c
i
d
c
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.6 .
Una funcin de dispersin [hashing]
Sean c
i
los cdigos de los caracteres de la ristra
r = c
1
c
n
. Para enteros de w bits, tabla de tamao
T = 2
p
, y p.e. q = 613 y a (

5 1)/2 :
k
1
= c
1
k
i
= (qk
i1
+ c
i
) mod 2
w
, 1 < i n
h = T(k
n
a mod 1), 0 < a < 1
Si doble dispersin [rehashing], usando p.e. a

e/9
para h

:
h
j
= (h + j(2h

/2 + 1)) mod T, j = 0, 1, . . .
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez 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 che-
queos dinmicos (p.e., valor dentro de rango).
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez 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 necesa-
rias para deniciones recursivas: entrada en tabla provi-
sionalmente vaca para tipo base.
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez 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;};
2 a
*
a 3
<
b
if-then
:=
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez 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 cons-
truirlo) durante el anlisis sintctico.
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez 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 analiza-
dor semtico.
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez 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, sin
restriccin de 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 G alvez 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 x
1
, ..., param x
n
, 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 G alvez p.14 .
Ejemplo de cudruplas
for i in a..b do
...
endfor;
...
:= i a
:= t8 b
if >goto i t8 L5
L4: ...
if = goto i t8 L5
:= + i i 1
goto L4
L5: ...
An alisis sem atico v1.2 c 2005 Jos e Fortes G alvez p.15 .

También podría gustarte