The base class that is extended to:
- LLVM Namespace Function
- LLVM Namespace BasicBlock
- Instruction
- Result of intermediate computation
Each of LLVM codegen’s methods returns a Value *object which represents the virtual register containing an expressions result.
Creating a Value codegen
class ExprAST {
public:
  virtual ~ExprAST() = default;
  virtual Value *codegen() = 0;
};