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

declarações de tipos e funções para o analisador sintático (parser). More...

#include "tokens.h"
#include "symbol_table.h"
#include "ast.h"

Classes

struct  TokenList
 estrutura para armazenar dinamicamente a lista de tokens lida do scanner. More...
 
struct  Parser
 estrutura que mantém o estado completo do parser durante a análise. More...
 

Functions

int inicializar_token_list (TokenList *lista, int capacidade_inicial)
 inicializa uma lista de tokens com uma capacidade inicial.
 
void liberar_token_list (TokenList *lista)
 libera a memória alocada para uma TokenList.
 
int carregar_tokens (const char *nome_arquivo, TokenList *lista)
 carrega tokens de um arquivo de texto para uma TokenList.
 
void inicializar_parser (Parser *parser, TokenList *lista, PilhaTabelasSimbolos *symtab_stack)
 prepara a estrutura do parser para iniciar a análise a partir de uma lista de tokens.
 
void error (Parser *parser, const char *msg)
 reporta um erro sintático e encerra o programa.
 
const char * token_name (TokenType tipo)
 converte um TokenType em uma string legível para impressão.
 
void adicionar_token (TokenList *lista, Token token)
 adiciona um token ao final de uma TokenList, redimensionando se necessário.
 
ASTNodeparse (Parser *parser)
 função principal que dispara o processo de análise sintática.
 
ASTNodeprogram (Parser *parser)
 processa a regra 'program', o ponto de entrada da gramática.
 
ASTNodefunction (Parser *parser)
 processa a definição completa de uma função.
 
ASTNodevar_declaration (Parser *parser)
 processa a declaração de uma variável.
 
ASTNodetype (Parser *parser)
 processa um especificador de tipo (INT ou CHAR).
 
ASTNodestatement (Parser *parser)
 processa uma única instrução ou um bloco de instruções.
 
ASTNodeexpression (Parser *parser)
 processa uma expressão (incluindo relacionais, aritméticas, etc.).
 
ASTNodearithmetic_expression (Parser *parser)
 processa uma expressão aritmética de soma e subtração.
 
ASTNodeterm (Parser *parser)
 processa um termo (multiplicação/divisão).
 
ASTNodefactor (Parser *parser)
 processa um fator (número, ID, parênteses).
 
ASTNodeassign (Parser *parser)
 processa uma instrução de atribuição.
 
ASTNodeif_statement (Parser *parser)
 processa uma instrução condicional 'if-else'.
 
ASTNodefor_statement (Parser *parser)
 processa uma instrução de laço 'for'.
 
ASTNodeparam_list (Parser *parser)
 processa a lista de parâmetros na definição de uma função.
 
ASTNodearg_list (Parser *parser)
 processa a lista de argumentos em uma chamada de função.
 
ASTNodeprint_statement (Parser *parser)
 processa uma instrução 'print'.
 

Detailed Description

declarações de tipos e funções para o analisador sintático (parser).

este arquivo define a interface pública do módulo do parser. ele inclui a definição da estrutura de estado 'parser', a lista de tokens e os protótipos de todas as funções que compõem o parser recursivo descendente.

Function Documentation

◆ adicionar_token()

void adicionar_token ( TokenList lista,
Token  token 
)

adiciona um token ao final de uma TokenList, redimensionando se necessário.

Parameters
listaPonteiro para a TokenList.
tokenO Token a ser adicionado.

◆ arg_list()

ASTNode * arg_list ( Parser parser)

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

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

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_ARG_LIST) resultante.

◆ arithmetic_expression()

ASTNode * arithmetic_expression ( Parser parser)

processa uma expressão aritmética de soma e subtração.

processa uma expressão aritmética de soma e subtração.

Implementa a precedência média (PLUS, MINUS) de forma iterativa.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode resultante.

◆ assign()

ASTNode * assign ( Parser parser)

processa uma instrução de atribuição.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_ASSIGN) resultante.

◆ carregar_tokens()

int carregar_tokens ( const char *  nome_arquivo,
TokenList lista 
)

carrega tokens de um arquivo de texto para uma TokenList.

Parameters
nome_arquivoo caminho para o arquivo de tokens.
listaponteiro para a TokenList onde os tokens serão armazenados.
Returns
0 em caso de sucesso, -1 se o arquivo não puder ser aberto ou em caso de erro de memória.

carrega tokens de um arquivo de texto para uma TokenList.

Parameters
nome_arquivoNome do arquivo de tokens gerado pela Fase 1.
listaPonteiro para a TokenList onde os tokens serao armazenados.
Returns
0 em caso de sucesso, -1 em caso de falha.

◆ error()

void error ( Parser parser,
const char *  msg 
)

reporta um erro sintático e encerra o programa.

