Traductor e intérprete del lenguaje CL 1.23
SymTab Class Reference

Implementación de la tabla de símbolos. More...

Collaboration diagram for SymTab:

List of all members.

Classes

class  search_return
 Información devuelta en la búsqueda de un símbolo. More...

Public Member Functions

String toString ()
 Describe cómo visualizar como texto la información de la pila de tablas de símbolos.

Package Functions

 SymTab ()
 Constructor.
void initNewSymTab ()
 Inicialización de una pila de tabla de símbolos en modo BUILDING.
void initSavedSymTab ()
 Inicialización de una pila de tabla de símbolos en modo REVISITING.
void pushScope (String s)
 Empila la tabla de símbolos del bloque s en la pila de tablas de símbolos.
void popScope ()
 Elimina la tabla de símbolos que hay en la cima de la pila de tablas de símbolos.
void insertSymbol (CL_AST id, SymbolClass sc, TypeTree t)
 Inserta en la tabla el símbolo extraído de un nodo del AST.
search_return searchSymbol (String s)
 Busca el símbolo s en todas las tablas de la pila de tablas de símbolos.
search_return searchSymbolCurrScope (String s)
 Busca el símbolo s sólo en la tabla de símbolos que hay en la cima de la pila de tablas.
search_return searchSymbolInScopeLevel (String s, int l)
 Busca el símbolo s sólo en la tabla de símbolos que se encuentra en el nivel l de la pila de tablas.
String getFullPath (String s)
 Devuelve el string que contiene el camino completo hasta un símbolo.
String getFullName (String s)
 Obtiene el string con el nombre completo de un símbolo.
int topSymbolsNumber ()
 Obtiene el número de símbolos del bloque actual.
String getTopSymbolName (int i)
 Obtiene el nombre del i-ésimo símbolo del bloque actual.
InfoSym getTopSymbolInfoPtr (int i)
 Obtiene la información del i-ésimo símbolo del bloque actual.
int getStackDepth ()
 Devuelve la profundidad de la pila de tablas de símbolos.

Private Member Functions

void insertSymbol (String s, int l, int c, SymbolClass sc, TypeTree t)
 Inserta un símbolo en la tabla.

Private Attributes

Vector< OneScopetablesHistory
 Secuencia de todas las tablas creadas (histórico).
Vector< Integer > tableIndexStack
 Pila de tablas de símbolos.
SymTabMode mode
 Modo de trabajo con la tabla de símbolos.
int nextSavedInHistory
 Siguiente tabla guardada en el histórico.

Detailed Description

Implementación de la tabla de símbolos.

Contiene la información de todos los símbolos visibles desde un determinado punto del programa. Está implementada como una pila de tablas OneScope, cada una de las cuales contiene los símbolos declarados en un bloque.

Los bloques que forman parte de la pila son aquellos que se encuentran en el camino desde el bloque actual, siguiendo sus ancestros hasta llegar al bloque del programa principal. La tabla del bloque actual se encuentra en la cima de la pila, y la del programa principal, que contiene las variables globales, en el fondo de la misma

See also:
OneScope
Author:
José Miguel Rivero Almeida

Definition at line 374 of file SymTab.java.


Constructor & Destructor Documentation

SymTab.SymTab ( ) [package]

Constructor.

Definition at line 402 of file SymTab.java.


Member Function Documentation

String SymTab.getFullName ( String  s) [package]

Obtiene el string con el nombre completo de un símbolo.

El nombre completo está formado por el camino completo (full path) seguido de un carácter que puede ser ':' o '_', y por último, el propio nombre del símbolo.

El carácter entre el camino completo y el nombre del símbolo es:

  • ':' si el símbolo es una variable o parámetro
  • '_' si el símbolo es un procedimiento o función

El camino completo está formado por la concatenación de los nombres de los bloques que van desde el programa principal hasta el bloque que contiene la declaración del símbolo. Estos nombres se separan entre ellos con el carácter '_'

Parameters:
[in]snombre del símbolo
Returns:
el string con el nombre comleto del símbolo. Si éste no se encuentra se devuelve el string vacío
See also:
getFullPath() Consulta del nombre completo (con el path del simbolo)

