Основные понятия
Приступая к изучению нового для нас языка программирования, мы прежде всего задаемся вопросами: какие конструкции есть в этом языке (какова морфология), как они записываются (каков синтаксис) и что означают (какова семантика). Например, в широко распространенном языке Паскаль имеется около двадцати конструкций (идентификатор, число без знака, присваивание, условный оператор и др.), синтаксис которых обычно задают с помощью граф-схем или порождающих правил, а семантику объясняют на основе той или иной машиннонезависимой модели вычислений. Часть языка ассемблера любой ЭВМ, предназначенная для записи машинных команд, содержит по одной конструкции на каждую команду. Запись такой конструкции обычно представляет отдельную строку и состоит из мнемонического обозначения команды и размещения операндов, а семантика определяется в терминах реальных действий, которые данная команда выполняет над ячейками памяти, регистрами и другими компонентами архитектуры ЭВМ.
Язык Форт больше всего похож на язык ассемблера. Его синтаксис также максимально прост. Запись каждой конструкции (команды) состоит из одного слова — мнемонического обозначения, в качестве которото может выступать последовательность любых литер, не содержащая пробела. Простота синтаксиса является следствием того, что в качестве вычислительной модели используется стековая машина. Слова-команды этой машины снимают необходимые операнды со стека и оставляют свои результаты (если они есть) также на стеке. Таким образом, программа, написанная на языке Форт, выглядит как последовательность слов, каждое из которых подразумевает выполнение тех или иных действий. Слова разделяются любым числом пробелов и переходов на новую строку; ограничение накладывается только на длину слова — оно должно содержать не более 31 литеры. Стандарт языка определяет сравнительно небольшой набор из 132 «обязательных» слов. Среди них есть слова, позволяющие определять новые через уже имеющиеся и тем самым расширять исходный набор слов-команд в нужном для данной задачи направлении.
Некоторые часто требующиеся расширения включены в стандарт в качестве «стандартных расширений» обязательного набора слов.
Вычислительная модель, лежащая в основе языка Форт, состоит из адресного пространства оперативной памяти объемом до 64 Кбайт, терминала и поля внешней памяти на магнитных дисках объемом до 32768 блоков по 1 Кбайт каждый. В пределах имеющегося адресного пространства располагаются стек данных и стек возвратов, словарь, буфер для ввода с терминала и буфера для обмена с внешней памятью.
Стек данных обычно располагается в старших адресах оперативной памяти и используется для передачи параметров и результатов между исполняемыми словами. Его элементами являются двухбайтные значения, которые в зависимости от ситуации могут рассматриваться различным образом: как целые числа со знаком в диапазоне от -32768 до +32767, как адреса оперативной памяти в диапазоне от 0 до 65535 (отсюда ограничение 64 К на размер адресного пространства), как коды литер (диапазон зависит от принятой кодировки) для обмена с терминалом, как номера блоков внешней памяти в диапазоне от 0 до 32767 или просто как 16-разрядные двоичные значения. В процессе исполнения слов значения помещаются на стек и снимаются с него. Переполнение и исчерпание стека, как правило, не проверяется; его максимальный объем устанавливается реализацией. Стандарт предусматривает, что стек растет в сторону убывания адресов; это согласуется с аппаратной реализацией стека в большинстве ЭВМ, которые ее имеют.
Стек возвратов по своей структуре аналогичен стеку данных, но используется особым образом некоторыми стандартными словами (подробнее об этом см. в ).
Начальную часть адресного пространства обычно занимает словарь (иначе «кодофайл») — хранилище слов и данных. По мере расширения исходного набора слов словарь растет в сторону увеличения адресов. Специальные слова из обязательного набора позволяют управлять вершиной словаря — поднимать и опускать ее.
Наряду со стеком данных и стеком возвратов в старших адресах оперативной памяти обычно размещается буфер на 64–100 байт для построчного ввода форт-текста с терминала и буферный пул для обмена с внешней дисковой памятью размером от 1 до 3 и более Кбайт.Доступ к этим буферам и фактический обмен осуществляют специальные слова из обязательного набора.