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

definições das estruturas de dados para a árvore sintática abstrata (ast). More...

#include <stdlib.h>
#include "tokens.h"

Classes

struct  ASTNode
 estrutura de um nó individual da árvore sintática abstrata (ast). More...
 

Typedefs

typedef struct ASTNode ASTNode
 estrutura de um nó individual da árvore sintática abstrata (ast).
 

Enumerations

enum  NodeType {
  NODE_UNDEFINED , NODE_PROGRAM , NODE_FUNCTION_DEF , NODE_VAR_DECL ,
  NODE_ASSIGN , NODE_IF , NODE_FOR , NODE_RETURN ,
  NODE_PRINT , NODE_CALL , NODE_BINARY_OP , NODE_UNARY_OP ,
  NODE_ID , NODE_INTEGER_CONST , NODE_CHAR_CONST , NODE_STRING_CONST ,
  NODE_BLOCK , NODE_PARAM_LIST , NODE_ARG_LIST , NODE_ARRAY_ACCESS ,
  NODE_TYPE
}
 enumeração de todos os tipos de nós possíveis na árvore sintática abstrata. More...
 

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

definições das estruturas de dados para a árvore sintática abstrata (ast).

este arquivo estabelece a fundação para a representação intermediária do código fonte. a ast gerada pelo analisador sintático é a principal estrutura de dados que será consumida pelas fases subsequentes do compilador, como a análise semântica e a geração de código.

Typedef Documentation

◆ ASTNode

typedef struct ASTNode ASTNode

estrutura de um nó individual da árvore sintática abstrata (ast).

esta é a estrutura central da ast. cada nó contém seu tipo, ponteiros para formar a hierarquia da árvore (filhos e irmãos) e uma união de dados para armazenar informações específicas, como o valor de uma constante ou o nome de um identificador.

Enumeration Type Documentation

◆ NodeType

enum NodeType

enumeração de todos os tipos de nós possíveis na árvore sintática abstrata.

cada valor nesta enumeração corresponde a uma construção gramatical ou a um elemento léxico da linguagem, permitindo que o analisador semântico identifique e processe cada parte da árvore de forma específica.

Enumerator
NODE_UNDEFINED 

nó indefinido ou para uso em estados de erro.

NODE_PROGRAM 

nó raiz da ast, representa o programa inteiro.

NODE_FUNCTION_DEF 

representa a definição completa de uma função.

NODE_VAR_DECL 

representa a declaração de uma variável.

NODE_ASSIGN 

representa uma operação de atribuição (ex: x = 5).

NODE_IF 

representa uma estrutura condicional 'if-else'.

NODE_FOR 

representa um laço 'for'.

NODE_RETURN 

representa um comando 'return'.

NODE_PRINT 

representa um comando 'print'.

NODE_CALL 

representa uma chamada de função.

NODE_BINARY_OP 

representa uma operação binária (ex: +, -, *, <, ==).

NODE_UNARY_OP 

representa uma operação unária (ex: -, !).

NODE_ID 

representa um identificador (nome de variável ou função).

NODE_INTEGER_CONST 

representa uma constante do tipo inteiro.

NODE_CHAR_CONST 

representa uma constante do tipo caractere.

NODE_STRING_CONST 

representa uma constante do tipo string.

NODE_BLOCK 

representa um bloco de comandos delimitado por { ... }.

NODE_PARAM_LIST 

representa a lista de parâmetros na definição de uma função.

NODE_ARG_LIST 

representa a lista de argumentos em uma chamada de função.

NODE_ARRAY_ACCESS 

representa o acesso a um elemento de um array (ex: v[i]).

NODE_TYPE 

nó simples para armazenar um tipo de dado (int, char).

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.