public override ASTNode VisitCompileUnit(EquationGrammarParser.CompileUnitContext context)
        {
            RootNode rootNode = new RootNode();

            rootNode.equations     = new List <AssignmentNode>();
            rootNode.initialValues = new List <InitialValueNode>();
            foreach (var statement in context.statement())
            {
                ASTNode node = Visit(statement);

                if (node != null)
                {
                    switch (node.Type)
                    {
                    case ASTNodeType.Assignment:
                        rootNode.equations.Add((AssignmentNode)node);
                        break;

                    case ASTNodeType.InitialValue:
                        rootNode.initialValues.Add((InitialValueNode)node);
                        break;

                    case ASTNodeType.Constant:
                        rootNode.constants.Add((ConstantNode)node);
                        break;
                    }
                }
            }
            //return VisitChildren(context);

            return(rootNode);
        }
        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));
        }