Optimizer.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef ZP_OPTIMIZER_H
  2. #define ZP_OPTIMIZER_H
  3. #include "Parser.h"
  4. namespace zp
  5. {
  6. // forward declarations
  7. enum class Instruction : char;
  8. struct Block;
  9. struct InstructionBlock;
  10. struct UnionBlock;
  11. struct Loop;
  12. class AstVisitor;
  13. struct BlockInstruction;
  14. class Optimizer;
  15. }
  16. class zp::AstVisitor
  17. {
  18. public:
  19. std::unique_ptr<BlockInstruction> visit(Block& block);
  20. virtual std::unique_ptr<BlockInstruction>
  21. visitLoop(Loop& loop) = 0;
  22. virtual std::unique_ptr<BlockInstruction>
  23. visitInstructionBlock(InstructionBlock& ib) = 0;
  24. virtual std::unique_ptr<BlockInstruction>
  25. visitUnionBlock(UnionBlock& ub) = 0;
  26. };
  27. struct zp::BlockInstruction
  28. {
  29. };
  30. class zp::Optimizer :
  31. public AstVisitor
  32. {
  33. public:
  34. std::unique_ptr<BlockInstruction> visitLoop(Loop& loop) override;
  35. std::unique_ptr<BlockInstruction> visitInstructionBlock(InstructionBlock& ib) override;
  36. std::unique_ptr<BlockInstruction> visitUnionBlock(UnionBlock& ub) override;
  37. };
  38. #endif /* ZP_OPTIMIZER_H */