Documentos de Académico
Documentos de Profesional
Documentos de Cultura
11 Analisis Semantico
11 Analisis Semantico
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
Oscar Bonilla
Universidad Galileo
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
Oscar Bonilla
Universidad Galileo
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
Oscar Bonilla
Universidad Galileo
Oscar Bonilla
Universidad Galileo
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.
Oscar Bonilla
Universidad Galileo
Scope
Un nombre puede tener significados distintos en lugares distintos
Tipos, variables, etc tiene scope (mbito)
Oscar Bonilla
Universidad Galileo
Oscar Bonilla
10
Universidad Galileo
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
Oscar Bonilla
11
Universidad Galileo
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
Oscar Bonilla
13
Universidad Galileo
Qu ms?
Oscar Bonilla
14
Universidad Galileo
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
Oscar Bonilla
15
Universidad Galileo
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
Oscar Bonilla
16
Universidad Galileo
Chequeos Dinmicos
Chequeos de lmites de arreglos Chequeo de dereferencia del Null Pointer
Oscar Bonilla
17
Universidad Galileo
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
Oscar Bonilla
19
Universidad Galileo
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
Oscar Bonilla
20
Universidad Galileo
type_error
Tipo especial que produce un error
void
Tipo bsico que denota la ausencia de un valor
Oscar Bonilla
21
Universidad Galileo
Oscar Bonilla
22
Universidad Galileo
Oscar Bonilla
23
Universidad Galileo
array(integer, 128)
Oscar Bonilla
24
Universidad Galileo
Ejemplo
int foobar(int a, boolean b, int c)
Oscar Bonilla
25
Universidad Galileo
integer integer
Lenguajes Funcionales
Funciones que toman funciones y retornan funciones Ejemplo
(integer integer) integer (integer integer)
Oscar Bonilla
26
Universidad Galileo
Programa Ejemplo
var: integer; var + 1023
Oscar Bonilla
27
Universidad Galileo
Oscar Bonilla
28
Universidad Galileo
Oscar Bonilla
29
Universidad Galileo
E num
E id
{ E.type = integer; }
{ 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]) { }
Dos entradas de tipo distintas en dos tablas de smbolos distintas Pero deberan ser iguales
Oscar Bonilla
33
Universidad Galileo
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)
Oscar Bonilla
34
Universidad Galileo
Coercin de Tipos
Conversin implcita de un tipo a otro tipo Ejemplo
int A; float B; B = B + A
Oscar Bonilla
35
Universidad Galileo
Widening conversions
Conversiones sin prdida de informacin Ejemplos:
integers a floats shorts a longs
Oscar Bonilla
36
Universidad Galileo
Narrowing conversions
Conversiones que pueden perder informacin Ejemplos:
integers a chars longs a shorts
Raro en lenguajes
Oscar Bonilla
37
Universidad Galileo
Type casting
Conversin explcita de un tipo a otro Tanto widening como narrowing Ejemplo
int A; float B; A = A + (int)B
Oscar Bonilla
38
Universidad Galileo
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
Oscar Bonilla
40
Universidad Galileo
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
42
Universidad Galileo
Clase Ejemplo
class vehicle { int num_wheels; void print_num_wheels( ) }
campo
{ }
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
Oscar Bonilla
44
Universidad Galileo
Ejemplo de Herencia
class SUV extends vehicle { int rollover_speed; int get_rollover_speed( ) { } void print_rollover_speed( ) { } }
La clase SUV es una subclase de la clase vehicle La clase vehicle es una superclase de la clase SUV Una instancia (objeto) de la clase SUV contiene
Todos los campos de la clase vehicle Todos los campos de la clase SUV
Los mtodos tanto en SUV como en vehicle son visibles a la clase SUV
Oscar Bonilla
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
Oscar Bonilla
46
Universidad Galileo
Jerarqua de Herencia
La relacin subclase/superclase
Definida por los extends Puede ser modelada mediante un grafo acclico dirigido (DAG)
Oscar Bonilla
47
Universidad Galileo
Jerarqua de Herencia
vehicle SUV car motorbike
4wd
2wd
2-door
4-door
5-door
Car es un hijo de vehicle (subclase inmediata) Vehicle es un padre de SUV (superclase inmediata) 4wd es un descendiente de vehicle (subclase) Vehicle es un ancestro de 2-door (superclase)
Oscar Bonilla
48
Universidad Galileo
49
Universidad Galileo
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
Oscar Bonilla
50
Universidad Galileo
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
51
Universidad Galileo
Oscar Bonilla
52
Universidad Galileo
Oscar Bonilla
53
Universidad Galileo
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
Oscar Bonilla
55
Universidad Galileo
Oscar Bonilla
56
Universidad Galileo
Oscar Bonilla
57
Universidad Galileo
58
Universidad Galileo
Herencia mltiple
Permite que una clase sea una extensin de mltiples clases
Lleva a semnticas ms complicadas para subtipos
Oscar Bonilla
59
Universidad Galileo
60
Universidad Galileo
yuppie_toy
vehicle
teen_toy
SUV
4wd 2wd 2-door
car
4-door 5-door
motorbike
61
Universidad Galileo
yuppie_toy
vehicle
teen_toy
SUV
4wd 2wd 2-door
car
4-door 5-door
motorbike
Es todava ms complicado cundo hay un ancestro comn Pregunta: Cuntas instancias de bti van a ser incluidas en la clase SUV?
Oscar Bonilla
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
Oscar Bonilla
64
Universidad Galileo
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;
Oscar Bonilla
65
Universidad Galileo
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