示例#1
0
        public override ASTNode VisitCompileUnit([NotNull] DAEImplicitGrammarParser.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.Parameter:
                        rootNode.parameters.Add((ParameterNode)node);
                        break;

                    case ASTNodeType.Constant:
                        rootNode.constants.Add((ConstantNode)node);
                        break;
                    }
                }
            }
            return(rootNode);
        }
        public Implicit.DAEIDescription CompileDAEImplicit(string text)
        {
            compilerErrors = new List <ErrorMessage>();
            parameters     = new Dictionary <string, double>();
            constants      = new Dictionary <string, double>();
            variables      = new Dictionary <string, Variable>();
            FunctionTable.Init();
            //variables.Add("t", new Variable { Name = "t", InitialValue = 0.0, Initialized = true, VarType = Variable.Type.Algebraic, Count = 0 });

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

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

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

            eqParser.RemoveErrorListeners();
            eqParser.AddErrorListener(parserListener);
            DAEImplicitGrammarParser.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, "Ошибки парсера");
            }
            DAEImplicitGrammarVisitor visitor = new DAEImplicitGrammarVisitor();
            ASTNode root = visitor.VisitCompileUnit(eqContext);

            return(CompileDAEImplicit((RootNode)root));
        }