final public void block_statement() throws ParseException {
    identifier();
    jj_consume_token(151);
    jj_consume_token(BLOCK);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 152:
      jj_consume_token(152);
      expression();
      jj_consume_token(153);
      break;
    default:
      jj_la1[54] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IS:
      jj_consume_token(IS);
      break;
    default:
      jj_la1[55] = jj_gen;
      ;
    }
    block_header();
    label_16:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case ALIAS:
      case ATTRIBUTE:
      case COMPONENT:
      case CONSTANT:
      case FOR:
      case FUNCTION:
      case IMPURE:
      case PROCEDURE:
      case PURE:
      case SIGNAL:
      case SUBTYPE:
      case TYPE:
      case USE:
        ;
        break;
      default:
        jj_la1[56] = jj_gen;
        break label_16;
      }
      block_declarative_item(null,null);
    }
    jj_consume_token(BEGIN);
    block_statement_part();
    jj_consume_token(END);
    jj_consume_token(BLOCK);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case basic_identifier:
    case extended_identifier:
      identifier();
      break;
    default:
      jj_la1[57] = jj_gen;
      ;
    }
    jj_consume_token(SEMICOLON);
  }