Crusty — Compilador de C

O Crusty é um compilador de C desenvolvido como projeto acadêmico na disciplina de Compiladores 1. Seu objetivo é transformar código-fonte C em código executável passando por todas as fases clássicas de um compilador moderno.

Pipeline de Compilação

# Fase Status
01 Análise Léxica Concluída
02 Análise Sintática Concluída
03 Análise Semântica Concluída
04 Representação Intermediária Concluída
05 Otimização Concluída
06 Geração de Código Concluída

Estrutura do Projeto

src/
├── main.rs         # Ponto de entrada (CLI, pipeline integration)
├── lib.rs          # Declaração do pacote crusty
├── lexer/          # Análise Léxica (scanner, tokens, regras)
│   ├── scanner.rs
│   ├── tokens/
│   └── rules/
├── parser/         # Análise Sintática (Pratt parser, AST)
│   ├── parser.rs
│   ├── precedence.rs
│   └── rules/
├── analyser/       # Análise Semântica (tabela de símbolos, tipos)
│   ├── semantic.rs
│   └── symbol_table.rs
├── ir/             # Representação Intermediária (TAC, lowering, CFG)
│   ├── tac.rs
│   ├── lower.rs
│   └── cfg.rs
├── codegen/        # Geração de Código
│   ├── inter/      # Otimizador (DCE, propagation, constant folding, etc)
│   ├── last/       # Backend final (assembly x86-64, stack frames)
│   └── reg_alloc.rs
├── common/         # Estruturas compartilhadas
│   ├── ast/        # AST: decl, expr, stmt
│   ├── errors/
│   ├── input/
│   ├── utils/
│   └── builtins.rs # Funções embutidas (malloc, free, printf, etc)
└── tests/          # Testes unitários e de integração

Tecnologias

Componente Tecnologia Justificativa
Linguagem Rust Segurança de memória e sistema de tipos expressivo
Leitura de arquivo memmap2 Memory-mapped I/O para arquivos grandes
Testes Rust built-in 165 testes unitários com #[test]

Recuperação de Erros

O Crusty adota a estratégia de error recovery em cada fase: ao encontrar um erro, o compilador registra o diagnóstico e continua processando o restante do código. Isso permite que múltiplos erros sejam reportados em uma única execução.