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

Автор: Пользователь скрыл имя, 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 Кб (Скачать)

     Також за допомогою програми Open-cobol ми можемо перекласти код на машинну мову, на мову assembler. Зробимо це за допомогою команди cobc –S hello.cob. (рис. 4) 

Рис. 4 Команда cobc –S hello.cob 

 

      Ми бачимо, що в нас з’явився файл hello.s. Відкривши його ми вже побачимо цю ж програму Hello world, але перекладену вже на асемблер: 

     .file "cob6941_0.c"

      .section .rodata

      .align 4

      .type a_1, @object

      .size a_1, 8

a_1:

      .byte 33

      .byte 0

      .byte 0

      .byte 0

      .long 0

.LC0:

      .string "Hello World!"

      .data

      .align 4

      .type c_1, @object

      .size c_1, 12

c_1:

      .long 12

      .long .LC0

      .long a_1

      .text

.globl HELLO

      .type HELLO, @function

HELLO:

      pushl %ebp

      movl %esp, %ebp

      subl $8, %esp

      movl $0, (%esp)

      call HELLO_

      leave

      ret

      .size HELLO, .-HELLO

      .data

      .align 4

      .type module.6240, @object

      .size module.6240, 28

module.6240:

      .long 0

      .long 0

      .long 0

      .long 0

      .long cob_user_parameters.6239

      .byte 0

      .byte 46

      .byte 36

      .byte 44

      .byte 1

      .byte 1

      .byte 1

      .byte 0

      .local cob_user_parameters.6239

      .comm cob_user_parameters.6239,256,32

      .local initialized.6238

      .comm initialized.6238,4,4

      .section .rodata

.LC1:

      .string "1.1"

.LC2:

      .string "hello.cob"

.LC3:

      .string "HELLO"

      .text

      .type HELLO_, @function

HELLO_:

      pushl %ebp

      movl %esp, %ebp

      subl $2072, %esp

      movl 8(%ebp), %eax

      shrl $31, %eax

      testl %eax, %eax

      je .L4

      movl initialized.6238, %eax

      testl %eax, %eax

      jne .L6

      movl $0, -2052(%ebp)

      jmp .L8

.L6:

      movl $0, initialized.6238

      movl $0, -2052(%ebp)

      jmp .L8

.L4:

      leal -2044(%ebp), %eax

      movl %eax, -4(%ebp)

      movl -4(%ebp), %eax

      movl $0, (%eax)

      movl cob_current_module, %eax

      movl %eax, module.6240

      movl $module.6240, cob_current_module

      movl initialized.6238, %eax

      testl %eax, %eax

      sete %al

      movzbl %al, %eax

      testl %eax, %eax

      je .L9

      movl cob_initialized, %eax

      testl %eax, %eax

      jne .L11

      movl $0, (%esp)

      call cob_fatal_error

.L11:

      movl $0, 8(%esp)

      movl $.LC1, 4(%esp)

      movl $.LC2, (%esp)

      call cob_check_version

      movl module.6240, %eax

      testl %eax, %eax

      je .L13

      movl $HELLO_, 8(%esp)

      movl $HELLO, 4(%esp)

      movl $.LC3, (%esp)

      call cob_set_cancel

.L13:

      movl $b_1, %eax

      movl $0, (%eax)

      movl $1, initialized.6238

.L9:

      movl cob_call_params, %eax

      movl %eax, cob_save_call_params

.L15:

      movl $c_1, 12(%esp)

      movl $1, 8(%esp)

      movl $1, 4(%esp)

      movl $0, (%esp)

      call cob_display

.L16:

      movl cob_current_module, %eax

      movl (%eax), %eax

      movl %eax, cob_current_module

      movl $b_1, %eax

      movl (%eax), %eax

      movl %eax, -2052(%ebp)

.L8:

      movl -2052(%ebp), %eax

      leave

      ret

      .size HELLO_, .-HELLO_

      .local b_1

      .comm b_1,4,16

      .comm cob_unifunc,4,4

      .ident "GCC: (GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)"

      .section .note.GNU-stack,"",@progbits 
 
 

 

