Compiladores: Sesión 20. Análisis semántico, verificación e inferencia de tipos



Documentos relacionados
CLASE # 5 TÉCNICAS DE CAJA BLANCA

Modulo 1 El lenguaje Java

Lección 24: Lenguaje algebraico y sustituciones

Procesadores de lenguaje Tema 5 Comprobación de tipos

Algorítmica y Lenguajes de Programación. Ordenación (i)

Lógica Proposicional IIC2212. IIC2212 Lógica Proposicional 1 / 56

IIC Matemática Discreta

Unidad 9. Implementación. M.C. Martín Olguín

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

SISTEMAS OPERATIVOS AVANZADOS

1.2 Algoritmo. Proceso de solución de un problema. Resolviendo problemas con la computadora. Programación

VECTORES. Módulo, dirección y sentido de un vector fijo En un vector fijo se llama módulo del mismo a la longitud del segmento que lo define.

C. Elaboración de la respuesta a la primera cuestión: Segundo paso. A. Lectura comprensiva de la segunda pregunta:

Proyecto Unico Interpretador de SetCalc

Significado de las f.b.f (fórmulas bien formadas) en términos de objetos, propiedades y relaciones en el mundo

Herencia. 3.- Herencia. Declaración de una clase derivada en Delphi. Jerarquía de clases

Tema 1: Fundamentos de lógica, teoría de conjuntos y estructuras algebraicas: Apéndice

Programación Lineal Continua/ Investigación Operativa. EJERCICIOS DE INVESTIGACIÓN OPERATIVA. Hoja 1

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Guía Corta: Alcance y Asociaciones. 1. Preliminares: Nombres y Asociaciones

Sistemas de ecuaciones lineales

Unidad III El lenguaje de programación C

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

Práctica 7. Problemas de diseño de topologías de red con herramienta Net2Plan

Universidad de Cantabria

Arreglos. // Incluir E/S y Librerías Standard #include <stdlib.h> #include <stdio.h>

Ejercicio Nº 3: Realizar aumentos en una Tabla de Sueldos

5 Ecuaciones lineales y conceptos elementales de funciones

Test ( o Prueba ) de Hipótesis

UNIDAD DE APRENDIZAJE IV

Nivel 1 Este es el nivel de soporte inicial, responsable de las incidencias básicas del cliente. El principal trabajo de un especialista de Nivel 1

JOSE VICENTE CONTRERAS JULIO CALCULO INTEGRAL LA ANTIDERIVADA

MATEMÁTICAS APLICADAS A LAS C.C. SOCIALES

TEMA 3 POLINOMIOS NOMBRE Y APELLIDOS... HOJA 1 - FECHA...

Soporte lógico de computadoras

INCREMENTOS CAPÍTULO CONCEPTO

Preguntas correspondientes al examen de la sesión 1

ACUERDO DE REPOSICIÓN Nº 75 CARRERA DE DISEÑO DE INTERIORES, MENCIONES: EQUIPAMIENTO Y MOBILIARIO Y EN ESPACIOS SUSTENTABLES UNIVERSIDAD DEL PACÍFICO

Juegos. Esquema. Introducción: juegos como búsqueda Decisiones perfectas Decisiones imperfectas Poda α β

Una desigualdad se obtiene al escribir dos expresiones numéricas o algebraicas relacionadas con alguno de los símbolos

Modelos de Software. Ingeniería en Sistemas de Información 2015

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

MODELOS DE RECUPERACION

Matrices Invertibles y Elementos de Álgebra Matricial

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

2ª Jornada empleo y discapacidad Universidad Carlos III de Madrid 1 de marzo de 2007

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 1: Lógica Proposicional

Tema: Sobrecarga de Operadores.

Capítulo 4 PROLOG 4.1 Introducción

Acciones Correctivas y Preventivas. Universidad Autónoma del Estado de México

Programación: QBASIC

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

Oprime click para iniciar

INTRODUCCIÓN A PROLOG

