Suport for goto and labels
[ozulis.git] / src / ast / simplify-visitor.hh
blobab097b35c6620cab06bda03f622e826c3f446db8
1 #ifndef AST_SIMPLIFY_VISITOR_HH
2 # define AST_SIMPLIFY_VISITOR_HH
4 # include <vector>
6 # include <ast/browse-visitor.hh>
8 namespace ast
10 /**
11 * @brief transforms an AST to 3 address instructions.
12 * @sa ast::BrowseVisitor
14 class SimplifyVisitor : public BrowseVisitor
16 public:
17 typedef BrowseVisitor super_t;
19 SimplifyVisitor();
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(AssignExp & node);
34 //virtual void visit(BinaryExp & node);
36 virtual void visit(EqExp & node);
37 virtual void visit(NeqExp & node);
38 virtual void visit(LtExp & node);
39 virtual void visit(LtEqExp & node);
40 virtual void visit(GtExp & node);
41 virtual void visit(GtEqExp & node);
42 virtual void visit(AddExp & node);
43 virtual void visit(SubExp & node);
44 virtual void visit(MulExp & node);
45 virtual void visit(DivExp & node);
46 virtual void visit(ModExp & node);
48 virtual void visit(AndExp & node);
49 virtual void visit(OrExp & node);
50 virtual void visit(XorExp & node);
52 virtual void visit(AndAndExp & node);
53 virtual void visit(OrOrExp & node);
55 virtual void visit(ShlExp & node);
56 virtual void visit(AShrExp & node);
57 virtual void visit(LShrExp & node);
59 virtual void visit(NumberExp & node);
60 virtual void visit(IdExp & node);
61 virtual void visit(Block & node);
62 //virtual void visit(Function & node);
64 virtual void visit(Label & node);
65 virtual void visit(Goto & node);
67 protected:
68 std::string currentId() const;
69 std::string nextId();
71 std::vector<Node *> simplifications_;
72 Exp * replacement_;
73 int nextId_;
77 #endif /* !AST_SIMPLIFY_VISITOR_HH */