Lexer Development Tutorials, Guides & Insights
Unlock 1+ expert-curated lexer tutorials, real-world code snippets, and modern dev strategies. From fundamentals to advanced topics, boost your lexer skills on DeveloperBreeze.
Adblocker Detected
It looks like you're using an adblocker. Our website relies on ads to keep running. Please consider disabling your adblocker to support us and access the content.
Implementing a Domain-Specific Language (DSL) with LLVM and C++
Tutorial February 12, 2025
#ifndef DSL_AST_H
#define DSL_AST_H
#include <memory>
#include <llvm/IR/Value.h>
#include <llvm/IR/IRBuilder.h>
// Base class for all expression nodes.
class ASTNode {
public:
virtual ~ASTNode() = default;
virtual llvm::Value* codegen(llvm::IRBuilder<>& builder) = 0;
};
// Expression for numeric literals.
class NumberExprAST : public ASTNode {
public:
NumberExprAST(double value) : value(value) {}
llvm::Value* codegen(llvm::IRBuilder<>& builder) override;
private:
double value;
};
// Expression for a binary operator.
class BinaryExprAST : public ASTNode {
public:
BinaryExprAST(llvm::TokenType op, std::unique_ptr<ASTNode> lhs,
std::unique_ptr<ASTNode> rhs)
: op(op), lhs(std::move(lhs)), rhs(std::move(rhs)) {}
llvm::Value* codegen(llvm::IRBuilder<>& builder) override;
private:
TokenType op;
std::unique_ptr<ASTNode> lhs, rhs;
};
#endif // DSL_AST_HImplementation: AST.cpp