public static UnivariateFunction Build(string input)
        {
            var stream      = CharStreams.fromstring(input);
            var lexer       = new EquationGrammarLexer(stream);
            var tokenStream = new CommonTokenStream(lexer);
            var parser      = new EquationGrammarParser(tokenStream);
            var listener    = new EquationBuilderListener();
            var tree        = parser.statement();

            ParseTreeWalker.Default.Walk(listener, tree);
            return(listener.Build());
        }
        public NonlinearEquationDescription CompileEquations(string text)
        {
            compilerErrors = new List <ErrorMessage>();
            constants      = new Dictionary <string, double>();
            variables      = new Dictionary <string, int>();
            variableNames  = new List <string>();
            initialValues  = new List <double>();
            FunctionTable.Init();

            AntlrInputStream     inputStream = new AntlrInputStream(text);
            EquationGrammarLexer eqLexer     = new EquationGrammarLexer(inputStream);

            eqLexer.RemoveErrorListeners();
            ErrorListener <int> lexerListener = new ErrorListener <int>();

            eqLexer.AddErrorListener(lexerListener);
            CommonTokenStream      commonTokenStream = new CommonTokenStream(eqLexer);
            EquationGrammarParser  eqParser          = new EquationGrammarParser(commonTokenStream);
            ErrorListener <IToken> parserListener    = new ErrorListener <IToken>();

            eqParser.RemoveErrorListeners();
            eqParser.AddErrorListener(parserListener);
            EquationGrammarParser.CompileUnitContext eqContext = eqParser.compileUnit();
            compilerErrors = lexerListener.GetErrors();
            if (compilerErrors.Count > 0)
            {
                throw new CompilerException(compilerErrors, "Ошибки лексера");
            }
            compilerErrors = parserListener.GetErrors();
            if (compilerErrors.Count > 0)
            {
                throw new CompilerException(compilerErrors, "Ошибки парсера");
            }
            GrammarVisitor visitor = new GrammarVisitor();
            ASTNode        root    = visitor.VisitCompileUnit(eqContext);

            /*EquationGrammarVisitor visitor = new EquationGrammarVisitor();
             * ASTNode root = visitor.VisitCompileUnit(expContext);
             * var rootSimple = Compiler.ASTCompiler.validate(root);
             * rootSimple = Compiler.ASTCompiler.simplify(rootSimple);
             * return compileASTExpression(rootSimple);*/
            return(CompileEquations((RootNode)root));
        }