Курсовая работа: Особенности языка Форт

- ROLLN - прокручивает по часовой стрелке N верхних элементов стёка.

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

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

- +сложение

- - вычитание

- * умножение

- / деление

- mod остаток от деления

- abs абсолютная величина числа

- negate значение с обратным знаком.

Использование стёка для хранения промежуточных значений приводит к так называемой "обратной польской записи" - одному из способов бесскобочной записи арифметических выражений, подразумевающему постановку знака операции после операндов. Например, выражение (А/В + С) * (D * E - F * (G - H)) записывается следующим образом AB/C+DE * FGH - *-*.

Наряду с описанной выше 16-ти разрядной арифметикой, язык Форт имеет полный набор средств для работы с 32 - разрядными целыми числами через стандартное расширение двойной точности. Внутренним представлением таких чисел является 32 - разрядный двоичный дополнительный код, представляющий их как числа со знаком в диапазоне от -2147483648 до +2147483647 или как числа без знака в диапазоне от 0 до 4294967295. При размещении в стёке число двойной точности занимает два элемента: верхний - старшая половина, предыдущий - младшая. Такое расположение делает простым переход от двойной точности к обычной. Расширение двойных чисел включает слова, работающие с одинарной точностью к которым добавляется цифра два: 2DROP, 2DUP и т.д. Примечание. Из сказанного выше ясно, почему в языке в принципе можно обойтись без констант и переменных. Дело в том, что программист нуждаётся в механизме обозначения используемых величин. Выдача имён переменным и константам просто один из возможных механизмов такого обозначения. Форт, тоже даёт такой механизм. Каждый элемент обозначается просто номером своего расположения в стеке. Здесь, однако, есть небольшое неудобство. А именно проблема добраться до часто используемой величиной можно только перебрав все значения стека, а это может замедлять процесс работы программы и усложнять её логику. Поэтому Форт все-таки предоставляет и механизм создания обычных переменных.

3. Константы, переменные и работа с памятью

Программисту часто бывает удобно работать не с анонимными значениями, а с именованными. По аналогии с другими языками эти средства называются константами и переменными. Слово CONSTANT А работает следующим образом. Со стёка снимается верхнее значение, а из входного текста выбирается очередное слово и запоминается в словаре как новое очередное слово и запоминается в словаре как новая команда. Её действие состоит в следующем: поместить на стёк значение А, снятое со стёка в момент её определения. Например, 4 CONSTANTXOP. В дальнейшем при исполнении слова XOP число 4 будет положено на стёк.

Слово VARIABLEA резервирует в словаре два байта, а из входного потока выбирает очередное слово и вносит его в словарь как новую команду, которая кладёт на стёк адрес зарезервированной двухбайтной области. Можно сказать, что переменная работает как константа, значением которой является адрес зарезервированной двухбайтной области. Работа с переменной помимо получения её адреса состоит в получении текущего значения и присваивании нового. Для этого язык Форт имеет следующие слова: @ и !.

Слово @ (читается "разыменовать") снимает со стёка значение и, рассматривая его как адрес области оперативной памяти, кладёт на стёк двухбайтное значение, находящееся по этому адресу. Обратное действие выполняет слово ! (восклицательный знак, читается "присвоить"), которое снимает со стёка два значения и, рассматривая верхнее как адрес области оперативной памяти, засылает по нему второе снятое значение. Эти слова можно использовать не только для переменных, но и для любых адресов оперативной памяти. Следующий протокол работы показывает порядок использования переменной в сочетании с этими словами:

-VARIABLE x 1 x !

Ok

-x @ .

1 ok

-x @ NEGATE x ! x @ .

-1 ok

В первой строке определяется переменная x и ей присваивается начальное значение 1. Затем текущее значение переменной x распечатывается. После этого текущее значение меняется на противоположное по знаку и вновь распечатывается.

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

4. Логические операции

В языке Форт имеется только один тип значений - 16-ти разрядные двоичные числа, которые, рассматриваются в зависимости от ситуации как целые числа со знаком, как адреса и т.д. Точно также подходят и к проблеме представления логических значений ИСТИНА и ЛОЖЬ: число 0 в двоичном представлении которого все разряды нули, представляет значение ложь, а любое другое 16-ти разрядное значение понимается как ИСТИНА. Вместе с тем стандартные слова, которые должны в качестве результата иметь логическое значение, из всех возможных представлений значения ИСТИНА используют только одно: число -1 (или, что то же самое, 65535), в двоичном представлении которого все разряды единицы. Такое соглашение связано с тем, что традиционные логические операции конъюнкции, дизъюнкции и отрицания выполняются в Форте поразрядно над всеми шестнадцатью разрядами операндов:

- AND - логическое И

- OR - логическое ИЛИ

- XOR - исключающее ИЛИ

- NOT - логиечское НЕ

Нетрудно увидеть, что для принятого в Форте стандартного представления значений ИСТИНА и ЛОЖЬ все эти слова работают, как обычные логические операции.

К-во Просмотров: 262
Бесплатно скачать Курсовая работа: Особенности языка Форт