public SymbolForest(PrimitiveSymbolTree primitiveSymbolTree, SymbolTreeBuilder symbolTreeBuilder, IEnumerable <FixedSymbolTree> packageTrees)
 {
     if (symbolTreeBuilder.Package is null)
     {
         throw new ArgumentException("Can't be builder for primitive symbols", nameof(symbolTreeBuilder));
     }
     PrimitiveSymbolTree = primitiveSymbolTree;
     this.packageTrees   = packageTrees.Append <ISymbolTree>(symbolTreeBuilder).ToFixedDictionary(t => t.Package !);
 }
        public IEnumerable <Symbol> Children(Symbol symbol)
        {
            if (symbol.Package is null)
            {
                return(PrimitiveSymbolTree.Children(symbol));
            }

            if (!packageTrees.TryGetValue(symbol.Package, out var tree))
            {
                throw new ArgumentException("Symbol must be for one of the packages in this tree", nameof(symbol));
            }

            return(tree.Children(symbol));
        }
 public SymbolForest(PrimitiveSymbolTree primitiveSymbolTree, IEnumerable <FixedSymbolTree> packageTrees)
 {
     PrimitiveSymbolTree = primitiveSymbolTree;
     this.packageTrees   = packageTrees.ToFixedDictionary(t => t.Package !, t => (ISymbolTree)t);
 }