final public void Program_head() throws ParseException {
                      /*@bgen(jjtree) Program_head */
                      SimpleNode jjtn000 = new SimpleNode(JJTPROGRAM_HEAD);
                      boolean jjtc000 = true;
                      jjtree.openNodeScope(jjtn000);
                      jjtn000.jjtSetFirstToken(getToken(1));Token t = token;
    try {
      jj_consume_token(PROGRAM);
      Program_name();
      Program_parameter_list();
      Program_parameters_type();
      if (jj_2_1(3)) {
        Program_return_declaration();
      } else {
        ;
      }
    jjtree.closeNodeScope(jjtn000, true);
    jjtc000 = false;
    jjtn000.jjtSetLastToken(getToken(0));
   jjtn000.value = t.image;
    } 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);
      jjtn000.jjtSetLastToken(getToken(0));
    }
    }
  }