Traductor e intérprete del lenguaje CL 1.23
|
Implementación de la tabla de símbolos. More...
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< OneScope > | tablesHistory |
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. |
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
Definition at line 374 of file SymTab.java.
SymTab.SymTab | ( | ) | [package] |
Constructor.
Definition at line 402 of file SymTab.java.
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ónEl 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 '_'
[in] | s | nombre del símbolo |
Definition at line 721 of file SymTab.java.
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 '_'
[in] | s | nombre del símbolo |
Definition at line 682 of file SymTab.java.
int SymTab.getStackDepth | ( | ) | [package] |
Devuelve la profundidad de la pila de tablas de símbolos.
Definition at line 809 of file SymTab.java.
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
[in] | i | número de símbolo, según el orden de inserción |
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
[in] | i | número de símbolo, según el orden de inserción |
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.
[in] | s | nombre del símbolo |
[in] | l | número de línia en la que el símbolo se declara |
[in] | c | posición dentro de la línia |
[in] | sc | clase del símbolo |
[in] | t | tipo del símbolo |
Definition at line 518 of file SymTab.java.
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.
[in] | id | nodo del AST que contine el símbolo a insertar (y su información) |
[in] | sc | clase del símbolo |
[in] | t | tipo del símbolo |
Definition at line 541 of file SymTab.java.
void SymTab.popScope | ( | ) | [package] |
Elimina la tabla de símbolos que hay en la cima de la pila de tablas de símbolos.
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 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.
BUILDING
, durante el análisis semántico, se añade una tabla completamente nueva y vacía 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[in] | s | nombre del bloque |
Definition at line 448 of file SymTab.java.
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
)
[in] | s | nombre del símbolo a buscar |
null
Definition at line 602 of file SymTab.java.
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.
[in] | s | nombre del símbolo a buscar |
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
[in] | s | nombre del símbolo a buscar |
[in] | l | nivel de la tabla en la que se realiza la búsqueda * (l >= 1) |
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
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
Definition at line 826 of file SymTab.java.
SymTabMode SymTab.mode [private] |
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.
int SymTab.nextSavedInHistory [private] |
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.