Contexto de tablas de símbolos. Más...

#include <sTable.h>

Métodos públicos

 sTable ()
 
 sTable (sTable *s)
 
void mklevel (symbols *default_level=NULL)
 
symbolscurrentlevel ()
 
void rmlevel ()
 
void add (runNode *str, runNode *node)
 
void addfunction (runNode *str, runNode *node)
 
void addclass (runNode *str, runNode *node)
 
refNodeaccess (runNode *str)
 
refNodeaccessfunction (runNode *str)
 
refNodeaccessclass (runNode *str)
 
void clear (runNode *str)
 
bool exist (runNode *str)
 
bool existfunction (runNode *str)
 
bool existclass (runNode *str)
 
int getLevel () const
 
int getLevelTop () const
 
void setLevel (int l)
 
void print ()
 
void fprint ()
 
void cprint ()
 
symbolsgetTable ()
 
symbols getFunctions ()
 
runNodegetFunction (runNode *key)
 
refNodegetFunctionRef (runNode *key)
 
void setFunction (runNode *key, runNode *exp)
 
runNodegetElement (runNode *key)
 
refNodegetElementRef (runNode *key)
 
void setNodeUse (runNode *node)
 
runNodegetNodeUse () const
 
void setPrivate (runNode *str)
 
bool isPrivate (runNode *str)
 
void setDeleteCurrentLevel (bool del)
 
bool isref (runNode *node, int level_see)
 
bool isrefAll (runNode *node, int level_see)
 

Métodos públicos estáticos

static sTablesys_sTable ()
 
static sTablenew_sTable (bool level_default=true)
 
static sTablenew_sTable (sTable *s, bool level_default=true)
 
static void add_sTable (sTable *s)
 
static int search_sTable (sTable *s)
 
static void setGlobal (runNode *node)
 

Atributos públicos

vector< symbols * > tables_
 
int level_
 
symbols functions_
 
runNodenode_use_
 

Atributos públicos estáticos

static sTablesTable_use = NULL
 
static sTablesTable_ini = NULL
 
static symbols class_
 
static vector< sTable * > sTables_
 
static map< runNode *, refNode
*, cmp_runNode
globals_
 

Descripción detallada

Contexto de tablas de símbolos.

La tabla de símbolos es una estructura de datos que sirve para guardar referencias a nodos creados dinámicamente.

Gracias a la tabla de símbolos es posible que durante el recorrido de una determinada rama del árbol de ejecución se cree un nodo en memoria dinámica que será utilizado en ramas posteriores. Para ello en la tabla de símbolos se crea un nodo referencia que apunta al valor creado. De esta forma, con solo conocer la clave de la referencia, es posible acceder al nodo creado en cualquier momento posterior de la ejecución.

El contexto se define mediante tres tablas de símbolos:

  • Tabla de variables
  • Tabla de funciones
  • Tabla de clases

Adicionalmente puede tener una tabla de símbolos de acceso global.

La primera puede contener referencias a cualquier tipo de nodo, aunque la gramática hace que sólo existan referencias a nodos de tipos de datos (arrays, strings...) o a nodos etiquetas. La tabla de funciones guarda referencia a nodos de este tipo. Análogamente, la tabla de clases guarda referencias a las nodos de tipo clase.

La tabla de variables se estructura en varios niveles. Así las claves de un nivel generalmente no son accesibles desde ejecuciones que se realicen en otro. Esto establece un ámbito para las claves de la tabla de símbolo.

La tabla de funciones y de clases solo consta de un nivel.

Para acceder a la tabla de símbolos se utilizan una serie de clases de nodos que funcionan como interfaz.

Se debe destacar que puede haber más de una tabla de un contexto. Elementos como las clases disponen de su propio contexto. Se define pues el concepto de contexto activo, que no es más que una referencia al contexto sobre la que se debe operar.

Los contextos puede tener ligados un nodo ejecutable. Este nodo, denominado nodo en uso o activo, es aquel que trabaja sobre los elementos de las tablas. Así un nodo clase, por ejemplo, el contexto de una clase estará relacionado con la propia clase. Se crea así una referencia en doble sentido que permite, conociendo un contexto, obtener el elemento que opera sobra ella.

Se define el contexto principal como el primer contexto que se crea en la ejecución. Este es añadido a una lista de contextos. Cuando otro contexto fuera a ser usado es puesto al final de la lista hasta que finaliza su uso.

Esta clase proporciona métodos estáticos para manipular el sistema de tablas en ejecución.

Ver también
symbols

Documentación del constructor y destructor

sTable::sTable ( )

Constructor que inicializa un nuevo contexto de tablas de símbolos.

