15

Click here to load reader

Compiladores clase02

Embed Size (px)

Citation preview

Page 1: Compiladores clase02

Tabla de STabla de Síímbolosmbolos

Diseño y Construcción de Compiladores-2011-

Page 2: Compiladores clase02

Tabla de STabla de Síímbolosmbolos

¿Qué es?

Almacena todos los nombres declarados en el programa y sus atributos (tipo, valor, dirección, parámetros, etc.).

Se usa en las distintas fases del compilador.

Page 3: Compiladores clase02

Tabla de STabla de Síímbolosmbolos

Analizador LexicográficoInserta en TS cada id que detecta y si corresponde da error si ya existe.

Analizador SintácticoInserta el tipo del id.

Analizador SemánticoVerifica que cada id sea declarado antes de usarlo.Recupera el tipo del id.

Generación de Código IntermedioRecupera tipo y dirección del id.

Generación de CódigoInserta y recupera información sobre la memoria asignada.

Page 4: Compiladores clase02

Estructuras usadas para implementar Estructuras usadas para implementar una tabla de suna tabla de síímbolosmbolos

ListaSimple de implementar.Lenta cuando se trabaja con muchos identificadores.

ÁrbolRápida.Consume más memoria.Es útil cuando hay muchas declaraciones.

Tabla de HashingRápida.Difícil de implementar.Se debe definir una función de hashingapropiada para evitar colisiones.

Page 5: Compiladores clase02

Operaciones sobre TSOperaciones sobre TS

Búsqueda(lexema): entero;

Inserción(lexema,descriptor): boolean;

Obt_atributo(lexema,atributo): valor;

Eliminación (lexema): entero.

Page 6: Compiladores clase02

Contenido de la TSContenido de la TS

¿Qué debe insertarse en TS?

Tipos de datosNombre de VariablesConstantes definidasNombres de procedimientos FuncionesRótulos

¿Qué info puede necesitar el compilador?

Tipo de las VariablesDimensiones de tipos estructuradosNivel lexicográfico de una declaración.Dirección base y desplazamientoRegistro: sus camposParámetro: tipo de pasaje y tipo de datoNúmero y tipo de argumentos de una función

Page 7: Compiladores clase02

Manejo de palabras claves

Si el scanner diferencia entre un identificador y una palabra reservada, entonces devuelve al parser el código correspondiente. Aquí no se requiere el ingreso de la palabra clave en la TS.Si el scanner no las diferencia de los identificadores:

Pueden almacenarse en una tabla separada.Estar inicializadas al principio de la TS.Una entrada, en TS para una palabra reservada.

while código-while

Page 8: Compiladores clase02

Entradas en la TSEntradas en la TS

Una primera desagregación de una entrada de la tabla de símbolos:

No todos los atributos se introducen a la vez, estos se completan conforme avanzan las etapas de compilación.

parte fija parte variante

Page 9: Compiladores clase02

Entrada en TSEntrada en TS

Nombre Clase Tipo Dirección Almac.

Variable Simple / Estructurada.Función.Procedimiento.Tipo.

Básico.Predefinido.Definido por el usuario.

Dirección de Memoria (nivel y desplaz).

Cantidad requerido.

Parte Fija

Page 10: Compiladores clase02

Entrada en TSEntrada en TSParte Variante

Depende del objeto computacional asociado con el identificador.Variable Simple: la parte variante es vacía excepto cuando se admitan valores de inicialización.Variable Estructurada (Arreglo)

Tipo Base Límite Inferior Límite Superior

Page 11: Compiladores clase02

Entrada en TSEntrada en TS

Procedimiento o Función

Cant. de Par. Tipo1 Pas. Ptro. … Tipon Pas. Ptro.

Page 12: Compiladores clase02

Operaciones sobre TS: Lenguajes Operaciones sobre TS: Lenguajes Estructurados a BloquesEstructurados a Bloques

Crean un ámbito, una visibilidad y un tiempo de vida para los identificadores.Tareas que se deben realizar cuando se ingresa a un nuevo bloque:

Dar de alta un nuevo bloque.Insertar cada identificador encontrado en dicho bloque.

Tareas realizadas cuando se finaliza el análisis de un bloque:

Eliminar cada identificador en el bloque.Eliminar el bloque.

Page 13: Compiladores clase02

Operaciones sobre TS: Lenguajes Operaciones sobre TS: Lenguajes Estructurados a BloquesEstructurados a Bloques

Cuando se busque un identificador en la TS se debe retornar el último identificador insertado, es decir, el identificador declarado en el bloque actual, si en tal bloque no existe el identificador buscarlo en el bloque que lo contenga, y así sigue hasta encontrarlo. Si el identificador no se encuentra en ninguno de los bloques anidados entonces no existe.

Page 14: Compiladores clase02

Ejemplo

Page 15: Compiladores clase02

Lectura obligatoria

Capítulo 8 de “The Theory and Practiceof Compiler Writing”, Tremblay & Sorenson. Mc Graw Hill. 1985.