Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen
Introduccin
Tablas de Smbolos
Chequeo Semntico
Chequeo de Tipos
Semntica de un Programa Orientado a Objetos
Tipos Polimrficos
Oscar Bonilla
Universidad Galileo
Dnde estamos?
Programa (character stream)
Analizador Lxico (Scanner)
Token Stream
Analizador Sintctico (Parser)
Arbol de Parseo
Dnde estamos?
Programa (character stream)
Analizador Lxico (Scanner)
Token Stream
Analizador Sintctico (Parser)
Arbol de Parseo
Analizador Semntico
Generador de Cdigo Intermedio
Representacin Intermedia +
Tabla de Smbolos
Qu es la semntica de un programa?
Sintxis
Cmo se ve un programa
Representacin textual o estructura
Es posible dar una definicin matemtica precisa
Semntica
Cul es el significado del programa
Es ms difcil dar una definicin matemtica precisa
Resumen
Introduccin
Tablas de Smbolos
Chequeo Semntico
Chequeo de Tipos
Semntica de un Programa Orientado a Objetos
Tipos Polimrficos
Oscar Bonilla
Universidad Galileo
Tabla de Smbolos
Un lugar para guardar toda la informacin
adicional acerca del programa
Representaciones intermedias: expresiones,
statements, control de flujo, etc.
Tabla de Smbolos: Tipos, variables, scope, etc.
Scope
Un nombre puede tener significados distintos
en lugares distintos
Tipos, variables, etc tiene scope (mbito)
make_table(parent_table) symbol_table
scope(id) symbol_table
lookup_variable(id, symbol_table) variable
lookup_type(id, symbol_table) type
get_type(variable) type
add_type(id, symbol_table, type) type
add_variable(id, symbol_table, type) variable
Siguiente Clase
Todo acerca de tablas de smbolos
Scopes y visibilidad
Informacin que se mantiene en la tabla de
smbolos
Implementacin de tablas de smbolos
Resumen
Introduccin
Tablas de Smbolos
Chequeo Semntico
Chequeo de Tipos
Semntica de un Programa Orientado a Objetos
Tipos Polimrficos
Oscar Bonilla
12
Universidad Galileo
Chequeo Semntico
Chequeos estticos vs. Chequeos dinmicos
Chequeos estticos
Chequeos de control de flujo
Chequeos de unicidad
Chequeos de Tipo
Qu ms?
Chequeos de Unicidad
Uso (y mal uso) de identificadores
No se puede representar en una CFG (mismo token)
Ejemplos:
Ningn identificador puede ser usado para dos
definiciones diferentes en el mismo scope
Chequeos de Tipo
Los chequeos semnticos ms extensos
Ejemplos:
Que el nmero de argumentos haga match con el nmero de
parmetros formales y que los tipos correspondientes sean
equivalentes
Si se llama como expresin, debe retornar un tipo
Cada acceso a una variable debe hacer match con la declaracin
(arreglo, estructura, etc.)
Los identificadores en una expresin deben ser evaluables
LHS de una asignacin debe ser asignable
En una expresin los tipos de las variables, tipos de retorno de
mtodos y de operadores deben ser compatibles
Chequeos Dinmicos
Chequeos de lmites de arreglos
Chequeo de dereferencia del Null Pointer
Resumen
Introduccin
Tablas de Smbolos
Chequeo Semntico
Chequeo de Tipos
Semntica de un Programa Orientado a Objetos
Tipos Polimrficos
Oscar Bonilla
18
Universidad Galileo
Sistemas de Tipos
Un sistema de tipos es usado para el chequeo de
tipos
Un sistema de tipos incorpora
Construcciones estticas del lenguaje
Nocin de tipos
Reglas para asignar tipos a construcciones del
lenguaje
Expresiones de Tipos
Un tipo compuesto es denotado por una
expresin de tipo
Una expresin de tipo es
Un tipo bsico
La aplicacin de un constructor de tipo a otras
expresiones de tipo
Enteros
Booleanos
floats
caracteres
type_error
Tipo especial que produce un error
void
Tipo bsico que denota la ausencia de un valor
array(integer, 128)
Ejemplo
int foobar(int a, boolean b, int c)
integer integer
Lenguajes Funcionales
Funciones que toman funciones y retornan
funciones
Ejemplo
(integer integer) integer (integer integer)
Programa Ejemplo
var: integer;
var + 1023
Oscar Bonilla
27
Universidad Galileo
28
Universidad Galileo
Oscar Bonilla
29
Universidad Galileo
{ E.type = char; }
E num
{ E.type = integer; }
E id
{ E.type = lookup_type(id.name); }
Oscar Bonilla
30
Universidad Galileo
24
Oscar Bonilla
31
Universidad Galileo
Oscar Bonilla
32
Universidad Galileo
Equivalencia de Tipos
Cmo sabemos si dos tipos son iguales?
Mismo entrada de tipo
Ejemplo:
int A[128];
foo(A);
foo(int B[128]) { }
Equivalencia Estructural
Si la expresin de tipo de dos tipos tiene la
misma construccin, entonces son equivalentes
Misma Construccin
Tipos base equivalentes
Mismo conjunto de constructores de tipo son
aplicados en el mismo orden (e.d. rbol de tipos
equivalente)
Coercin de Tipos
Conversin implcita de un tipo a otro tipo
Ejemplo
int A;
float B;
B = B + A
Widening conversions
Conversiones sin prdida de informacin
Ejemplos:
integers a floats
shorts a longs
Narrowing conversions
Conversiones que pueden perder informacin
Ejemplos:
integers a chars
longs a shorts
Raro en lenguajes
Type casting
Conversin explcita de un tipo a otro
Tanto widening como narrowing
Ejemplo
int A;
float B;
A = A + (int)B
Pregunta:
Podemos asignarle un solo tipo a todas las
variables, funciones y operadores?
Qu hay de +, cul es su tipo?
Oscar Bonilla
39
Universidad Galileo
Overloading
Algunos operadores pueden tener ms de un tipo.
Ejemplo
int A, B, C;
float X, Y, Z;
A = A + B
X = X + Y
Resumen
Introduccin
Tablas de Smbolos
Chequeo Semntico
Chequeo de Tipos
Semntica de un Programa Orientado a Objetos
Tipos Polimrficos
Oscar Bonilla
41
Universidad Galileo
Clases
Una clase es un tipo de datos abstracto
Contiene
Datos (campos)
Acciones (mtodos)
Restricciones de acceso
Clase Ejemplo
campo
class vehicle {
int num_wheels;
void print_num_wheels( )
}
{ }
mtodo
vehicle A;
A.print_num_wheels(
43
Universidad Galileo
Herencia
Extiende las clases al permitirles relaciones de
supertipo/subtipo
Soporta reuso de cdigo incremental
Partes comnes en un supertipo comn
Diferencias individuales en cada subtipo
Ejemplo de Herencia
class SUV extends vehicle {
int rollover_speed;
int get_rollover_speed( ) { }
void print_rollover_speed( ) { }
}
45
Universidad Galileo
Herencia
Herencia Sencilla
Cuando cada clase est restringida a tener una sola
superclase inmediata (mximo)
Herencia Mltiple
Cuando cada clase puede tener ms de una
superclase inmediata
Jerarqua de Herencia
La relacin subclase/superclase
Definida por los extends
Puede ser modelada mediante un grafo acclico
dirigido (DAG)
Jerarqua de Herencia
vehicle
SUV
4wd
car
2wd
2-door
4-door
motorbike
5-door
Oscar Bonilla
48
Universidad Galileo
Visibilidad en scope
Acceso a datos
Acceso a mtodos pblicos
Acceso a mtodos privados
Visibilidad en Scope
Las variables y los campos de una clase pueden ser
declarados en cualquier parte en el programa en la que
se permita una declaracin y la definicin de la clase
est visible
Si un campo en una subclase y superclase usa el
mismo nombre
La resolucin de nombres se hace usando reglas de scope
Se trata el scope de la subclase dentro del scope de la
superclase
Acceso a Datos
Los campos de datos de una clase slo pueden
ser accesados por los mtodos definidos en esa
clase
Una variacin ms permisiva:
Todos los mtodos de las subclases pueden accesar
los campos en la superclase
Oscar Bonilla
54
Universidad Galileo
Down-casting
Esto es ms permisivo
Conversin explcita de una clase ancestro a una clase
descendiente
Slo tiene sentido si el objeto fue creado inicialmente
como en la subclase, pero despus convertido a la
superclase
No puede chequearse en tiempo de compilacin
}
class SUV extends vehiculo {
motor power_plant;
}
Oscar Bonilla
58
Universidad Galileo
Herencia mltiple
Permite que una clase sea una extensin de
mltiples clases
Lleva a semnticas ms complicadas para subtipos
}
class yuppie_toys {
}
class SUV extends vehicle, yuppie_toys {
}
Oscar Bonilla
60
Universidad Galileo
vehicle
SUV
4wd
teen_toy
car
2wd
2-door
4-door
motorbike
5-door
61
Universidad Galileo
toys
yuppie_toy
vehicle
SUV
4wd
teen_toy
car
2wd
2-door
4-door
motorbike
5-door
62
Universidad Galileo
Resumen
Introduccin
Tablas de Smbolos
Chequeo Semntico
Chequeo de Tipos
Semntica de un Programa Orientado a Objetos
Tipos Polimrficos
Oscar Bonilla
63
Universidad Galileo
Qu es un tipo polimrfico?
Procedimientos ordinarios permiten que el
cuerpo sea ejecutado con argumentos de tipo
fijo
Cada llamada a un procedimiento polimrfico
ejecuta el cuerpo con el tipo de los argumentos
Beneficios del polimorfismo
Reuso de Cdigo
Ejemplo
El mismo procedimiento puede aplicarse a una lista de
enteros o a una lista de strings
Polimorfismo Paramtrico
Los procedimientos tienen tipos paramtrizados
Instanciamos el procedimiento con un tipo
determinado de datos
Templates en C++
Ejemplo:
template<class T> class linked_list_elem {
T elem; linked_list_elem * next;
...
}
lined_list_elem<int> integer_list;
lined_list_elem<foo> foo_list;
Lecturas
Tigre
6.1, Captulos 7 y 8
Ballena
4.1, 4.2, 4.3, 4.4, 4.5
Dragn
Captulo 8
Oscar Bonilla
66
Universidad Galileo