Vous êtes sur la page 1sur 8

Compiladores.

Gua 6 Facultad: Ingeniera Escuela: Computacin Asignatura: Compiladores

Tema: Tabla de Smbolos


Contenido
En esta gua se desarrollar una tabla de smbolos y se asociar al analizador sintctico de manera que se pueda manejar varios tipos de datos en un compilador, tomando como ejemplo base el compilador del lenguaje MUSIM/3.

Objetivos Especficos
Conocer la estructura de una tabla de smbolos y un ejemplo de su implementacin. Aplicar los conceptos de tabla de smbolos y su combinacin con el analizador sintctico para el manejo de tipos de datos.

Material y Equipo
Gua de Laboratorio N 6. Computadora con programa Dev C++. Archivos de recurso o AnalizadorLexico.cpp o AnalizadorSintacticoEBNF.cpp

Introduccin Terica
Tabla de Smbolos Gua 3 de smbolos es la componente del compilador que se La tabla encarga de todos los aspectos dependientes del contexto relacionados con las restricciones impuestas a loa nombres Gua 4 que puedan aparecer en los programas (nombres de variables, constantes, funciones, palabras reservadas,). Estas fa restricciones obligan a llevar la cuenta, durante todo el proceso de compilacin de los nombres utilizados (junto con toda la informacin relevante que se deduzca de la definicin del lenguaje de programacin), para poder realizar las

Compiladores. Gua 6

comprobaciones y poder realizar las comprobaciones e imponer las restricciones necesarias. Por otro lado, una preocupacin muy importante en el diseo de algoritmos para la solucin de problemas computables es obtener el mejor rendimiento posible. Para ello, es esencial la eleccin concreta de estructuras de datos. El tiempo que necesitan los algoritmos para procesar sus entradas suele depender del tamao de estas y difiere de unas estructuras de datos a otras. La tabla de smbolos es una estructura de datos que contiene toda la informacin relativa a cada identificador que aparece en el programa fuente. Los identificadores pueden ser de variables, tipos de datos, funciones, procedimientos, etc... Evidentemente cada lenguaje de programacin tiene unas caractersticas propias que se reflejan en la tabla de smbolos. Cada elemento de la estructura de datos que compone la tabla de smbolos est formado al menos por el identificador y sus atributos. Los atributos son la informacin relativa de cada identificador. Los atributos habituales son: Especificacin del identificador: variable, tipo de datos, funcin, procedimiento, etc... Tipo: en el caso de variables ser el identificador de tipo (real, entero, carcter, cadena de caracteres, o un tipo definido previamente). En el caso de las funciones puede ser el tipo devuelto por la funcin. Los procedimientos se pueden marcar como funciones que no devuelven nada (void). Dimensin o tamao. Puede utilizarse el tamao total que ocupa una variable en bytes, o las dimensiones. As en el caso de variables simples se coloca la dimensin cero, para los arrays la dimensin del array, en el caso de estructuras (struct) o registros (record) el nmero de campos o miembros, en el caso de funciones o procedimientos se puede almacenar el nmero de parmetros, etc... Direccin de comienzo para generar el cdigo objeto. En el cdigo mquina no hay nombre de identificadores, tan slo direcciones de memoria para datos (static, stack, y heap) o para cdigo (usadas por los procedimientos y funciones). Listas de informacin adicional. Contienen informacin de tamao variable, por ejemplo: los tipos de los campos

Compiladores. Gua 6 3

o miembros de las estructuras o registros, los tipos de los parmetros de estructuras o uniones. Los atributos pueden variar de unos lenguajes a otros, debido a las caractersticas propias de cada lenguaje y a la metodologa de desarrollo del traductor. La tabla de smbolos se crea por cooperacin del anlisis lxico y el anlisis sintctico. El anlisis lxico proporciona la lista de los identificadores, y el anlisis sintctico permite rellenar los atributos correspondientes a cada identificador. El analizador semntico tambin puede rellenar algn atributo. El analizador semntico y el generador de cdigo obtienen de la tabla de smbolos la informacin necesaria para realizar su tarea. Las operaciones fundamentales que se realizan en la tabla de smbolos son la insercin y bsqueda de informacin. En algunos lenguajes de programacin tambin se realizan las operaciones set y reset que activan y desactivan los identificadores locales respectivamente. Dada la cantidad de veces que se accede a la tabla de smbolos es necesario que la estructura de datos que alberga la informacin, y los algoritmos de acceso sean optimizados al mximo. En general se utilizan mtodos hash para el manejo de las tablas de smbolos. Las tablas de smbolos constituyen el recipiente donde se almacena toda la informacin relativa al programa fuente en tiempo de compilacin y por tanto se destruyen una vez finalizada la traduccin. Tan slo hay una excepcin en el caso de que se activen opciones de depuracin (debugging), en ese caso los compiladores graban en fichero la tabla de smbolos para poder dar informacin de los identificadores usados en el programa fuente en tiempo de ejecucin. Los fabricantes de compiladores incluyen para esos casos informacin de la tabla de smbolos que emplean.

Procedimiento
MUSIM/3 Gua 3 La primera versin de este lenguaje es el MUSIM/0, luego surgi el MUSIM/1. Se denominan MUSIM1/x las variantes que de MUSIM Gua que 4 profundicen en aspectos lxicos, las MUSIM/2x son las versiones que avancen en aspectos sintcticos, MUSIM/3x los que aaden aspectos semnticos.
fa

