|
Micro C Compiler - MCC
|
implementação do analisador sintático (parser) da linguagem. More...
Functions | |
| const char * | token_name (TokenType tipo) |
| converte um TokenType em uma string legível. | |
| int | inicializar_token_list (TokenList *lista, int capacidade_inicial) |
| inicializa uma lista de tokens. | |
| void | liberar_token_list (TokenList *lista) |
| libera a memória de uma TokenList. | |
| int | carregar_tokens (const char *nome_arquivo, TokenList *lista) |
| carrega tokens de um arquivo para uma TokenList. | |
| void | adicionar_token (TokenList *lista, Token token) |
| adiciona um token ao final de uma TokenList, redimensionando se necessário. | |
| void | inicializar_parser (Parser *parser, TokenList *lista, PilhaTabelasSimbolos *symtab_stack) |
| prepara o parser para iniciar a análise. | |
| ASTNode * | parse (Parser *parser) |
| função principal que dispara a análise sintática. | |
| static Token * | peek (Parser *parser) |
| Retorna o próximo token (lookahead) sem consumi-lo. | |
| void | advance (Parser *parser) |
| consome o token atual e avança para o próximo. | |
| void | match (Parser *parser, TokenType expected) |
| valida o token atual e avança, ou lança um erro. | |
| void | error (Parser *parser, const char *msg) |
| reporta um erro sintático e encerra. | |
| ASTNode * | expression (Parser *parser) |
| processa uma expressão (incluindo relacionais). | |
| ASTNode * | arithmetic_expression (Parser *parser) |
| processa uma expressão aritmética (soma/subtração). | |
| ASTNode * | arg_list (Parser *parser) |
| processa uma lista de argumentos em uma chamada de função. | |
| ASTNode * | assign (Parser *parser) |
| processa uma instrução de atribuição. | |
| ASTNode * | if_statement (Parser *parser) |
| processa uma instrução 'if-else'. | |
| ASTNode * | print_statement (Parser *parser) |
| processa uma instrução 'print'. | |
| ASTNode * | for_statement (Parser *parser) |
| processa uma instrução de laço 'for'. | |
| ASTNode * | statement (Parser *parser) |
| processa uma única instrução ou um bloco. | |
| ASTNode * | var_declaration (Parser *parser) |
| processa a declaração de uma variável. | |
| ASTNode * | type (Parser *parser) |
| processa um especificador de tipo. | |
| ASTNode * | function (Parser *parser) |
| processa a definição completa de uma função. | |
| ASTNode * | param_list (Parser *parser) |
| processa a lista de parâmetros de uma função. | |
| ASTNode * | program (Parser *parser) |
| processa a regra 'program', ponto de entrada da gramática. | |
| ASTNode * | factor (Parser *parser) |
| processa a regra 'factor' (números, IDs, parênteses, chamadas de função e acesso a array). | |
| ASTNode * | term (Parser *parser) |
| processa um termo (multiplicação/divisão). | |
implementação do analisador sintático (parser) da linguagem.
este arquivo contém a lógica para a análise sintática, que é a segunda fase do compilador. ele recebe uma lista de tokens, verifica se a sequência obedece às regras gramaticais da linguagem e constrói uma árvore sintática abstrata (ast) para representar a estrutura do código, usando a abordagem de parser recursivo descendente.
| void advance | ( | Parser * | parser | ) |
consome o token atual e avança para o próximo.
| parser | Ponteiro para a estrutura Parser. |
| int carregar_tokens | ( | const char * | nome_arquivo, |
| TokenList * | lista | ||
| ) |
| void error | ( | Parser * | parser, |
| const char * | msg | ||
| ) |
reporta um erro sintático e encerra.
reporta um erro sintático e encerra o programa.
| parser | Ponteiro para a estrutura Parser. |
| msg | A mensagem de erro. |
processa a regra 'factor' (números, IDs, parênteses, chamadas de função e acesso a array).
processa um fator (número, ID, parênteses).
Esta é a função de maior precedência, consumindo valores literais ou agrupamentos.
| parser | Ponteiro para a estrutura Parser. |
| void inicializar_parser | ( | Parser * | parser, |
| TokenList * | lista, | ||
| PilhaTabelasSimbolos * | symtab_stack | ||
| ) |
| int inicializar_token_list | ( | TokenList * | lista, |
| int | capacidade_inicial | ||
| ) |
inicializa uma lista de tokens.
inicializa uma lista de tokens com uma capacidade inicial.
| lista | Ponteiro para a TokenList. |
| capacidade_inicial | Capacidade inicial do vetor de tokens. |
| void liberar_token_list | ( | TokenList * | lista | ) |
valida o token atual e avança, ou lança um erro.
| parser | Ponteiro para a estrutura Parser. |
| expected | O TokenType esperado. |
função principal que dispara a análise sintática.
função principal que dispara o processo de análise sintática.
| parser | Ponteiro para a estrutura Parser. |
processa a regra 'program', ponto de entrada da gramática.
processa a regra 'program', o ponto de entrada da gramática.
| parser | Ponteiro para a estrutura Parser. |
| const char * token_name | ( | TokenType | tipo | ) |
converte um TokenType em uma string legível.
converte um TokenType em uma string legível para impressão.
| tipo | O valor da enumeração TokenType. |