private static void Main(string[] args)
        {
            try
            {
                var workMode = new ArgumentsParser().Parse(args);

                var transformer = new EquationTransformer();
                if (workMode == ApplicationWorkMode.File)
                {
                    MakeEquationCanonicalFromFile(args, transformer);
                    return;
                }

                MakeEquationCanonicalFromConsole(transformer);
            }
            catch (ArgumentException exception)
            {
                Console.WriteLine("Error occurred in command line arguments: {0}", exception);
            }
            catch (FileNotFoundException exception)
            {
                Console.WriteLine("Input file was not found: {0}", exception);
            }
            catch (Exception exception)
            {
                Console.WriteLine("Unexpected error occured: {0}", exception);
            }
        }
        private static void MakeEquationCanonicalFromConsole(EquationTransformer transformer)
        {
            while (true)
            {
                Console.WriteLine("Input equation");
                var equation = Console.ReadLine();
                if (equation == null)
                {
                    return;
                }

                var canonicalEquation = transformer.MakeCanonical(equation);
                Console.WriteLine(canonicalEquation);
            }
        }
        private static void MakeEquationCanonicalFromFile(string[] args, EquationTransformer transformer)
        {
            if (!File.Exists(args[1]))
            {
                throw new FileNotFoundException();
            }

            var outputFileName = $"{args[1]}.out";
            var equations      = File.ReadAllLines(args[1]);

            using (var outputStream = new StreamWriter(outputFileName))
            {
                foreach (var equation in equations)
                {
                    var canonicalEquation = transformer.MakeCanonical(equation);
                    outputStream.WriteLine(canonicalEquation);
                }
            }

            Console.WriteLine("Equations were successfully processed and written into {0}", outputFileName);
        }