public static IEnumerable <string> GetReferencedVariables(Expr e)
        {
            var finder = new VariableReferenceFinder();

            e.Accept(finder);
            return(finder._referencedVariables);
        }
        public override void Visit(AssignmentExpr expr)
        {
            // If the expression does not reference itself, then we're cool.
            var refs = VariableReferenceFinder.GetReferencedVariables(expr.Value);

            if (refs.All(r => r != expr.Name))
            {
                _definedVariables.Add(expr.Name);
            }
        }