public double Evaluate(string source)
        {
            TokenStream  TS             = new TokenStream();
            List <Token> TheTokenStream = TS.BuildTokenStream(source);
            int          end            = 0;

            TheTokenStream = CreateUnaryNodes(TheTokenStream);
            TheTokenStream = CreateOrderBrackets(TheTokenStream);

            //TokenStream.PrintTokens(TheTokenStream);

            AstNode Root = BuildAST(TheTokenStream, 0, out end);

            PrintAST(Root);

            if (Root == null)
            {
                return(0);
            }
            return(Root.Run(TheTable));
        }