Sie sind auf Seite 1von 37

Teora de lenguajes y compiladores

Unidad II

Analizador Sintctico

Semana 7

Tabla de smbolos

Objetivo General
El alumno al finalizar el curso desarrollar
aplicaciones que le permitan determinar si
una sentencia corresponde a la estructura
gramatical
de
un
lenguaje
de
programacin.
As
mismo
estar
capacitado para proponer nuevas formas
estructurales en la definicin de lenguajes
de programacin.

Objetivo Especfico

Desarrollar un analizador sintctico

Objetivo Instruccional
Incorporar una tabla de smbolos al
analizador lexicogrfico

Temas

Generalidades
Tabla de Smbolos

Generalidades

Definicin
La tabla de smbolos es una estructura de
datos que se utiliza para almacenar
informacin (atributos) asociados a smbolos
declarados en el programa.

Generalidades

Funciones de la Tabla de Smbolos


La tabla de smbolos tambin es conocido
como tabla de nombres o tabla de
identificadores y es accedido por dos
funciones principales:
Efectuar chequeos semnticos
Generacin de cdigo
Permanece slo en tiempo de compilacin,
no de ejecucin, excepto en aquellos casos
en que se compila con opciones de
depuracin

Generalidades

Qu almacena?
La tabla almacena la informacin que en cada
momento se necesita conocer sobre las variables
del programa, informacin tal como: nombre, tipo,
direccin de localizacin, tamao, etc.
La gestin de la tabla de smbolos es muy
importante, ya que consume gran parte del tiempo
de compilacin. De ah que su eficiencia sea crtica.

Generalidades

Smbolos definidos por el


programador
Variables: tipo, lugar en la memoria, valor?,
referencias?
Procedimientos y funciones:
parmetros, tipo de resultado

direccin,

Parmetros:
variable

clase

tipo

de

variable,

Etiquetas: lugar en el programa

de

Generalidades

Respecto a cada smbolo


podemos guardar
El nombre.- Se puede hacer con o sin lmite.
Si lo hacemos con lmite, emplearemos una
longitud fija para cada variable, lo cual
aumenta la velocidad de creacin, pero
limita la longitud en unos casos, y
desperdicia espacio en la mayora.
Otro mtodo es habilitar la memoria que
necesitemos en cada caso para guardar el
nombre.
El tipo.- tambin se almacena en la tabla.

Generalidades

Respecto a cada smbolo


podemos guardar
Direccin de memoria en que se guardar.- Esta
direccin es necesaria, porque las instrucciones que
referencian a una variable deben saber donde
encontrar el valor de esa variable en tiempo de
ejecucin, tambin cuando se trata de variables
globales.
En lenguajes que no permiten recursividad, las
direcciones se van asignando secuencialmente a
medida que se hacen las declaraciones.
En lenguajes con estructuras de bloques, la
direccin se da con respecto al comienzo del
bloque de datos de ese bloque (funcin o
procedimiento) en concreto.

Generalidades

Respecto a cada smbolo


podemos guardar
Nmero de dimensiones.- El nmero de dimensiones
de una variable arrays, o el de parmetros de una
funcin o procedimiento junto con el tipo de cada
uno de ellos es til para el chequeo semntico

Generalidades

Consideraciones sobre la tabla de


smbolos
Conforme van apareciendo nuevas declaraciones
de identificadores, el analizador lxico, o el
analizador sintctico segn la estrategia que
sigamos, insertar nuevas entradas en la tabla de
smbolos, evitando siempre la existencia de
entradas repetidas.
El
analizador
semntico
efecta
las
comprobaciones sensibles al contexto gracias a la
tabla de smbolos, y el generador de cdigo
intermedio usa las direcciones de memoria
asociadas a cada identificador en la tabla de
smbolos, al igual que el generador de cdigo.

Generalidades

Consideraciones sobre la tabla de


smbolos
En la implementacin de la tabla de
smbolos nos creamos un Tipo Abstracto de
Datos (Se utilizara una lista por simplicidad. Lo mejor es usar
otra estructura ms eficiente. Por ejemplo un rbol AVL).

Generalidades

Operaciones sobre la tabla de


smbolos
Crear: Crea una tabla vaca.
Insertar: Parte de una tabla de smbolo y de un
nodo, lo que hace es aadir ese nodo a la tabla.
Buscar: Busca el nodo que contiene el nombre
que le paso por parmetro.
Imprimir: Devuelve una lista con los valores que
tiene los identificadores de usuario, es decir
recorre la tabla de smbolos.

Generalidades

Palabras Reservadas y Operadores


