Header: AST.h
#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_H