Práctica 1 Definición de un lenguaje de programación básico: milenguaje

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B)

Adquisiciones Cierre del Proyecto Programa PAPV-10. Ing. Osvaldo Martínez. MAP-MSc.

Patrones Creacionales Builder. Patrones Creacionales Abstract Factory. Patrones Creacionales Singleton. Patrones Creacionales Prototype

Cambio en el Sistema de Acreditación Universitaria en Chile

Muchas veces hemos visto un juego de billar y no nos percatamos de los movimientos de las bolas (ver gráfico 8). Gráfico 8

4. Modelo Relacional: Manipulación de los datos.

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

Introducción: Modelos, Escalas y Métricas. Valentin Laime. Calidad de Software

Apuntes de Matemática Discreta 1. Conjuntos y Subconjuntos

Profesorado de Informática Ciencias de la Computación INET- DFPD Matemática I - Matemática Discreta usando el computador Ing. Prof.

Frecuencia de Control de Calidad y Riesgo del Paciente. John Yundt-Pacheco Scientific Fellow, QSD john_yundt-pacheco@bio-rad.com

Análisis de propuestas de evaluación en las aulas de América Latina

UNIDAD 6. Programación no lineal

EXTENSIÓN DE UML PARA APLICACIONES WEB

MLM Matemática Discreta

Diseño Estructurado de Algoritmos

Nombre del polinomio. uno monomio 17 x 5 dos binomio 2x 3 6x tres trinomio x 4 x 2 + 2

Experimento 6 LAS LEYES DE KIRCHHOFF. Objetivos. Teoría. Figura 1 Un circuito con dos lazos y varios elementos

MATEMÁTICAS BÁSICAS UNIVERSIDAD NACIONAL DE COLOMBIA - SEDE MEDELLÍN CLASES # 13 y #14

LÓGICA JURÍDICA. Idea preliminar Cap. I. Nicolás Mejía Gómez -Universidad Libre Facultad de derecho

Un Apunte de Funciones "Introducción al Cálculo Dif. e Int."

GUÍA DE EJERCICIOS UNIDAD II

Para tener acceso al planificador académico a través de Internet debe cumplir con lo siguiente:

Bases de Datos XPath - XQuery 1. XML: XPath - XQuery. Jorge Pérez Rojas Universidad de Talca, II Semestre 2006

Sistemas Operativos. Clase 14: protección y seguridad.

Mineria de Grafos en Redes Sociales usando MapReduce

Base de datos relacional

Unidad III: Programación no lineal

Semántica Denotacional

1. El vocabulario de un programa PROLOG

Capítulo 6. Asociaciones y Declaraciones.

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Evaluación Adaptativa de Inglés en el Sistema Educativo uruguayo, Resumen Ejecutivo

x : N Q 1 x(1) = x 1 2 x(2) = x 2 3 x(3) = x 3

Módulo II - Word. Eliminar caracteres Selección de texto Selección de una palabra Selección de varias palabras...

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx

Figura 4.1 Clasificación de los lenguajes de bases de datos

Qué son los monomios?

Proceso de Gestión de la Información Sectorial. Manual de Usuario - Herramienta de cargue de Archivos - SIUST. Elaborado por:

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

La transformada de Laplace

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V.

CAPÍTULO 10 Aplicaciones de la Derivada a Funciones Económicas

Transcripción:

Compiladores: Sesión 20. Análisis semántico, verificación e inferencia de tipos Prof. Gloria Inés Alvarez V. Departamento de Ciencias e Ingeniería de la Computación Pontificia Universidad Javeriana Cali 3 de abril de 2008

Funciones Polimórficas Una función polimórfica es aquella que ejecuta las mismas instrucciones sobre argumentos de diferentes tipos. La existencia de polimorfismo debe ser tenida en cuenta por un sistema de verificación de tipos, ello requiere extender las expresiones de tipo adicionando variables de tipo. La existencia de variables de tipo hace más complejo el establecer la equivalencia de dos expresiones de tipo.