Compiladores. Gua 6

Gramtica MUSIM/3 <Programa> ::= MAIN "{" <Bloque> "}" <Bloque> ::= <Declaraciones> <Sentencias> <Declaraciones> ::= <Declara> ; <Otra_declara> <Otra_declara> ::= <Declara> ; <Otra_declara> | <Vacio> <Declara> ::= <Tipo> <Variable> <Tipo> ::= INTEGER |FLOAT |CHAR <Sentencias> ::= <Instruccion> <Otra_instruccion> <Otra_instruccion> ::= ; <Instruccion> <Otra_instruccion> | <Vacio> <Instruccion> ::= <Asignacion> |<Lectura> |<Escritura> <Asignacion> ::= <Variable> = <Expresion> <Expresion> ::= <Termino> <Mas_terminos> <Mas_terminos> ::= + <Termino> <Mas_terminos> | - <Termino> <Mas_terminos> | <Vacio> <Termino> ::= <Factor> <Mas_factores> * <Factor> <Mas_factores> | / <Factor> <Mas_factores> | <Mas_factores> ::= <Vacio> <Factor> ::= <Primario> <Exp> <Exp> ::= ^ <Factor> | <Vacio> <Primario> ::= - <Primario> | <Elemento> <Elemento> ::= ( <Expresion> ) | <Variable> | <Constante> <Lectura> ::= READ <Variable> <Escritura> ::= WRITE <Variable> <Variable> ::= letra_minuscula <Constante> ::= entera | real | caracter <Vacio> ::= Un ejemplo de un programa con MUSIM/3 es: M{ I a; I b; F c; F d; R a; R b; c=a+b; d=a-b; W c; W d; }. Donde M=Main

Compiladores. Gua 6 5

I=Integer F=Float C=Char R=Read W=Write Y los identificadores estn formados de una sola letra. Tomando en cuenta, las consideraciones anteriores acerca del lenguaje MUSIM/3, se implementar la tabla de smbolos correspondiente al compilador de este lenguaje. Esta se conforma de dos clases, la primera es la clase Simbolo, que construye cada token que se almacena en la tabla con un id y adems el tipo de datos al que pertenece. A continuacin se presenta el cdigo correspondiente a la tabla de smbolos de MUSIM/3. Simbolo.h #ifndef Simbolo_H #define Simbolo_H #include<iostream> #include<cstring> using namespace std; class Simbolo { char tipo; char id; public: Simbolo(void); ~Simbolo(void); char hashCode(void){return id;}; bool equals(Simbolo o){return o.id==id;}; char toString(); }; char Simbolo::toString(){ char cad[50]=""; strcpy(cad, reinterpret_cast<const char *>(id)); strcat(cad,":"); strcat(cad,reinterpret_cast<const char *>(tipo)); return *cad; } #endif TablaDeSimbolos.h #ifndef TablaDeSimbolos_H #define TablaDeSimbolos _H #include <iostream> #include <cstring>

Compiladores. Gua 6

#include <map> #include "Simbolo.h" using namespace std; class TablaDeSimbolos { //static Hashtable tabla=new Hashtable(); map<char,Simbolo> tabla; public: static Simbolo getSimbolo(char id); static void addSimbolo(Simbolo newSimbolo); } static void TablaDeSimbolos::addSimbolo(Simbolo newSimbolo){ tabla[newSimbolo->hashCode]=newSimbolo; } static Simbolo TablaDeSimbolos::getSimbolo(char id){ return (Simbolo)tabla.find(id); } #endif

Anlisis de resultados
Integre la tabla de smbolos con el analizador sintctico y analizador lxico de MUSIM/3 proporcionado en los recursos, utilice la definicin sintctica EBNF de la introduccin terica para referencias.

Investigacin complementaria
Compilar un proyecto en C++, que integre el analizador lxico, analizador sintctico, y tabla de smbolos, de manera que pueda leer de manera exitosa el programa de MUSIM codificado en el ejemplo presentado en esta gua (Presente capturas de pantalla y archivos que respalden al correcta ejecucin). Responda: Mencione las pasadas de un AST para implementar un compilador e intrprete del lenguaje.

Bibliografa
Construccin de Compiladores. Principios y practica, Kenneth C. Louden.

Compiladores. Gua 6 7

Compiladores. Principios tcnicas y Herramientas. Sethi Ullman. Pearson Education.

Compiladores. Gua 6

Gua 6: Tabla de Smbolos


Tema: Presentacin del programa

Hoja de cotejo:

Docente:
Alumno:
Alumno:

6 1

Mquina No: Mquina No:


GL:
GL: Mquina No: GL: a

Docente:
Docente:

Fecha:

EVALUACION % CONOCIMIENTO Del 20 al 30% 1-4 Conocimie nto deficient e de los fundament os tericos 5-7 Conocimiento y explicacin incompleta de los fundamentos tericos 8-10 Conocimiento completo y explicacin clara de los fundamentos tericos Nota

APLICACIN DEL CONOCIMIENTO

Del 40% al 60%

ACTITUD Del 15% al 30% No tiene actitud proactiva . Actitud propositiva y con propuestas no aplicables al contenido de la gua. Tiene actitud proactiva y sus propuestas son concretas.

TOTAL

100%

Vous aimerez peut-être aussi