// Function = Name, '(', [ArgList], ')' // FunctionName = ? one of defined functions in IGrammarProductsFactory ? private IParsingProduct ParseFunction(ISourceCode src) { using var ctx = src.GetFurtherContext(); var fragment = ParseName(ctx); if (fragment == null) { return(null); } ctx.ParseWhiteSpace(); var nodes = ParseInBrackets(ctx, s => ParseArgList(s)); if (nodes == null) { return(null); } var opExp = _grammarProductsFactory.CreateFunctionInvocationNode(fragment, nodes); if (opExp == null) { ctx.SetError(ParsingErrors.UndefinedFunction); return(null); } ctx.Accept(); return(opExp); }