You are on page 1of 66

Compiladores

Anlisis Semntico y Chequeo


de Tipos
Oscar Bonilla 2 Universidad Galileo
Resumen

Introduccin

Tablas de Smbolos

Chequeo Semntico

Chequeo de Tipos

Semntica de un Programa Orientado a Objetos

Tipos Polimricos
Oscar !onilla "
#ni$ersidad %alileo
&'nde estamos(
)nali*ador +,-ico .Scanner/
)nali*ador Sintctico .Parser/
To0en Stream
)rbol de Parseo
Programa .character stream/
Oscar !onilla 1
#ni$ersidad %alileo
&'nde estamos(
)nali*ador +,-ico .Scanner/
)nali*ador Sintctico .Parser/
To0en Stream
)rbol de Parseo
Programa .character stream/
)nali*ador Semntico
%enerador de Cdigo Intermedio
Representacin Intermedia 2
Tabla de Smbolos
Oscar !onilla 3
#ni$ersidad %alileo
&4u, es la semntica de un programa(

Sint-is
5
Cmo se $e un programa
5
Representacin te-tual o estructura
5
6s posible dar una deinicin matemtica precisa

Semntica
5
Cul es el signiicado del programa
5
6s ms dicil dar una deinicin matemtica precisa
Oscar !onilla 7
#ni$ersidad %alileo
Por qu, hacer anlisis semntico

)segurarnos que el programa cumple con la


deinicin del lenguaje de programacin

Pro$eer mensajes de error 8tiles al usuario


Oscar Bonilla 7 Universidad Galileo
Resumen

Introduccin

Tablas de Smbolos

Chequeo Semntico

Chequeo de Tipos

Semntica de un Programa Orientado a Objetos

Tipos Polimricos
Oscar !onilla 9
#ni$ersidad %alileo
Tabla de Smbolos

#n lugar para guardar toda la inormacin


adicional acerca del programa
5
Representaciones intermedias: e-presiones;
statements; control de lujo; etc<
5
Tabla de Smbolos: Tipos; $ariables; scope; etc<
Oscar !onilla =
#ni$ersidad %alileo
Scope

#n nombre puede tener signiicados distintos


en lugares distintos
5
Tipos; $ariables; etc tiene scope .mbito/

Tenemos que mantener una tabla de smbolos


para cada scope
Oscar !onilla >?
#ni$ersidad %alileo
Operaciones en la tabla de smbolos

ma0e@table.parent@table/ sAmbol@table

scope.id/ sAmbol@table

loo0up@$ariable.id; sAmbol@table/ $ariable

loo0up@tApe.id; sAmbol@table/ tApe

get@tApe.$ariable/ tApe

add@tApe.id; sAmbol@table; tApe/ tApe

add@$ariable.id; sAmbol@table; tApe/ $ariable


Oscar !onilla >>
#ni$ersidad %alileo
Siguiente Clase

Todo acerca de tablas de smbolos


5
Scopes A $isibilidad
5
Inormacin que se mantiene en la tabla de
smbolos
5
Implementacin de tablas de smbolos
Oscar Bonilla 12 Universidad Galileo
Resumen

Introduccin

Tablas de Smbolos

Chequeo Semntico

Chequeo de Tipos

Semntica de un Programa Orientado a Objetos

Tipos Polimricos
Oscar !onilla >"
#ni$ersidad %alileo
Chequeo Semntico

Chequeos estticos $s< Chequeos dinmicos

Chequeos estticos
5
Chequeos de control de lujo
5
Chequeos de unicidad
5
Chequeos de Tipo
Oscar !onilla >1
#ni$ersidad %alileo
Chequeos de Control de Blujo

6l control de lujo del programa es sensiti$o


al conte-to

6jemplos:
5
'eclaracin de una $ariable debe ser $isible al
usarla .en scope/
5
'eclaracin de una $ariable debe estar ntes de
usarla
5
Cada camino de salida .e-it path/ retorna un $alor
del tipo correcto

