Програмне забезпечення для перекладу початкового коду з одних мов програмування на інші

Автор: Пользователь скрыл имя, 26 Октября 2011 в 22:24, курсовая работа

Описание работы

Ознайомлення з програмним забезпеченням для перекладу початкового коду з одних мов програмування на інші.
Розглянуто відповідні засоби для ОС Windows та Linux.

Содержание

Завдання на курсову роботу 3
Теоретична частина 4
Практична частина 6
3.1 Конвертери мов програмування для ОС Linux 6
3.1.1 Програма OpenCobol 6
3.1.1 Програма F2C 13
3.2 Конвертери мов програмування для ОС Windows 15
3.2.1 Програма BCX 15
Висновки 22
Список використаної літератури

Работа содержит 1 файл

Програмне забезпечення для перекладу початкового коду з одних мов програмування на інші.doc

— 433.50 Кб (Скачать)

Міністерство  освіти і науки України

Національний  авіаційний університет

Факультет комп'ютерних систем 
 
 
 
 
 
 
 
 
 
 
 

Курсова робота

з  системного програмного забезпечення 

Пояснювальна  записка 
 
 

Тема: Програмне забезпечення для перекладу початкового коду з одних мов програмування на інші. 
 
 
 
 
 
 
 
 
 
 
 

                  Виконала:

                  студентка ФКС - 307

                  Бундзяк Олександра 

                  Прийняв: Глазок О.М.  
                   
                   
                   
                   

Київ  – 2009 
Зміст
 

  1. Завдання  на курсову роботу        3 
  2. Теоретична частина          4
  3. Практична частина          6

      3.1 Конвертери мов програмування для ОС Linux        6

      3.1.1 Програма  OpenCobol        6

         3.1.1 Програма F2C         13

      3.2 Конвертери мов програмування для ОС Windows    15

         3.2.1 Програма BCX         15

  1. Висновки           22
  2. Список використаної літератури        23
 

 

       1. Завдання на курсову роботу 

     Ознайомитись  з програмним забезпеченням для  перекладу початкового коду з одних мов програмування на інші.

     Розглянути  відповідні засоби для ОС Windows та Linux.

 

      2. Теоретична частина 

     Програмне забезпечення для перекладу початкового коду з одних мов програмування на інші часто називають конвертерами програмного коду. Ці утиліти почали розроблятися порівняно недавно, з переходом на більш сучасні мови програмування. Багато старалися переписати рядки, написані на Коболі, PL/I і інших мовах програмування, але не багатьом це вдавалося. Мовні перетворення викликають багато трудностей. Тому багато програмістів й до тепер продовжили використовувати ці мови, інші -- почали розробку автоматизованих мовних конвертерів.

     Багато  фірм-розробників ставили перед собою ціль «розробити конвертери, які б працювали в режимі простого майстра, і з якими могла б працювати люба секретарка», але це виявилося зовсім не легко.

     На  сьогодні вже існує велике різноманіття таких утиліт-конвертерів, але досконалих майже не існує. Постановка завдання для мовних перетворень дуже проста: перевести дану систему на іншу мову програмування, залишивши незмінним її зовнішню поведінку. Зазвичай, легкість формулювання проблеми перекладу залежить від наявності в цільовій мові відповідних вбудованих мовних конструкцій. Наприклад, якщо необхідно вибрати один з варіантів в залежності від якоїсь умови, то мова, що підтримує умовні пропозиції, буде найбільш зручною. Якщо ж доведеться використовувати мову, в якій конструкція if-then-else відсутня, її доведеться емулювати. Подібні фрагменти коду називають емульованими мовними конструкціями. Наприклад, можна емулювати об'єкти в мові, що не має підтримки об'єктної орієнтації. Проблема мовних перетворень зводиться до відображення вбудованих і емульованих конструкцій вихідної мови у вбудовані (по можливості) конструкції цільової мови. Існує як мінімум шість різних категорій подібного відображення; вони продемонстровані на рис. 1. 

     

     Рис.1 Відображення мовних конструкцій 

     При конвертуванні складних програм  виникає багато труднощів. Тексти згенерованих програм повинні бути добре структуровані, містити мінімум глобальних даних і т.п. На жаль, дуже мало вихідних програми задовольняють таким вимогам, і тому будь-яке осмислене перетворення мов має починатися з всебічної реструктуризації, - незважаючи на всі проблеми, що виникають при використанні класичних засобів реструктуризації.  

     Реструктуризація  вихідної програми виконується з метою зменшення числа проблематичних перетворень.

        

     У переважній більшості перетворень  реструктуризація є обов'язковим  попереднім етапом для того, що ми називаємо заміною синтаксису. На цьому кроці синтаксис спеціально підготовленого і реструктуризованого початкового тексту замінюється на цільовий синтаксис. Це відносно нескладний крок. Перетворені програми зазвичай виглядають потворно, тому необхідна ще одна реструктуризація (тепер уже в термінах цільового тексту), щоб максимально наблизити отриманий код до цільового мови. 

     На  сьогодні вже існує велике різноманіття таких утиліт-конвертерів, але досконалих майже не існує. 

 

     3. Практична частина 

     Розглянемо  роботу конвертерів мов програмування  на прикладі програми BCX (перетворення програмного коду з мови програмування Basic на мову C) для операційної системи Windows та програм f2cpp (fortran to C++) та Open-cobol (компілятор для мови програмування Cobol та конвертер з мови Cobol на мову C) для ОС Linux. 
 

3.1 Конвертери мов програмування для ОС Linux 

