Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


СЛОВА И СЛОВАРЬ ЯЗЫКА ФОРТ



Форт - высокоинтерактивный язык интерпретирующего типа.
Его словарь содержит слова, которые соответствуют либо процеду-
рам, либо данным, причем и те, и другие могут выполняться. Ини-
циирование слова приводит к вызову связанной с ним процедуры.
Процедуру, реализующую слово, можно рассматривать как его ин-
терпретацию, поскольку в ней заданы предписываемые этим сло-
вом действия.

Форт включает в себя базовый набор слов, причем некоторые
из них могут использоваться для создания новых слов. Такие слова
называются определяющими. В ходе разработки Форт-программы
для задания новых слов обычно применяются несколько определя-
ющих слов. Наиболее распространенным из них считается слово

Для изучения Форта можно также порекомендовать следующие книги,
вышедшие на русском языке: Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его
реализации. - Л.: Машиностроение, 1988; Броуди Л. Начальный курс
программирования на языке Форт. - М.: Финансы и статистика, 1989.

114


": " (двоеточие), которое служит для определения процедуры. Син-
таксис задания нового слова таков:

: имя_слова определение;

Здесь имя определяемого слова следует сразу за двоеточием.

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

Двоеточие - не единственное определяющее слово в языке
форт, к этому же типу относятся слова CODE (код), VARIABLE
(переменная) и CONSTANT (константа). Слово CODE применяет-
ся для включения в Форт-программу текста на языке ассемблера.
В большинстве реализаций для этого применяется ассемблер Форт-
системы. Синтаксис слова CODE:

CODE имя_слова ассемблерный_ к од END - C O DE

(Иногда после ассемблерного кода может стоять символ С - сино-
ним слова END_CODE). Возможность включения ассемблерного
кода очень важна для решения задач искусственного интеллекта,
поскольку позволяет заменять часто выполняемые части програм-
мы (такие, как интерпретатор продукций) непосредственно ассемб-
лерным кодом, что повышает эффективность программ. После того
как построение алгоритма нового слова завершено точкой с запя-
той (т.е. высокоуровневыми средствами определения слова), оно
может быть переведено на язык ассемблера и включено в програм-
му словом CODE. Таким образом, в Форте имеется весьма широ-
кий спектр возможностей для представления алгоритма на разных
уровнях абстракции - от языка ассемблера до проблемно-ориенти-
рованных языков, построенных путем определения необходимых
слов.

Два других стандартных определяющих слова служат для соз-
дания переменных и констант и аналогичны операторам описания
типов данных в традиционных языках программирования. Слово
VARIABLE (переменная) создает новую переменную, его синтаксис
таков:

VARIABLE и м я_пере м енной

где. имя переменной следует за словом VARIABLE. При выполне-
нии этого слова в памяти резервируется область (объемом обычно
в 16 бит) для хранения значения переменной с указанным именем.
При обращении к переменной исполняющая процедура возвращает

115


в качестве результата адрес зарезервированной области, который
затем может быть использован для считывания или записи. В Фор-
те эти операции обозначаются соответственно символами @ (про-
износится " разыменовать" ) и! (произносится " присвоить" ).

Аналогично константы определяются с помощью слова CON-
STANT. Их значения относятся к классу " только для считывания"
и задаются в виде

значение CONSTANT имя

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

ПЕРЕДАЧА ДАННЫХ ЧЕРЕЗ СТЕК

Константы и переменные при их инициировании возвращают
в качестве результата соответственно числа и адреса областей. Но
куда при этом записывается результат? В языке Форт имеется стек
данных (или стек параметров), через который слова пересылают
друг другу данные. Сам по себе стек - довольно распространенная
структура данных. Он широко используется в программных систе-
мах фирмы Хьюлетт-Паккард. Данные можно " втолкнуть" в стек,
а затем " вытолкнуть" из него, соблюдая определенный порядок:
последним вошел, первым вышел. Например, если в стек данных
Форт-системы втолкнуть числа 1, 2, 3, а затем произвести три
выталкивания, то извлеченные из стека числа будут находиться в
таком порядке: 3, 2, 1. Для того чтобы убедиться в этом на пра-
ктике, выполните слово-команду, которое выталкивает число, на-
ходящееся на вершине стека, для чисел натурального ряда. Тогда
после ввода с дисплея чисел

