Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 13--18.doc
Скачиваний:
23
Добавлен:
24.04.2019
Размер:
558.08 Кб
Скачать

Компиляторы и интерпретаторы

Из сказанного ясно, что алгоритм, записанный на алгоритмическом языке, не может быть непосредственно выполнен с помощью ЭВМ — для этого он должен быть предварительно переведен (оттранслирован) на язык той машины, на которой этот алгоритм будет исполняться. Выполнение такого перевода самим человеком потребовало бы от него больших затрат труда и времени, а к тому же — фактического умения программировать на языке машины, что свело бы на нет эффект использования алгоритмических языков.

Если же алгоритмический язык выбрать так, чтобы перевод любого алгоритма с этого языка на язык машины можно было осуществить по формальным правилам (а именно с учетом этого обстоятельства и создаются алгоритмические языки), то непосредственное выполнение такого перевода можно поручить самой машине. Для этого достаточно однажды составить специальную машинную программу, называемую транслятором, которая представляет собой не что иное, как записанный на языке машины алгоритм перевода текста с некоторого алгоритмического языка на язык какой-либо конкретной ЭВМ. Таким образом, исходными данными для транслятора является запись какого-либо алгоритма на исходном алгоритмическом языке, а результатом работы транслятора — тот же алгоритм, но записанный уже на машинном языке, пригодный для его непосредственного выполнения на соответствующей ЭВМ.

Трансляция программы может выполняться двумя способами:

  • методом компиляции,

  • методом интерпретации.

Если транслятор выполняет перевод всего текста программы в машинный код (с одновременной оптимизацией этого кода), то этот процесс называют компиляцией, а программы, выполняющие преобразование текста программы в машинный код называют компиляторами. Машинный код, полученный в результате компиляции, может храниться на любом накопителе в форме программы, которую можно в любой момент запустить на выполнение, как самостоятельное приложение.

В отличие от компилятора интерпретатор каждую отдельную команду программы преобразует в машинный код и сразу выполняет, т.е. программа интерпретирует (переводит на машинный язык) каждую команду программы. Получается, что все команды, содержащиеся в программе, в ходе работы интерпретатора выполняются последовательно друг за другом. Очевидно, что оптимизации машинного кода интерпретатор не производит.

Реальные трансляторы сочетают в себе технологии трансляции и интерпретации.

Преобразование алгоритма в программу

Практически используемые алгоритмические языки по своей сущности очень близки к формульно-словесному способу записи алгоритмов, который используется на уровне интуитивного (не формализованного) понятия алгоритма. При таком способе часть указаний о подлежащей выполнению последовательности действий задается в виде обычных математических формул, а часть таких указаний задается просто словами. Например, известный алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел п и m можно записать в виде:

  1. Положить А = п, В = m.

  2. Если А=В то перейти к п. 5, иначе — к п. 3.

  3. Если А > В, то в качестве нового значения А принять А - В, а значение В оставить без изменения; в противном случае в качестве нового значения В принять В - А, оставив без изменения значение А.

  4. Перейти к п. 2.

  5. Принять НОД = А и прекратить вычисления.

Впрочем, по сути дела тот же самый алгоритм можно сформулировать и короче:

  1. Принять А = п, В = m.

  2. Пока А не равно В выполнять: если А > В, то положить А = А – В, иначе положить В = В - А.

  3. Принять значение А в качестве НОД и прекратить вычисления.

Как видно, такой способ записи алгоритмов достаточно удобен и понятен для человека, но он имеет и весьма существенные недостатки. Во-первых, он громоздок и может быть излишне многословным. Во-вторых, по сути дела одно и то же указание словами можно сформулировать многими различными способами, а это таит в себе серьезную опасность неоднозначности понимания. В-третьих, такая достаточно произвольная формулировка алгоритма практически непригодна для автоматического — с помощью ЭВМ - перевода алгоритма на язык машины.

Для устранения этих недостатков и используются формализованные, строго определенные алгоритмические языки, которые в известной мере сохраняют достоинства указанного выше способа записи алгоритмов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]