Пример #1
0
        public void Visit(AstVisitor astVisitor)
        {
            Queue <Ast> queue = new Queue <Ast>();

            queue.Enqueue(this);

            while (queue.Any())
            {
                var            nextAst        = queue.Dequeue();
                AstVisitAction astVisitAction = astVisitor.Visit(nextAst);

                switch (astVisitAction)
                {
                case AstVisitAction.Continue:
                    queue.EnqueueAll(nextAst.Children);
                    break;

                case AstVisitAction.SkipChildren:
                    break;

                case AstVisitAction.StopVisit:
                    return;

                default:
                    throw new InvalidOperationException(astVisitAction.ToString());
                }
            }
        }