Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
D. G. t. n. m.
INSTITUTO TECNOLGICO
DEL ISTMO
MATERIA:
LENGUAJES Y AUTOMATAS II
TEMA:
Anlisis de tipo.
DOCENTE:
Lic. Posada
ALUMNO:
Lpez Bortolotti Jesus Arturo.
Semestre: 7 Grupo: O
NDICE
Introduccin.....3
Anlisis de tipo....4
1.1 Definiciones de tipo...4
1.2 Beneficios de tipo......5
1.3 Sistemas de tipo.....5
1.4 Comprobacin esttica y dinmica de tipos......6
1.5 Declaracin y comprobacin de tipos.......8
1.6 Equivalencia de tipos...10
1.7 Conversiones de tipos...12
1.8 Sobrecarga de funciones y operadores..12
1.9 Funciones polimrficas.13
Conclusin...14
Recomendacin,..15
Bibliografa..16
INTRODUCCIN.
pg. 2
ANLISIS DE TIPO.
pg. 3
pg. 4
Este modo de ver los tipos posee principalmente un carcter interno al compilador,
indicando un modo de representarlos para implementar las distintas fases del procesador
de lenguaje. Como veremos en breve, el punto de vista constructivo de los tipos es
representado por las expresiones de tipo de un compilador.
1.2 BENEFICIOS DEL EMPLEO DE TIPOS.
Incluso antes introducir las distintas definiciones de tipo de un lenguaje de
programacin, ser interesante preguntarnos por qu existen los tipos y qu tiene de
positivo su empleo:
Fiabilidad. La comprobacin esttica de tipos reduce el nmero de errores que un
programa puede generar en tiempo de ejecucin. ste es el beneficio ms obvio ya
que, gracias a la deteccin temprana de los errores, el programador podr reparar
stos de un modo casi inmediato y no cuando se est ejecutando la aplicacin,
pudiendo incluso haber sido implantada.
Abstraccin: Otra ventaja de emplear tipos en los lenguajes de programacin es que
su uso fuerza al programador a dividir el problema en diversos tipos de mdulos, de
un modo disciplinado. Los tipos identifican la interfaz de los mdulos (funciones,
clases, paquetes o componentes) proporcionando una simplificacin de los servicios
que ofrece cada mdulo; un tipo de contrato parcial entre los desarrolladores del
mdulo y sus clientes.
El estructurar sistemas complejos en distintos mdulos con interfaces claras hace
que los diseos puedan poseer una mayor abstraccin, de modo que las interfaces
puedan ser diseados y debatidos de un modo independiente a su posterior
implementacin.
Legibilidad: Un tipo de una entidad (variable, objeto o funcin) transmite
informacin acerca de lo que se intenta hacer con ella, constituyendo as un modo de
documentacin del cdigo.
Eficiencia: Como hemos comentado en la propiedad anterior, una entidad de un
programa declarada con un tipo especfico indica informacin relativa a lo que se
intenta hacer con ella. De este modo, al conocer el tipo de las construcciones del
lenguaje, se podr generar cdigo de carcter ms especfico y eficiente que si no
tuvisemos esa informacin. En el caso de no poseer tipos en tiempo de
compilacin, debera descubrirse la ejecucin especfica dinmicamente con la
consecuente prdida de eficiencia.
1.3 SISTEMAS DE TIPOS.
Un sistema de tipos es un conjunto de reglas para asignar expresiones de tipos a las
distintas construcciones de un lenguaje. Para ello, un sistema de tipos deber definir sus
expresiones de tipos, asignar stas a las distintas construcciones sintcticas del lenguaje,
y comprobar que las reglas semnticas de los tipos del lenguaje se cumplan ante
cualquier programa de entrada. Si no fuere as, generar un error de tipo (type clash),
continuando el procesamiento del programa o finalizando, en funcin del tipo del
mecanismo de manejo de errores que implemente.
pg. 5
EXPRESIONES DE TIPOS.
El tipo de una construccin de un lenguaje se denotar mediante una expresin de
tipo. De manera informal, una expresin de tipo es, o bien un tipo bsico o se forma
aplicando un operador llamado constructor de tipos a otras expresiones de tipos. Los
conjuntos de tipos y constructores bsicos dependen del lenguaje que deba
comprobarse. Cada lenguaje de programacin requerir unas expresiones de tipos
adecuadas a sus caractersticas. A continuacin, a modo de ejemplo, se definen las
expresiones de tipos ms comunes:
Tipos simples:
Real.
Char.
Boolean.
Integer.
Tipos especiales:
Void: Indica que no se puede asociar una expresin de tipo correcta.
Error: Indica que una construccin del lenguaje es correcta, pero no tiene ningn
tipo asociado. til en comprobacin de sentencias.
CONSTRUCTORES DE TIPO.
Permiten formar tipos complejos a partir de otros ms simples. La semntica de cada
lenguaje tiene asociada unos constructores de tipos propios. En general, en los lenguajes
de programacin se definen los siguientes constructores.
Matrices: Si T es una expresin de tipos, entonces array(R, T) es tambin una expresin
de tipos que representa a una matriz de rango R de elementos de tipo T. Ejemplo: Sea
el segmento de cdigo C: Char a [10]
Productos: Sea T1 y T2 expresiones de tipos, T1 x T2 es una expresin de tipos que
representa al producto cartesiano de los tipos T1 y T2. A fin de simplificar
consideraremos que el constructor u operador de tipos x es asociativo por la izquierda.
Registros: Sea un registro formado por los campos u1, u2... uN, siendo cada uno de
ellos de los tipos T1, T2... TN, entonces, la expresin de tipos asociada al conjunto es:
record ( (u1:T1) x (u2:T2) x ... x (uN:TN) )
Punteros: Si T es una expresin de tipos, entonces pointer (T) es una expresin de tipos
que representa a un puntero a una posicin de memoria ocupada por un dato de tipo T.
Funciones: Sean T1, T2... TN, las expresiones de tipos asociadas a los segmentos de
cdigo correspondientes a los argumentos de una funcin, y sea T el tipo devuelto por la
funcin. Entonces, la expresin de tipos asociada a la funcin es: ((T1xT2 x... xTN)
-> T).
1.4 COMPROBACIN ESTTICA Y DINMICA DE TIPOS
Se dice que la comprobacin realizada por un compilador es esttica, mientras que la
pg. 6
RECUPERACIN DE ERRORES.
Como la comprobacin de tipos tiene la capacidad de descubrir errores en los
programas, es importante que un comprobador de tipos haga algo razonable cuando se
descubre un error. Como mnimo, el compilador debe informar de la naturaleza y la
posicin del error. Es mejor que el comprobador de tipos se recupere de los errores, para
que pueda comprobar el resto de la entrada. Como el manejo de errores afecta a las
reglas de comprobacin de tipos, tiene que disearse como parte del sistema de tipos
desde el principio; las reglas tienen que servir para tratar los errores.
Un programa puede tener los siguientes tipos de errores en las distintas etapas:
Lxico: nombre de una incorrecta identificacin.
Sintctico: falta un punto y coma o desequilibrada entre parntesis.
Semntica: incompatible asignacin de valor.
Lgico: cdigo no accesible, bucle infinito.
Hay cuatro errores comunes de las estrategias de recuperacin que se pueden
implementar en el analizador para lidiar con los errores en el cdigo.
Modo de emergencia
Cuando el analizador encuentra un error en la declaracin, se ignora el resto de la
declaracin no procesando entrada de entrada errnea de delimitador, como punto y
coma. Esta es la manera ms sencilla de recuperacin de errores y, adems, impide que
el analizador de los bucles infinitos.
Modo Declaracin
Cuando el analizador encuentra un error, trata de tomar las medidas correctivas
necesarias para que el resto de los insumos de la declaracin que el analizador para
analizar. Por ejemplo, insertar la falta de un punto y coma, coma con una sustitucin
punto y coma, etc. Analizador los diseadores tienen que tener cuidado porque una
correccin inadecuada puede llevar a un bucle infinito.
pg. 7
Producciones Error
Alguno de los errores ms frecuentes se sabe que el compilador los diseadores que
pueden ocurrir en el cdigo. Adems, los diseadores pueden crear gramtica
aumentada que se va a utilizar, puesto que las producciones que generan
construcciones errneas cuando estos se encuentran errores.
Correccin Global
El analizador considera que el programa de la mano como un todo y trata de averiguar
en qu consiste el programa est destinado a hacer e intenta encontrar una coincidencia
ms cercana para que est libre de errores. Cuando una entrada errnea (declaracin) X
se alimenta, se crea un rbol de anlisis sintctico ms cercano algunos libres de error
declaracin Y. Esto puede permitir que el analizador para hacer cambios mnimos en el
cdigo fuente, pero debido a la complejidad (tiempo y espacio) de esta estrategia, no se
ha aplicado en la prctica.
1.5 DECLARACION Y COMPROBACION DE TIPOS.
Veremos un ejemplo sencillo del manejo de declaraciones de tipo y de comprobacin de
tipos en expresiones, funciones y sentencias.
Se usara un lenguaje simplificado:
Char
4 tipos bsicos. Boolean
Integer
Real
3 constructores.
Matrices
Puntero
Funciones (con 1 argumento)
Tipo Tipo
{Tipo0.tipo = pointer (Tipo1.tipo}
Tipo array [num] of Tipo
{Tipo0.tipo =array (1...num.valor,
Tipo1.tipo}
(b) comprobacin de tipos en expresiones.
Exp num int
{Exp.tipo = integer}
Exp num real
{Exp.tipo = real}
Exp literal
{Exp.tipo = char}
Exp id
{Exp.tipo = TDS_obtenerTipo (id.texto)}
Operadores aritmticos y lgicos.
Exp Exp mod Exp
{Exp0.tipo = if (Exp1.tipo=integer) and
(Exp2.tipo=integer)
then integer
else error}
Exp Exp == Exp {Exp0.tipo = if (Exp1.tipo=integer) and
(Exp2.tipo=integer)
then boolean
Else error}
Acceso a matrices y punteros.
Exp Exp [Exp] {Exp0.tipo = if (Exp2.tipo=integer) and
(Exp1.tipo=array(S, T))
then T
else error}
Exp Exp {Exp0.tipo = if (Exp1.tipo=pointer (T))
then T
else error}
(c) Comprobacin de tipos en llamadas a funcin.
Exp id (Exp)
{tipoID = TDS obtenerTipo (id.texto)
Exp0.tipo = if (tipoID=S T) and
(Exp1.tipo=S)
then T
else error}
Con funciones de ms de un argumentos se deberan usar productos.
(d) Comprobacin de tipos en sentencias.
A las sentencias se les asociara el tipo Void si los tipos de las expresiones que contienen
son correctos.
Consideraremos: asignaciones, if simple, bucle while y secuencias.
Sent id:= Exp
{Sent0.tipo = if (Exp.tipo=boolean)
then Sent1.tipo
pg. 9
else error }
Sent while Exp do Sent
{Sent0.tipo = if (Exp.tipo=boolean)
then Sent1.tipo
else error }
Ejemplo:
En el ejemplo anterior, slo cuatro y cinco son nominalmente equivalentes.
Su expresin de tipo es array (0.,9, t vector).
Los dos no son nominalmente equivalente con dos, su expresin de tipo es array(0.,9,
(array(0.,9, integer))
Otro ejemplo:
type
T0 : integer;
T1: record
a, b: integer;
c: T0;
end;
T2: record
x: integer;
y,z: T0;
end;
2. Estructuras arbreas.
Expresiones de tipo representadas en forma de rboles.
hojas tipos bsicos.
nodos internos constructores de tipo.
Mtodo ms general.
Comparacin tipos supone recorrido sobre el rbol.
Ejemplo: (real (char char)) pointer (integer).
Otra posibilidad: Uso de DAG (grafos dirigidos acclicos)
Forma condensada de representar rboles.
Estructuras repetidas se representan implcitamente.
Representacin compacta.
Menos memoria.
Comparacin ms rpida.
Construccin ms compleja.
pg. 12
p es tipo a void
CONCLUSIN.
pg. 14
RECOMENDACIN.
pg. 15
BIBLIOGRAFA.
pg. 16