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