docs: final public void Function() throws ParseException {
   /*@bgen(jjtree) Function */
      AstFunction jjtn000 = new AstFunction(JJTFUNCTION);
      boolean jjtc000 = true;
      jjtree.openNodeScope(jjtn000);Token t0 = null;
      Token t1 = null;
      try {
        t0 = jj_consume_token(IDENTIFIER);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case COLON:
          jj_consume_token(COLON);
          t1 = jj_consume_token(IDENTIFIER);
          break;
        default:
          jj_la1[48] = jj_gen;
          ;
        }
          if (t1 != null) {
              jjtn000.setPrefix(t0.image);
              jjtn000.setLocalName(t1.image);
          } else {
              jjtn000.setLocalName(t0.image);
          }
        label_19:
        while (true) {
          MethodParameters();
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case LPAREN:
            ;
            break;
          default:
            jj_la1[49] = jj_gen;
            break label_19;
          }
        }
      } catch (Throwable jjte000) {
        if (jjtc000) {
          jjtree.clearNodeScope(jjtn000);
          jjtc000 = false;
        } else {
          jjtree.popNode();
        }
        if (jjte000 instanceof RuntimeException) {
          {if (true) throw (RuntimeException)jjte000;}
        }
        if (jjte000 instanceof ParseException) {
          {if (true) throw (ParseException)jjte000;}
        }
        {if (true) throw (Error)jjte000;}
      } finally {
        if (jjtc000) {
          jjtree.closeNodeScope(jjtn000, true);
        }
      }
    }