tinysnail 3 years ago
commit aa257bc02c

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

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

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

@ -17,7 +17,7 @@ Type *FLOAT_T;
Type *INT32PTR_T; Type *INT32PTR_T;
Type *FLOATPTR_T; Type *FLOATPTR_T;
void SysYFBuilder::visit(SyntaxTree::Assembly &node) { void IRBuilder::visit(SyntaxTree::Assembly &node) {
VOID_T = Type::get_void_type(module.get()); VOID_T = Type::get_void_type(module.get());
INT1_T = Type::get_int1_type(module.get()); INT1_T = Type::get_int1_type(module.get());
INT32_T = Type::get_int32_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 // 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[]) int main(int argc, char *argv[])
{ {
SysYFBuilder builder; IRBuilder builder;
SysYFDriver driver; SysYFDriver driver;
SyntaxTreePrinter printer; SyntaxTreePrinter printer;
ErrorReporter reporter(std::cerr); ErrorReporter reporter(std::cerr);

Loading…
Cancel
Save