&4u, ms(
Oscar !onilla >3
#ni$ersidad %alileo
Chequeos de #nicidad

#so .A mal uso/ de identiicadores


5
Co se puede representar en una CB% .mismo to0en/

6jemplos:
5
Cing8n identiicador puede ser usado para dos
deiniciones dierentes en el mismo scope
Oscar !onilla >7
#ni$ersidad %alileo
Chequeos de Tipo

+os chequeos semnticos ms e-tensos

6jemplos:
5
4ue el n8mero de argumentos haga match con el n8mero de
parmetros ormales A que los tipos correspondientes sean
equi$alentes
5
Si se llama como e-presin; debe retornar un tipo
5
Cada acceso a una $ariable debe hacer match con la declaracin
.arreglo; estructura; etc</
5
+os identiicadores en una e-presin deben ser De$aluablesE
5
+FS de una asignacin debe ser DasignableE
5
6n una e-presin los tipos de las $ariables; tipos de retorno de
m,todos A de operadores deben ser DcompatiblesE
Oscar !onilla >G
#ni$ersidad %alileo
Chequeos 'inmicos

Chequeos de lmites de arreglos

Chequeo de dereerencia del Cull Pointer


Oscar Bonilla 18 Universidad Galileo
Resumen

Introduccin

Tablas de Smbolos

Chequeo Semntico

Chequeo de Tipos

Semntica de un Programa Orientado a Objetos

Tipos Polimricos
Oscar !onilla >=
#ni$ersidad %alileo
Sistemas de Tipos

#n sistema de tipos es usado para el chequeo de


tipos

#n sistema de tipos incorpora


5
Construcciones estticas del lenguaje
5
Cocin de tipos
5
Reglas para asignar tipos a construcciones del
lenguaje
Oscar !onilla H?
#ni$ersidad %alileo
6-presiones de Tipos

#n tipo compuesto es denotado por una


e-presin de tipo

#na e-presin de tipo es


5
#n tipo bsico
5
+a aplicacin de un constructor de tipo a otras
e-presiones de tipo
Oscar !onilla H>
#ni$ersidad %alileo
6-presiones de Tipos: Tipos !sicos

Tipos atmicos deinidos por el lenguaje

6jemplos:
5
6nteros
5
!ooleanos
5
loats
5
caracteres

tApe@error
5
Tipo especial que produce un error

$oid
5
Tipo bsico que denota Dla ausencia de un $alorE
Oscar !onilla HH
#ni$ersidad %alileo
6-presiones de Tipo: Combres

Ia que las e-presiones de tipos pueden ser


nombradas; un nombre de tipo es una e-presin
de tipo
Oscar !onilla H"
#ni$ersidad %alileo
6-presiones de Tipo: Productos
Si T
>
A T
H
son e-presiones de tipo; T
>
T
H
es
tambi,n una e-presin de tipo
Oscar !onilla H1
#ni$ersidad %alileo
6-presiones de Tipo: )rraAs

Si T es una e-presin de tipo; un array(T, I) es


tambi,n una e-presin de tipo
5
I es una constante entera que denota el n8mero de
elementos de tipo T
5
6jemplo:
int foo[128];
arraA.integer; >H9/
Oscar !onilla H3
#ni$ersidad %alileo
6-presiones de Tipo: Bunction Calls

Jatemticamente una uncin mapea


5
6lementos de un conjunto .el dominio/
5
) elementos de otro conjunto .el contradominio/

6jemplo
int foobar(int a, boolean b, int c)
integer boolean integer integer
Oscar !onilla H7
#ni$ersidad %alileo
6-presiones de Tipo: Otras

Records
5
6structuras A clases
5
6jemplo
class { int i; int j;}
integer integer

+enguajes Buncionales
5
Bunciones que toman unciones A retornan
unciones
5
6jemplo
.integer integer/ integer .integer integer/
Oscar Bonilla 27 Universidad Galileo
#n lenguaje simple con tipos

#n lenguaje que tiene una secuencia de


declaraciones seguidas de una sola e-presin
P 'K 6
' 'K ' L id : T
T char L integer L array M num N of T
6 literal L num L id L 6 2 6 L 6 M 6 N

Programa 6jemplo
var: integer;
var + 1023
Oscar Bonilla 28 Universidad Galileo
#n lenguaje simple con tipos

#n lenguaje que tiene una secuencia de


declaraciones seguidas de una sola e-presin
P 'K 6
' 'K ' L id : T
T char L integer L array M num N of T
6 literal L num L id L 6 2 6 L 6 M 6 N

&Cules son las acciones del parser para este