Parameters
parserponteiro para o estado do parser, para obter informações de contexto (linha, token).
msga mensagem de erro específica a ser exibida.

reporta um erro sintático e encerra o programa.

Parameters
parserPonteiro para a estrutura Parser.
msgA mensagem de erro.

◆ expression()

ASTNode * expression ( Parser parser)

processa uma expressão (incluindo relacionais, aritméticas, etc.).

processa uma expressão (incluindo relacionais, aritméticas, etc.).

Implementa a precedência baixa (comparacoes) de forma iterativa.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode resultante.

◆ factor()

ASTNode * factor ( Parser parser)

processa um fator (número, ID, parênteses).

processa um fator (número, ID, parênteses).

Esta é a função de maior precedência, consumindo valores literais ou agrupamentos.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode resultante.

◆ for_statement()

ASTNode * for_statement ( Parser parser)

processa uma instrução de laço 'for'.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_FOR) resultante.

◆ function()

ASTNode * function ( Parser parser)

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

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_FUNCTION_DEF) resultante.

◆ if_statement()

ASTNode * if_statement ( Parser parser)

processa uma instrução condicional 'if-else'.

processa uma instrução condicional 'if-else'.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_IF) resultante.

◆ inicializar_parser()

void inicializar_parser ( Parser parser,
TokenList lista,
PilhaTabelasSimbolos symtab_stack 
)

prepara a estrutura do parser para iniciar a análise a partir de uma lista de tokens.

Parameters
parserponteiro para a estrutura parser a ser inicializada.
listaponteiro para a TokenList contendo os tokens a serem analisados.
symtab_stackponteiro para a pilha de tabelas de símbolos.

prepara a estrutura do parser para iniciar a análise a partir de uma lista de tokens.

Parameters
parserPonteiro para a estrutura Parser.
listaPonteiro para a TokenList completa.
symtab_stackPilha de Tabelas de Símbolos.

◆ inicializar_token_list()

int inicializar_token_list ( TokenList lista,
int  capacidade_inicial 
)

inicializa uma lista de tokens com uma capacidade inicial.

Parameters
listaponteiro para a TokenList a ser inicializada.
capacidade_inicialo número inicial de tokens que a lista pode armazenar.
Returns
0 em caso de sucesso, -1 se a alocação de memória falhar.

inicializa uma lista de tokens com uma capacidade inicial.

Parameters
listaPonteiro para a TokenList.
capacidade_inicialCapacidade inicial do vetor de tokens.
Returns
0 em caso de sucesso, -1 em caso de falha.

◆ liberar_token_list()

void liberar_token_list ( TokenList lista)

libera a memória alocada para uma TokenList.

Parameters
listaponteiro para a TokenList a ser liberada.

libera a memória alocada para uma TokenList.

Parameters
listaPonteiro para a TokenList a ser liberada.

◆ param_list()

ASTNode * param_list ( Parser parser)

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

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

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_PARAM_LIST) resultante.

◆ parse()

ASTNode * parse ( Parser parser)

função principal que dispara o processo de análise sintática.

Parameters
parserponteiro para o estado do parser já inicializado.
Returns
um ponteiro para o nó raiz da ast gerada.

função principal que dispara o processo de análise sintática.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó raiz (NODE_PROGRAM) da Árvore Sintática Abstrata.

◆ print_statement()

ASTNode * print_statement ( Parser parser)

processa uma instrução 'print'.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_PRINT) resultante.

◆ program()

ASTNode * program ( Parser parser)

processa a regra 'program', o ponto de entrada da gramática.

processa a regra 'program', o ponto de entrada da gramática.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó raiz (NODE_PROGRAM) da AST.

◆ statement()

ASTNode * statement ( Parser parser)

processa uma única instrução ou um bloco de instruções.

processa uma única instrução ou um bloco de instruções.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode resultante.

◆ term()

ASTNode * term ( Parser parser)

processa um termo (multiplicação/divisão).

Implementa a precedência alta (MUL, DIV, MOD) de forma iterativa.

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode resultante.

◆ token_name()

const char * token_name ( TokenType  tipo)

converte um TokenType em uma string legível para impressão.

Parameters
tipoo valor do enum TokenType a ser convertido.
Returns
uma string constante representando o nome do token.

converte um TokenType em uma string legível para impressão.

Parameters
tipoO valor da enumeração TokenType.
Returns
A string correspondente ao token (ex: "ID", "ASSIGN").

◆ type()

ASTNode * type ( Parser parser)

processa um especificador de tipo (INT ou CHAR).

processa um especificador de tipo (INT ou CHAR).

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_TYPE) resultante.

◆ var_declaration()

ASTNode * var_declaration ( Parser parser)

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

Parameters
parserPonteiro para a estrutura Parser.
Returns
O nó ASTNode (NODE_VAR_DECL) resultante.