private static void RewriteNodes(OperNode oper, double operRes) { ValueNode resNode = new ValueNode(operRes); if (oper.NextOper != null) { oper.NextOper.LeftVal = resNode; oper.NextOper.PrevOper = oper.PrevOper; } if (oper.PrevOper != null) { oper.PrevOper.RightVal = resNode; oper.PrevOper.NextOper = oper.NextOper; } }
private static void CreateNodes(string value, string operType, int operWeight, ref OperNode lastOper) { double dVal = 0; if (!string.IsNullOrEmpty(value)) { dVal = GetValue(value); } ValueNode valNode = new ValueNode(dVal); OperNode oper = new OperNode(operType, operWeight, valNode, lastOper); if (lastOper != null) { lastOper.RightVal = valNode; lastOper.NextOper = oper; } lastOper = oper; _operList.Add(oper); }
private static void Parse(string expression) { _operList = new List <OperNode>(); int operWeight = 1; int factor = 1; string value = ""; OperNode lastOper = null; for (int i = 0; i < expression.Length; ++i) { double dVal = 0; string operType = expression[i].ToString(); switch (operType) { case "-": case "+": operWeight = 1 * factor; CreateNodes(value, operType, operWeight, ref lastOper); value = ""; break; case "/": case "*": operWeight = 2 * factor; CreateNodes(value, operType, operWeight, ref lastOper); value = ""; break; case "=": dVal = GetValue(value); ValueNode valNode = new ValueNode(dVal); if (lastOper != null) { lastOper.RightVal = valNode; lastOper.NextOper = null; } break; case "(": factor *= 4; break; case ")": factor /= 4; if (operWeight < 1) { throw new ArgumentException("Invalid brackets"); } break; default: value += operType; break; } } if (factor != 1) { throw new ArgumentException("Invalid brackets"); } }