Sistemas de Tipos en Lenguajes de Programación: Verificación y Conversión

Clasificado en Informática

Escrito el en español con un tamaño de 4,25 KB

Tipo: Se podría definir como un conjunto de términos de un lenguaje, que poseen una serie de características en común que les permite interactuar entre sí o ser objeto de transformaciones, solo aplicables a ellos por el hecho de poseer esas características.

Sistema de tipos: Consiste en la teoría base que permite asociar a cada término de un lenguaje declarativo un tipo.

Constructores de Tipo

Estructuras, uniones, objetos

• Apuntadores: referencias a tipos

• Funciones a=suma();

Cada analizador semántico implementa un sistema de tipos

• Comprobación dinámica y estática

• Estática: compilación

• Dinámica: Ejecución

Verificación de Tipos en Expresiones

• La verificación de los tipos de datos se hace asignando el valor de tipo de cada una de los componentes léxicos.

• Estos valores se comparan para verificar que los tipos de datos coincidan y sean congruentes; de lo contrario, no se pueden realizar los cálculos.

Conversión de Tipos

• Hay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar ese valor en una variable de un tipo diferente.

• En algunos tipos es posible almacenar simplemente el valor sin una conversión de tipos; lo que se denomina conversión automática.

Esto sólo es posible en algún lenguaje de programación, si el compilador reconoce que la variable destino tiene la suficiente precisión para contener el valor origen.

• En Java se puede almacenar un valor byte en una variable int, dado que este tipo de datos es de mayor precisión que el primero.

• A esto se le llama ensanchamiento o promoción, dado que el tipo más pequeño se ensancha o promociona al tipo compatible más grande. Si por el contrario, se desea asignar un valor de variable int a una variable byte se necesita realizar una conversión de tipos explícita.

• En algunos casos se puede realizar la conversión pero se pueden perder datos, como por ejemplo al pasar un valor flotante a un entero.

A esto se le llama estrechamiento, dado que se estrecha explícitamente el valor para que quepa en el destino.

• La conversión de un tipo se realiza poniendo delante un nombre de tipo entre paréntesis, por ejemplo, (tipo) valor.

Comprobación Estática y Dinámica

• Existen dos tipos de comprobación: estática y dinámica.

• La comprobación ayuda a evitar la mayoría de los errores de programación. Ejemplos:

• Comprobación de tipos: Para saber si el operador aplicado a los operadores es correcto.

• Comprobación de flujo de control: Se debe verificar que las instrucciones que cambian el flujo de un programa sean válidas. Ejemplo: break, goto.

• Comprobación de unicidad: definir un objeto una sola vez.

• Comprobaciones relacionadas con nombres: El mismo nombre debe aparecer dos veces. Variables que se declaran pero no utilizan.

• La comprobación de tipos es la más complicada. Las demás comprobaciones son rutinarias.

• El operador % ocupa que los dos operandos sean enteros.

• + es una función suma(a,b) que está sobrecargada para distintos tipos de datos.

• Siempre se diseñan reglas de tipos como los valores numéricos se convierten al de mayor jerarquía o el tipo de datos punteros sólo apunta al tipo de datos declarado.

• Algunos lenguajes revisan el tamaño de los arreglos (Java) de manera estática, otros lo hacen de manera dinámica (en tiempo de ejecución).

• Diferenciar el uso de +, * enteros que con punteros (aritmética de punteros).

• Al conjunto de reglas que se definen para la comprobación de los tipos de datos se denomina sistema de tipos.

• La mayoría de veces la recuperación de errores se suele omitir ya que el programa no finaliza pero tal vez no obtenga los valores deseados.

• Generalmente en la etapa de análisis sintáctico se suelen agregar los tipos a la tabla de símbolos.

• Se revisa el árbol sintáctico para comprobar los tipos asignados.

• Acciones agregadas en un analizador sintáctico descendente (top-down).

Entradas relacionadas: