Anda di halaman 1dari 45

Manuel Valenzuela Saavedra

Katherine F. Castaeda G.
Jueves, 11 de
septiembre de 2014
1 Comprobacin de Tipos en
expresiones
Repertorio
Palabras clave
Introduccin
1.3.1 Funcin general
1.3.2 Tipos de Comprobacin
1.3.3 Tipos
1.3.4 Tipos y Operaciones
1.3.5 Sistema de Tipos
1.3.5.1 Reglas
1.3.6 Traslacin dirigida por la sintaxis
1.3.7 Compilacin de una pasada
1.3.8 Verificacin de Tipos
1.3.9 Expresiones de Tipos1.3.10 Equivalencia de Tipos
1.3.10 Equivalencia de Tipos
1.3.11 Conversin de Tipos
1.3.12 Conversiones explicitas
Ejemplo 1
Ejemplo 2 not false && 1<2*3
Jueves, 11 de
septiembre de 2014
2 Comprobacin de Tipos en
expresiones
Palabras clave
Compilador
Verificacin
Identificadores
Operaciones
Operandos
Constructores
Tipos primitivos



Sintctico
Semntico



Jueves, 11 de
septiembre de 2014
3 Comprobacin de Tipos en
expresiones
Introduccin
Un compilador debe comprobar si el
programa fuente sigue tanto las
convenciones sintcticas como las
semnticas del lenguaje fuente. Esta
comprobacin llamada comprobacin
esttica, garantiza la deteccin y
comunicacin de algunas clases de
errores de programacin.
Inicio
J ueves, 11 de
septiembre de 2014
4
Comprobacin de Tipos en
expresiones
La comprobacin de tipos es una forma de
asegurar que los identificadores
relacionados sean de tipos compatibles.
1.3.1 Funcin general
Inicio
Jueves, 11 de
septiembre de 2014
5 Comprobacin de Tipos en
expresiones
Dos identificadores son compatibles de
acuerdo a lo siguiente:
Cuando forman el lado izq. y el lado der. de
un operador
Cuando forman el lado izq. y el lado der. De
una proposicin de asignacin.
Cuando sean parmetros reales y formales

Inicio
Jueves, 11 de
septiembre de 2014
6 Comprobacin de Tipos en
expresiones
1.3.2 Tipos de Comprobacin
Las comprobaciones de consistencia que
se efectan antes de la ejecucin del
programa fuente, se denominan
comprobaciones estticas.
Las comprobaciones que se realizan
durante la ejecucin del programa objeto
se denominan comprobaciones
dinmicas.
Inicio
Jueves, 11 de
septiembre de 2014
7 Comprobacin de Tipos en
expresiones
La revisin de la sintaxis de un programa
fuente es un ejemplo de comprobacin
esttica, mientras que la comprobacin de
tipos, es un ejemplo de comprobacin que
con frecuencia puede efectuarse en forma
esttica y que en ocasiones debe
realizarse dinmicamente.

Inicio
Jueves, 11 de
septiembre de 2014
8 Comprobacin de Tipos en
expresiones
Comprobacin de flujo de control: Se debe
verificar que las instrucciones que cambia el
flujo de un programa sean vlidos. Ejemplo:
break, goto.
Comprobacin de unicidad: definir un objeto
una sola vez.
Comprobacin relacionadas con nombres: El
mismo nombre debe aparecer dos veces.
Variables que se declaran pero no utilizan.

Inicio
Jueves, 11 de
septiembre de 2014
9 Comprobacin de Tipos en
expresiones
1.3.3 Tipos
Qu es un tipo?
La nocin vara de lenguaje a lenguaje.
Consenso
Un conjunto de valores
Un conjunto de operadores sobre los valores
Las clases son una instanciacin moderna
de la nocin de tipo

Inicio
Jueves, 11 de
septiembre de 2014
10 Comprobacin de Tipos en
expresiones
1.3.4 Tipos y Operaciones
Ciertas Operaciones son legales para
cada tipo:
No tiene sentido sumar un apuntador a
funcin y un entero en C.
Tiene sentido sumar dos enteros.
Pero ambos tienen la misma implementacin
en lenguaje ensamblador.

Inicio
Jueves, 11 de
septiembre de 2014
11 Comprobacin de Tipos en
expresiones
1.3.5 Sistema de Tipos
Un sistema de tipos de un lenguaje
especifica las operaciones que son vlidas
para cada tipo.

Inicio
Jueves, 11 de
septiembre de 2014
12 Comprobacin de Tipos en
expresiones
La meta de la verificacin de tipos es
asegurar que las operaciones se utilizan
con los tipos correctos:
Hace cumplir la interpretacin de los valores.
Algunas veces puede realizar conversiones
automticas cuando el lenguaje permite
modos mezclados y promocin de tipos.

