/// <summary> /// Checks need of adding nil element to transform -x to 0-x. /// </summary> /// <param name="currentChar"></param> internal void CheckAndAddNilElement(char currentChar) { if (VariableBuilder.Length != 0 || currentChar == '=') { return; } // apply imitation only on formula start or after equal operator if (ExpressionsStack.Count == 0 || OperatorsStack.Count > 0 && OperatorsStack.Peek() == '=') { // 0 imitation in start or after '=': -x => 0-x +x => 0+x ExpressionsStack.Push(new VariableExpressionsGroup(new VariablesExpression())); } }
/// <summary> /// Push variable from <see cref="VariableBuilder"/> to <see cref="ExpressionsStack"/>. /// </summary> internal void PushVariable() { if (VariableBuilder.Length <= 0) { return; } var variablevalue = VariableBuilder.ToString(); var variable = _expressionFactory.GetVariable(variablevalue); if (variable == null) { throw new InvalidFormulaException(_formula, $"cannot parse variable '{variablevalue}'"); } ExpressionsStack.Push(new VariableExpressionsGroup(variable)); VariableBuilder.Clear(); }