sTable::sTable ( sTable s)

Constructor copia. Crea un contexto a partir de otro. Para ello se copian por valor los elementos de las distintas estructuras que los forman.

Parámetros
sContexto a copiar

Documentación de las funciones miembro

refNode * sTable::access ( runNode str)

Obtiene la referencia del nivel actual de la tabla de variables correspondiente a la clave dada. Si la clave no se encuentra se crea y devuelve una referencia que apunta a un nodo nulo.

Parámetros
strClave relativa a la referencia.
Devuelve
Referencia dada por la clave.
refNode * sTable::accessclass ( runNode str)

Obtiene la referencia de la tabla de clases correspondiente a la clave dada. Si la clave no se encuentra se crea y devuelve una referencia que apunta a un nodo nulo.

Parámetros
strClave relativa a la referencia.
Devuelve
Referencia dada por la clave.
refNode * sTable::accessfunction ( runNode str)

Obtiene la referencia de la tabla de funciones correspondiente a la clave dada. Si la clave no se encuentra se crea y devuelve una referencia que apunta a un nodo nulo.

Parámetros
strClave relativa a la referencia.
Devuelve
Referencia dada por la clave.
void sTable::add ( runNode str,
runNode node 
)

Añade un referencia con la clave dada en el nivel actual de la tabla de variables. La referencia apuntará al nodo dado. Si ya existía una referencia con dicha clave se elimina el valor anterior.

Parámetros
strClave para la referencia.
nodeNodo al que apuntará la referencia.
void sTable::add_sTable ( sTable s)
static

Añade un contexto a la lista de contextos en ejecución.

Parámetros
sContexto a añadir.
void sTable::addclass ( runNode str,
runNode node 
)

Añade un referencia con la clave dada a la tabla de clases. La referencia apuntará al nodo dado. Si ya existía una referencia con dicha clave se elimina el valor anterior.

Parámetros
strClave para la referencia.
nodeNodo al que apuntará la referencia.
void sTable::addfunction ( runNode str,
runNode node 
)

Añade un referencia con la clave dada a la tabla de funciones. La referencia apuntará al nodo dado. Si ya existía una referencia con dicha clave se elimina el valor anterior.

Parámetros
strClave para la referencia.
nodeNodo al que apuntará la referencia.
void sTable::clear ( runNode str)

Elimina el elemento del nivel actual de la tabla de variables referenciado por la clave dada. Luego elimina la referencia.

void sTable::cprint ( )

Método para la depuración del intérprete que imprime el contenido de la tabla de clases.

symbols * sTable::currentlevel ( )

Obtiene el nivel actual de la tabla de variables

Devuelve
Tabla de variables correspondiente al nivel actual.
bool sTable::exist ( runNode str)

Devuelve un booleano que indica si existe en el nivel actual de la tabla de variables una clave str.

Devuelve
Booleano que determina si existe una variable dada.
bool sTable::existclass ( runNode str)

Devuelve un booleano que indica si existe en la tabla de clases una clave str.

Devuelve
Booleano que determina si existe una clase dada.
bool sTable::existfunction ( runNode str)

Devuelve un booleano que indica si existe en la tabla de funciones una clave str.

Devuelve
Booleano que determina si existe una función dada.
void sTable::fprint ( )

Método para la depuración del intérprete que imprime el contenido de la tabla de funciones.

runNode * sTable::getElement ( runNode key)

Obtiene el valor de la referencia dada por la clave facilitada en el nivel actual de la tabla de variables.

Parámetros
keyClave.
Devuelve
Nodo o NULL si no existe la referencia.
refNode * sTable::getElementRef ( runNode key)

Obtiene la referencia dada por la clave facilitada en el nivel actual de la tabla de variables.

Parámetros
keyClave.
Devuelve
Referencia o NULL si no existe la referencia.
runNode * sTable::getFunction ( runNode key)

Obtiene el valor la referencia dada por la clave facilitada en la tabla de funciones.

Parámetros
keyClave.
Devuelve
Nodo función o NULL si no existe la referencia.
refNode * sTable::getFunctionRef ( runNode key)

Obtiene la referencia dada por la clave facilitada en la tabla de funciones.

Parámetros
keyClave .
Devuelve
Nodo referencia o NULL si no existe la referencia.
symbols sTable::getFunctions ( )

Obtiene la tabla de símbolos funciones.

Devuelve
Tabla de funciones.
int sTable::getLevel ( ) const

Obtiene el nivel actual de la tabla de variables.

Devuelve
Entero que indica el nivel actual de la tabla de símbolos de variables.
int sTable::getLevelTop ( ) const

Obtiene el nivel superior de la tabla de variables.