3.1.1 Програма OpenСobol

     OpenCOBOL є відкритим вихідним COBOL компілятор. OpenCOBOL реалізує значну частину COBOL 85 і COBOL 2002 стандартів, а також багато розширень існуючих компіляторів COBOL. 

     Також, OpenCOBOL перекладає COBOL в С і компілює перекладений код за допомогою власного компілятора C. Ми можете працювати з цією програмою на різних платформах, включаючи Unix / Linux, Mac OS X і Microsoft Windows. 

     Для ознайомлення з програмою, я встановила пакет Open-cobol-1.1.0 на Ubuntu 8 – дистрибутиві ОС Linux. 

     Ознайомлення я почала з написаної простої програми на мові Cobol (рис. 2), яку я зберегла у файлі під назвою Hello.cob:

Рис. 2 Код програми на мові Cobol 

     Для перевірки її роботи, за допомогою командного рядка і команди cobc –x hello.cob створимо виконувану програму  hello і запустимо її на виконання з допомогою команди ./hello. В результаті отримаємо: Hello World! (рис. 3)

Рис. 3 Результат виконання команд cobc –x hello.cob та ./hello 

     Для перекладу коду програми Hello, написаного на мові Cobol в мову програмування C використаємо команду cobc –C hello.cob . В директорії, де знаходився файл hello.cob з’явилося ще три файли hello.c, hello.c.h та hello.c.l.h .

     Відкривши файл hello.c ми вже побачили програмний код, написаний на мові C. І зразу замітили різницю між кодом, написаним вручну і кодом, перекладеним автоматично мовним конвертером. Об’єм коду є значно більшим.  

/* Generated by            cobc 1.1.0 */

/* Generated from          hello.cob */

/* Generated at            Дек 17 2009 02:22:57 EET */

/* OpenCOBOL build date    Dec 13 2009 20:50:05 */

/* OpenCOBOL package date  Feb 06 2009 10:30:55 CET */

/* Compile command         cobc -C hello.cob */ 

#define  __USE_STRING_INLINES 1

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <libcob.h> 

#define COB_SOURCE_FILE  "hello.cob"

#define COB_PACKAGE_VERSION "1.1"

#define COB_PATCH_LEVEL  0 

/* Global variables */

#include "hello.c.h" 

/* Function prototypes */ 

int HELLO (void);

static int HELLO_ (const int); 

/* Functions */ 

int

HELLO ()

{

  return HELLO_ (0);

} 

static int

HELLO_ (const int entry)

{

  /* Local variables */

  #include "hello.c.l.h" 

  static int initialized = 0;

  static cob_field *cob_user_parameters[COB_MAX_FIELD_PARAMS];

  static struct cob_module module = { NULL, NULL, NULL, NULL, cob_user_parameters, 0, '.', '$', ',', 1, 1, 1, 0 }; 

  /* Start of function code */ 

  /* CANCEL callback handling */

  if (unlikely(entry < 0)) {

   if (!initialized) {

    return 0;

   }

   initialized = 0;

   return 0;

  } 

  /* Initialize frame stack */

  frame_ptr = &frame_stack[0];

  frame_ptr->perform_through = 0; 

  /* Push module stack */

  module.next = cob_current_module;

  cob_current_module = &module; 

  /* Initialize program */

  if (unlikely(initialized == 0))

    {

      if (!cob_initialized) {

        cob_fatal_error (COB_FERROR_INITIALIZED);

      }

      cob_check_version (COB_SOURCE_FILE, COB_PACKAGE_VERSION, COB_PATCH_LEVEL);

      if (module.next)

        cob_set_cancel ((const char *)"HELLO", (void *)HELLO, (void *)HELLO_);

      (*(int *) (b_1)) = 0;

      initialized = 1;

    }

  cob_save_call_params = cob_call_params; 

  /* Entry dispatch */

  goto l_2; 

  /* PROCEDURE DIVISION */

  /* Entry HELLO */ 

  l_2:; 

  /* MAIN SECTION */

  /* MAIN PARAGRAPH */ 

  /* hello.cob:7: DISPLAY */

  {

    cob_display (0, 1, 1, &c_1);

  }

  /* hello.cob:8: GOBACK */

  {

    goto exit_program;

  }

  /* Program exit */ 

  exit_program: 

  /* Pop module stack */

  cob_current_module = cob_current_module->next; 

  /* Program return */

  return (*(int *) (b_1));

} 

/* End functions */

Вмістиме файла  hello.c.h: 

/* Generated by            cobc 1.1.0 */

/* Generated from          hello.cob */

/* Generated at            Дек 17 2009 02:22:57 EET */

/* OpenCOBOL build date    Dec 13 2009 20:50:05 */

/* OpenCOBOL package date  Feb 06 2009 10:30:55 CET */

/* Compile command         cobc -C hello.cob */ 

/* Frame stack declaration */

struct cob_frame {

      int perform_through;

      void *return_address;

}; 

/* Union for CALL statement */

union cob_call_union {

      void *(*funcptr)();

      int  (*funcint)();

      void *func_void;

};

union cob_call_union cob_unifunc; 
 

/* Storage */ 

/* PROGRAM-ID : HELLO */

static unsigned char b_1[4] __attribute__((aligned)); /* RETURN-CODE */ 

/* End of storage */ 
 

/* Attributes */ 

static const cob_field_attr a_1 = {33, 0, 0, 0, NULL};

/* Constants */

static cob_field c_1 = {12, (unsigned char *)"Hello World!", &a_1}; 
 
 

Информация о работе Програмне забезпечення для перекладу початкового коду з одних мов програмування на інші