Exemplo n.º 1
0
        private void LazyLoadChildren(IAndForestNode andNode)
        {
            for (int c = 0; c < andNode.Children.Count; c++)
            {
                var child = andNode.Children[c];
                switch (child.NodeType)
                {
                // skip intermediate nodes by enumerating children only
                case ForestNodeType.Intermediate:
                    var intermediateNode = child as IIntermediateForestNode;
                    var currentAndNode   = _disambiguationAlgorithm.GetCurrentAndNode(intermediateNode);
                    LazyLoadChildren(currentAndNode);
                    break;

                // create a internal tree node for symbol forest nodes
                case ForestNodeType.Symbol:
                    var symbolNode = child as ISymbolForestNode;
                    _children.Add(new InternalTreeNode(symbolNode, _disambiguationAlgorithm));
                    break;

                // create a tree token node for token forest nodes
                case ForestNodeType.Token:
                    _children.Add(new TokenTreeNode(child as ITokenForestNode));
                    break;

                default:
                    throw new Exception("Unrecognized NodeType");
                }
            }
        }