Este é um compilador simples desenvolvido em Go que traduz uma linguagem imperativa básica para LLVM IR, permitindo gerar executáveis reais utilizando llc e gcc. O projeto tem fins didáticos e demonstra de forma modular os principais estágios de um compilador: análise léxica, análise sintática, geração de AST e código intermediário.
- ✅ Análise léxica com geração de tokens
- ✅ Análise sintática e construção de AST
- ✅ Geração de código LLVM IR
- ✅ Integração com
clangpara gerar assembly e geração do arquivo executável - ✅ Execução opcional do binário
- ✅ Suporte a
int,void,func,while,return,print
simple-compiler/
├── cmd/
│ └── main.go # Entrada principal do compilador
├── lexer/ # Analisador léxico
├── parser/ # Parser e AST
├── intermediate-code-generation/ # Gerador de LLVM IR
├── token/ # Definição dos tokens
└── input.txt # Código de entrada exemplo
go run cmd/main.go input.txt meu_programago run cmd/main.go input.txt meu_programa --rungo run cmd/main.go input.txt./gopher <mesmas opções acima>func sum(int a, int b) int {
return a + b
}
func main() void {
int result = sum(2, -10)
print(result)
}O compilador irá:
- Gerar arquivos
.lltemporários - Compilar o código em um binário com nome definido (ou
outputse não especificado) - Opcionalmente, executar o binário se
--runfor fornecido
- Suporte a estruturas condicionais (
if,else) - Análise semântica completa
- Tipos adicionais (bool, float, string)
- Suporte a escopos e funções aninhadas
- Otimizações no LLVM IR