Definition at line 721 of file SymTab.java.

Here is the call graph for this function:

Here is the caller graph for this function:

String SymTab.getFullPath ( String  s) [package]

Devuelve el string que contiene el camino completo hasta un símbolo.

Está formado por la concatenación de los nombres de los bloques que van desde el programa principal hasta el bloque que contiene la declaración del símbolo. Los nombres de bloques se separan entre ellos con el carácter '_'

Parameters:
[in]snombre del símbolo
Returns:
el string con el camino hasta el símbolo. Si éste no se encuentra se devuelve el string vacío

Definition at line 682 of file SymTab.java.

Here is the call graph for this function:

int SymTab.getStackDepth ( ) [package]

Devuelve la profundidad de la pila de tablas de símbolos.

Returns:
la profundidad/altura de la pila

Definition at line 809 of file SymTab.java.

Here is the caller graph for this function:

InfoSym SymTab.getTopSymbolInfoPtr ( int  i) [package]

Obtiene la información del i-ésimo símbolo del bloque actual.

No es necesario usar este método.

La tabla de símbolos del bloque actual se encuentra en la cima de la pila

Parameters:
[in]inúmero de símbolo, según el orden de inserción
Returns:
la información del símbolo
See also:
InfoSym

Definition at line 792 of file SymTab.java.

String SymTab.getTopSymbolName ( int  i) [package]

Obtiene el nombre del i-ésimo símbolo del bloque actual.

No es necesario usar este método.

La tabla de símbolos del bloque actual se encuentra en la cima de la pila

Parameters:
[in]inúmero de símbolo, según el orden de inserción
Returns:
el nombre del símbolo

Definition at line 769 of file SymTab.java.

void SymTab.initNewSymTab ( ) [package]

Inicialización de una pila de tabla de símbolos en modo BUILDING.

Es decir, al comenzar el análisis semántico (TypeCheck). Se crea una tabla completamente nueva.

Definition at line 413 of file SymTab.java.

void SymTab.initSavedSymTab ( ) [package]

Inicialización de una pila de tabla de símbolos en modo REVISITING.

Es decir, al comanzar la generación de código (CodeGen). Se usarán las tablas de símbolos que fueron creadas y guardadas previamente en el historial por el TypeCheck (en modo BUILDING)

Definition at line 426 of file SymTab.java.

void SymTab.insertSymbol ( String  s,
int  l,
int  c,
SymbolClass  sc,
TypeTree  t 
) [private]

Inserta un símbolo en la tabla.

El símbolo se inserta en la tabla del bloque en curso, que se encuentra en la cima de la pila de tablas de símbolos.

Parameters:
[in]snombre del símbolo
[in]lnúmero de línia en la que el símbolo se declara
[in]cposición dentro de la línia
[in]scclase del símbolo
[in]ttipo del símbolo

Definition at line 518 of file SymTab.java.

Here is the caller graph for this function:

void SymTab.insertSymbol ( CL_AST  id,
SymbolClass  sc,
TypeTree  t 
) [package]

Inserta en la tabla el símbolo extraído de un nodo del AST.

El símbolo se inserta en la tabla del bloque en curso, que se encuentra en la cima de la pila de tablas de símbolos.

Parameters:
[in]idnodo del AST que contine el símbolo a insertar (y su información)
[in]scclase del símbolo
[in]ttipo del símbolo

Definition at line 541 of file SymTab.java.

Here is the call graph for this function:

void SymTab.popScope ( ) [package]

Elimina la tabla de símbolos que hay en la cima de la pila de tablas de símbolos.

  • En modo BUILDING, durante el análisis semántico, se elimina de la pila pero permanece en el historial para cuando se recupere durante la generación de código
  • En modo REVISITING, durante la generación de código, se elimina tanto de la pila como del historial de tablas de símbolos

Definition at line 485 of file SymTab.java.

void SymTab.pushScope ( String  s) [package]