Devuelve
Entero que representa el nivel superior de la tabla de variables.
runNode * sTable::getNodeUse ( ) const

Devuelve el elemento en uso. Este elemento será aquel asociado al contexto.

Devuelve
Nodo que hace uso del contexto.
symbols * sTable::getTable ( )

Obtiene la tabla de símbolos variables.

Devuelve
Tabla de variables.
bool sTable::isPrivate ( runNode str)

Determina si un identificador presenta la etiqueta de privado dentro del contexto.

Parámetros
strNodo que hace de identificador
Devuelve
Booleano que determina si el identificador es privado.
bool sTable::isref ( runNode node,
int  level_see 
)

Determina si existe una referencia a un nodo desde un nivel distinto a level_see.

bool sTable::isrefAll ( runNode node,
int  level_see 
)

Determina si existe una referencia a un nodo desde cualquier tabla de símbolos.

void sTable::mklevel ( symbols default_level = NULL)

Crea un nivel en la tabla de variables

sTable * sTable::new_sTable ( bool  level_default = true)
static

Crea una contexto nuevo y lo introduce en la lista de contextos en ejecución.

Parámetros
level_defaultIndica si la tabla de variables del contexto creado comienza con el primer nivel de la tabla del contexto actual.
Devuelve
Contexto creado.
sTable * sTable::new_sTable ( sTable s,
bool  level_default = true 
)
static

Devuelve un contexto nuevo, creado a partir de uno dado. Además mete en la lista de tablas de símbolos en ejecución la nueva tabla. La tabla creada contiene el primer nivel de la tabla variables de la tabla de símbolos inicial, además de la tabla de funciones y de clases.

void sTable::print ( )

Método para la depuración del intérprete que imprime el contenido de la tabla de variables.

void sTable::rmlevel ( )

Elimina las referencias del nivel actual. Por último cambia el nivel actual al nivel anterior.

int sTable::search_sTable ( sTable s)
static

Busca un contexto en la lista de contextos en ejecución. Devuelve la posición en la que se encuentra.

Parámetros
sContexto a buscar.
Devuelve
Posición en la que se encuentra o -1 en caso de no encontrarse.
void sTable::setDeleteCurrentLevel ( bool  del)

Determina si el nivel actual de la tabla de símbolos de variables debe ser eliminado al disminuir el nivel.

Parámetros
delBooleano que indica si se ha de eliminar el nivel actual de la tabla del símbolos.
void sTable::setFunction ( runNode key,
runNode exp 
)

Se añade una referencia a la tabla de funciones que apunta al nodo dado.

Parámetros
keyClave.
expValor.
void sTable::setGlobal ( runNode node)
static

Busca una tabla de símbolos en la lista de tablas en ejecución. Devuelve la posición en la que se encuentra en la tabla.

void sTable::setLevel ( int  l)

Método modificador que cambia el nivel actual de la tabla de variables.

Parámetros
lNivel
void sTable::setNodeUse ( runNode node)

Asigna el elemento en uso. Este elemento será aquel asociado al contexto.

Parámetros
nodeNodo que hace uso del contexto.
void sTable::setPrivate ( runNode str)

Le añade a un identificador la etiqueta de privado dentro del contexto.

Parámetros
strNodo que hace de identificador.
sTable * sTable::sys_sTable ( )
static

Inicializa el sistema de contextos de tablas de símbolos. Para ello crea un nuevo contexto que será el inicial, y lo introduce en la lista de contextos en ejecución.

Devuelve
Contexto creado

Documentación de los datos miembro

symbols sTable::class_
static

Tabla de clases.

symbols sTable::functions_

Tabla de funciones.

map< runNode *, refNode *, cmp_runNode > sTable::globals_
static

Tabla de elementos globales.

int sTable::level_

Nivel máximo de la tabla de variables.

runNode* sTable::node_use_

Referencia al nodo asociado al contexto. Representa el nodo en uso.

Si es NULL significa que el contexto no se encuentra ligado a ningún elemento concreto y se trata con carácter global.

sTable * sTable::sTable_ini = NULL
static

Guarda una referencia a la tabla de símbolos inicial.

sTable * sTable::sTable_use = NULL
static

Guarda una referencia a la tabla de símbolos activa. Si se cambia el valor de atributo todos los nodos trabajarán con la nueva tabla de símbolos.

vector< sTable * > sTable::sTables_
static

Lista de tablas en ejecución.

vector<symbols *> sTable::tables_

Lista de Tabla de variables.


La documentación para esta clase fue generada a partir de los siguientes ficheros:
  • trunk/src/run/table/sTable.h
  • trunk/src/run/table/sTable.cpp