lenguaje(
Oscar Bonilla 29 Universidad Galileo
)cciones del Parser
P 'K 6
' 'K '
' id : T O addtApe.id<entrA; T<tApe/K P
T char O T<tApe Q charK P
T integer O T<tApe Q integerK P
T arraA M num N o T
>

O T<tApe Q arraA.T
>
<tApe; num<$al/K P
Oscar Bonilla 30 Universidad Galileo
)cciones del Parser
6 literal O 6<tApe Q charK P
6 num O 6<tApe Q integerK P
6 id O 6<tApe Q loo0up@tApe.id<name/K P
Oscar Bonilla 31 Universidad Galileo
)cciones del Parser
6 6
>
2 6
H
O i 6
>
<tApe QQ integer and
6
H
<tApe QQ integer then
6<tApe Q integer
else
6<tApe Q tApe@error
P
24
Oscar Bonilla 32 Universidad Galileo
)cciones del Parser
6 6
>
M6
H
N O i 6
H
<tApe QQ integer and
6
>
<tApe QQ arraA.s; t/ then
6<tApe Q s
else
6<tApe Q tApe@error
P
Oscar !onilla ""
#ni$ersidad %alileo
6qui$alencia de Tipos

&Cmo sabemos si dos tipos son iguales(


5
Jismo entrada de tipo
5
6jemplo:
int [128];
foo();
foo(int ![128]) { " }

'os entradas de tipo distintas en dos tablas de smbolos


distintas

Pero deberan ser iguales


Oscar !onilla "1
#ni$ersidad %alileo
6qui$alencia 6structural

Si la e-presin de tipo de dos tipos tiene la


misma construccin; entonces son equi$alentes

DJisma ConstruccinE
5
Tipos base equi$alentes
5
Jismo conjunto de constructores de tipo son
aplicados en el mismo orden .e<d< rbol de tipos
equi$alente/
Oscar !onilla "3
#ni$ersidad %alileo
Coercin de Tipos

Con$ersin implcita de un tipo a otro tipo

6jemplo
int ;
float !;
! # ! +

'os tipos de coercin


5
Ridening con$ersions
5
narroRing con$ersions
Oscar !onilla "7
#ni$ersidad %alileo
Sidening con$ersions

Con$ersiones sin p,rdida de inormacin

6jemplos:
5
integers a loats
5
shorts a longs
Oscar !onilla "G
#ni$ersidad %alileo
CarroRing con$ersions

Con$ersiones que pueden perder inormacin

6jemplos:
5
integers a chars
5
longs a shorts

Raro en lenguajes
Oscar !onilla "9
#ni$ersidad %alileo
TApe casting

Con$ersin e-plcita de un tipo a otro

Tanto Ridening como narroRing

6jemplo
int ;
float !;
# + (int)!

TApecasting ilimitado puede ser peligroso


Oscar Bonilla 39 Universidad Galileo
Pregunta:

&Podemos asignarle un solo tipo a todas las


$ariables; unciones A operadores(

&4u, haA de 2; cul es su tipo(


Oscar !onilla 1?
#ni$ersidad %alileo
O$erloading

)lgunos operadores pueden tener ms de un tipo<

6jemplo
int , !, $;
float %, &, ';
# + !
% # % + &

Complica el sistema de tipos


5
6jemplo
# + %

&Cul es el tipo de 2 (
Oscar Bonilla 41 Universidad Galileo
Resumen

Introduccin

Tablas de Smbolos

Chequeo Semntico

Chequeo de Tipos

Semntica de un Programa Orientado a Objetos

Tipos Polimricos
Oscar !onilla 1H
#ni$ersidad %alileo
Clases

#na clase es un tipo de datos abstracto

Contiene
5
'atos .campos/
5
)cciones .m,todos/
5
Restricciones de acceso

Cada instancia de una clase $a a crear un objeto


separado
5
Con su propia copia de las $ariables instanciadas
.compos/
5
Comparte las acciones .m,todos/
Oscar Bonilla 43 Universidad Galileo
Clase 6jemplo
class vehicle {
int num_wheels;
void print_num_wheels( ) { }
}
campo
m,todo
vehicle A;
A.print_num_wheels( )

6l Objeto es un parmetro implcito de la llamada del m,todo


Oscar !onilla 11
#ni$ersidad %alileo
Ferencia

6-tiende las clases al permitirles relaciones de


supertipoTsubtipo

Soporta reuso de cdigo incremental


5
Partes com8nes en un supertipo com8n
5
'ierencias indi$iduales en cada subtipo
Oscar Bonilla 45 Universidad Galileo
6jemplo de Ferencia
class ()* e+ten,s ve-icle {
int rollover.s/ee,;
int get.rollover.s/ee,( ) { " }
voi, /rint.rollover.s/ee,( ) { " }
}

+a clase S#U es una subclase de la clase $ehicle

+a clase $ehicle es una superclase de la clase S#U

#na instancia .objeto/ de la clase S#U contiene


5
Todos los campos de la clase $ehicle
5
Todos los campos de la clase S#U

+os m,todos tanto en S#U como en $ehicle son


$isibles a la clase S#U
Oscar !onilla 17
#ni$ersidad %alileo
Ferencia

Ferencia Sencilla
5
Cuando cada clase est restringida a tener una sola
superclase inmediata .m-imo/

Ferencia J8ltiple
5
Cuando cada clase puede tener ms de una
superclase inmediata
Oscar !onilla 1G
#ni$ersidad %alileo
Verarqua de Ferencia

+a relacin subclaseTsuperclase
5
'einida por los De-tendsE
5
Puede ser modelada mediante un grao acclico
dirigido .')%/
Oscar Bonilla 48 Universidad Galileo
Verarqua de Ferencia

Car es un hijo de $ehicle .subclase inmediata/

Uehicle es un padre de S#U .superclase inmediata/

1Rd es un descendiente de $ehicle .subclase/

Uehicle es un ancestro de HWdoor .superclase/


vehicle
SUV car motorbie
!wd "wd !#door "#door $#door
Oscar !onilla 1=
#ni$ersidad %alileo
Reglas de Control de )cceso

Conjunto de tipos de control de acceso usados


por un lenguaje OO gen,rico .e<d< 6spresso/
5
Uisibilidad en scope
5
)cceso a datos
5
)cceso a m,todos p8blicos
5
)cceso a m,todos pri$ados

Juchos lenguajes OO tienen controles de


acceso ms complicados
Oscar !onilla 3?
#ni$ersidad %alileo
Uisibilidad en Scope

+as $ariables A los campos de una clase pueden ser


declarados en cualquier parte en el programa en la que
se permita una declaracin A la deinicin de la clase
est, $isible

Si un campo en una subclase A superclase usa el


mismo nombre
5
+a resolucin de nombres se hace usando reglas de scope
5
Se trata el scope de la subclase dentro del scope de la
superclase
Oscar !onilla 3>
#ni$ersidad %alileo
)cceso a 'atos

