private static XLParser.FormulaAnalyzer GetParser(string formula)
        {
            if (formula[0] == '=')
            {
                formula = formula.Substring(1);
            }
            var parser = new XLParser.FormulaAnalyzer(formula);

            return(parser);
        }
        public static void ParseFormula()
        {
            var _app = ExcelDnaUtil.Application;

            app = (Excel.Application)_app;

            ws = (Excel.Worksheet)app.ActiveSheet;

            Excel.Range rng = (Excel.Range)app.ActiveCell;

            Debug.Print(rng.Formula.ToString());

            var parser = GetParser(rng);
            var root   = parser.Root;

            var newFormula = GetFormulaForFunc(root, true, true, -1);

            Debug.Print("processed formula: " + newFormula);

            MessageBox.Show(newFormula);

            var newParser    = new XLParser.FormulaAnalyzer(newFormula);
            var noSumVersion = GetFormulaWithoutSum(newParser.Root);

            Debug.Print("no sum version: " + noSumVersion);

            useSympyToCleanUpFormula(noSumVersion);

            //take that formula and process as math

            var exp = Infix.ParseOrThrow(noSumVersion);

            Debug.Print("mathdotnet verison: " + Infix.Format(exp));
            Debug.Print("expanded verison: " + Infix.Format(Algebraic.Expand(exp)));
            Debug.Print("variables: " + string.Join(",", Structure.CollectIdentifierSymbols(exp).Select(c => c.Item)));

            //GenerateFullTreeWithReferences(root);
        }