
книги из ГПНТБ / Караваев, Н. И. Электронные цифровые вычислительные машины и программирование учеб. пособие
.pdf- 260 -
нарушению принципа однозначности, описание алгоритмов полу чается весьма неполным.
Операторная запись алгоритмов хотя и дает формальные правила для записи алгоритмов, но все же иьлвт ряд серьез ных недостатков. Она не предусматривает программирования самих расчётных формул, а последовательность вычислений за даётся только в виде логической схемы.
Существует ещё ряд языков, которые по тем или иным при чинам не удовлетворяют предъявляемым к универсальному лен ку требованиям. Кроме уже сказанного , язык должен предусмат ривать наглядный и многоступенчатый характер записи /то-есть сложные алгоритмы должны получаться из минимального количест ва простых/. Для наглядного изображения вычислительных про цессов наиболее естественным, очевидно, является использова ние в языке как некоторых легко понимаемых изобразительных средств из разговорного языка, так и элементов укоренившей ся математической символики. Развитие современных алгоритми ческих языков идет именно по этому пути.
Рассмотрим несколько подробнее, какие объекты должен опи сывать алгоритмический язык и с помощью каких средств. При по становке математической задачи, при формулировке теорем и т.д. обычно пользуются как чисто математическими терминами, так и
чисто логическими. Например, |
мы часто |
говорим: "если а > в, |
|
то |
в противном случае |
" . 3 |
этой части предложения |
" а, > , в" - математические термины, а "если, то, в противном случае" - логические.
Математику иногда сравнивают со зданием, причем множест во изучаемых ею объектов вместе с операциями над ними ото ждествляют с кирпичами, а логику рассматривают как связующее звеноцемент. Таким образом, язык должен содержать средства для описания как чисто математических, так и логических объек тов и операций. Нужно учесть, что он предназначается для опи сания последовательно протекающих во времени вычислительных процессов, которые в конечном итоге должны быть реализованы в ЭЦВМ. Поэтому в языке желательно иметь средства для описа
ния ряда понятий, свойственных машинной реализации этих процес-
- 261 -
сов. Например, к важнейшим достоинствам любой ЭЦВМ относит ся возможность организации циклического характера вычисле ний.
Чтобы машина могла "понять" вались, сделанную на алго ритмическом языке, в нем желательно иметь средства для опи сания свойств и характера наиболее важных математических объектов / н - р , чисел, векторов, матриц, массивов и д р . / . Следовательно, язык должен содержать и уметь описывать ряд чисто алгоритмических понятий и объектов.
Итак, алгоритмический язык должен содержать набор спе цифических терминов и символов, обозначающих ^тематические, логические, алгоритмические объекты v. операции, свойства и отношения этих объектов и должен удовлетворять следующим тре бованиям:
-быть достаточно гибким, чтобы запись задач на этом
языке была компакта и наглядна;
-легко усваиваться при изучении, что может быть дос
тигнуто близостью к общепринятой метьмахической символике;
-быть удобным для публикаций и достаточно простые.
Внастоящее время еще не создан единый настолько совер шенный алгоритмический язык, который удовлетворял бы всем предъявляемым требованиям и был бы одинаково пригодным для различного рода применений.
В1958 году усилиями группы ученых Западной Европы и Америки был разработан универсальный язык программирования для решения вычислительных задвч, окончательный вариант ко торого носит название АЛГОЛ-60. В настоящее время АЛГОЛ-60
получил международное |
признание |
и широко, применяется в СССР. |
Он является в какой-то |
степени |
слиянием математического и |
разговорного языков. На базе этого, языка в Советском Союзе разработаны алгоритмические языки для экономических задач АЛГЭМ и АЛГЭК.
В настоящее время зарегистрировано более 2000 алгоритми ческих языков и число их непрерывно растет.
Существующие алгоритмические языки можно разделить на че-
- 262 -
тыре группы, отличающиеся своим назначением и характеристи ками:
1. Явыки, испольауемые для решения вычислительных за дач: АЛГОЛ-60, адресный язык Института кибернетики АН УССР, ФОРТРАН, язык Института кибернетики АН Эстонской ССР, 1Щ,г ДЖОВИАЛ и др.
2. Языки, применяемые при планировании, учете и для обработки экономической информации, такие как КОБОЛ, ТАБОЛ, АЛГЭМ, АЛГЭК, АЛГОЛ-КОБОЛ и др.
3.Яэыки для решения информационно-логических задач
типа КОШТ, ИПЛ-У, |
ЛИСП, РЕКОЛ, ФЛПЛ, РИКАЛ и др. |
4. Языки для |
описания алгоритмов управления производ |
ственными процессами в реальном масштабе времени, как, напри мер, APT.
Ниже приводятся общие сведения о языке АЛГОЛ. Полное описание его можно найти в соответствующей литературе [Л6-ЛЮ].
Изучение любого разговорного языка начинается с алфави та /основных символов языка/, а такге фонетики /раздел лин гвистики, изучающий звуковой строй языка/. Дальнейшим этапом
является изучение грамматикинауки |
о |
правописании, включаю |
||
щей в |
себя морфологию /учение о форме |
слов/, синтаксис |
/уче |
|
ние о |
сочетании слов в предложении/и пунктуацию. Если провес |
|||
ти аналогию в изучении разговорного |
и алгоритмического |
языков, |
||
то можно придти к выводу, что почти |
все перечисленные |
выше эта |
пы изучения, за исключением фонетики /хотя остается желатель ным, чтобы человек, владеющий алгоритмическим языком, правиль но произносил входящие в его состав слова/, присущи и алгорит мическому языку.
При изучении языка нужно хорошо различать две характеризую щие его стороны: синтаксис и семантику.
Под синтаксисом понимается набор строгих формальных пра вил записи, служащих для конструирования более сложных образо ваний языка из менее сложных, а также для однозначного пони мания записи с целью обеспечения формального перевода ее на язык машины.
- 263 -
Под семантикой понимается смысловая /или содержательная/ сторона тех или иных образований явнка. Поэтому при изуче нии различные синтаксические единицы языка, обозначающие либо математические, либо логические, либо алгоритмические понятия, должны рассматриваться как с точки арения синтак сической /формальной/, так и семантической /смысловой/.
В любом языке обычно существует четыре уровня синтакси ческих единиц, которые по степени сложности могут быть за писаны в таком порядке:
1 . Алфавит;
2 . Слова;
3. Выражения;
4. Предложения.
В таком порядке и рассмотрим краткий обзор основных син таксических единиц языка АЛГОЛ-60.
Алфавит АЛГОЛ-60 представляет собой Набор самых элемен тарных, неделимых синтаксических единиц - основных символов.
Основные символы делятся |
на четыре группы: |
||
1 . |
Цифры : |
0123456789. |
|
2 . |
Буквы: |
используются |
52 строчных и прописных букв |
латинского алфавита, однако этот список может изменяться
путем отбрасывания некоторых букв или добавления |
новых. |
|||||||
3. |
Логические значения. В качестве |
логических |
значений |
|||||
применяются два |
символа |
|
|
|
|
|||
|
"tt/ue |
- истинно, |
^оЛье |
|
- ложно. |
|
||
4. |
Ограничители: |
знаки операций, |
разделители, |
скобки, |
||||
описатели, |
спецификаторы. |
|
|
|
|
|||
Знаки |
операций: |
|
|
|
|
|
||
- |
арифметические |
+ |
прибавить |
к |
, |
|
||
|
|
|
|
- |
отнять . . . . |
|
|
|
|
|
|
|
и умножить на |
. . . , |
|
||
|
|
|
|
/ |
делить на |
. . . , |
|
|
|
|
|
|
-г- разделить |
нацело . . . , |
|
+возвести в степень,
-логические = "эквивалентно" /равнозначность/,
|
|
|
|
- |
264 |
|
- |
|
|
|
|
|
Z) |
" |
влечёт |
" |
/импликация/, |
|
|||
|
|
V |
" |
или" |
/логическое |
сложение/, |
||||
|
|
Л " и " /логическое умножение/, |
|
|||||||
|
|
—1 |
" |
не" |
/отрицание/, |
|
|
|
||
- |
отношения > , < , > , < |
= |
^£ ; |
|
|
|
||||
- |
следования |
|
^oto |
- |
'перейти |
к |
, |
|
||
|
|
|
|
1^ |
- |
если, |
|
|
|
|
|
|
|
|
then |
- |
то, |
|
|
|
|
|
|
|
|
е£&е |
- |
иначе, |
|
|
|
|
|
|
|
|
^ог- |
- |
для, |
|
|
|
|
Разделители: |
|
do |
- |
выполнить |
/цикл/. |
|
||||
|
|
|
|
|
|
|
|
|||
, - |
служит |
для разделения |
элементов |
списков, |
например |
|||||
список |
индексов [L,j,,kl |
|
; |
|
|
|
|
|||
. - |
служит |
для |
отделения |
целой части числа от дробной; |
||||||
: - |
служит |
для разделения |
граничных |
пар в описаниях |
||||||
массивов, а также |
для |
отделения меток |
от |
операторов; |
||||||
; - |
служит |
для разделения |
отдельных участков |
программы |
||||||
/операторов и описаний/; |
|
|
|
|
|
|
||||
:» - служит в качестве символа присваивания; |
|
|||||||||
1—1 - пробел |
применяется |
при |
построении |
строк; |
|
—ю - основание степени;
step |
- шаг |
") |
|
агш£~ |
да |
[ |
испольауются при построении операторов |
ух/Ше- |
пока |
J |
^ K J I A • |
comment _ примечание позволяет включать дополнительный текст, который транслятором не воспринимается, а служит для удобства понимания программы людьми.
Скобка:
( ) - служат для определения порядка действий в выра жениях ;
£ ] - индексные скобки;
гf - кавычки используются для образования строк обоз
начающих нечисловые величины /собственные имена и д р . / ; fee^uv & i d - операторные скобки служат для объединения опе раторов в составные операторы и блоки.
- 265 -
Описатели служат для построения описаний величин и других объектов, используемых в АЛГОЛЕ и имеют вид:
|
owk |
- |
собственный, |
|
|
|
Lnteqe.4, |
_ целый, |
|
|
|
|
Ze.a.£ |
_ |
вещественный, |
|
|
|
hoo&zan.- |
|
логический, |
|
|
|
oX-iay |
_ |
массив, |
|
|
|
Switch |
- |
переключатель, |
|
|
|
jbloceduie^ |
|
процедура. |
|
|
Спецификаторы |
gtzlnq. |
/строка/, |
£аЛе.£- |
||
/метка/, |
\/<х-£ие /значение/ |
используются |
только в разделе |
||
описаний |
процедур и служат для характеристики величин, ис |
||||
пользуемых в процедурах. |
|
|
|||
С помощью основных |
символов /алфавита/ |
строятся все ос |
тальные более сложные синтаксические единицы. Наименьшей еди ницей имеющей смысловое значение, является первичное выраже ние /или слово языка/.
|
К первичным выражениям относятся числа /303 - целое без |
||||
знака, + 303 - целое,.303 - правильная |
дробь, 10.303 - деся |
||||
тичная дробь или просто дробь |
и т.д. / , |
переменные / yitj |
- |
||
y[l,j>l |
— переменная с индексами, |
? - простая |
пере |
||
менная/, |
указатели функций /' а-4£ (х) -\х\, $<р£(х) - Vx |
/. |
|||
|
Следующими по сложности синтаксическими единицами являют |
||||
ся |
выражения: |
|
|
|
|
- |
арифметические, например, |
(S<^t-t(xxX |
+ yfS^g +Хху)", |
-логические, -натирги^ер, (р^ф 1л(а[аЧ]>ОУа[гг]>о).
Выражения в свою очередь являются материалом для построе ния более сложных синтаксических единиц языка - операторов и описаний.
Оператор / в разговорной речи ему соответствует предложе ние/ является одним ив основных понятий, так как служит ука занием к выполнению действий и выражает вполне законченную самостоятельную мысль.
Классификация операторов в АЛГОЛе представляется схемой. Всего имеется восемь различных видов операторов, причём неко торые из этих видов объединяются в более крупные группировки.
- 266 -
оператор
После каждого оператора ставится точка с запятой.
Блок представляет собой самую совершенную синтаксичес
кую единицу АЛГОЛа. |
|
|
|
|
|
|
|
Блок - |
автономный участок |
программы, |
включающий в себя |
||||
информацию двух видов: описания данных и других |
объектов, |
||||||
участвующих в вычислениях, и операторы. |
|
|
|
||||
В начале блока идут описания, затем пишутся все опера |
|||||||
торы в порядке их выполнения. Блок начинается словесной |
скоб |
||||||
кой ое^иг |
и заканчивается |
словесной скобкой |
e n d |
|
|||
Программа в АЛГОЛе представляет собой либо блок, либо |
|||||||
составной |
оператор. |
|
|
|
|
|
|
В заключение приведем пример простейшей программы на |
|
||||||
АЛГОЛе. |
|
|
|
|
|
|
|
Пример. Два одномерных массива |
а й в |
содержат по 30 |
эле |
||||
ментов. Вычислить |
зо |
|
\2 |
|
|
|
|
Программа на АЛГОЛе записывается следующим образом: |
|
||||||
|
D : - О ; |
(о% IЫ |
$hp |
i unlit |
Зо |
do |
|
e u d
- 267 -
Алгоритм, записанный на языке АЛГОЛ, как и на любом другом алгоритмическом языке не может быть выполнен непос редственно на современных машинах; программа на АЛГОЛе долж на быть предварительно переведена на язык машины. Этот пе ревод может быть сделан самой машиной при помощи специаль ной программы, написанной в коде машины и называемой транс лятором.
§9.4.ТРАНьЛЯТиРЬ
Современные трансляторы - это мощные программирующие программы, переводящие запись алгоритмов с некоторого вход ного языка на язык конкретной ЗьВМ. Перевод состоит в заме не символов и синтаксиса входного языка символами и синтак сисом машинного языка, при сохранении неизменным смыслового содержания переводимого текста.
При разработке трансляторов большое внимание уделяется качеству составляемых ими программ. Программы по своим ха рактеристикам должны мало отличаться от программ, составлен ных вручную. Сравнение ведется по двум параметрам: времени решения задачи на ЭЦВМ и длине /числу команд/ программы. Качество программирования в большой степени зависит от осо бенностей входного языка, а также принципов, положенных в основу при разработке транслятора. К существенным показате лям совершенства транслятора относится время трансляции.
Оно должно быть минимальным.
Выбор входного языка для системы автоматического програм мирования определяется в первую очередь кругом задач, на ре шение которых система ориентирована. Входной язык может быть разработан либо заново, либо на основе одного из существующих алгоритмических языков. Последних, как указывалось выше, к настоящему времени насчитывается больше двух тысяч.
Определенные ограничения на входной язык накладываются со стороны самой ЭЦВМ и, в частности, устройств ввода информации. Последние, как правило, имеют довольно ограниченный алфавит,
- 268 -
что приводит к необходимости разработки специальных правил кодировки символов входного языка символами устройств ввода. Отсюда стремление по возможности сблизить алфавит входного языка с алфавитом устройств ввода.
В основе построения трансляторов лежит блочный принцип. Это объясняется сравнительно небольшими размерами ОЗУ ЭЦВМ, не позволяющими размещать одновременно обрабатываемую инфор мацию и транслятор в целом.
Блоки транслятора хранятся на внешнем накопителе и по мере необходимости вызываются в оперативную память. Вызов блоков происходит по одному в определенном порядке. Каждый блок выполняет свойственную только ему работу. Трансляторы разрабатываются так, что каждый блок вызывается в оператив-. ную память только один раз. Результаты работы блоков, а так же сами блоки после выполнения всех предписанных им работ переписываются на внешний накопитель. Большая часть получен ных результатов используется в дальнейшем в качестве исход ных данных для работы последующих блоков.
Во время работы транслятора в оперативной памяти машины постоянно находится ряд вспомогательных программ. С их по мощью осуществляется подготовка информации, необходимой для работы очередных блоков, происходит вызов блока, вызов обра батываемой информации и так далее. В оперативной памяти пос тоянно находится неиольшое число наиболее употребительных констант.
F-чочный принцип строения имеет то преимущество, что поз воляет без существенных доработок всего транслятора вносить изменения и усовершенствования в отдельные блоки,.а также вводить в его состав совершенно новые структурные единицы.
После ввода информации на ЭЦВМ происходит при необходи мости перекодировка ее на промежуточный язык и перевод инфор мации на внутренний язык. Затем в ОЗУ один за другим вызы ваются блоки программирования. В задачу каждого блока входит реализация алгоритмов программирования для единиц языка опре деленного типа.
После того как запрограммированы все синтаксические еди-
- 269 -
ницы, входящие в исходную информацию, происходит выбрасыва ние лишних кодов, распределение памяти и присвоение истин ных адресов.
Работа транслятора заканчивается либо выводом готовой программы на перфорацию, либо записью ее на внешний накопи тель, либо передачей управления на счет.
Работа по созданию трансляторов носит коллективный харак тер и продолжается порой годами. Например, суммарная трудо ёмкость разработки системы автоматизации программирования АЛЬФА оценивается в 35 человеко-лет.
Однако создание алгоритмических языков с одновременной разработкой трансляторов позволяет автоматизировать не толь ко отдельные этапы ручного программирования, а весь процесс составления программ.