#include "Optimizer.h" #include "Parser.h" #include #include using namespace zp; using namespace std; unique_ptr AstVisitor::visit(Block& block) { return block.accept(*this); } unique_ptr Optimizer::visitInstructionBlock(InstructionBlock& ib) { std::cout << "InstructionBlock" << std::endl; unique_ptr sbi = make_unique(); for (auto instr : ib.instructions) { switch(instr) { case Instruction::LEFT: sbi->pointerMoved--; break; case Instruction::RIGHT: sbi->pointerMoved++; break; case Instruction::PLUS: sbi->added[sbi->pointerMoved]++; break; case Instruction::MINUS: sbi->added[sbi->pointerMoved]--; break; default: break; } } return sbi; } unique_ptr Optimizer::visitIOBlock(IOBlock& io) { cout << "IOBlock" << std::endl; return make_unique(); } unique_ptr Optimizer::visitUnionBlock(UnionBlock& ub) { cout << "UnionBlock" << std::endl; for (auto& block : ub.instructions) { visit(*block.get()); } return make_unique(); } unique_ptr Optimizer::visitLoop(Loop& loop) { cout << "Loop" << std::endl; for (auto& block : loop.instructions) { visit(*block.get()); } return make_unique(); }