10.1. КОДИРОВКА компьютерной программы
10.1.1. Что такое - кодировка компьютерной программы на языках высокого уровня
Кодировка КП – это создание КП в виде файла, содержащего последовательность машинных команд, которую может выполнять компьютер.
Процесс кодирования КП состоит из трех этапов:
· создания текста КП на выбранном языке программирования (высокого уровня);
· трансляции полученного текста в последовательность машинных кодов в виде объектных файлов (файлов с расширением.obj);
· связывания (линкования) этих объектных файлов в единую машинную программу (загрузочный модуль).
Создание текста КП производит программист (кодировщик) на основе проекта КП решения задачи и описания выбранного языка программирования. Для занесения созданного текста в память компьютера он набирает этот текст на клавиатуре компьютера с использованием того или иного текстового процессора. Очень удобно применять для этой цели текстовый процессор, входящий в составвыбранной программистом интегрированной среды программирования. Если текст КП написан на языке Паскаль, то в качестве среды программирования рекомендуется система Borland Pascal, а если текст КП написан на языке Си – система Borland C.
Интегрированная среда программирования, помимо текстового процессора, содержит средства трансляции, линкования и загрузки, а также средства отладки.
Работа программиста при т рансляции текста КПв среде программирования сводится к нажатию кнопки “ Compile ”. Среда обеспечивает не только создание объектного файла, но и контроль синтаксической правильности текста КП и выдачу сообщений об ошибках синтаксиса. При наличии таких сообщений программист должен, проанализировав вид ошибки и найдя в КП неверную конструкцию, исправить её и снова нажать кнопку “ Compile ”. При отсутствии ошибок компилятор, встроенный в среду программирования, создаст последовательность машинных команд, которая и будет сохранена средой в виде объектного файла.
|
Обычно текст КП решения задачи состоит из нескольких частей (подпрограмм), каждая из которых может содержать ссылки на другие части. Части КП компилируются раздельно, так что результат компиляции текста КП состоит не из одного, а из нескольких объектных файлов. Между такими файлами необходимо установить определенные связи – слинковать эти файлы. Программист должен для этой цели нажать кнопку “ Run ”. Линкование нескольких файлов выполняет встроенная в среду программирования программа - редактор связей (линковщик). Если линкование прошло успешно, линковщик создаёт результат линкования – КП в виде загрузочного модуля, а встроенная в среду программа загрузчик загружает в оперативную память этот модуль и передаёт ему управление - КП начинает выполняться. Однако при линковании объектных файлов в загрузочный модульлинковщик может обнаружить такие ошибки программирования (например, опечатки в именах процедур и вызовах), которые не может обнаружить компилятор. В этом случае линковщик выдаёт сообщения об обнаруженных им ошибках, а программист должен исправить текст КП и снова нажать кнопку “ Compile ”.
Таким образом, основную работу на втором и третьем этапах берет на себя среда программирования, главная же работа программиста – создание правильного текста на каком-либо языке высокого уровня.
|
10.1.2. КАК составлять текст компьютерной программы на основе проекта
Далее предполагается, что проект КП записан в виде документа (Д1) на каком-либо языке проектирования КП (см. выше, п. 9.3.), а описание языка (в форме БНФ, в виде шаблонов, синтаксических диаграмм или в каком-то ином виде) и интегрированной среды программирования (результата объединения в единую систему текстового редактора, транслятора, линковщика, отладчика и др.) содержится в каком-либо руководстве (Д2).
Из Д2 выясняются правила записи КП в виде линейного текста на выбранном языке программирования и в соответствии с ними производится "сборка" текста КП по её проекту.
“Сборка” производится по алгоритму, приведенному ниже.
I. Выбирается нетерминал, который обозначает спроектированную программную единицу (это может быть "программа", "процедура", "функция" и т.п.).
II. В качестве начального варианта текста КП записывается выбранный нетерминал.
III. В Д2 выбирается та формула БНФ (шаблон, синтаксическая диаграмма или что-то другое), в левой части которой находится выбранный нетерминал.
IV. Анализируется правая часть выбранной формулы (внутренность шаблона, сама синтаксическая диаграмма или что-то другое); в результате анализа выбирается тот вариант (в многовариантной формуле), который представляется кодировщику подходящим для кодировки выбранного нетерминала.
V. В тексте КП выбранный нетерминал заменяется на текст выбранного на предыдущем шаге варианта.
VI. Полученный текст КП анализируется: если в нём не содержится ни одного нетерминала, “сборка” КП считается законченной, а полученный текст – ее результатом. В противном случае в тексте КП выбирается один из нетерминалов (любой) и обрабатывается так, как это указано в пунктах III, IV, V и VI.
|
10.1.3. Пример составления текстов компьютерных программ на разных языках высокого уровня
Вначале приведем пример составления текста КП на ЯВУ Паскаль. Проект этой КП приведен в п.??? предыдущей главы.
Program MAX_FROM_THREE_NUMBER;
var
A {первое заданное число},
B {второе заданное число},
C {третье заданное число},
G {введенное число},
MAX {максимум из трех заданных чисел}: longint;
begin
{ввод исходных данных:}
{ ввод A с контролем }
Writeln (“Введите первое число”, G); Readln (G); Writeln (“ А = ”, G);
{контроль введенного данного}
WhileG < 0 OR G > 65535 do
Begin
if G > 99999
then Writeln (“Количество цифр во вводимом числе не должно быть больше 5.”)
else Writeln (“Вводимое число должно быть неотрицательным
и не должно превышать 65535.”);
Writeln (“Повторите ввод!”); Readln (G);
Writeln (“Теперь Вы ввели ”, G);
End;
A:= G;
{ ввод B с контролем }
Writeln (“Введите второе число”, G); Readln (G);Writeln (“ B = ”, G);
{контроль введенного данного}
WhileG < 0 OR G > 65535 do
Begin
if G > 99999
then Writeln (“Количество цифр во вводимом числе не должно быть больше 5.”)
else Writeln (“Вводимое число должно быть неотрицательным
и не должно превышать 65535.”);
Writeln (“Повторите ввод!”); Readln (G);
Writeln (“Теперь Вы ввели ”, G);
End;
B:= G;
{ ввод C с контролем }
Writeln (“Введите третье число”, G); Readln (G); Writeln (“ C = ”, G);
{контроль введенного данного}
WhileG < 0 OR G > 65535 do
Begin
if G > 99999
then Writeln (“Количество цифр во вводимом числе не должно быть больше 5.”)
else Writeln (“Вводимое число должно быть неотрицательным
и не должно превышать 65535.”);
Writeln (“Повторите ввод!”); Readln (G);
Writeln (“Теперь Вы ввели ”, G);
End;
C:= G;
{поиск максимума из двух}
if A > B then MAX:= A else MAX:= B;
{поиск максимума из трёх}
if MAX < C then MAX:= C;
{вывод результата}
Writeln (“A = ”, A, “B = ”, B, “C = ”, C, “ Самое большое число - ”, MAX, “.”)
End.
Текст КП на языке Паскаль получен из текста проекта в процессе “сборки”. При этом нетерминалы использованы в качестве комментариев, сопровождающих текст операторов языка Паскаль.
Следующий пример составления текста КП - запись на языке СИ (Borland C++, версия 1.3) текста КП на основе того же проекта.
#include <iostream.h>
main ()
{
unsigned long A {первое заданное число},
B {второе заданное число},
C {третье заданное число},
MAX {максимум из трех заданных чисел};
{ввод исходных данных}
cin>> A; {cout<<"A = "<< A <<"\n";};
cin>> B; {cout<<"B = "<< B <<"\n";};
cin>> C; {cout<<"C = "<< C <<"\n";};
{поиск максимума}
if (A > B) { MAX = A } else { MAX = B };
if ( MAX < C) { MAX = C };
{вывод результата}
{cout<<" Наибольшее из трех чисел – это "<< MAX << “.” <<"\n";};
}
10.1.4. О стиле кодирования
§ На основе одного проекта и средствами одной среды и одного языка программирования можно написать много разных текстов КП, каждый из которых будет пригоден для решения задачи на компьютере. Эти тексты будут разного “качества”: по ясности, простоте и доступности восприятия людьми, которые вынуждены их читать. Существует набор правил, выполнение которых помогает писать ясные КП. Ниже эти правила приводятся.
I. Используйте осмысленные имена.
II. Избегайте сходных имен.