Inicio
Jueves, 11 de
septiembre de 2014
13 Comprobacin de Tipos en
expresiones

El sistema de tipos provee una
formalizacin concisa de las reglas de
verificacin semntica.

Inicio
Jueves, 11 de
septiembre de 2014
14 Comprobacin de Tipos en
expresiones
1.3.5.1 Reglas
De equivalencia de tipos:
cundo los tipos de dos objetos son
iguales
De compatibilidad de tipos:
cundo puede usarse un valor en un
contexto
De inferencia de tipos:
determinar el tipo de una expresin
con base en el tipo de sus elementos
Inicio
Jueves, 11 de
septiembre de 2014
15 Comprobacin de Tipos en
expresiones
La complejidad semntica del lenguaje
depende de la variedad de tipos primitivos y
de constructores.

La rigidez semntica depende de la
flexibilidad en la aplicacin de las reglas de
utilizacin y conversin de tipos.
Inicio
Jueves, 11 de
septiembre de 2014
16 Comprobacin de Tipos en
expresiones
1.3.6 Traslacin dirigida por la
sintaxis
La mayora de los compiladores son de
mltiples pasadas.
Recorre el AST (rbol de anlisis
sintctico) para el anlisis semntico,
verificacin de tipos.
Recorre este otra vez para optimizacin.
y generacin de cdigo
..etc.

Inicio
Jueves, 11 de
septiembre de 2014
17 Comprobacin de Tipos en
expresiones
1.3.7 Compilacin de una
pasada

Bajo ciertas circunstancias, es posible
construir un compilador completo de una
sola pasada.

Inicio
Jueves, 11 de
septiembre de 2014
18 Comprobacin de Tipos en
expresiones

Es posible con ciertas condiciones del
lenguaje
Particularmente cuando se declara antes de
que se use.

Inicio
Jueves, 11 de
septiembre de 2014
19 Comprobacin de Tipos en
expresiones
Esto requiere que la traslacin se realice
durante un recorrido del rbol en
profundidad.

La forma en que el analizador sintctico se
mueve a travs del rbol


Inicio
Jueves, 11 de
septiembre de 2014
20 Comprobacin de Tipos en
expresiones
1.3.8 Verificacin de Tipos
1. Existen aspectos a considerar en la
verificacin de tipos de un compilador:
Procesar las declaraciones y mantener la
tabla de smbolos.
Almacenar el tipo de cada identificador en la tabla
de smbolos
Inicio
Jueves, 11 de
septiembre de 2014
21 Comprobacin de Tipos en
expresiones
2. Realizar la verificacin de tipos y hacer
cumplir las reglas semnticas en
expresiones y otros elementos del
lenguaje (e.g. Lista de argumentos, etc.)
Inicio
Jueves, 11 de
septiembre de 2014
22 Comprobacin de Tipos en
expresiones
3. Buscar el tipo de identificadores usados.
Inicio
Jueves, 11 de
septiembre de 2014
23 Comprobacin de Tipos en
expresiones
4. Inferir los tipos de constantes
Inicio
Jueves, 11 de
septiembre de 2014
24 Comprobacin de Tipos en
expresiones
1.3.9 Expresiones de Tipos
Una expresin de tipo es, o bien un tipo
bsico o se forma aplicando un operador
llamado constructor de tipos a otras
expresiones de tipo.
Inicio
Jueves, 11 de
septiembre de 2014
25 Comprobacin de Tipos en
expresiones
Un tipo bsico es una expresin de tipo.
Entre los tipos bsicos se encuentran:
Bolean
Char
Integer
Real
Un tipo bsico especial:
La funcin error_tipo(),
Sealara un error durante la
comprobacin de tipos.
Inicio
Jueves, 11 de
septiembre de 2014
26 Comprobacin de Tipos en
expresiones
Como se puede dar nombre a las
expresiones de tipos, el nombre de un tipo
es una expresin de tipo.
Inicio
Jueves, 11 de
septiembre de 2014
27 Comprobacin de Tipos en
expresiones
Un constructor de tipos aplicado a
expresiones de tipos es una expresin de
tipo. Los constructores incluyen:
Matrices
Productos
Registros
Apuntadores
Funciones

Inicio
Jueves, 11 de
septiembre de 2014
28 Comprobacin de Tipos en
expresiones
Las expresiones de tipo pueden contener
variables cuyos valores son expresiones
de tipos.
Una manera conveniente de representar
expresiones de tipo es mediante un grafo
Inicio
Jueves, 11 de
septiembre de 2014
29 Comprobacin de Tipos en
expresiones
1.3.10 Equivalencia de Tipos
Aplica cuando el programador puede
definir tipos.

Permite definir si dos tipos son iguales.
Inicio
Jueves, 11 de
septiembre de 2014
30 Comprobacin de Tipos en
expresiones
Equivalencia estructural: se basa en
estudiar el contenido de las definiciones
de tipos.

