Exemplo n.º 1
0
        public object RunTraversal(IAstVisitor visitor, ITraversalStrategy strategy)
        {
            visitor.StartSession(Expression);
            object traversalResult;

            try
            {
                strategy.Initialize(Expression);

                while (strategy.HasNext())
                {
                    try
                    {
                        var current = strategy.Next();
                        current.Accept(visitor);
                    }
                    catch (RestartTraversalException rte)
                    {
//                        Expression.Analyze(new TreeDumper());
                        strategy.Restart(rte.Root);
                    }
                }
            }
            finally
            {
                traversalResult = visitor.FinishSession();
            }

            return traversalResult;
        }