First commit

This commit is contained in:
mguinhos committed 2026-10-06 22:12:02 +00:00
commit 3d68783535
25 files changed
+1751

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
#ifndef MICROPASCAL_LEXER_LEXER_H
#define MICROPASCAL_LEXER_LEXER_H
#include "micropascal-lexer/token.h"
typedef struct Lexer {
const char* fonte;
size_t tamanho;
size_t posicao;
int linha;
int coluna;
int houve_erro;
} Lexer;
void lexerInicializar(Lexer* lexer, const char* fonte);
Token lexerProximoToken(Lexer* lexer);
void tokenLiberar(Token* token);
#endif
+60
View File
@@ -0,0 +1,60 @@
#ifndef MICROPASCAL_LEXER_TOKEN_H
#define MICROPASCAL_LEXER_TOKEN_H
#include <stddef.h>
typedef enum TokenKind {
TOKEN_EOF,
TOKEN_IDENTIFICADOR,
TOKEN_INTEIRO_LITERAL,
TOKEN_REAL_LITERAL,
TOKEN_CHAR_LITERAL,
TOKEN_MENOR,
TOKEN_MAIOR,
TOKEN_MENOR_IGUAL,
TOKEN_MAIOR_IGUAL,
TOKEN_IGUAL,
TOKEN_DIFERENTE,
TOKEN_MAIS,
TOKEN_MENOS,
TOKEN_MULTIPLICACAO,
TOKEN_DIVISAO,
TOKEN_DIV,
TOKEN_AND,
TOKEN_OR,
TOKEN_NOT,
TOKEN_ATRIBUICAO,
TOKEN_ABRE_PARENTESES,
TOKEN_FECHA_PARENTESES,
TOKEN_VIRGULA,
TOKEN_PONTO_VIRGULA,
TOKEN_PONTO,
TOKEN_DOIS_PONTOS,
TOKEN_PROGRAM,
TOKEN_IF,
TOKEN_THEN,
TOKEN_ELSE,
TOKEN_WHILE,
TOKEN_DO,
TOKEN_REPEAT,
TOKEN_UNTIL,
TOKEN_INTEGER,
TOKEN_REAL,
TOKEN_CHAR,
TOKEN_BEGIN,
TOKEN_END,
TOKEN_WRITE,
TOKEN_VAR,
TOKEN_ERRO
} TokenKind;
typedef struct Token {
TokenKind kind;
char* lexema;
int linha;
int coluna;
} Token;
const char* tokenKindNome(TokenKind kind);
#endif
+31
View File
@@ -0,0 +1,31 @@
#ifndef MICROPASCAL_PARSER_AST_H
#define MICROPASCAL_PARSER_AST_H
typedef enum AstKind {
AST_PROGRAMA,
AST_SECAO_VAR,
AST_DECL_VAR,
AST_TIPO,
AST_BLOCO,
AST_LISTA_COMANDOS,
AST_ATRIBUICAO,
AST_ITERACAO,
AST_DECISAO,
AST_ESCRITA,
AST_EXPRESSAO_BINARIA,
AST_EXPRESSAO_UNARIA,
AST_EXPRESSAO_PARENTESES,
AST_EXPRESSAO_LITERAL,
AST_EXPRESSAO_IDENTIFICADOR
} AstKind;
typedef struct AstNo {
AstKind kind;
char* valor;
struct AstNo* esquerda;
struct AstNo* direita;
struct AstNo* terceiro;
struct AstNo* proximo;
} AstNo;
#endif
+21
View File
@@ -0,0 +1,21 @@
#ifndef MICROPASCAL_PARSER_PARSER_H
#define MICROPASCAL_PARSER_PARSER_H
#include "micropascal-lexer/lexer.h"
#include "micropascal-parser/ast.h"
typedef struct Parser {
Lexer* lexer;
Token atual;
int houve_erro;
int total_erros;
int silencioso;
} Parser;
void parserInicializar(Parser* parser, Lexer* lexer);
void parserSilenciarErros(Parser* parser, int silenciar);
AstNo* parserAnalisarPrograma(Parser* parser);
void astLiberar(AstNo* no);
void astImprimir(const AstNo* no, int profundidade);
#endif
+26
View File
@@ -0,0 +1,26 @@
#ifndef MICROPASCAL_TESTS_TESTES_H
#define MICROPASCAL_TESTS_TESTES_H
#include <stdio.h>
typedef struct ResultadoTeste {
int total;
int passaram;
int falharam;
} ResultadoTeste;
void runLexerTests(ResultadoTeste* resultado_testes);
void runParserTests(ResultadoTeste* resultado_testes);
#define TESTE_ASSERT(resultado_testes, condicao, descricao) \
do { \
(resultado_testes)->total++; \
if (condicao) { \
(resultado_testes)->passaram++; \
} else { \
(resultado_testes)->falharam++; \
printf("FALHOU: %s (linha %d)\n", descricao, __LINE__); \
} \
} while (0)
#endif