|
Micro C Compiler - MCC
|
implementação do analisador semântico. More...
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>#include "semantic.h"Functions | |
| static void | analisar_no (ASTNode *no, PilhaTabelasSimbolos *pilha, Simbolo *escopo_funcao_atual, bool is_param_decl) |
| função recursiva que percorre a árvore para análise semântica. | |
| static TokenType | get_expression_type (ASTNode *expr_node, PilhaTabelasSimbolos *pilha, int *string_len) |
| determina o tipo de uma expressão e, se for uma string, seu tamanho. | |
| static int | get_symbol_size (Simbolo *s) |
| calcula o tamanho em bytes de um símbolo para alocação na pilha. | |
| static void | calcular_offsets (TabelaSimbolos *tabela) |
| percorre uma tabela de um escopo e calcula os offsets de memória. | |
| static void | erro_semantico (const char *msg, int linha) |
| função auxiliar para reportar erros semânticos e encerrar a compilação. | |
| void | analisar_semanticamente (ASTNode *raiz, PilhaTabelasSimbolos *pilha) |
| função principal que dispara a análise semântica. | |
implementação do analisador semântico.
este módulo percorre a árvore sintática abstrata (ast) para realizar checagens de tipo, de declaração e de escopo. ele utiliza a tabela de símbolos e calcula os deslocamentos de memória para o back-end.
|
static |
função recursiva que percorre a árvore para análise semântica.
*
Implementa a lógica do tree walker para checagem de tipos, declaração e gerenciamento de escopo. As ações são divididas em pré-ordem (empilhar escopo) e pós-ordem (calcular offsets e desempilhar).
| no | O nó atual da AST. |
| pilha | A pilha de tabelas de símbolos. |
| escopo_funcao_atual | Ponteiro para o símbolo da função que contém o nó atual. |
| is_param_decl | Flag booleana que indica se o nó atual é uma declaração de parâmetro. |
| void analisar_semanticamente | ( | ASTNode * | raiz, |
| PilhaTabelasSimbolos * | pilha | ||
| ) |
função principal que dispara a análise semântica.
função principal que inicia a análise semântica da ast.
|
static |
percorre uma tabela de um escopo e calcula os offsets de memória.
esta função é chamada ao final da análise de um escopo de função (pós-ordem). ela faz duas passagens: 1. Calcula offsets POSITIVOS para parâmetros (ex: [rbp+16]).
| tabela | a tabela de símbolos do escopo da função. |
|
static |
função auxiliar para reportar erros semânticos e encerrar a compilação.
*
| msg | A mensagem de erro a ser exibida. |
| linha | O número da linha onde o erro ocorreu. |
|
static |
determina o tipo de uma expressão e, se for uma string, seu tamanho.
realiza a checagem de tipos e a validacao de usos de variaveis e funcoes.
| expr_node | o nó raiz da expressão a ser analisada. |
| pilha | a pilha da tabela de símbolos para consulta de tipos. |
| string_len | ponteiro para um inteiro que receberá o tamanho da string (se aplicável). |
|
static |
calcula o tamanho em bytes de um símbolo para alocação na pilha.
| s | o símbolo a ser medido. |