@Override
    public Object visitFunctionCall(ExcellentParser.FunctionCallContext ctx) {
        String funcName = ctx.fnname().getText();
        List<Object> parameters;
        if (ctx.parameters() != null) {
            parameters = (List<Object>) visit(ctx.parameters());
        } else {
            parameters = Collections.emptyList();
        }
        return m_functions.invokeFunction(m_evalContext, funcName, parameters);
    }
@ Override public Object visitFunctionCall ( ExcellentParser . FunctionCallContext ctx ) { String funcName = ctx . fnname ( ) . getText ( ) ; List < Object > parameters ; if ( ctx . parameters ( ) != null ) { parameters = ( List < Object > ) visit ( ctx . parameters ( ) ) ; } else { parameters = Collections . emptyList ( ) ; } return m_functions . invokeFunction ( m_evalContext , funcName , parameters ) ; }
expression : fnname LPAREN parameters? RPAREN