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)); }