+os campos de datos de una clase slo pueden


ser accesados por los m,todos deinidos en esa
clase

#na $ariacin ms permisi$a:


5
Todos los m,todos de las subclases pueden accesar
los campos en la superclase
Oscar !onilla 3H
#ni$ersidad %alileo
)cceso a m,todos p8blicos

Todos los m,todos p8blicos de una clase


pueden ser in$ocados por cualquier m,todo que
pueda declarar una $ariable o un campo del tipo
de la clase
Oscar !onilla 3"
#ni$ersidad %alileo
)cceso a m,todos pri$ados

+os m,todos pri$ados de una clase slo pueden


ser in$ocados por:
5
+os m,todos de esa clase
5
+os m,todos de cualquier clase que sea
descendiente de la clase
Oscar Bonilla 54 Universidad Galileo
6jemplo: control de acceso de C22

#na clase puede ser friend de otra clase

+os m,todos A campos pueden ser


5
pri$ate: $isibles a unciones miembro A friends
5
protected: $isibles a unciones miembro; friends, A
clases deri$adas .A sus riends/
5
public: pueden ser usados por cualquier uncin
Oscar !onilla 33
#ni$ersidad %alileo
Con$ersin automtica de tipos

#na e-presin de una clase es coercionada a una


clase ancestro cuando se requiera
5
Pero no al re$,s
5
+lamado DupWcastingE
5
Siempre legal porque la subclase contiene todos los
campos de la superclase

