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

implementação das funções auxiliares para manipulação da árvore sintática abstrata (ast). More...

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

Functions

ASTNodecriar_no (NodeType type, int linha)
 aloca e inicializa um novo nó para a ast.
 
void adicionar_filho (ASTNode *pai, ASTNode *filho)
 adiciona um nó 'filho' a um nó 'pai' na ast.
 
void liberar_arvore (ASTNode *no)
 libera recursivamente toda a memória alocada para uma sub-árvore da ast.
 

Detailed Description

implementação das funções auxiliares para manipulação da árvore sintática abstrata (ast).

este arquivo contém a lógica para criar, conectar e destruir os nós da ast. essas funções são a base para que o analisador sintático possa construir a árvore de forma eficiente e para que a memória seja gerenciada corretamente ao final do processo.

Function Documentation

◆ adicionar_filho()

void adicionar_filho ( ASTNode pai,
ASTNode filho 
)

adiciona um nó 'filho' a um nó 'pai' na ast.

a função insere o nó filho no final da lista de filhos do nó pai, mantendo a ordem de inserção, que geralmente corresponde à ordem de aparição no código.

Parameters
paio nó que receberá o novo filho.
filhoo nó a ser adicionado como filho.

◆ criar_no()

ASTNode * criar_no ( NodeType  type,
int  linha 
)

aloca e inicializa um novo nó para a ast.

Parameters
typeo tipo do nó a ser criado (da enumeração NodeType).
linhaa linha do código fonte correspondente a este nó.
Returns
um ponteiro para o ASTNode recém-criado e inicializado. a função encerra o programa se a alocação de memória falhar.

◆ liberar_arvore()

void liberar_arvore ( ASTNode no)

libera recursivamente toda a memória alocada para uma sub-árvore da ast.

esta função deve ser chamada no nó raiz da árvore para limpar toda a memória utilizada pela ast ao final da compilação. ela navega em pós-ordem para garantir que os filhos sejam liberados antes dos pais.

Parameters
noo nó raiz da sub-árvore a ser liberada.