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

programa principal e orquestrador do compilador. More...

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "scanner/scanner.h"
#include "parser/parser.h"
#include "semantic/semantic.h"
#include "ir/ir.h"
#include "intercode/intercode.h"
#include "assembly/assembly.h"

Macros

#define VERSION   "0.1"
 versao atual do compilador.
 
#define PRINT(format, ...)   do { if (arquivo) fprintf(arquivo, format, ##__VA_ARGS__); else printf(format, ##__VA_ARGS__); } while(0)
 

Functions

void imprimir_tokens (TokenList *tokens)
 imprime o conteúdo de uma TokenList no console.
 
void salvar_tokens_em_arquivo (TokenList *tokens, bool verbose)
 salva o conteúdo de uma TokenList no arquivo 'tokens.txt'.
 
void imprimir_ast (ASTNode *arvore)
 imprime a Árvore Sintática Abstrata (AST) no console.
 
void salvar_ast (ASTNode *arvore, bool verbose)
 salva a Árvore Sintática Abstrata (AST) no arquivo 'ast.txt'.
 
void imprimir_ir (IR_Instruction *ir_head)
 imprime a lista de Código Intermediário (IR) de forma legível no console.
 
void salvar_ir_em_arquivo (IR_Instruction *ir_head, bool verbose)
 salva a lista de Código Intermediário (IR) no arquivo 'ir.txt'.
 
int executar_analise_lexica (const char *nome_arquivo, TokenList *lista)
 orquestra a fase de análise léxica.
 
int main (int argc, char *argv[])
 ponto de entrada principal do compilador.
 
void processar_ast_recursivamente (ASTNode *no, int indent_level, FILE *arquivo)
 função recursiva para imprimir ou salvar a AST de forma legível.
 

Detailed Description

programa principal e orquestrador do compilador.

este arquivo contém a função 'main' que controla o fluxo de compilação, invocando as fases de análise léxica, sintática e semântica em sequência. ele também lida com argumentos de linha de comando para permitir a inspeção da saída de cada fase individualmente.

Macro Definition Documentation

◆ PRINT

#define PRINT (   format,
  ... 
)    do { if (arquivo) fprintf(arquivo, format, ##__VA_ARGS__); else printf(format, ##__VA_ARGS__); } while(0)

◆ VERSION

#define VERSION   "0.1"

versao atual do compilador.

Function Documentation

◆ executar_analise_lexica()

int executar_analise_lexica ( const char *  nome_arquivo,
TokenList lista 
)

orquestra a fase de análise léxica.

lê o arquivo fonte, gera tokens e adiciona-os à lista. Encerra se encontrar um token UNDEF.

Parameters
nome_arquivoCaminho para o arquivo fonte.
listaPonteiro para a TokenList onde os tokens serao armazenados.
Returns
0 em caso de sucesso, -1 em caso de erro léxico.

◆ imprimir_ast()

void imprimir_ast ( ASTNode arvore)

imprime a Árvore Sintática Abstrata (AST) no console.

Parameters
arvoreO nó raiz da AST.

◆ imprimir_ir()

void imprimir_ir ( IR_Instruction ir_head)

imprime a lista de Código Intermediário (IR) de forma legível no console.

imprime a lista de Código Intermediário (IR) de forma legível.

Parameters
ir_headO ponteiro para a primeira instrução da lista de IR.

◆ imprimir_tokens()

void imprimir_tokens ( TokenList tokens)

imprime o conteúdo de uma TokenList no console.

Parameters
tokensPonteiro para a lista de tokens.

◆ main()

int main ( int  argc,
char *  argv[] 
)

ponto de entrada principal do compilador.

controla o fluxo de compilação fase por fase, dependendo dos argumentos de linha de comando.

Parameters
argcNúmero de argumentos.
argvVetor de argumentos (contém o nome do programa e o arquivo fonte).
Returns
0 em caso de sucesso, -1 em caso de erro.

◆ processar_ast_recursivamente()

void processar_ast_recursivamente ( ASTNode no,
int  indent_level,
FILE *  arquivo 
)

função recursiva para imprimir ou salvar a AST de forma legível.

Parameters
noO nó atual da AST.
indent_levelNível de indentação atual.
arquivoPonteiro para o arquivo de saída (NULL para console).

◆ salvar_ast()

void salvar_ast ( ASTNode arvore,
bool  verbose 
)

salva a Árvore Sintática Abstrata (AST) no arquivo 'ast.txt'.

Parameters
arvoreO nó raiz da AST.
verboseSe verdadeiro, imprime a mensagem de sucesso no console.

◆ salvar_ir_em_arquivo()

void salvar_ir_em_arquivo ( IR_Instruction ir_head,
bool  verbose 
)

salva a lista de Código Intermediário (IR) no arquivo 'ir.txt'.

Parameters
ir_headO ponteiro para a primeira instrução da lista de IR.
verboseSe verdadeiro, imprime a mensagem de sucesso no console.

◆ salvar_tokens_em_arquivo()

void salvar_tokens_em_arquivo ( TokenList tokens,
bool  verbose 
)

salva o conteúdo de uma TokenList no arquivo 'tokens.txt'.

Parameters
tokensPonteiro para a lista de tokens.
verboseSe verdadeiro, imprime a mensagem de sucesso no console.