1 #ifndef AST_SIMPLIFY_VISITOR_HH
2 # define AST_SIMPLIFY_VISITOR_HH
6 # include <ast/browse-visitor.hh>
11 * @brief transforms an AST to 3 address instructions.
12 * @sa ast::BrowseVisitor
14 class SimplifyVisitor
: public BrowseVisitor
17 typedef BrowseVisitor super_t
;
20 virtual ~SimplifyVisitor();
22 //virtual void visit(Node & node);
23 //virtual void visit(File & node);
24 //virtual void visit(Type & node);
25 /*virtual void visit(Number & node);
26 virtual void visit(Integer & node);
27 virtual void visit(Float & node);*/
28 //virtual void visit(Pointer & node);
29 //virtual void visit(Enum & node);
30 //virtual void visit(Array & node);
31 //virtual void visit(VarDecl & node);
32 virtual void visit(Exp
& node
);
33 virtual void visit(VoidExp
& node
);
34 virtual void visit(AssignExp
& node
);
35 //virtual void visit(BinaryExp & node);
37 virtual void visit(EqExp
& node
);
38 virtual void visit(NeqExp
& node
);
39 virtual void visit(LtExp
& node
);
40 virtual void visit(LtEqExp
& node
);
41 virtual void visit(GtExp
& node
);
42 virtual void visit(GtEqExp
& node
);
43 virtual void visit(AddExp
& node
);
44 virtual void visit(SubExp
& node
);
45 virtual void visit(MulExp
& node
);
46 virtual void visit(DivExp
& node
);
47 virtual void visit(ModExp
& node
);
49 virtual void visit(AndExp
& node
);
50 virtual void visit(OrExp
& node
);
51 virtual void visit(XorExp
& node
);
53 virtual void visit(AndAndExp
& node
);
54 virtual void visit(OrOrExp
& node
);
56 virtual void visit(ShlExp
& node
);
57 virtual void visit(AShrExp
& node
);
58 virtual void visit(LShrExp
& node
);
60 virtual void visit(NotExp
& node
);
61 virtual void visit(NegExp
& node
);
62 virtual void visit(BangExp
& node
);
64 virtual void visit(NumberExp
& node
);
65 virtual void visit(IdExp
& node
);
66 virtual void visit(Block
& node
);
67 //virtual void visit(Function & node);
69 virtual void visit(CastExp
& node
);
71 virtual void visit(Label
& node
);
72 virtual void visit(Goto
& node
);
73 virtual void visit(Return
& node
);
74 virtual void visit(If
& node
);
75 virtual void visit(While
& node
);
76 virtual void visit(DoWhile
& node
);
79 std::string
currentId() const;
82 /// @brief the new list of 3 address instructions
83 std::vector
<Node
*> simplifications_
;
84 /// @brief the child which replace the previously visited node
86 /// @brief the next id for register count
91 #endif /* !AST_SIMPLIFY_VISITOR_HH */