Descargar

Programacion: Análisis Semántico y Chequeo de Tipos

Enviado por Pablo Turmero


Partes: 1, 2, 3

    edu.red

    Resumen Introducción Tablas de Símbolos Chequeo Semántico Chequeo de Tipos Semántica de un Programa Orientado a Objetos Tipos Polimórficos

    edu.red

    ¿Dónde estamos? Analizador Léxico (Scanner) Analizador Sintáctico (Parser) (Gp:) Token Stream

    Arbol de Parseo (Gp:) Programa (character stream)

    edu.red

    ¿Dónde estamos? Analizador Léxico (Scanner) Analizador Sintáctico (Parser) (Gp:) Token Stream

    Arbol de Parseo (Gp:) Programa (character stream)

    Analizador Semántico Generador de Código Intermedio Representación Intermedia + Tabla de Símbolos

    edu.red

    ¿Qué es la semántica de un programa? Sintáxis Cómo se ve un programa Representación textual o estructura Es posible dar una definición matemática precisa

    Semántica Cuál es el significado del programa Es más difícil dar una definición matemática precisa

    edu.red

    Por qué hacer análisis semántico Asegurarnos que el programa cumple con la definición del lenguaje de programación Proveer mensajes de error útiles al usuario

    edu.red

    Tabla de Símbolos Un lugar para guardar toda la información adicional acerca del programa Representaciones intermedias: expresiones, statements, control de flujo, etc. Tabla de Símbolos: Tipos, variables, scope, etc.

    edu.red

    Scope Un nombre puede tener significados distintos en lugares distintos Tipos, variables, etc tiene scope (ámbito) Tenemos que mantener una tabla de símbolos para cada scope

    edu.red

    Operaciones en la tabla de símbolos make_table(parent_table) ? symbol_table scope(id) ? symbol_table lookup_variable(id, symbol_table) ? variable lookup_type(id, symbol_table) ? type get_type(variable) ? type add_type(id, symbol_table, type) ? type add_variable(id, symbol_table, type) ? variable

    edu.red

    Siguiente Clase Todo acerca de tablas de símbolos Scopes y visibilidad Información que se mantiene en la tabla de símbolos Implementación de tablas de símbolos

    edu.red

    Chequeo Semántico Chequeos estáticos vs. Chequeos dinámicos Chequeos estáticos Chequeos de control de flujo Chequeos de unicidad Chequeos de Tipo

    edu.red

    Chequeos de Control de Flujo El control de flujo del programa es sensitivo al contexto Ejemplos: Declaración de una variable debe ser visible al usarla (en scope) Declaración de una variable debe estar ántes de usarla Cada camino de salida (exit path) retorna un valor del tipo correcto ¿Qué más?

    edu.red

    Chequeos de Unicidad Uso (y mal uso) de identificadores No se puede representar en una CFG (mismo token) Ejemplos: Ningún identificador puede ser usado para dos definiciones diferentes en el mismo scope

    edu.red

    Chequeos de Tipo Los chequeos semánticos más extensos Ejemplos: Que el número de argumentos haga match con el número de parámetros formales y que los tipos correspondientes sean equivalentes Si se llama como expresión, debe retornar un tipo Cada acceso a una variable debe hacer match con la declaración (arreglo, estructura, etc.) Los identificadores en una expresión deben ser “evaluables” LHS de una asignación debe ser “asignable” En una expresión los tipos de las variables, tipos de retorno de métodos y de operadores deben ser “compatibles”

    edu.red

    Chequeos Dinámicos Chequeos de límites de arreglos Chequeo de dereferencia del Null Pointer

    edu.red

    Sistemas de Tipos Un sistema de tipos es usado para el chequeo de tipos Un sistema de tipos incorpora Construcciones estáticas del lenguaje Noción de tipos Reglas para asignar tipos a construcciones del lenguaje

    edu.red

    Expresiones de Tipos Un tipo compuesto es denotado por una expresión de tipo Una expresión de tipo es Un tipo básico La aplicación de un constructor de tipo a otras expresiones de tipo

    Partes: 1, 2, 3
    Página siguiente