DeveloperBreeze

Cmake Development Tutorials, Guides & Insights

Unlock 1+ expert-curated cmake tutorials, real-world code snippets, and modern dev strategies. From fundamentals to advanced topics, boost your cmake skills on DeveloperBreeze.

Implementing a Domain-Specific Language (DSL) with LLVM and C++

Tutorial February 12, 2025

#include "DSL/AST.h"
#include <llvm/IR/Constants.h>
#include <llvm/IR/LLVMContext.h>

llvm::Value* NumberExprAST::codegen(llvm::IRBuilder<>& builder) {
    return llvm::ConstantFP::get(builder.getDoubleTy()->getContext(), llvm::APFloat(value));
}

llvm::Value* BinaryExprAST::codegen(llvm::IRBuilder<>& builder) {
    llvm::Value* L = lhs->codegen(builder);
    llvm::Value* R = rhs->codegen(builder);
    if (!L || !R) return nullptr;

    switch (op) {
        case TokenType::Plus:
            return builder.CreateFAdd(L, R, "addtmp");
        case TokenType::Minus:
            return builder.CreateFSub(L, R, "subtmp");
        case TokenType::Asterisk:
            return builder.CreateFMul(L, R, "multmp");
        case TokenType::Slash:
            return builder.CreateFDiv(L, R, "divtmp");
        default:
            return nullptr;
    }
}

Note: We use LLVM’s IRBuilder to simplify the creation of IR instructions. Adjust the code if your LLVM API has evolved by 2025.