+ virtual void visit(FunctionDeclaration &);
+};
+
+class AssignmentCollector: private TraversingVisitor
+{
+private:
+ bool assignment_target = false;
+ std::set<Node *> assigned_variables;
+
+public:
+ std::set<Node *> apply(Node &);
+
+private:
+ virtual void visit(VariableReference &);
+ virtual void visit(UnaryExpression &);
+ virtual void visit(BinaryExpression &);
+ virtual void visit(Assignment &);