Micro C Compiler - MCC
Loading...
Searching...
No Matches
symbol_table.c File Reference

implementação das funções de gerenciamento da tabela de símbolos. More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "symbol_table.h"

Functions

PilhaTabelasSimboloscriar_pilha_tabelas ()
 cria e inicializa uma nova pilha de tabelas de símbolos.
 
void destruir_pilha_tabelas (PilhaTabelasSimbolos *pilha)
 libera toda a memória alocada por uma pilha de tabelas.
 
void empilhar_tabela (PilhaTabelasSimbolos *pilha)
 empilha uma nova tabela de símbolos, criando um novo escopo.
 
void desempilhar_tabela (PilhaTabelasSimbolos *pilha)
 desempilha a tabela de símbolos do topo, fechando o escopo atual.
 
int adicionar_simbolo (PilhaTabelasSimbolos *pilha, const char *nome, TokenType tipo, int is_function, int is_array, int array_size, int is_parameter)
 adiciona um novo símbolo à tabela que está no topo da pilha.
 
Simbolobuscar_simbolo_no_escopo_atual (PilhaTabelasSimbolos *pilha, const char *nome)
 busca por um símbolo apenas na tabela do escopo atual (topo da pilha).
 
Simbolobuscar_simbolo_em_todos_escopos (PilhaTabelasSimbolos *pilha, const char *nome)
 busca por um símbolo em todas as tabelas, do escopo atual para o global.
 

Detailed Description

implementação das funções de gerenciamento da tabela de símbolos.

contém a lógica para criar, destruir e manipular a pilha de tabelas de símbolos, permitindo a correta gestão de escopos aninhados.

Function Documentation

◆ adicionar_simbolo()

int adicionar_simbolo ( PilhaTabelasSimbolos pilha,
const char *  nome,
TokenType  tipo,
int  is_function,
int  is_array,
int  array_size,
int  is_parameter 
)

adiciona um novo símbolo à tabela que está no topo da pilha.

Parameters
pilhaa pilha de tabelas de símbolos.
nomeo nome do símbolo a ser adicionado.
tipoo tipo do símbolo (INT, CHAR, etc.).
is_functionflag que indica se é uma função.
is_arrayflag que indica se é um array.
array_sizeo tamanho do array (se aplicável).
Returns
0 em caso de sucesso, -1 em caso de erro.

◆ buscar_simbolo_em_todos_escopos()

Simbolo * buscar_simbolo_em_todos_escopos ( PilhaTabelasSimbolos pilha,
const char *  nome 
)

busca por um símbolo em todas as tabelas, do escopo atual para o global.

Parameters
pilhaa pilha de tabelas de símbolos.
nomeo nome do símbolo a ser buscado.
Returns
ponteiro para o primeiro Simbolo encontrado, caso contrário NULL.

◆ buscar_simbolo_no_escopo_atual()

Simbolo * buscar_simbolo_no_escopo_atual ( PilhaTabelasSimbolos pilha,
const char *  nome 
)

busca por um símbolo apenas na tabela do escopo atual (topo da pilha).

Parameters
pilhaa pilha de tabelas de símbolos.
nomeo nome do símbolo a ser buscado.
Returns
ponteiro para o Simbolo se encontrado, caso contrário NULL.

◆ criar_pilha_tabelas()

PilhaTabelasSimbolos * criar_pilha_tabelas ( )

cria e inicializa uma nova pilha de tabelas de símbolos.

aloca memória para a pilha, inicializa o topo e já empilha a primeira tabela, que representará o escopo global.

Returns
ponteiro para a nova pilha de tabelas de símbolos.

◆ desempilhar_tabela()

void desempilhar_tabela ( PilhaTabelasSimbolos pilha)

desempilha a tabela de símbolos do topo, fechando o escopo atual.

◆ destruir_pilha_tabelas()

void destruir_pilha_tabelas ( PilhaTabelasSimbolos pilha)

libera toda a memória alocada por uma pilha de tabelas.

Parameters
pilhaponteiro para a pilha a ser destruída.

◆ empilhar_tabela()

void empilhar_tabela ( PilhaTabelasSimbolos pilha)

empilha uma nova tabela de símbolos, criando um novo escopo.

Parameters
pilhaponteiro para a pilha onde a nova tabela será adicionada.