Los tipos tienen los mismos componentes?
Los componentes estn en el mismo orden?
Utilizada en Modula-3, c y ML.

Inicio
Jueves, 11 de
septiembre de 2014
31 Comprobacin de Tipos en
expresiones
Cules diferencias son importantes y
cuales no?
Los siguientes tipos, son iguales?

Inicio
Jueves, 11 de
septiembre de 2014
32 Comprobacin de Tipos en
expresiones
Y este?

Inicio
Jueves, 11 de
septiembre de 2014
33 Comprobacin de Tipos en
expresiones
La mayora de los lenguajes dice que s,
ML dice que no.
Inicio
Jueves, 11 de
septiembre de 2014
34 Comprobacin de Tipos en
expresiones
Equivalencia por Nombres: se basa en
la aparicin lexicogrfica de las
definiciones de tipos:

Nombres diferentes definen tipos diferentes
Popular en lenguajes modernos ( Java, C#, Ada)
Inicio
Jueves, 11 de
septiembre de 2014
35 Comprobacin de Tipos en
expresiones
Qu sera conveniente para
el programador?
x=y Esto
esta bien??
Inicio
Jueves, 11 de
septiembre de 2014
36 Comprobacin de Tipos en
expresiones
La Equivalencia Estricta por Nombres
(Strict Name Equivalence) ocurre cuando
los tipos alias se consideran diferentes.

La Equivalencia Relajada por Nombres
(Loose Name Equivalence) ocurre cuando
los tipos alias se consideran equivalentes
(Pascal, Modula-2).

Inicio
Jueves, 11 de
septiembre de 2014
37 Comprobacin de Tipos en
expresiones
1.3.11 Conversin de Tipos
En lenguajes con tipos estticos, el contexto
sugiere un tipo.
Si el lenguaje requiere que los tipos (esperados
o provistos) sean exactamente iguales, el
programador puede verse en la necesidad de
especificar una conversin de tipos de manera
explcita....que pueden necesitar cdigo extra a
tiempo de ejecucin.
Inicio
Jueves, 11 de
septiembre de 2014
38 Comprobacin de Tipos en
expresiones
1.3.12 Conversiones explicitas
Primer Caso
Si los tipos son Estructuralmente Equivalentes, pero
el lenguaje usa Equivalencia por Nombrestienen la
misma representacin de bajo nivel y el mismo
conjunto de valores.
As que la conversin no necesita cdigo extra.
Inicio
Jueves, 11 de
septiembre de 2014
39 Comprobacin de Tipos en
expresiones
Segundo caso
Si los tipos tienen conjuntos de valores diferentes,
con interseccin no vaca y con idntica
representacin, entonces si el tipo provisto tiene
valores que el tipo esperado no posee, es necesario
generar cdigo extra para verificar la validez de tipos.
Si la verificacin tiene xito, se usa la representacin
comn.
Si la verificacin falla, se genera un error semntico a
tiempo de ejecucin.

Inicio
Jueves, 11 de
septiembre de 2014
40 Comprobacin de Tipos en
expresiones
Tercer caso

Si los tipos tienen representaciones de bajo
nivel diferentes, pero puede establecerse
alguna correspondencia entre sus
valores...entonces es necesario generar
cdigo para realizar la conversin.
Inicio
Jueves, 11 de
septiembre de 2014
41 Comprobacin de Tipos en
expresiones
Ejemplo 1
Inicio
Jueves, 11 de
septiembre de 2014
42 Comprobacin de Tipos en
expresiones
Ejemplo 2 not false && 1<2*3
Inicio
Jueves, 11 de
septiembre de 2014
43 Comprobacin de Tipos en
expresiones
Conclusiones
La comprobacin de tipos, una de las
funciones mas importantes del compilador
ya que debe informar de un error si se
aplican un operador o un operando
incompatible.
Inicio
Jueves, 11 de
septiembre de 2014
44 Comprobacin de Tipos en
expresiones
Bibliografia
Aho, Sethi, Ullman. Compiladores Principios, tcnicas y
herramientas. Ed. Addison Wesley.
Kenneth C. Louden. Construccin de compiladores Principios y
prctica. Ed. Thomson.
Hopcroft John E., Introduccin a la Teora de Autmatas, Lenguajes
y Computacin, ED. Addison Wesley
Guerra Crespo. Hector. Compiladores. Ed. Tecnolgica Didctica.
Fischer, LeBlanc. Crafting a compiler with C. Ed. Cummings
Publishing Company, Inc.
prezi.com/bucz7h6augqz/comprobacion-de-tipos/
www.escet.urjc.es/.../EquivalenciaSobrecargaPolimorfismo-SinSols-
6pxh...



Jueves, 11 de
septiembre de 2014
Comprobacin de Tipos en
expresiones
45

Anda mungkin juga menyukai