OP_PI = 54; // parntesis izquierdo
OP_PD = 55; // parntesis derecho
OP_SS = 56; // operador suma
OP_SR = 57; // operador resta
OP_PU = 58; // operador punto
OP_IG = 59; // operador igual que
OP_DI = 60; // operador distinto o diferente
OP_LE = 61; // operador menor o igual que
OP_ME = 62; // operador mayor o igual que
OP_MY = 63; // operador mayor que
OP_AS = 64; // operador multiplicacin
OP_DR = 65; // operador divisin real
OP_OA = 66; // operador asignacin
OP_PC = 67; // operador punto y coma
OP_DP = 68; // operador dos puntos
OP_CO = 69; // operador coma
OP_MQ = 70; // operador menor que

PC_PR = 1; // Palabra reservada program


PC_VA = 2; // Palabra reservada var
PC_AR = 3; // Palabra reservada array
PC_OF = 4; // Palabra reservada of
PC_IN = 5; // Palabra reservada integer
PC_RE = 6; // Palabra reservada real
PC_FU = 7; // Palabra reservada function
PC_PO = 8; // Palabra reservada procedure
PC_BE = 9; // Palabra reservada begin
PC_EN = 10; // Palabra reservada end
PC_IF = 11; // Palabra reservada if
PC_TH = 12; // Palabra reservada then
PC_EL = 13; // Palabra reservada else
PC_WH = 14; // Palabra reservada while
PC_DO = 15; // Palabra reservada do
PC_EX = 16; // Palabra reservada e (para exponente)
PC_NO = 17; // Palabra reservada not (operador de negacin)
PC_OL = 18; // Palabra reservada or (operador o)
PC_AL = 19; // Palabra reservada and (operador y)
PC_DE = 20; // Palabra reservada div (operador divisin entera)
PC_RT = 21; // Palabra reservada mod (operador residuo)
PC_II = 22; // Palabra reservada input
PC_OO = 23; // Palabra reservada output
PC_LE = 24; // Palabra reservada read
PC_ES = 25; // Palabra reservada write
PC_CO = 26; // Palabra reservada const

Tabla de Smbolos

Es utilizada por el compilador para asociar a cada


smbolo del programa fuente (identificadores,
constantes, ... , etc) un contenido semntico.
Los campos asociados al
registro pueden contener la
informacin misma para lo que
estn destinados, o bien un
puntero
a
posiciones
de
memoria en las que se guarda
esta informacin.

ESTRUCTURA
Tabla de Smbolos

A. Nombre del smbolo


En la tabla de smbolos deben aparecer todos los lexemas
correspondientes a los smbolos usados en el programa fuente. Los
smbolos sern todos aquellos trozos de cdigo que representen
identificadores, constantes numricas o cualquier otro elemento
que el lenguaje sea capaz de manejar.
Para el almacenamiento en la TS de los lexemas pueden utilizarse
las tcnicas:
A.1 Interno: El campo de la tabla de smbolos se define como de
tipo cadena de caracteres de dimensin fija. El inconveniente
esta en que la longitud de los identificadores esta restringida al
valor fijado.
A.2 Externo: El campo de la tabla de smbolos contiene un
puntero a una zona de memoria en la que se almacena el
lexema.

ESTRUCTURA
Tabla de Smbolos

A. Nombre del smbolo. Almacenamiento Interno

Definiendo el campo nombre como un ndice


en un vector de nombres.

ESTRUCTURA
Tabla de Smbolos

A. Nombre del smbolo. Almacenamiento externo

Definiendo
puntero.

el

campo

nombre

como

un

ESTRUCTURA
Tabla de Smbolos

B. Direccin de memoria
En este campo se almacenan las direcciones de
memoria en las que se guardaran los valores de las
variables correspondientes a cada smbolo, durante
la ejecucin del programa.

Es importante recordar que la tabla de smbolos no


contiene los valores de las variables, sino
simplemente las direccin en la que se almacenaran
cuando el programa se ejecute.

ESTRUCTURA
Tabla de Smbolos

C. Tipos
En este campo se almacenara el cdigo
correspondiente al tipo de datos representado por
el smbolo, o bien un puntero a la estructura de
datos correspondiente.

ESTRUCTURA
Tabla de Smbolos

D. Numero de la lnea de la declaracin en la que se


usa el smbolo

Esta es una informacin auxiliar, que ser de


utilidad para producir un listado de
referencias cruzadas que ayuden a la
depuracin de los programas.
Puede utilizarse una lista encadenada de
nmeros de lnea, siendo la cabeza de esta
la lnea en donde aparece la declaracin
del smbolo.

INICIALIZACION

Tabla de Smbolos

FUNCIONAMIENTO

Anlisis
lxico

Anlisis
sintctico

Anlisis Semntico
TABLA DE SIMBOLOS

Gener
ador
de
cdigo

Tabla de Smbolos

FUNCIONAMIENTO
a. La TS puede inicializarse con cierta informacin
sobre smbolos especiales en el lenguaje, como son
las palabras reservadas, funciones de libreras,
constantes predefinidas, etc.

b. El analizador lexicogrfico va leyendo el texto