'oRnWcasting
5
6sto es ms permisi$o
5
Con$ersin e-plcita de una clase ancestro a una clase
descendiente
5
Slo tiene sentido si el objeto ue creado inicialmente
como en la subclase; pero despu,s con$ertido a la
superclase
5
Co puede chequearse en tiempo de compilacin
Oscar !onilla 37
#ni$ersidad %alileo
J,todos 6stticos $s< 'inmicos

Consecuencia de upWcasting
5
Implementacin del m,todo declarado en una superclase
puede ser desconocida al momento de compilar
5
6l m,todo es sobreescrito en una subclase
5
Uariaciones de +enguajes

Todos los m,todos no declarados estticos pueden ser upWcasted

Slo los m,todos declarados $irtuales pueden ser upWcasted


5
)nlisis e implementacin de m,todos dinmicos

Co se puede eectuar ning8n chequeo semntico

Cecesitamos soporte en tiempo de corrida .runtime/ al generar el


cdigo
Oscar !onilla 3G
#ni$ersidad %alileo
Ferencia $s< )gregacin

#na clase TH es una agregacin de una clase T>


si TH contiene uno o ms campos de tipo T>
5
) dierencia de la herencia; TH no puede accesar
campos o m,todos pri$ados en T>

&Cundo heredear A cundo agregar(


5
heredar: TH es un T>
5
agregar: TH tiene un T>
Oscar Bonilla 58 Universidad Galileo
6jemplo: Ferencia $s< )gregacin

S#U es un $ehculo

S#U tiene un motor


class ve-ic0lo {
"
}
class ()* e+ten,s ve-ic0lo {
1otor /o2er./lant;
"
}
Oscar !onilla 3=
#ni$ersidad %alileo
Ferencia m8ltiple

Permite que una clase sea una e-tensin de


m8ltiples clases
5
+le$a a semnticas ms complicadas para subtipos
Oscar Bonilla 60 Universidad Galileo
6jemplo de Ferencia J8ltiple
class ve-icle {
"
}
class 30//ie.to3s {
"
}
class ()* e+ten,s ve-icle, 30//ie.to3s {
"
}
Oscar Bonilla 61 Universidad Galileo
Verarqua de Ferencia J8ltiple

Verarqua de Ferencia J8ltiple es un ')%

Pregunta: &S tanto Auppie@toAs como $ehicle tienen un m,todo


price./ cundo S#U in$oque a price; qu, m,todo se in$oca(
vehicle
SUV car motorbie
!wd "wd !#door "#door $#door
to%s
%uppie_to% teen_to%
Oscar Bonilla 62 Universidad Galileo
Verarqua de Ferencia J8ltiple

6s toda$a ms complicado cundo haA un ancestro com8n

Pregunta: &Cuntas instancias de bti $an a ser incluidas en


la clase S#U(
vehicle
SUV car motorbie
!wd "wd !#door "#door $#door
to%s
%uppie_to% teen_to%
bi&_ticet_items
Oscar Bonilla 63 Universidad Galileo
Resumen

Introduccin

Tablas de Smbolos

Chequeo Semntico

Chequeo de Tipos

Semntica de un Programa Orientado a Objetos

Tipos Polimricos
Oscar !onilla 71
#ni$ersidad %alileo
&4u, es un tipo polimrico(

Procedimientos ordinarios permiten que el


cuerpo sea ejecutado con argumentos de tipo
ijo

Cada llamada a un procedimiento polimrico


ejecuta el cuerpo con el tipo de los argumentos

!eneicios del polimorismo


5
Reuso de Cdigo
5
6jemplo

6l mismo procedimiento puede aplicarse a una lista de


enteros o a una lista de strings
Oscar !onilla 73
#ni$ersidad %alileo
Polimorismo Param,trico

+os procedimientos tienen tipos param,tri*ados

Instanciamos el procedimiento con un tipo


determinado de datos

Templates en C22

6jemplo:
te1/late4class 56 class lin7e,.list.ele1 {
5 ele1; lin7e,.list.ele1 8 ne+t;
999
}
line,.list.ele14int6 integer.list;
line,.list.ele14foo6 foo.list;
Oscar Bonilla 66 Universidad Galileo
+ecturas

Tigre
5
7<>; Captulos G A 9

!allena
5
1<>; 1<H; 1<"; 1<1; 1<3

'ragn
5
Captulo 9

You might also like