Now, since the AST is ready with all the necessary information in its data structure, the next phase is to generate LLVM IR. LLVM APIs are used in this code generation. LLVM IR has a predefined format that is generated by the inbuilt APIs of LLVM.
In order to generate LLVM IR, a virtual CodeGen
function is defined in each AST class (the AST classes were defined earlier in the AST section; these functions are additional to those classes) as follows:
Open the
toy.cpp
file as follows:$ vi toy.cpp
In the
BaseAST
class defined earlier, append theCodegen()
functions as follows:class BaseAST { … … virtual Value* Codegen() = 0; }; class NumericAST : public BaseAST { … … virtual Value* Codegen(); }; class VariableAST : public BaseAST { … … virtual Value* Codegen(); };
This virtual
Codegen()
function is included in every AST class we...