fuente y construyendo lexemas, creando nuevas
entradas en la TS conforme va encontrando nuevos
smbolos, para lo cual a de comprobar que el
smbolo no figure en la TS.
c. El analizador sintctico trabaja solamente con la
estructura formal y a nivel de tokens ya formados
en la fase anterior.

Tabla de Smbolos

FUNCIONAMIENTO
d. El analizador sintctico sirve de soporte o
armazn de un conjunto de rutinas del anlisis
semntico. Parte de estas rutinas puede
completar la informacin de la TS sobre el tipo
de un determinado lexema.
e. El generador de cdigo usa la informacin de la
TS para referenciar el cdigo a las posiciones
adecuadas de memoria.

OPERACIONES

Tabla de Smbolos

La TS funciona como una estructura de base de datos en la que


el campo clave es el lexema correspondiente al smbolo.
En general, puede hacerse las siguientes operaciones:
a. Insertar un nuevo registro y comprobar que no existe otro con
el mismo nombre.
b. Buscar y localizar el contenido de la TS asociado a un
determinado lexema
c. Modificar la informacin contenida en un registro.
d. Recuperar informacin de un smbolo.
En lenguaje con estructura de bloque se incluyen
operaciones ms:
e. Nuevo bloque : Inicio de un nuevo bloque
f. Fin_bloque : Terminacin del mbito de un bloque.

dos

Las inserciones se realizan cuando se procesa la zona de


declaracin de variables.

ORGANIZACIN
1

Program ejemplo;
Var uno : integer;

Tabla de Smbolos

Procedure dos
Var tres, cuatro : integer;

Procedure cinco

Var uno, dos:real;


(a)

Begin

End

Procedure seis

Var uno, tres:real;


(b)
Begin

End

Begin

End

Las tcnicas para


el manejo de TS
en lenguajes con
estructura
de
bloques
suelen
emplear una pila
auxiliar de ndices
de bloque cuyos
elementos
son
punteros
a las
tablas de smbolos
y
sirven
para
marcar
el
comienzo o el final
de los smbolos
correspondientes
a un bloque.

Tabla de Smbolos

EJEMPLO
program e
var a, b, c : char;
procedure f;
var a, b, c: char;

procedure g;
var a, b : char;
procedure h;
var c, d : char;

procedure i;
var b, c: char;

procedure j;
var b, d:char;

e():
a, b, c
f, g, j
f():
a, b, c

h():
c, d

j():
b, d

g():
a, b
h, i
i():
b, c

ESTRUCTURAS DE DATOS
Tabla de Smbolos

Lista no ordenada:

Bsqueda e insercin no eficaces


Solo es valida cuando va a haber pocos smbolos

Lista ordenada:

Bsqueda mas rpida si se implementa por una matriz


Insercin sigue siendo lenta

rbol binario:

Bsqueda e insercin rpidas (si se mantienen balanceados)


Eficientes en trminos de espacio

Tablas hash:

Las mas utilizadas por su eficiencia


La funcin hash debe mantener los nombres uniformemente
distribuidos

ESTRUCTURAS DE DATOS
Tabla de Smbolos

Lista no ordenada

ESTRUCTURAS DE DATOS
Tabla de Smbolos

rbol binario

ESTRUCTURAS DE DATOS
Tabla de Smbolos

(bosque de rboles)

En este caso la TS esta formada por mltiples arboles,


uno por cada bloque. Se usa una estructura de datos
auxiliar (pila) que sirve de ndice de bloque.
ndice de
bloque
uno

dos

tres

cuatro

cinco

(a)

uno

dos

ESTRUCTURAS DE DATOS
(bosque de rboles)

Tabla de Smbolos

Las operaciones sobre esta son:


a. Insertar: Al existir tablas independientes para cada bloque, la
operacin insercin se realiza normalmente atendiendo al
bloque activo.
b. Buscar: La bsqueda es algo mas compleja. Para localizar un
lexema se busca primero en la tabla de bloque activo, luego
en la tabla a la que apunta el ndice del bloque anterior y as
sucesivamente hasta localizarlo o hasta que se hayan
rastreado todos los rboles.
c. Nuevo_bloque: Se crea un nuevo elemento en la pila de
ndice de bloque y una nueva estructura de tipo rbol
inicialmente vaca.
d. Fin_bloque: Se destruye toda la estructura arborescente
asociada al bloque que se termina y se elimina el puntero de
la pila de ndice de bloques.

ESTRUCTURAS DE DATOS
Tabla de Smbolos

Tablas hash

Dos cadenas
diferentes pueden
estar asociadas al
mismo ndice
(COLISION).
La funcin de dispersin h:
asocia una cadena de
caracteres con un cdigo de
dispersin = ndice de la tabla.

Tabla de Smbolos

TRABAJO
Al analizador lexicogrfico desarrollado,
incorporar la implementacin y uso de
la tabla de smbolos para reconocer
errores tales como variables no
definidas o variables ya definidas.

Teora de lenguajes y compiladores


Unidad II

Analizador Sintctico

Semana 7

Tabla de smbolos