Программирование на языке Форт
Программирование на языке «Форт» (англ. Forth) — это процесс создания программ с использованием этого конкатенативного языка программирования. Программы записываются последовательностью лексем («слов»). Особенность «Форта» — использование склейки слов и фрагментов кода для получения композиции, а стека для хранения и возвращения аргументов, что упрощает запись и повышает быстродействие
Синтаксис базового уровня в «Форте» прост и состоит из единственного правила: «все определения разделяются пробелами». Определения могут иметь любое сочетание символов.
Некоторые особенности синтаксиса:
Когда интерпретатор читает слово, он проверяет, существует ли определение во внутренней структуре (словаре). Если определение найдено, оно выполняется. В противном случае слово считается числом и помещается в стек.
Можно создать собственное определение с помощью специальных слов — двоеточия и точки с запятой. Первое слово после двоеточия становится именем определения, а остальные слова (до точки с запятой) составляют тело определения.
Новые слова, определённые однажды, становятся частью языка, благодаря чему «Форт» обладает рефлективностью — в зависимости от новых слов язык может менять свою семантику.
-
Начальный курс программирования на языке Форт
Новичок, впервые столкнувшийся с термином «машинный язык», может подумать: «На каком же таком языке разговаривает компьютер? Наверное, человеку чрезвычайно трудно его понять. Выглядит этот язык, вероятно, как-нибудь так:
976#!@NX714&+
если он вообще как-то выглядит». На самом деле машинный язык не должен быть трудным для понимания. Его назначение — служить удобным средством связи между человеком и компьютером.
Здесь уместно провести аналогию с марионеткой. Вы можете заставить марионетку «ходить», манипулируя деревянным приспособлением, даже не касаясь нитей, приводящих ее в движение. Эти манипуляции означают «ходьбу» на языке марионетки. Кукольник управляет марионеткой таким способом, который понятен марионетке и легко осуществим кукольником.
Компьютеры — это машины, подобные марионеткам. Ими нужно управлять, пользуясь специальным языком. И поэтому нам необходим язык, обладающий двумя на первый взгляд противоположными свойствами. С одной стороны, он должен точно выражать смысл приказа компьютеру, передавая последнему всю требуемую для выполнения операции информацию, а с другой — быть предельно простым.
Глава 1.ОСНОВЫ ФОРТА
ЖИВОЙ ЯЗЫК
ДИАЛОГ
СЛОВАРЬ
КАК ПРАВИЛЬНО ОБЪЯСНЯТЬСЯ НА ФОРТЕ?
ПЕРИОД ИСПОЛНЕНИЯ И ПЕРИОД КОМПИЛЯЦИИ
СТЕК — РАБОЧАЯ ОБЛАСТЬ ОПЕРАТИВНОЙ ПАМЯТИ ДЛЯ ВЫПОЛНЕНИЯ АРИФМЕТИЧЕСКИХ ДЕЙСТВИЙ
ПОСТФИКСНАЯ ЗАПИСЬ
РАБОТА СО СТЕКОМ
СТЕКОВАЯ НОТАЦИЯ
ОСНОВНЫЕ ТЕРМИНЫ
УПРАЖНЕНИЯ
Глава 10ВВОД-ВЫВОД
БЛОЧНЫЕ БУФЕРЫ
ОПЕРАТОРЫ ВЫВОДА
ВЫВОД ТЕКСТА С ДИСКА
ОПЕРАЦИИ НАД СТРОКАМИ В ОПЕРАТИВНОЙ ПАМЯТИ
ВВОД С КЛАВИАТУРЫ
ВВОД ИЗ ВХОДНОГО ПОТОКА
ПРИМЕНЕНИЕ СЛОВА WORD
УКАЗАТЕЛИ ВХОДНОГО ПОТОКА, ИСПОЛЬЗУЕМЫЕ СЛОВОМ WORD
ПРЕОБРАЗОВАНИЕ ВВОДИМЫХ ЧИСЕЛ
ПОСТРОЕНИЕ ПРОГРАММЫ ВВОДА ЧИСЕЛ С ПОМОЩЬЮ СЛОВА KEY
СРАВНЕНИЕ СТРОК
СТРОКОВЫЕ ЛИТЕРАЛЫ
УПРАЖНЕНИЯ
ЛИТЕРАТУРА
Глава 11 РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА
ЧТО ТАКОЕ ОПРЕДЕЛЯЮЩЕЕ СЛОВО?
ОПРЕДЕЛЯЮЩИЕ СЛОВА ВЫ МОЖЕТЕ СПЕЦИФИЦИРОВАТЬ САМИ
ЧТО ТАКОЕ КОМПИЛИРУЮЩЕЕ СЛОВО?
НЕСКОЛЬКО ДОПОЛНИТЕЛЬНЫХ СЛОВ УПРАВЛЕНИЯ КОМПИЛЯЦИИ
ФЛАГ СОСТОЯНИЯ
ВВЕДЕНИЕ В БЛОК-СХЕМЫ ФОРТА
ЗАКЛЮЧЕНИЕ
УПРАЖНЕНИЯ
Глава 12 ТРИ С ПОЛОВИНОЙ ПРИМЕРА
ОТКАЧКА ФАЙЛА
ПРОГРАММИСТУ О СТРУКТУРЕ ПРИКЛАДНОЙ ПРОГРАММЫ
БЕЗ ВЗВЕШИВАНИЯ
ФОРТ-АССЕМБЛЕР
УСОВЕРШЕНСТВОВАННЫЙ ГЕНЕРАТОР БЕССМЫСЛЕННЫХ СООБЩЕНИЙ
УПРАЖНЕНИЯ
ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ
РЕЖИМ КАЛЬКУЛЯТОРА
ПРАКТИЧЕСКИЕ ЗАДАЧИ НА ПРИМЕНЕНИЕ ПОСТФИКСНОЙ ЗАПИСИ (УПРАЖНЕНИЕ 2-А]
РЕЖИМ ОПРЕДЕЛЕНИЙ
РЕШЕНИЕ ЗАДАЧ (УПРАЖНЕНИЕ 2-Б)
ОПЕРАЦИИ ДЕЛЕНИЯ
МАНИПУЛЯЦИИ СО СТЕКОМ
SWAP (ПЕРЕСТАНОВКА)
DUP (дублирование)
OVER (ЧЕРЕЗ)
ROT (ПЕРЕМЕЩАТЬ ПО КРУГУ)
DROP (ИСКЛЮЧИТЬ/УДАЛИТЬ)
ПЕЧАТЬ БЕЗ ИЗМЕНЕНИЯ СОДЕРЖИМОГО СТЕКА
ЗАДАЧИ НА ВЫПОЛНЕНИЕ ОПЕРАЦИИ СО СТЕКОМ И АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ (УПРАЖНЕНИЕ 2-В)
ДВОЙНЫЕ ОПЕРАЦИИ1
УПРАЖНЕНИЯ
КАК РАБОТАТЬ НА ФОРТЕ
ЕЩЕ РАЗ О СЛОВАРЕ
ИСПОЛЬЗОВАНИЕ ДИСКОВОЙ ПАМЯТИ
ПРАВИЛА ЗАПИСИ ФОРТ-ПРОГРАММ
ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ НА ФОРТЕ
ЗАГРУЗКА ПРОГРАММ
ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА РАБОТЫ С БЛОКАМИ
ТЕКСТОВЫЙ РЕДАКТОР ФОРТА
ПРОГРАММА-РЕДАКТОР
КОМАНДЫ СИМВОЛЬНОГО РЕДАКТИРОВАНИЯ
БУФЕР ПОИСКА И БУФЕР ВСТАВОК
КОМАНДЫ РЕДАКТИРОВАНИЯ СТРОК
КОМБИНИРОВАННЫЕ КОМАНДЫ РЕДАКТИРОВАНИЯ
УПРАЖНЕНИЯ
КОМПЬЮТЕР ПРИНИМАЕТ РЕШЕНИЯ
УСЛОВНЫЙ ОПЕРАТОР
БОЛЕЕ ПОДРОБНО ОБ ОПЕРАТОРЕ IF
ОПЕРАЦИИ СРАВНЕНИЯ
АЛЬТЕРНАТИВНАЯ ВЕТВЬ УСЛОВНОГО ОПЕРАТОРА
ВЛОЖЕННЫЕ КОНСТРУКЦИИ IF...THEN
СЕКРЕТ ОПЕРАТОРА IF
НЕМНОГО ЛОГИКИ
Начальный курс программирования на языке Форт
ДВА СЛОВА С ВСТРОЕННЫМИ ОПЕРАТОРАМИ IF
УПРАЖНЕНИИ
Глава 5 ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ
СОКРАЩЕННЫЕ ОПЕРАЦИИ
СМЕШАННЫЕ МАТЕМАТИЧЕСКИЕ ОПЕРАЦИИ
СТЕК ВОЗВРАТОВ
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ НАД ЧИСЛАМИ С ПЛАВАЮЩЕЙ ТОЧКОЙ
ПОЧЕМУ ПРОГРАММИСТЫ ПРЕДПОЧИТАЮТ МАСШТАБИРОВАНИЕ
ОПЕРАЦИЯ МАСШТАБИРОВАНИЯ */
ОКРУГЛЕНИЕ
ВОЗМОЖНОСТИ МАСШТАБИРОВАНИЯ
АППРОКСИМАЦИЯ ВЕЩЕСТВЕННЫХ ЧИСЕЛ
ОПЕРАЦИИ НАД ДРОБНЫМИ ЧИСЛАМИ
УПРАЖНЕНИЯ
Глава 6 ЦИКЛИЧЕСКИЕ СТРУКТУРЫ
ЦИКЛЫ СО СЧЕТЧИКОМ
ОГРАНИЧЕНИЯ НА ВЫПОЛНЕНИЕ ЦИКЛА
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРА ЦИКЛА DO
ВЛОЖЕННЫЕ ЦИКЛЫ
РЕКОМЕНДАЦИИ ПО ПРИМЕНЕНИЮ ОПЕРАТОРА DO В СТИЛЕ ФОРТА
ЦИКЛЫ С УСЛОВИЕМ
ВЫХОД ИЗ ЦИКЛА (LEAVE) И ВЕТВЛЕНИЕ (BRANCH)
УПРАЖНЕНИЯ
Глава 7 ЧИСЛО ТИПОВ ЧИСЕЛ
ЧЕМ ОТЛИЧАЮТСЯ ЧИСЛА СО ЗНАКОМ И БЕЗ ЗНАКА
АРИФМЕТИЧЕСКИЙ СДВИГ
ЧИСЛА ДВОЙНОЙ ДЛИНЫ
ПРЕИМУЩЕСТВА ШЕСТНАДЦАТЕРИЧНОЙ СИСТЕМЫ СЧИСЛЕНИЯ (И ДРУГИЕ СИСТЕМЫ)
КОД ДЛЯ ПРЕДСТАВЛЕНИЯ СИМВОЛЬНОЙ ИНФОРМАЦИИ (ASCII)
Часть 2 ДЛЯ ВСЕХ ДВОИЧНАЯ ЛОГИКА
ЧИСЛА СО ЗНАКОМ И БЕЗ ЗНАКА
СИСТЕМЫ СЧИСЛЕНИЯ
ЧИСЛА ДВОЙНОЙ ДЛИНЫ
ФОРМИРОВАНИЕ ЧИСЕЛ ДВОЙНОЙ ДЛИНЫ БЕЗ ЗНАКА
ФОРМАТИРОВАНИЕ ЧИСЕЛ ОДИНАРНОЙ ДЛИНЫ СО ЗНАКОМ
ОПЕРАЦИИ НАД ЧИСЛАМИ ДВОЙНОЙ ДЛИНЫ
ОПЕРАЦИИ НАД ЧИСЛАМИ РАЗЛИЧНОЙ ДЛИНЫ
ИСПОЛЬЗОВАНИЕ ЧИСЕЛ В ОПРЕДЕЛЕНИЯХ
ОСНОВНЫЕ ТЕРМИНЫ
ДЛЯ НАЧИНАЮЩИХ
ДЛЯ ВСЕХ
Глава 8 ПЕРЕМЕННЫЕ, КОНСТАНТЫ И МАССИВЫ
ПЕРЕМЕННЫЕ (ОБЩИЕ СВЕДЕНИЯ)
БОЛЕЕ ПОДРОБНО О ПЕРЕМЕННЫХ
ПЕРЕМЕННЫЕ В КАЧЕСТВЕ СЧЕТЧИКА
КОНСТАНТЫ
ПЕРЕМЕННЫЕ И КОНСТАНТЫ ДВОЙНОЙ ДЛИНЫ
МАССИВЫ
ИСПОЛЬЗОВАНИЕ МАССИВА СЧЕТЧИКОВ
ВЫЧЛЕНЕНИЕ ОПРЕДЕЛЕНИЙ
ОРГАНИЗАЦИЯ ЦИКЛА ПО МАССИВУ
МАССИВЫ БАЙТОВ
ИНИЦИАЛИЗАЦИЯ МАССИВА
УПРАЖНЕНИЯ
Глава 9 ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ
ПОИСК ПО СЛОВАРЮ
ВЕКТОРНЫЕ ВЫЧИСЛЕНИЯ
АПОСТРОФ В ОПРЕДЕЛЕНИИ
СТРУКТУРА СЛОВАРНОЙ СТАТЬИ
АДРЕСАЦИЯ ПОЛЕЙ
СТРУКТУРА ОПРЕДЕЛЕНИЯ ЧЕРЕЗ ДВОЕТОЧИЕ
ВЛОЖЕННЫЕ УРОВНИ ВЫЧИСЛЕНИИ
ЕЩЕ ОДИН ВАРИАНТ ИСПОЛЬЗОВАНИЯ СТЕКА ВОЗВРАТОВ
ВЫХОД НА ВЕРХНИЙ УРОВЕНЬ
ПРОИЗВОЛЬНОЕ ИЗМЕНЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ ВЫПОЛНЕНИЯ СЛОВ
РЕКУРСИЯ
ГЕОГРАФИЯ ФОРТА
МУЛЬТИЗАДАЧНЫЕ ФОРТ-СИСТЕМЫ
ПОЛЬЗОВАТЕЛЬСКИЕ ПЕРЕМЕННЫЕ
КОНТЕКСТНЫЕ СЛОВАРИ (СПИСКИ СЛОВ)
УПРАЖНЕНИЯ
Приложение А.ОТВЕТЫ К УПРАЖНЕНИЯМ
-
Способ мышления-Форт
Программирование компьютеров может свести с ума. Другие профессии дают Вам прекрасные возможности наблюдать осязаемые результаты Ваших усилий. Часовщик может смотреть на свои зубчики и колесики, швея -- на швы, ровно ложащиеся после каждого взмаха иглы. Но программист проектирует, строит и ремонтирует нечто воображаемое, призрачные механизмы, ускользающие от восприятия органами чувств. Наша работа происходит не в ОЗУ, не в программе-редакторе, а внутри нашей головы.
Построение моделей в воображении привлекает и доставляет удовольствие программисту. Как же лучше к этому подготовиться ? Вооружиться самыми хорошими отладчиками, декомпиляторами и дизассемблерами ? Они помогают, однако самые существенные из технологий и инструментов -- умственные. Нам нужна последовательная и практическая методология для `мышления` на тему задач программирования. Это и составляет суть того, что я попытался выразить в моей книге. "Способ мышления ..." предлагается всем, кто заинтересован в написании программ для решения конкретных задач. Книга рассматривает вопросы проектирования и применения: принятие решений о том, что Вам нужно сделать, разработка компонентов системы и, наконец, построение системы.
Предисловие
Глава 1. Философия Форта
Сказание об истории элегантности программ
Запоминаемость
Мощность
Абстрактность
Управляемость
Модульность
Удобство написания
Разработка "с вершины"
Подпрограммы
Постепенная детализация
Структурированная разработка
Функциональная мощность
Сцепление
Иерархическое проектирование по принципу "вход-обработка-выход"
Упрятывание информации
Поверхностность структуры
Взгляд назад, вперед и на форт
Автоматические вызовы
Автоматическая передача данных
Программирование на уровне компонентов
От кого прятать ?
Упрятывание конструкции структур данных
Но высокоуровневый ли это язык ?
Язык проектирования
Производительный язык
Скорость
Возможности
Размеры
Итоги
Литература
Глава 2. Анализ
Девять фаз цикла программирования
Глава 3. Предварительный проект / декомпозиция
Глава 4. Детализированная разработка/решение задачи
Глава 5. Разработка: элементы Форт-стиля
Глава 6. Фрагментация
Глава 7. Работа с данными: стеки и состояния
Глава 8. Минимизация структур управления
Способ мышления-Форт
Приложение А: Обзор Форта (для новичков)
Приложение Б: Определение DOER/MAKE
Приложение В: Другие утилиты, описанные в этой книге
Приложение Г: Ответы на задачи "для дальнейшего размышления"
Приложение Д: Свод стилистических соглашений
-
Язык программирования Форт
Язык программирования Форт
Форт (FORTH) -- это мощный язык программирования, который обеспечивает высокую производительность ЭВМ. Предлагаемая книга является одновременно учебником и справочником, позволяющим овладеть языком Форт независимо от того, начинающий вы программист или опытный. Вы можете пользоваться этой книгой как учебником для классных или индивидуальных занятий, при этом не предполагается знание основ ЭВМ или программирования. Книга содержит полное описание языка, начинающееся с упрощенного изложения принципов работы компьютеров. Постепенно осуществляется переход к более сложным понятиям, не описанным в других книгах. Вы сами можете выбрать материал и скорость изучения с учетом своего уровня подготовки. В книге приводится множество примеров, показывающих стиль программирования на языке Форт, включая полный текст программы редактора, большое количество упражнений для приобретения опыта, уверенности и, что более важно, полезных технических навыков. В даны ответы к упражнениям. Излагаются обе версии языка Форт в соответствии со стандартами 1979 и 1983 гг. Кроме того, изложены вопросы, не освещаемые в стандартах, в том числе организация файлов данных, обработка алфавитно-цифровых текстов, арифметика с плавающей запятой, а также различные инструментальные программные средства, что поможет вам расширить сферу применения языка Форт для ваших нужд. Даны примеры функций усовершенствованной реализации языка MMSFORTH.
Глава 1. Что такое Форт ?
Учимся на практике
Упражнения
Полезная программа
Форт ... Почему он такой необычный ?
Что такое машинный язык ?
Что такое Форт ?
Некоторая критика языка Форт
Глава 2. Стек
Что такое стек ?
Буфер ввода
Стек в арифметических операциях
Манипуляции в стеке
Слово для просмотра содержимого стека
Глава 3. Память, числа, символьная информация
Что такое память ?
Операции с битами
Положительные, отрицательные числа и числа без знака
Операции с байтами
Американский стандартный код для обмена информацией (ASCII)
Глава 4. Еще об арифметических операциях
Глава 5. Ввод и вывод
Глава 6. Хранение чисел в памяти
Глава 7. Операторы сравнения и ветвления
Язык программирования Форт
Глава 8. Организация циклов
Глава 9. Символьные строки
Глава 10. Хранение программ и данных
Глава 11. Создание слов-определителей
Глава 12. Редакторы Форта
Глава 13. Программирование на Форт. Стиль
Глава 14. Память Форта. Словари и контекстные словари
Язык программирования Форт
Глава 15. Интерпретация, компиляция и исполнение
Глава 16. Программирование на форт-ассемблере - 2
Глава 16. Программирование на форт-ассемблере - 3
Приложение А. Глоссарий (список слов Форта)
Приложение Б. Терминология
Приложение Д. Ответы к упражнениям
Приложение Г. ASCII Коды
Приложение В. Источники информации
-
Язык Форт и его реализации
Язык программирования Форт (англ. forth - вперед и одновременно сокращение от fourth - четвертый), которому посвящена эта книга, появился в начале 1970-х гг. в США. Его изобретатель Чарльз Мур первоначально применил его для разработки программного обеспечения микроЭВМ, управляющей работой радиотелескопа. Преимущества работы с языком Форт вместо применявшегося ранее Ассемблера были настолько велики, что вскоре он стал использоваться и на других специализированных ЭВМ.
Быстрый рост популярности языка Форт начался с середины 1970-х гг., когда появились персональные ЭВМ. Оказалось, что этот язык позволяет обходиться сравнительно небольшим набором возможностей первых персональных ЭВМ, превращая их в удобный и эффективный инструмент для самой разной работы. К середине 1980-х гг. Форт выдвинулся на третье место после языков Бейсик и Паскаль в качестве средства программирования для персональных ЭВМ, и рост его применения продолжается. Широкое распространение получили коммерческие программные продукты, написанные на Форте: системы обработки текстов, пакеты машинной графики, трансляторы, видеоигры. Стихийно быстрое распространение Форта и его практический успех обусловили необходимость стандартизации языка. В 1983 г. был опубликован стандарт «Форт-83», в соответствии с которым ведется изложение материала в этой книге.
Основные понятия
Работа в диалоговом режиме
Стек данных и вычисления
Введение новых слов
Константы и переменные, работа с памятью
Логические операции
Структуры управления
Литеры и строки, форматный вывод чисел
Определяющие слова
Шитый код и его разновидности
Структура словарной статьи
Стек возвратови реализация структур управления
Управление поиском слов
Реализация определяющих слов
Встроенный ассемблер
Работа с внешней памятью
Интерпретация входного потока
Целевая компиляция и модель форт-системы
Глава 3. Примеры программных разработок
Средства отладки форт-программ
Инфиксная запись формул
Локальные переменные
Векторное поле кода
Выбор по целому
Динамическая идентификация
Многозадачный режим
Сопрограммы
Запланированное перекрытие
Элементарная машинная графика
Реализация встроенного ассемблера
Приложение 1.Модель форт-системы
Приложение 2.Распространенные форт-системы
Список литературы