private CalcOperation.EOperation MixOperaions(CalcOperation.EOperation newOperaion, CalcOperation.EOperation prevOperaion) { if (prevOperaion == CalcOperation.EOperation.None) { return(newOperaion); } else { if (prevOperaion == newOperaion) { switch (newOperaion) { case CalcOperation.EOperation.Divide: break; case CalcOperation.EOperation.Minus: break; case CalcOperation.EOperation.Multiply: break; case CalcOperation.EOperation.Plus: break; } } } return(CalcOperation.EOperation.None); }
private Operations ParseOperation(string text, ref int index) { var operations = new List <CalcOperation>(); CalcOperation.EOperation currentOperaion = CalcOperation.EOperation.Plus; for (int i = index; i < text.Length; i++) { var symbol = text[i]; switch (symbol) { case BlockVarriants.OpenScope: i++; var operation = ParseOperation(text, ref i); operations.Add(new CalcOperation(currentOperaion, operation)); break; case BlockVarriants.CloseScope: index = i; return(new Operations(operations)); case BlockVarriants.Divide: currentOperaion = CalcOperation.EOperation.Divide; break; case BlockVarriants.Multiply: currentOperaion = CalcOperation.EOperation.Multiply; break; case BlockVarriants.Minus: currentOperaion = CalcOperation.EOperation.Minus; break; case BlockVarriants.Plus: currentOperaion = CalcOperation.EOperation.Plus; break; case ' ': case '\t': break; default: if (currentOperaion == CalcOperation.EOperation.None) { throw new Exception("Parse error, can't find type of operation at " + i.ToString()); } if (char.IsDigit(symbol)) { var constant = ParseConstant(text, ref i); operations.Add(new CalcOperation(currentOperaion, constant)); } else if (char.IsLetter(symbol)) { var varriable = ParseVarriable(text, ref i); operations.Add(new CalcOperation(currentOperaion, varriable)); } else { var newCalc = ParseOperation(text, ref i); operations.Add(new CalcOperation(currentOperaion, newCalc)); } currentOperaion = CalcOperation.EOperation.None; break; } } if (!operations.Any()) { throw new Exception($"Parse error, can't find any operands from {index} to {text.Length - 1}"); } index = text.Length; return(new Operations(operations)); }