Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 15
Clase 15
Clase 14
Anlisis Sintctico
Detecta entradas con rboles mal formados.
Anlisis Semntico
Detecta todos los errores restantes
mbitos
Consiste en empatar las declaraciones de identificadores con su uso El mbito de un identificador es la porcin del programa en la cual el identificador es accesible. El mismo identificador se puede referir a diferentes cosas en diferentes partes del programa. mbitos diferentes para el mismo nombre no se sobreponen. Un identificador puede tener mbitos restringidos. Es decir solo es visible en reas particulares del programa
mbito en lenguajes OO
No todas las clases de identificadores siguen la regla del anidamiento ms cercano Por ejemplo las definiciones de clases
Todas son visibles globalmente
Ms sobre mbito
Los nombres de mtodos y atributos tienen reglas complejas. Los nombres de campos son globales dentro de cualquier clase. Pero los mtodos y campos no necesitan estar definidos en la clase en la cual se estn utilizando, pero si en una clase padre (herencia) Los mtodos se pueden redefinir (sobreescritura)
En cualquier porcin del rbol (contexto en el programa), necesitamos saber que identificadores estn definidos.
Tabla de Smbolos
Una tabla de smbolos es una estructura de datos empleada para registrar las declaraciones de identificadores. Los identificadores se almacenan cuando se declaran
Con atributos
Nombres de clases, mtodos, variables, etc
Y sub-atributos
public, private, integer, float, static, array, etc Su localizacin en la pila si es variable local
Operaciones
add_symbol(x) inserta x y la informacin asociada, tal como el tipo, en la pila. find_symbol(x) busca en la pila, comenzando del tope de la pila.Regresa el primer x encontrado o NULL si no se encontro. remove_symbol() saca elemento de la pila
comenzar un nuevo mbito anidado find_symbol(x) encuentra el x actual (o null) add_symbol(x) agrega un smbolo x a la tabla check_scope(x) verdadero si x esta definido en el mbito actual (verificar declaraciones mltiples) exit_scope() salir del mbito Descartar todos los smbolos del mbito reciente
Definicin de clase
Los nombres de clases se pueden usar antes de que sean definidos. Usualmente no se puede verificar esto para los nombres de clases.
Usando una tabla de smbolos (compilacin separada?) O en una pasada (a menos que se requieran prototipos)
Definicin de clase
Solucin usual
Fase 1: Junta todos los nombres de clases (+ otras cosas) Fase 2: Realiza la verificacin
Tipos
Qu es un tipo?
La nocin vara de lenguaje a lenguaje.
Consenso
Un conjunto de valores Un conjunto de operadores sobre los valores
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!
Sistema de tipos
Un sistema de tipos de un lenguaje especifica las operaciones que son vlidas para cada tipo. 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.
El sistema de tipos provee una formalizacin concisa de las reglas de verificacin semntica.
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
Verificacin de tipos
Existen dos aspectos a considerar en la verificacin de tipos de un compilador: Procesar las declaraciones y mantener una tabla de smbolos. Almacenar el tipo de cada identificador en la tabla de smbolos. Realizar la verificacin de tipos y hacer cumplir las reglas semnticas en expresiones y otros elementos del lenguaje (e.g. Lista de argumentos, etc) Buscar el tipo de los identificadores usados. Inferir los tipos de constantes Calcular el tipo de los nodos que denotan expresiones.
Ejemplo de verificacin de tipos (un ejemplo similar esta en la Sec. 6.4.4 de Kenneth)