private IEnumerable <IFormulaToken> CompleteOperatorBackwards(IEnumerable <IFormulaToken> tokens, IFormulaOperator operatorToken) { var operatorOrder = operatorToken.Order; return(tokens .TakeWhile(token => !(token is FormulaTokenParameterSeparator)) .WithContext() .TakeWhile(context => { var nextToken = context[0]; var token = context[1]; if (token == null) { return false; } var operatorToken2 = token as IFormulaOperator; var expectValue = nextToken == null || nextToken is FormulaNodeInfixOperator; if (expectValue) { // missing value of operator return operatorToken2 == null; } // operator fully completed return operatorToken2 != null && operatorOrder < operatorToken2.Order; }).Select(context => context[1])); }
private IEnumerable<IFormulaToken> CompleteOperatorBackwards(IEnumerable<IFormulaToken> tokens, IFormulaOperator operatorToken) { var operatorOrder = operatorToken.Order; return tokens .TakeWhile(token => !(token is FormulaTokenParameterSeparator)) .WithContext() .TakeWhile(context => { var nextToken = context[0]; var token = context[1]; if (token == null) return false; var operatorToken2 = token as IFormulaOperator; var expectValue = nextToken == null || nextToken is FormulaNodeInfixOperator; if (expectValue) { // missing value of operator return operatorToken2 == null; } // operator fully completed return operatorToken2 != null && operatorOrder < operatorToken2.Order; }).Select(context => context[1]); }
private IEnumerable <IFormulaToken> CompleteOperatorForward(IEnumerable <IFormulaToken> tokens, IFormulaOperator operatorToken) { var operatorOrder = operatorToken.Order; return(tokens .TakeWhile(token => !(token is FormulaTokenParameterSeparator)) .WithContext() .TakeWhile(context => { var previousToken = context[0]; var token = context[1]; if (token == null) { return false; } var infixOperatorToken = token as FormulaNodeInfixOperator; var expectValue = previousToken == null || previousToken is IFormulaOperator; if (expectValue) { // missing value of operator return infixOperatorToken == null; } // operator fully completed return infixOperatorToken != null && infixOperatorToken.Order > operatorOrder; }).Select(context => context[1])); }
private IEnumerable<IFormulaToken> CompleteOperatorForward(IEnumerable<IFormulaToken> tokens, IFormulaOperator operatorToken) { var operatorOrder = operatorToken.Order; return tokens .TakeWhile(token => !(token is FormulaTokenParameterSeparator)) .WithContext() .TakeWhile(context => { var previousToken = context[0]; var token = context[1]; if (token == null) return false; var infixOperatorToken = token as FormulaNodeInfixOperator; var expectValue = previousToken == null || previousToken is IFormulaOperator; if (expectValue) { // missing value of operator return infixOperatorToken == null; } // operator fully completed return infixOperatorToken != null && infixOperatorToken.Order > operatorOrder; }).Select(context => context[1]); }