@Override
    public Object visitFunction_operation(@NotNull SiddhiQLParser.Function_operationContext ctx) {

        Expression expression;
        if (ctx.function_namespace() != null) {
            if (ctx.attribute_list() != null) {
                expression = Expression.function((String) visit(ctx.function_namespace()),
                        (String) visit(ctx.function_id()), (Expression[]) visit(ctx.attribute_list()));
            } else {
                expression = Expression.function((String) visit(ctx.function_namespace()),
                        (String) visit(ctx.function_id()), null);
            }

        } else {
            if (ctx.attribute_list() != null) {
                expression = Expression.function((String) visit(ctx.function_id()),
                        (Expression[]) visit(ctx.attribute_list()));
            } else {
                expression = Expression.function((String) visit(ctx.function_id()), null);
            }
        }
        populateQueryContext(expression, ctx);
        return expression;
    }
{@inheritDoc}
<p>The default implementation returns the result of calling
{@link #visitChildren} on {@code ctx}.</p>

@param ctx
modules/siddhi-query-compiler/src/main/java/io/siddhi/query/compiler/internal/SiddhiQLBaseVisitorImpl.java