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