Empila la tabla de símbolos del bloque s en la pila de tablas de símbolos.

  • En modo BUILDING, durante el análisis semántico, se añade una tabla completamente nueva y vacía
  • En modo REVISITING, durante la generación de código, la tabla que se añade se recupera del historial de tablas y contiene los símbolos añadidos por el análisis semántico
Parameters:
[in]snombre del bloque

Definition at line 448 of file SymTab.java.

Here is the call graph for this function:

search_return SymTab.searchSymbol ( String  s) [package]

Busca el símbolo s en todas las tablas de la pila de tablas de símbolos.

En primer lugar lo busca en la tabla que hay en la cima (la correspondiente al bloque actual), y si no lo encuentra, lo busca por orden en las que están debajo.

Además de devolver la información asociada al símbolo, cuenta el número de niveles que se han saltado en la pila de tablas hasta llegar a la del bloque en el que el símbolo está declarado. Esta última información sólo es necesaria en la generación de código (CodeGen)

Parameters:
[in]snombre del símbolo a buscar
Returns:
la información con el resultado de la búsqueda. Si el símbolo no se encuentra en ninguna de las tablas de la pila entonces devuelve null

Definition at line 602 of file SymTab.java.

Here is the caller graph for this function:

search_return SymTab.searchSymbolCurrScope ( String  s) [package]

Busca el símbolo s sólo en la tabla de símbolos que hay en la cima de la pila de tablas.

Se usa para comprobar si un símbolo ya se encuentra declarado en el mismo bloque.

Parameters:
[in]snombre del símbolo a buscar
Returns:
la información con el resultado de la búsqueda. Si el símbolo no se encuentra declarado devuelve null

Definition at line 628 of file SymTab.java.

search_return SymTab.searchSymbolInScopeLevel ( String  s,
int  l 
) [package]

Busca el símbolo s sólo en la tabla de símbolos que se encuentra en el nivel l de la pila de tablas.

El valor l = 1 sirve para buscar el símbolo en la tabla de símbolos del programa principal, la que se encuentra en el fondo de la pila.

Se usa sólo en la versión extendida del lenguaje CL, y para buscar un símbolo que es un nombre de tipo en una tabla concreta

Parameters:
[in]snombre del símbolo a buscar
[in]lnivel de la tabla en la que se realiza la búsqueda * (l >= 1)
Returns:
la información con el resultado de la búsqueda. Si el símbolo no se encuentra declarado devuelve null

Definition at line 657 of file SymTab.java.

int SymTab.topSymbolsNumber ( ) [package]

Obtiene el número de símbolos del bloque actual.

No es necesario usar este método.

La tabla de símbolos del bloque actual se encuentra en la cima de la pila

Returns:
el número de símbolos

Definition at line 751 of file SymTab.java.

String SymTab.toString ( )

Describe cómo visualizar como texto la información de la pila de tablas de símbolos.

Recorre la pila y concatena los string 's que muestran el contenido de la tabla de símbolos de cada bloque.

Dependiendo del atributo mode se muestra más o menos información. Durante el análisis semántico mode=BUILDING, y durante la generación de código mode= REVISITING

Returns:
el string correspondiente a toda la información de la tabla de símbolos

Definition at line 826 of file SymTab.java.


Member Data Documentation

Modo de trabajo con la tabla de símbolos.

Durante el análisis semántico (TypeCheck) es BUILDING y durante la generación de código (CodeGen) es REVISITING

Definition at line 393 of file SymTab.java.

Siguiente tabla guardada en el histórico.

Sólo se usa en modo REVISITING

Definition at line 398 of file SymTab.java.

Vector<Integer> SymTab.tableIndexStack [private]

Pila de tablas de símbolos.

Se trata de una pila de enteros que son los índices de cada tabla en el vector del histórico

Definition at line 386 of file SymTab.java.

Vector<OneScope> SymTab.tablesHistory [private]

Secuencia de todas las tablas creadas (histórico).

Han sido creadas por el analizador semántico o TypeCheck, en modo BUILDING

Definition at line 380 of file SymTab.java.


The documentation for this class was generated from the following file:
 All Classes Files Functions Variables Enumerations