Variables de Tipo Permiten referirse a un tipo desconocido dentro de una expresión de tipo, se denotan con letras griegas. Se usan para: Revisar el uso consistente de identificadores en lenguajes que no requieren que ellos sean declarados previamente. Asignar tipo a expresiones relacionadas con funciones polimórficas.

Inferencia de Tipos Definición Es el problema de determinar el tipo de una construcción del lenguaje a partir de la forma en que es usado. Las técnicas para hacer inferencia y verificación son similares, en ambos casos hay que tratar con variables de tipo.

Reglas de Tipo para Funciones Polimórficas 1 Diferentes ocurrencias del mismo nombre de función en la misma expresión de tipo, pueden tener argumentos de diferente tipo. 2 Al existir variables de tipo es necesario unificar las expresiones relacionadas. La unificación determina si dos expresiones de tipo s y t son estructuralmente equivalentes reemplazando las variables de tipo por expresiones de tipo. Ejemplo: pointer(α) = pointer(pointer(integer)) α = pointer(integer) 3 Se necesita un mecanismo para recordar el efecto de la unificación en las dos expresiones. Si la unificación de S y S resulta en una variable α representando el tipo t, entonces α tiene que continuar representando el tipo t a medida que avanza la verificación.

Sustituciones, Instancias y Unificación Definición Una sustitución es un mapeo de variables de tipo a expresiones de tipo. Definición Una instancia es una expresión de tipo a la cual se le ha aplicado una sustitución

Algoritmo para aplicar una sustitución sustituir(t: expresiontipo): expresiontipo { if t es un tipo básico then return t if t es una variable then return S(t) if t es t 1 t 2 then return sustituir(t 1 ) sustituir(t 2 ) }

Sustituciones S(t) es la expresión de tipo que resulta cuando se aplica sustituir a t. S(t) es una instancia de t. Si la sustitución no especificia una expresión para la variable α, se entiende que S(α) = α. Ejemplo

Instancias Notación: s < t significa que s es instancia de t Ejemplos donde s es instancia de t pointer(integer) < pointer(α) pointer(α) < β Ejemplos donde s no es instancia de t integer real integer real α α integer α α α

Unificación Definición Dos expresiones de tipo t 1 y t 2 unifican, si existe una sustitución S tal que S(t 1 ) = S(t 2 ). En la práctica se busca encontrar el unificador más general, es decir, la sustitución que establece el menor número de restricciones posible sobre las variables de las expresiones. Definición El unificador más general de t 1 y t 2 es una sustitución que cumple: S(t 1 ) = S(t 2 ) S tal que S (t 1 ) = S (t 2 ) se tiene que S es una instancia de S.

Verificación de tipo de funciones polimórficas Se parte de una representación en grafos de las expresiones de tipo Las reglas para verificar expresiones de tipo se escriben en términos de las siguientes operaciones: fresh(t) reemplaza las variables acotadas en t por variables libres, al hacerlo elimina los cuantificadores universales unificar(m,n) unifica las expresiones de tipo, como efecto de borde, mantiene un registro de la sustitución que se hace en la expresión equivalente. Si la unificación falla, también falla la verificación de tipos.

Verificación de tipo de funciones polimórficas E E 1 (E 2 ) {p = mkleaf(newtypevar); unify(e 1.type, mknode(,e 2.type,p)); E.type=p} E E 1,E 2 {E.type = mknode(,e 1.type,E 2.type)} E id {E.type = fresh(id.type)}

Ejemplo de verificación de tipos Suponer las siguientes expresiones de tipo: deref: α.pointer(α α) q: pointer(pointer(integer)) Y suponer la expresión: deref(deref(q))

Ejemplo representación en grafo [Aho 2a. ed. p. 398] Sean las expresiones de tipo: ((α 1 α2) list(α 3 )) list(α 2 ) y ((α 1 α2) list(α 3 )) α 5

Algoritmo de Unificación [Aho 2a. ed. p. 397]

Resultado de la unificación [Aho 2a. ed. p. 396]