コード例 #1
0
        public IExpression MakeExpression(string expressionString)
        {
            var infixTokens = expressionTokenizer.Tokenize(expressionString);

            if (infixTokens.Count == 0)
            {
                return(null);
            }

            var postfixTokens = infixToPostfixConverter.Convert(infixTokens);

            var nodeStack = new Stack <ExpressionNode>();

            nodeStack.Push(expressionNodeFactory.MakeNode(postfixTokens[0]));

            for (int i = 1; i < postfixTokens.Count; i++)
            {
                var node = expressionNodeFactory.MakeNode(postfixTokens[i]);
                if (node is OperatorNode operatorNode)
                {
                    for (int j = operatorNode.ChildCount - 1; j >= 0; j--)
                    {
                        operatorNode.SetChild(nodeStack.Pop(), j);
                    }
                }
                nodeStack.Push(node);
            }

            return(new Expression(nodeStack.Pop()));
        }