Este projeto implementa um compilador que transforma uma versão simplificada da linguagem C (C11) em LLVM IR (Intermediate Representation). Ele oferece suporte a expressões aritméticas, comparações, operações lógicas, estruturas de controle, tipos de dados básicos e compostos, além de operações de entrada e saída.
- Bruno Lopes Altoe
- Daniel Siqueira de Oliveira
- Lucas Gabriel de Oliveira Costa
- C Simplificado (C11)
- LLVM IR (Intermediate Representation)
- Operações suportadas:
+,-,*,/,%,(,)
- Operadores:
==,!=,<,>,>=,<=
- Operadores:
&&,||,!
- Operador:
=
- Delimitados por
{}
- Condicionais:
if,if-else - Estruturas de repetição:
while
- Tipos suportados:
int,float,char(entre aspas simples),string(entre aspas duplas),void
- Declaração de vetores:
<tipo> <nome>[<int>]
- Sintaxe:
<tipo> <nome>(<tipo> <nome>, ...) { <bloco de código> }
- Funções:
printf,scanf
int, float, char, void, printf, scanf, if, else, while, main, return
src/: Contém o código-fonte do compilador.tests/: Contém exemplos e testes para o compilador.
- GCC: Compilador GNU para linguagens como C e C++.
- LLVM: Conjunto de ferramentas de compilação, incluindo o compilador
clange o runtime do LLVM.
- Clone este repositório:
git clone git@github.com:brutexx/Compilador.git- Entre na pasta
src/:
cd src/- Compile o projeto:
make- Execute o compilador em um arquivo
.ce redirecione a saída para um arquivo.ll:
./a.out < arquivo_de_entrada.c > arquivo_de_saida.ll- Execute o arquivo LLVM IR gerado com o
lli:
lli arquivo_de_saida.ll- Entre na pasta
tests/:
cd tests/- Execute o comando para rodar todos os testes:
make- O terminal exibirá mensagens de processamento para cada arquivo dentro de
input_compiler. - As saídas do compilador estarão em
results_folder. - As saídas esperadas estarão em
output_compiler. - Testes com diferenças entre a saída do compilador e a saída esperada aparecerão em arquivos
.diffdentro dediff_compiler. - A execução dos arquivos
.llestará emresults_llvm. ⚠️ As demais pastas são referentes ao processo de desenvolvimento do compilador e são mantidas como histórico.