saqut-compiler/Parsing.cpp

39 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "llvm/include/llvm-c/Core.h"
#include "llvm/include/llvm-c/Analysis.h"
#include <stdio.h>
int main() {
// 1. LLVM Context Oluştur (Bellek yönetimi ve izolasyon için şart)
LLVMContextRef context = LLVMContextCreate();
// 2. Modülü bu context içinde oluştur
LLVMModuleRef mod = LLVMModuleCreateWithNameInContext("saqut_module", context);
// 3. Basit bir fonksiyon tipi oluştur: int32 f()
LLVMTypeRef ret_type = LLVMInt32TypeInContext(context);
LLVMTypeRef func_type = LLVMFunctionType(ret_type, NULL, 0, 0);
// 4. Fonksiyonu modüle ekle
LLVMValueRef main_func = LLVMAddFunction(mod, "saqut_main", func_type);
// 5. Temel bir blok (Entry block) ekle
LLVMBasicBlockRef entry = LLVMAppendBasicBlockInContext(context, main_func, "entry");
// 6. Bir Builder oluştur ve fonksiyonun içine "return 0" ekle
LLVMBuilderRef builder = LLVMCreateBuilderInContext(context);
LLVMPositionBuilderAtEnd(builder, entry);
LLVMBuildRet(builder, LLVMConstInt(LLVMInt32TypeInContext(context), 0, 0));
// 7. Oluşturulan IR kodunu terminale yazdır (Gözle kontrol için)
printf("--- Oluşturulan LLVM IR Kodu ---\n");
LLVMDumpModule(mod);
printf("--------------------------------\n");
printf("saQut: LLVM Modülü ve Fonksiyonu başarıyla oluşturuldu!\n");
// 8. Temizlik (Bellek sızıntısını önlemek için önemli)
LLVMDisposeBuilder(builder);
LLVMDisposeModule(mod);
LLVMContextDispose(context);
return 0;
}