Программирование на языке Форт в среде AFS.
Часть 1. Стек и постфиксная нотация.


С этой статьи мы начнем практическое изучение программирования на языке Форт (и его современной реализации Advanced Forth). В первой части мы рассмотрим фундаментальные основы работы Форта – использование стека и постфиксной нотации.

Изучать программирование лучше всего на примерах. Не обязательно иметь в своем распоряжении Форт-машину, Форт настолько прост и нагляден, что для начала будет достаточно картинок. В качестве иллюстраций мы используем снимки экрана терминала при работе Форт-машины семейства AFM. (Если все-таки есть желание что-то приобрести, рекомендуем комплект для начинающих "Старт AFM-0", который можно заказать он-лайн в нашем магазине DT Store).

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


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

Подключим Форт-машину к терминалу и подадим питание. На терминале мы увидим стартовое сообщение AFS (Advanced Forth System) и пока на этом все. Нажмем клавишу Enter – система ответит Ok (см. рисунок).

Старт AFS в режиме программирования

Система отвечает Ok каждый раз, когда мы вводим строку и анализ введенного текста не привел к ошибке. Однако, мы ничего не ввели, почему же система ответила Ok? С точки зрения Форт-системы, пустая строка – тоже текст, только нулевой длины.

Попробуем ввести какое-нибудь число. Наберем 1234 и нажмем Enter. Система ответила Ok, значит она понимает, что делать с числом (что именно с ним произошло мы узнаем далее).

Теперь введем текст QWERTY . Система ответит сообщением об ошибке:

Сообщение об ошибке: слово не существует

Форт-система сообщает нам, что слова QWERTY не существует (система его не знает). Заметим, что Ok в этом случае не выводится – была ошибка.

Нажмите Enter – появится Ok и мы сможем начать ввод с новой строки.

Как узнать, какие слова известны системе в данный момент? Введите слово WORDS (слова). Как только вы нажмете Enter, AFS начнет выводить на терминал действующий словарь Форта:

Словарь Форта

В колонке слева выводятся слова, а в колонке справа – атрибуты слов, служебная информация, которая нам пока не нужна.

(Словарь выводится постранично: для перехода к следующей странице надо нажать клавишу Enter. Если нет необходимости листать весь словарь до конца, нажмите комбинацию клавиш Ctrl+Z. Вывод списка слов прекратится и система ответит Ok.)

Прежде чем вводить слова, перечисленные в словаре, необходимо выяснить, куда попадают числа, которые мы ввели с клавиатуры?


Стек параметров (данных)


Как и другие языки программирования, Форт использует память компьютера для хранения данных.

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

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

Когда вы вводите число с клавиатуры и нажимаете Enter, Форт-система распознает его, преобразует текст в машинное представление числа и помещает его в стек.

Стек можно представить как сложенные аккуратной стопкой кирпичи, на гранях которых нанесены числа. Посмотрите на рисунок:

Помещение числа в стек

Данные, помещаемые в стек, автоматически размещаются в памяти в том порядке, в каком они поступают, а извлекаются в обратном порядке.

Другими словами, доступным для извлечения из стека всегда является последнее введенное в него число:

Извлечение числа из стека

Самое первое введенное в стек число называют дном стека, а про последнее введенное число говорят, что оно лежит на вершине стека.

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

Вернемся к рисункам с кирпичами. На первом рисунке мы изобразили процесс помещения числа в стек.

Когда вы вводите текст, представляющий число, система помещает это число в стек, аналогично тому, как кирпич кладется на вершину стопки для хранения.

Если до этого в стеке уже были какие-то числа, они остаются на месте.

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

Интенсивное использование стека - это наиболее существенное отличие языка Форт от других языков программирования.

Слова Форта получают данные для обработки из стека и туда же возвращают результат. Можно написать целую программу, не объявив ни одной переменной!

Стек Форт-программы, в котором размещаются данные для выполнения различных операций, называется стеком параметров (иногда – стек данных). Кроме стека параметров в системе существует и другие стеки специального назначения.

Разумеется, наибольшая производительность Форта будет достигнута на компьютере, аппаратно поддерживающем работу множества стеков, то есть на стековой машине (точнее – мультистековой машине).

Теперь, когда мы знаем, как Форт поступает с введенными данными, разберемся с тем, как работают слова Форта.


Постфиксная нотация (ОПН)


Попробуем выполнить сложение. Для этого в стек необходимо поместить два параметра, первое и второе слагаемое. Введем по очереди 12 и 345. На рисунке мы показали, что происходит в стеке:

Ввод параметров в стек

Теперь выполним слово + . Слово + извлекает из стека два верхних числа, складывает их и помещает сумму на вершину стека:

Выполнение сложения

Как вывести результат? Мы видим, что нам нужно слово, которое берет число с вершины стека и выводит его текстовое представление на терминал. В Форте это слово . ("точка"):

Вывод результата на терминал

Продемонстрированный способ записи операндов может показаться необычным на первый взгляд. На самом деле – это сложение "в столбик". При внимательном рассмотрении Форт оказывается весьма близок к естественным языкам.

Приведенный пример не обязательно выполнять таким образом. Вы можете записать все в одну строку, не забывайте про пробелы. Результат будет тот же:

Тот же пример в одну строку

Чарльз Мур выбрал точку в качестве слова, выводящего результат, чтобы сделать текст программы на Форте более похожим на человеческий язык – в конце каждого предложения мы ставим точку.

Запись вида A B + называется постфиксной нотацией, поскольку символ операции следует после перечисления операндов. (Привычная нам алгебраическая запись вида A + B называется инфиксной нотацией.)

Постфиксную нотацию также называют "обратная польская нотация", или ОПН. Дело в том, что префиксную, или "польскую нотацию", запись вида + A B, предложил польский математик Лукашевич.

Постфиксная нотация дает массу преимуществ при механизации вычислений: не требуются скобки, порядок действий определяется порядком следования операторов.

ОПН является идеальным способом представления математических и логических выражений для обработки стековой машиной.

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

Спасибо за внимание.


[Начало статьи] [Следующая статья] [Предыдущая статья]

Вы можете оставить комментарий к статье и задать вопросы на нашей странице в соцсети ВКонтакте

Вы можете оставить комментарий к статье и задать вопросы на нашей странице в соцсети Facebook