static void Main(string[] args)
        {
            ReversePolishNotation rpn    = new ReversePolishNotation();
            RCalculator           MyCalc = new RCalculator(new List <IOperation>()
            {
                new Addition(),
                new Substraction(),
                new Multiplication(),
                new Division()
            });

            string inputString = Console.ReadLine();

            /* Проверка выражения на верную структуру */
            if (Regex.IsMatch(inputString, @"[^()0-9*/+-]|[*/+-]{2,}|\A[*/+-]|[*/+-]\z"))
            {
                Console.WriteLine("Invalid input");
                Environment.Exit(-1);
            }

            rpn.Parse(inputString);
            List <string> parsedExpression = rpn.RpnExpression;
            List <string> executionList    = new List <string>();
            float         leftOp           = 0;
            float         rightOp          = 0;
            float         result           = 0;
            string        operation        = "";

            foreach (var item in parsedExpression)
            {
                if (!float.TryParse(item, out _)) //Если item не парсится во float, то item это символ операции
                {
                    leftOp    = float.Parse(executionList[^ 2]);
        /// <summary>
        /// Calculates each of B0, B1, r, r^2, and P given input E, x, and y. Compares the calculated output with the
        /// expected output.
        /// </summary>
        /// <param name="B0">expected B0</param>
        /// <param name="B1">expected B1</param>
        /// <param name="r">expected r</param>
        /// <param name="rSquared">expected r^2</param>
        /// <param name="P">expected P</param>
        /// <param name="E">estimated proxy size</param>
        /// <param name="x">list of x axis <c>double</c> data</param>
        /// <param name="y">list of y axis <c>double</c> data</param>
        private void CalculateAndVerify(double B0, double B1, double r, double rSquared, double P, double E,
                                        List <double> x, List <double> y)
        {
            double calculatedB1       = B1Calculator.Calculate(x, y);
            double calculatedB0       = B0Calculator.Calculate(x, y, calculatedB1);
            double calculatedR        = RCalculator.Calculate(x, y);
            double calculatedRSquared = RSquaredCalculator.Calculate(calculatedR);
            double calculatedP        = PCalculator.Calculate(calculatedB0, calculatedB1, E);

            Assert.True(Math.Round(calculatedB0, 2).Equals(Math.Round(B0, 2)));
            Assert.True(Math.Round(calculatedB1, 2).Equals(Math.Round(B1, 2)));
            Assert.True(Math.Round(calculatedR, 2).Equals(Math.Round(r, 2)));
            Assert.True(Math.Round(calculatedRSquared, 2).Equals(Math.Round(rSquared, 2)));
            Assert.True(Math.Round(calculatedP, 2).Equals(Math.Round(P, 2)));
        }