Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
        }