/// <summary> /// Converts a tree into binary /// </summary> /// <param name="expr"></param> internal static void OptimizeTree(ref Entity expr) { if (expr.entType == Entity.EntType.OPERATOR) { if (expr.Name == "sumf" || expr.Name == "minusf") { var children = TreeAnalyzer.LinearChildren(expr, "sumf", "minusf", Const.FuncIfSum); expr = TreeAnalyzer.MultiHangBinary(children, "sumf", expr.Priority); } if (expr.Name == "mulf" || expr.Name == "divf") { var children = TreeAnalyzer.LinearChildren(expr, "mulf", "divf", Const.FuncIfMul); expr = TreeAnalyzer.MultiHangBinary(children, "mulf", expr.Priority); } } for (int i = 0; i < expr.Children.Count; i++) { var tmp = expr.Children[i]; OptimizeTree(ref tmp); expr.Children[i] = tmp; } }