Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[6]

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

1.отсутствие документации о программировании на Форте достаточно сложных программ типа компиляторов или ООП-расширений и

2.отсутствие хорошо документированных наработок на Форте в виде его расширений (библиотек) и исходных кодов форт-систем.

Учитывая возможности современных технологий программирования (Java, .NET, СП-Ь), существующих библиотек и возможностей операционных систем, язык Форт имеет также смысл использовать в качестве встраиваемого в программы языка, который удобно использовать для написания конфигурационных файлов и программирования пользователем. Естественно это имеет смысл только если существуют ограничения на ресурсы, которые может использовать такое скрипт-расширение. Если таких ограничений нет, правильнее использовать встраиваемые скрипт-языки с более удобоваримым синтаксисом типа Python. Еще одна область применения - быстрое написание кросс-ассемблеров, которые более удобны чем традиционные в случаях, когда нужна мощная поддержка макросов.

Достоинства Форта, которые могут определить его выбор:

• возможность реализации виртуальной машины в готовых программах на любых языках с минимальными затратами;

4.2 форт-слово

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

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

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

15 Domain Specific Language


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

Далее появляющиеся в тексте документа форт-слова будут заключаться в " (двойная кавычка).

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

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

На каждое число в стеке отводится одно машинно слово16. Числа на стеке могут восприниматься различным образом в зависимости от того, какое слово их использует. Обычно они трактуются как числа из диапазона от - 215 до 215 - 1, но есть слова, которые воспринимают их как числа от 0 до 216 - 1.

Хранимые в стеке числа упорядочены по положению. Стек функционирует по принципу "последним занесен - первым выбран" (LIFO). Будем говорить, что при добавлении числа оно заносится справа от имеющихся, начиная от дна стека; при удалении снимается крайнее правое число с вершины стека.

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

стек ДО операции --> стек ПОСЛЕ операции

причем не затрагиваемую операцией часть стека будем изображать многоточием. Для содержимого стека введем следующие обозначения:

малая латинская буква значение в общем смысле пчисло

с!число двойной длины

ссимвол

addrадрес памяти

Выполнение слова, представляющего собой запись числа, добавляет в стек это число. Слово "." (точка) снимает число с вершины стека и печатает его. Очень полезное слово ".S" печатает весь стек, оставляя его неизменным. Некоторые операции со стеком:

DUP...а--> ... а а

16 2 байта для 16-битных систем типа Z80 или старых ПК на процессорах 8086, 80286, 4 байта для современных 32-битных систем

4.3 Стек


--> .

--> .

--> .

--> .

--> .

--> .

--> . .

--> .

--> .

--> .

чисел} n

--> .

чисел} n

--> .

В частности, "О PICK" эквивалентно "DUP", а "1 PICK" слову "OVER"; "1 ROLL" эквивалентно "SWAP", а "2 ROLL" слову "ROT".

Слово "DEPTH" кладет в стек число, равное глубине стека - количеству элементов, находившихся в стеке перед исполнением этого слова.

Проследим, например, выполнение следующего текста:

123 DUPDEPTH -ROT 20VER .S

Выпишем текст в столбик, сопровождая каждое слово состоянием стека после его исполнения:

Иногда данные на стеке, сформированные одним словом и используемые потом другим словом, будем называть параметрами.

4.4Память, числа, символьная информация

4.5Арифметические операции

Арифметический стек - основное поле для выполнения арифметических действий и хранения промежуточных результатов вычислений. Надо только помнить, что знак операции (точнее слово, обозначающее операцию) пишется ПОСЛЕ того, как аргументы в стеке уже размещены.

13 3 -

помещает в стек число 10, так как слово -" (минус) извлекает из стека два числа, сперва вычитаемое, потом уменьшаемое, и помещает в стек их разность:

... a b -->... a-b

С другими операциями все обстоит аналогично

ФОРТверсия 26 октября 2005 г.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15]