public static ExpressionNode CalculateTree(ExpressionNode[] nodes) { if (nodes.Length == 0) return null; if (nodes.Length == 1) return nodes[0]; if (nodes.Length == 2) return new CombineNode(nodes[0], nodes[1], nodes[1].Operator); var president = int.MaxValue; for (var i = 1; i < nodes.Length; i++) { var filter = nodes[i]; var sortIndex = getOperatorIndex(filter.Operator); if (sortIndex < president) president = sortIndex; } var index = 0; var op = '+'; for (index = 1; index < nodes.Length; index++) { var filter = nodes[index]; if (getOperatorIndex(filter.Operator) == president) { op = filter.Operator; break; } } var a = CalculateTree(nodes.Take(index).ToArray()); var b = CalculateTree(nodes.Skip(index).ToArray()); return new CombineNode(a, b, op); }
private static ValueList CalculateSpaceList(ExpressionNode[] nodes) { var result = new ValueList(); var skip = 0; for (var i = 1; i < nodes.Length; i++) { var filter = nodes[i]; if (filter.Operator == ' ') { var a = CalculateList(nodes.Skip(skip).Take(i - skip).ToArray()); result.Add(a); skip = i; } } result.Add(CalculateList(nodes.Skip(skip).ToArray())); return result; }