Sunteți pe pagina 1din 5

Presentacin

Nombre:

Emmanuel

Garca

Ramrez

Matricula:

08-E|S6-1-118

Materia:

Compiladores e Intrprete

Tema:

Comprobacin de tipos

Aula:
Laboratorio

Profesor:
frantz

Saint

Germain

Sistemas

de tipos

En ciencias de Ia computacin, un sistema de tipos define como un lenguaje de


programacin clasi ca los valoresy las expresiones en tipos, cmo se pueden
manipular estos tipos y cmo interactan. Un tipo indica un conjunto de valores que
tienen el mismo significado genrico o propsito (aunque algunos tipos, como los tipos
de datos abstractos y tipos de datos funcin, tal vez no representen valores en el
programa que se est ejecutando). Los sistemas de tipi cacin varan
significativamente entre lenguajes, siendo quizs las ms importantes variaciones las
que estn en sus implementaciones de Ia sintctica en tiempo de compilacin y Ia
operativa en tiempo de ejecucin.
.Un compilador puede usar el tipo esttico de un valor para optimizar el
almacenamiento que necesita y Ia eleccin de los algoritmos para las operaciones
sobre ese valor. Por ejemplo, en muchos compiladores de C el tipo de dato "flotante"
se representa en 32 bits, de acuerdo con Ia especificacin IEEE para los nmeros de
coma flotante de simple precisin. Entonces, C usa operaciones especficas de coma
flotante sobre estos valores (suma de coma flotante, multiplicacin, etc.).
Especificacin

de un comprobador

de tipos sencillo

En estas especificaciones de un compilador de tipo para un lenguaje simple en el que


se debe declarar el tipo de cada identificador antes que el identificador se utilice. El
comprobador de tipos esquema de traduccin que sintetiza el tipo de cada expresin
a partir de los tipos de sus sub-expresiones. El comprobador de tipo puede manejar
matrices, apuntadores, proposiciones y funciones.
Tipos del lenguaje
Tipos bsicos
Char

Integer
Error_Tipo
Tipos complejos
Array[n] of T es de tipo array (T, 1..n)
"T es de tipo pointer (T)
Equivalencia

de expresiones

de tipos

Una caracterstica importante del sistema de tipos de un lenguaje de programacin es


sin duda el conjunto de reglas que permiten decir que dos tipos son iguales. Es sta
una caracterstica que queda en muchos casos sin definir en las especificaciones del
lenguaje, dando por ello lugar a diferentes interpretaciones por parte de los
realizadores del compilador. Esto se traduce en Ia prctica en diferencias que afectan
a Ia compatibilidad entre diferentes dialectos de un mismo lenguaje.
Existen principalmente

tres modalidades

de equivalencia

entre tipos:

Equivalencia estructural: Dos tipos son estructuralmente equivalentes si y slo si son


el mismo tipo bsico, o estn formados por Ia aplicacin de un mismo constructor a
tipos estructuralmente equivalentes.
Ejemplo: Supongamos que en un programa PASCAL tenemos las siguientes
definiciones:

type
tipovector=array[0..9]ofinteger;
tipomatriz = array [0..9] of array [0..9] of integer;

var
vector:array[0..9]ofinteger;
arreglo : array [0..9,0..9] of integer;
matriz

: tipomatriz;

vecvec1

: array [0..9] of tipovector;

vecvec2

: array [0..9] of tipovector;

Los tipos asociados a las variables arreglo, matriz, vecvec1 y vecvec2 son
estructuralmente

equivalentes, ya que, su expresin de tipos es en todos los casos:

array(0-9,array(0-9,int))
Sin embargo, Ia variable vector, no es estructuralmente
porque Ia expresin de tipos que le corresponde es:

equivalente a las anteriores,


array(0-9,int)

Equivalencia nominal: Se dice que dos tipos son nominalmente equivalentes cuando
son estructuralmente equivalentes considerando como tipos bsicos e indivisibles a los
identificadores de tipos. Es decir, Ia equivalencia nominal funciona igual que Ia
equivalencia estructural siempre y cuando no existan tipos definidos por el
programador, o bien, si interpretamos que en este caso los tipos del usuario pasan a
formar parte del repertorio de tipos bsicos.
Ejemplo : En el ejemplo anterior los tipos correspondientes a las variables vecvec1 y
vecvec2 son nominalmente equivalentes, porque en ambos casos podemos considerar
Ia expresin de tipos:
array(0-9,tipovector)
Sin embargo, Ia expresin de tipos de Ia variable arreglo es:
array(0-9,array(0-9,int))
equivalente a las anteriores.

