tinysnail 3 years ago
commit aa257bc02c

@ -1,7 +1,7 @@
#include "BasicBlock.h"
#include "Constant.h"
#include "Function.h"
#include "IRBuilder.h"
#include "IRStmtBuilder.h"
#include "Module.h"
#include "Type.h"
@ -22,7 +22,7 @@
int main() {
auto module = new Module("SysY code"); // module name是什么无关紧要
auto builder = new IRBuilder(nullptr, module);
auto builder = new IRStmtBuilder(nullptr, module);
Type *Int32Type = Type::get_int32_type(module);
// 全局数组,num,x

@ -5,13 +5,13 @@
#include "Instruction.h"
#include "Value.h"
class IRBuilder {
class IRStmtBuilder {
private:
BasicBlock *BB_;
Module *m_;
public:
IRBuilder(BasicBlock *bb, Module *m) : BB_(bb), m_(m) {};
~IRBuilder() = default;
IRStmtBuilder(BasicBlock *bb, Module *m) : BB_(bb), m_(m) {};
~IRStmtBuilder() = default;
Module *get_module(){return m_;}
BasicBlock *get_insert_block() { return this->BB_; }
void set_insert_point(BasicBlock *bb) { this->BB_ = bb; } //在某个基本块中插入指令

@ -69,7 +69,7 @@ private:
std::vector<std::map<std::string, Value *>> name2func;
};
class SysYFBuilder: public SyntaxTree::Visitor
class IRBuilder: public SyntaxTree::Visitor
{
private:
virtual void visit(SyntaxTree::InitVal &) override final;
@ -95,13 +95,13 @@ private:
virtual void visit(SyntaxTree::BreakStmt &) override final;
virtual void visit(SyntaxTree::ContinueStmt &) override final;
IRBuilder *builder;
IRStmtBuilder *builder;
Scope scope;
std::unique_ptr<Module> module;
public:
SysYFBuilder(){
IRBuilder(){
module = std::unique_ptr<Module>(new Module("SysYF code"));
builder = new IRBuilder(nullptr, module.get());
builder = new IRStmtBuilder(nullptr, module.get());
auto TyVoid = Type::get_void_type(module.get());
auto TyInt32 = Type::get_int32_type(module.get());
auto TyInt32Ptr = Type::get_int32_ptr_type(module.get());

@ -17,7 +17,7 @@ Type *FLOAT_T;
Type *INT32PTR_T;
Type *FLOATPTR_T;
void SysYFBuilder::visit(SyntaxTree::Assembly &node) {
void IRBuilder::visit(SyntaxTree::Assembly &node) {
VOID_T = Type::get_void_type(module.get());
INT1_T = Type::get_int1_type(module.get());
INT32_T = Type::get_int32_type(module.get());
@ -31,44 +31,44 @@ void SysYFBuilder::visit(SyntaxTree::Assembly &node) {
// You need to fill them
void SysYFBuilder::visit(SyntaxTree::InitVal &node) {}
void IRBuilder::visit(SyntaxTree::InitVal &node) {}
void SysYFBuilder::visit(SyntaxTree::FuncDef &node) {}
void IRBuilder::visit(SyntaxTree::FuncDef &node) {}
void SysYFBuilder::visit(SyntaxTree::FuncFParamList &node) {}
void IRBuilder::visit(SyntaxTree::FuncFParamList &node) {}
void SysYFBuilder::visit(SyntaxTree::FuncParam &node) {}
void IRBuilder::visit(SyntaxTree::FuncParam &node) {}
void SysYFBuilder::visit(SyntaxTree::VarDef &node) {}
void IRBuilder::visit(SyntaxTree::VarDef &node) {}
void SysYFBuilder::visit(SyntaxTree::LVal &node) {}
void IRBuilder::visit(SyntaxTree::LVal &node) {}
void SysYFBuilder::visit(SyntaxTree::AssignStmt &node) {}
void IRBuilder::visit(SyntaxTree::AssignStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::Literal &node) {}
void IRBuilder::visit(SyntaxTree::Literal &node) {}
void SysYFBuilder::visit(SyntaxTree::ReturnStmt &node) {}
void IRBuilder::visit(SyntaxTree::ReturnStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::BlockStmt &node) {}
void IRBuilder::visit(SyntaxTree::BlockStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::EmptyStmt &node) {}
void IRBuilder::visit(SyntaxTree::EmptyStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::ExprStmt &node) {}
void IRBuilder::visit(SyntaxTree::ExprStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::UnaryCondExpr &node) {}
void IRBuilder::visit(SyntaxTree::UnaryCondExpr &node) {}
void SysYFBuilder::visit(SyntaxTree::BinaryCondExpr &node) {}
void IRBuilder::visit(SyntaxTree::BinaryCondExpr &node) {}
void SysYFBuilder::visit(SyntaxTree::BinaryExpr &node) {}
void IRBuilder::visit(SyntaxTree::BinaryExpr &node) {}
void SysYFBuilder::visit(SyntaxTree::UnaryExpr &node) {}
void IRBuilder::visit(SyntaxTree::UnaryExpr &node) {}
void SysYFBuilder::visit(SyntaxTree::FuncCallStmt &node) {}
void IRBuilder::visit(SyntaxTree::FuncCallStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::IfStmt &node) {}
void IRBuilder::visit(SyntaxTree::IfStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::WhileStmt &node) {}
void IRBuilder::visit(SyntaxTree::WhileStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::BreakStmt &node) {}
void IRBuilder::visit(SyntaxTree::BreakStmt &node) {}
void SysYFBuilder::visit(SyntaxTree::ContinueStmt &node) {}
void IRBuilder::visit(SyntaxTree::ContinueStmt &node) {}

@ -14,7 +14,7 @@ void print_help(const std::string& exe_name) {
int main(int argc, char *argv[])
{
SysYFBuilder builder;
IRBuilder builder;
SysYFDriver driver;
SyntaxTreePrinter printer;
ErrorReporter reporter(std::cerr);

Loading…
Cancel
Save