nicolaswinkler il y a 8 ans
Parent
commit
8f5529ef40
1 fichiers modifiés avec 45 ajouts et 0 suppressions
  1. 45 0
      src/Optimizer.h

+ 45 - 0
src/Optimizer.h

@@ -0,0 +1,45 @@
+#ifndef ZP_OPTIMIZER_H
+#define ZP_OPTIMIZER_H 
+
+#include "Parser.h"
+
+namespace zp
+{
+    template <typename T>
+    class AstVisitor;
+
+    struct Instruction;
+    class Optimizer;
+}
+
+
+template <typename T>
+class zp::AstVisitor
+{
+public:
+    T visit(Block& block);
+
+    virtual T visitLoop(Loop& loop) = 0;
+    virtual T visitInstructionBlock(InstructionBlock& ib) = 0;
+    virtual T visitUnionBlock(UnionBlock& ub) = 0;
+};
+
+
+struct zp::Instruction
+{
+
+};
+
+
+class zp::Optimizer :
+    public AstVisitor<std::unique_ptr<Instruction>>
+{
+public:
+    std::unique_ptr<Instruction> visitLoop(Loop& loop) override;
+    std::unique_ptr<Instruction> visitInstructionBlock(InstructionBlock& ib) override;
+    std::unique_ptr<Instruction> visitUnionBlock(UnionBlock& ub) override;
+
+};
+
+
+#endif /* ZP_OPTIMIZER_H */