1 2 3  ...

вы получите их обратно в следующем порядке:
... 3 2 1 ok

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

116


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

( п ==> )

где п - число, а отсутствие символа справа от стрелки означает,
что вершина стека пуста (число оттуда удалено). Введенная форма
записи может быть также проиллюстрирована на примере слова +,
выполняющего сложение двух чисел nl и п2, которые находятся на
вершине стека. Результатом является число пЗ, помещаемое на
стек:

( п1 п2 ==> пЗ )

При помощи стековой нотации можно проследить последователь-
ность изменений стека в процессе выполнения слов, составляющих
Форт-программу.

ИЕРАРХИЧЕСКАЯ ДЕКОМПОЗИЦИЯ
И РАЗБИЕНИЕ НА МОДУЛИ

Необходимость помнить последовательность состояний стека
представляется малопривлекательной для программиста. С одной
стороны, Форт позволяет.увидеть, что происходит в программе на
уровне ее ассемблерной реализации, но с другой стороны, прог-
раммирование не в содержательных терминах, а в трудно интер-
претируемых кодах, близких к машинным, может показаться чрез-
вычайно сложным. Этот недостаток Форта в значительной степени
компенсируется наличием средств для определения новых слов,
позволяющих освободиться от необходимости программировать в
кодах путем создания высокоуровневых команд требуемой проб-
лемной ориентации, и тем самым перейти к решению задачи на
более высоком уровне абстракции. Однако операции низкого уров-
ня хотя и неявно, но все же будут присутствовать в программах,
реализующих ваш алгоритм. Языки, в которых вместо стека ис-
пользуются локальные переменные, конечно, свободны от такого
недостатка, но в свою очередь не позволяют программисту вносить
коррективы в машинную версию программы. В Форте же, напро-
тив, существует возможность опуститься на самый низкий уровень
выполнения программы, для чего и предназначено слово CODE.
Иными словами, команды уровня реализации в языке Форт явля-
ются доступными для программиста. (Локальные переменные то-
же могут применяться в Форте, но здесь они не рассматриваются).
Явно задавая команды, выполняющие операции над стеком, вы мо-

117


 

Уровень компилятора

Уровень интерпретатора

Уровень управления
периферийными уст-
ройствами

Уровень машинной
реализации (ядро) системы)

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

Форт поддерживает функциональный стиль программирова-
ния, т.е. каждое слово выполняется как функция: получает аргу-
менты из стека, выполняет над ними соответствующие действия и
засылает результаты обратно в стек. Локализация обработки дан-
ных на стеке предотвращает возможность возникновения побочного
эффекта, состоящего в модификации глобальных переменных.
Каждое слово представляется в виде корректно построенного, замк-
нутого модуля, взаимодействие которого с другими программами
легко проследить.

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

Слова всех уровней кроме первого составляют собственно язык
Форт. Нижний уровень занимают машинно-зависимые слова, обра-
зующие ядро. К следующему уровню относятся слова для управле-
ния периферийными устройствами. Они реализуют обращение из
Форт-системы к клавиатуре, дисплею и дисководам компьютера.
Третий уровень - уровень интерпретатора. Он включает в себя
слова, с помощью которых пользователь управляет интерпретато-
ром Форта. Верхним является уровень компилятора. К этому уров-
ню относятся управляющие конструкции языка Форт и определяю-
щие слова, предназначенные для создания новых слов и включения
их в словарь Форт-системы. Перечень слов, входящих в стандарт
языка Форт-83, приведен на рис. 6.2. Наиболее часто употребляе-
мые из них будут далее описаны. Функциональные определения
слов можно найти в приложении Б.


Поделиться:



Последнее изменение этой страницы: 2019-03-29; Просмотров: 231; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.021 с.)
Главная | Случайная страница | Обратная связь