3.1.2 Програма F2С 

     Інколи існує необхідність виконання добре налагодженої програми мовою Fortran за відсутності компілятора, але за наявності компілятора мови C. В деяких випадках зручно змішати C і Fortran 77, а часто просто неможливо реалізувати ту чи іншу можливість на мові Fortran 77 або важче, ніж в C (наприклад, управління пам'яттю, деякі символьні операції, масиви функції, гетерогенні структури даних, виклики залежні від операційної системи). Саме з цих причин деякі програмісти вважають за краще використовувати C. Існує велика кількість хороших програм на Fortran і часто виникає бажання використовувати їх в середовищі мови C. З цих причин почалася розробка конвертора f2c.  

     f2c - досить відомий конвертер з  Fortran 77 в C, який розповсюджується  у вихідному коді (реалізований на мові C). Дозволяє створити програму на мові C з вихідного коду на Fortran 77.  

Переваги f2c:

є безкоштовним

добре налагоджений

генерує досить швидкий код 

     Я випробувала конвертер f2c також на Ubuntu 8. Він є вбудованою утилітою в Linux.

     Розглянемо його роботу на такій же програмі hello world, що й в попередньому розділі, але написану на мові програмування Fortran. Збережемо її у файлі hello.f. Вона буде мати вигляд (рис. 5  )

Рис. 5 Вигляд програми “hello world” на мові Fortran 

     Скомпілюємо файл проекта конвертером f2c з допомогою команди

     f2c -a -C++ -p hello.f (рис. 6) 

Рис. 6 Задання команди f2c -a -C++ -p hello.f

 

      Створиться файл hello.c, після відкриття якого ми побачимо код програми на мові програмування С: 

/* hello.f -- translated by f2c (version 20050501).

   You must link the resulting object file with libf2c:

      on Microsoft Windows system, link with libf2c.lib;

      on Linux or Unix systems, link with .../path/to/libf2c.a -lm

      or, if you install libf2c.a in a standard place, with -lf2c -lm

      -- in that order, at the end of the command line, as in

            cc *.o -lf2c -lm

      Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., 

            http://www.netlib.org/f2c/libf2c.zip

*/ 

#ifdef __cplusplus

extern "C" {

#endif

#include "f2c.h" 

/* Table of constant values */ 

static integer c__9 = 9;

static integer c__1 = 1; 

/* Main program */ int MAIN__()

{

    /* Builtin functions */

    integer s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen),

          e_wsle(); 

    /* Fortran I/O blocks */

    static cilist io___1 = { 0, 6, 0, 0, 0 }; 
 

    s_wsle(&io___1);

    do_lio(&c__9, &c__1, "Hello World!", (ftnlen)12);

    e_wsle();

    return 0;

} /* MAIN__ */ 

/* Main program alias */ int hello_ () { MAIN__ (); return 0; }

#ifdef __cplusplus

      }

#endif 
 
 
 

 

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

3.2.1 Програма BCX 

     Безкоштовний  транслятор Basic в C. Для компіляції програм  необхідно встановити С компілятор LCC-Win32. Мова являє собою суміш Qbasic, PowerBasic, та VB. Можна використовувати всі можливості наявні в мові С. Транслятор може створювати GUI, консольні і DLL програми. BCX зручний для Бейсік-програмістів , які вивчають мову С, можна ввести програму на Бейсіку, відтранслювати її в С, а потім порівнювати два лістинги.

        

     Перед початком роботи, установимо програму BCX та компілятор LCC-Win32, необхідний для компіляції С програм. Тепер почнемо ознайомлення з самою програмою. 

     До пакету BCX входять такі додатки:

     BCX Code Editor

     BCX to EXE Tool

     Menu Maker

     BCX MsgBox Builder

     Jen's File Editor 

     BCX Code Editor

     BCX Code Editor – редактор коду BCX. Для ознайомлення з роботою конвертера напишемо в ньому код простої програми на мові Basiс (рис. 7) яка буде виводити на екран текст: ”Hello World!” , та збережемо його під назвою hello.bas 

      Рис. 7 Вікно редактора  коду BCX з кодом  програми 
 

     BCX to EXE Tool

     За  допомогою цього додатку можна  відкомпілювати програму написану на мові Basic, перекласти її на мову С та створити виконуючі файли. Що ми й зробили.

       В розділі Tool Path ми вказали шлях до файлу BC.exe, за допомогою якого виконується переклад коду з мови програмування Basic на мову С, та файлу lcc.exe, за допомогою якого вже компілюється код, перекладений на мову С. В розділі My Program Path вкажемо директорію файлу hello.bas, який ми створили на попередньому етапі роботи за допомогою BCX Code Editor.

     Після натиснення на кнопку Start, можна побачити етапи роботи програми:

    • Creating C files… На цьому етапі код, який знаходиться у файлі hello.bas, перекладається на мову С і створюється файл hello.c.
    • Compiling. На другому етапі відбувається компіляція файлу hello.c за допомогою С компілятора Lcc-win32.
    • Linking obj files and creating executable… Створення obj файлів і виконуваного
    • Якщо не виявлено жодних помилок в коді, компіляція пройшла успішно, можна побачити повідомлення Ready – Compiled successfully!

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