y, por tanto, no puede considerarse nominalmente

int mat_chica[10], mat_grande[40];


void ordena (mat,n)
int mat[],n;

} ordena (mat_chica,10);
ordena (mat_grande,40);
conversiones

de tipos

Considrense expresiones como x + i donde x es de tipo real e i es de tipo entero.


Como par representacin de enteros y reales es distinta dentro de un computador, y se
utilizan instrucciones de mquina distintas para las operaciones sobre enteros y
reales, puede que el compilador tenga que convertir primero uno de los operando de +
para garantizar que ambos operando sean del mismo tipo cuando tenga lugar la suma.
La de nicin del lenguaje especifica las conversiones necesarias. Cuando un entero
se asigna a un real, o viceversa, la conversin es al tipo del lado izquierdo de la
asignacin. En expresiones, la transformacin ms comn es la de convertir el entero
en un nmero real y despus realizar una operacin real con el par de operando reales
obtenidos. Se puede utilizar el comprobador de tipos en un compilador para insertar
estas operaciones de conversin en la representacin intermedia del programa fuente.
La conversin de tipos surge con frecuencia en otro contexto. Se dice que un smbolo
que tienen distintos signi cados dependiendo de su contexto est sobrecargado. Las
conversiones de tipo a menudo acompaan a la sobrecarga.
Sobrecargando

funciones

y operadores.

La sobrecarga es uno de los mecanismos ms utilizados del C++ pues reporta una
gran cantidad de beneficios a la hora de disear las prestaciones de nuestras
funciones de miembro. Existen dos tipos fundamentales de sobrecarga: la sobrecarga
de funciones y la sobrecarga de operadores.
sobrecarga

de funciones

La sobrecarga de funciones consiste, bsicamente, en crear funciones con el mismo


nombre dentro de una clase pero con distinto tipo de argumentos de tal forma que, al
llamar a la funcin el compilador se encargar de escoger la adecuada mediante la
comparacin de la lista de argumentos pasados en la invocacin. Un sencillo ejemplo
sera pensar en dos funciones llamadas ImprimirMensaje Podemos definirlas as:
void ImprimirMensaje(void);
void ImprimirMensaje

(char *texto);

Como podis observar, se llaman igual pero tienen argumentos distintos. Mientras
que Ia primera no est preparada para recibir ningn tipo de datos, Ia segunda s
que Io est y esperar recibir una cadena de caracteres. Si ahora implementamos
las
funciones

de esta

forma:

void NombreCIase::ImprimirMensaje(void)
{
cout << "\n Esta es Ia funcin sin argumentos";

void NombreCIase::ImprimeMensaje(char

*texto)

{
cout << "\ n Esta es Ia funcin con argumentos
y ha recibido el mensaje " <<
texto;
sobrecarga

de operadores

AI igual que C++, C# permite sobrecargar operadores para utilizarlos en clases


propias. Esto hace posible que utilizar un tipo de datos definido por el usuario
parezca tan natural y lgico como utilizar un tipo de datos fundamental. Por ejemplo,
podra crear un nuevo tipo de datos denominado CompIexNumber para representar
un nmero complejo y proporcionar mtodos que realicen operaciones matemticas
en esos nmeros mediante operadores aritmticos estndar, como utilizar el
operador + para sumar dos nmeros complejos.Para sobrecargar un operador, se
escribe una
funcin que tenga el nombre del operador seguido del smbolo del operador que se
va a sobrecargar. Por ejemplo, a continuacin se muestra cmo sobrecargar el
operador
+:

C#

publicstaticCompIexNumberoper
ator+
(CompIexNua,CompIexNumb)
Todas las sobrecargas de operador son mtodos estticos de Ia clase. Tambin
tenga en cuenta que si sobrecarga el operador de igualdad (==), tambin debe
sobrecargar el operador de desigualdad (!=). Los operadores < y >, y los operadores

S-ar putea să vă placă și