Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Programacion: Análisis Semántico y Chequeo de Tipos (página 2)




Enviado por Pablo Turmero



Partes: 1, 2, 3

Monografias.com

Expresiones de Tipos: Tipos Básicos
Tipos atómicos definidos por el lenguaje
Ejemplos:
Enteros
Booleanos
floats
caracteres
type_error
Tipo especial que produce un error
void
Tipo básico que denota “la ausencia de un valor”

Monografias.com

Expresiones de Tipo: Nombres
Ya que las expresiones de tipos pueden ser nombradas, un nombre de tipo es una expresión de tipo

Monografias.com

Expresiones de Tipo: Productos
Si T1 y T2 son expresiones de tipo, T1 ? T2 es también una expresión de tipo

Monografias.com

Expresiones de Tipo: Arrays
Si T es una expresión de tipo, un array(T, I) es también una expresión de tipo
I es una constante entera que denota el número de elementos de tipo T
Ejemplo:
int foo[128];
array(integer, 128)

Monografias.com

Expresiones de Tipo: Function Calls
Matemáticamente una función mapea
Elementos de un conjunto (el dominio)
A elementos de otro conjunto (el contradominio)
Ejemplo
int foobar(int a, boolean b, int c)
integer ? boolean ? integer ? integer

Monografias.com

Expresiones de Tipo: Otras
Records
Estructuras y clases
Ejemplo
class { int i; int j;}
integer ? integer
Lenguajes Funcionales
Funciones que toman funciones y retornan funciones
Ejemplo
(integer ? integer) ? integer ? (integer ? integer)

Monografias.com

Un lenguaje simple con tipos
Un lenguaje que tiene una secuencia de declaraciones seguidas de una sola expresión
P ? D; E
D ? D; D | id : T
T ? char | integer | array [ num ] of T
E ? literal | num | id | E + E | E [ E ]
Programa Ejemplo
var: integer;
var + 1023

Monografias.com

Un lenguaje simple con tipos
Un lenguaje que tiene una secuencia de declaraciones seguidas de una sola expresión
P ? D; E
D ? D; D | id : T
T ? char | integer | array [ num ] of T
E ? literal | num | id | E + E | E [ E ]
¿Cuáles son las acciones del parser para este lenguaje?

Monografias.com

Acciones del Parser
P ? D; E
D ? D; D
D ? id : T { addtype(id.entry, T.type); }
T ? char { T.type = char; }
T ? integer { T.type = integer; }
T ? array [ num ] of T1 { T.type = array(T1.type, num.val); }

Monografias.com

Acciones del Parser
E ? literal { E.type = char; }
E ? num { E.type = integer; }
E ? id { E.type = lookup_type(id.name); }

Monografias.com

Acciones del Parser
E ? E1 + E2 { if E1.type == integer and
E2 .type == integer then
E.type = integer
else
E.type = type_error
}
24

Monografias.com

Acciones del Parser
E ? E1 [E2 ] { if E2.type == integer and
E1 .type == array(s, t) then
E.type = s
else
E.type = type_error
}

Monografias.com

Equivalencia de Tipos
¿Cómo 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 símbolos distintas
Pero deberían ser iguales

Monografias.com

Equivalencia Estructural
Si la expresión de tipo de dos tipos tiene la misma construcción, entonces son equivalentes
“Misma Construcción”
Tipos base equivalentes
Mismo conjunto de constructores de tipo son aplicados en el mismo orden (e.d. árbol de tipos equivalente)

Monografias.com

Coerción de Tipos
Conversión implícita de un tipo a otro tipo
Ejemplo
int A;
float B;
B = B + A
Dos tipos de coerción
widening conversions
narrowing conversions

Monografias.com

Widening conversions
Conversiones sin pérdida de información
Ejemplos:
integers a floats
shorts a longs

Monografias.com

Narrowing conversions
Conversiones que pueden perder información
Ejemplos:
integers a chars
longs a shorts
Raro en lenguajes

Monografias.com

Type casting
Conversión explícita de un tipo a otro
Tanto widening como narrowing
Ejemplo
int A;
float B;
A = A + (int)B
Typecasting ilimitado puede ser peligroso

Monografias.com

Pregunta:
¿Podemos asignarle un solo tipo a todas las variables, funciones y operadores?
¿Qué hay de +, cuál es su tipo?

Monografias.com

Overloading
Algunos operadores pueden tener más de un tipo.
Ejemplo
int A, B, C;
float X, Y, Z;
A = A + B
X = X + Y
Complica el sistema de tipos
Ejemplo
A = A + X
¿Cuál es el tipo de + ?

Monografias.com

Clases
Una clase es un tipo de datos abstracto
Contiene
Datos (campos)
Acciones (métodos)
Restricciones de acceso
Cada instancia de una clase va a crear un objeto separado
Con su propia copia de las variables instanciadas (compos)
Comparte las acciones (métodos)

Monografias.com

Clase Ejemplo
class vehicle {
int num_wheels;
void print_num_wheels( ) { … }
}
(Gp:) campo

(Gp:) método

vehicle A;
A.print_num_wheels( )
(Gp:) El Objeto es un parámetro implícito de la llamada del método

Monografias.com

Herencia
Extiende las clases al permitirles relaciones de supertipo/subtipo

Soporta reuso de código incremental
Partes comúnes en un supertipo común
Diferencias individuales en cada subtipo

Monografias.com

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 métodos tanto en SUV como en vehicle son visibles a la clase SUV

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter