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]);
}