Начальный курс программирования на языке Форт


ПРЕОБРАЗОВАНИЕ ВВОДИМЫХ ЧИСЕЛ - часть 2


Адрес, оставленный в вершине стека при первом применении CONVERT передавался бы аргументом второму CONVERT и т. д.

В большинстве систем имеется слово NUMBER (число), которое выполняет те же функции, но зачастую проще в употреблении. В Стандарте-83 (слова несогласованного набора) это слово определено следующим образом:

 

NUMBER

( a -- d)

Преобразование текста, начинающегося с адреса а+1, в двоичное значение с учетом текущей системы счисления (значения BASE). Строка может предваряться знаком минус, что делает полученное значение отрицательным.

Поэтому слово ПЛЮС лучше определить так: : ПЛЮС \ n2 ( n1 -- сумма) BL WORD NUMBER DROP + ;

Слово NUMBER используется и самой ФОРТ-системой. Это «обработчик чисел», к которому обращается текстовый интерпретатор, если искомое слово не найдено в словаре. NUMBER пытается преобразовать полученный фрагмент в число и в случае удачи заносит его значение в стек, при неудаче же осуществляется ABORT.

В каждой Форт-системе процесс преобразования чисел происходит по-своему, так как способов их введения существует очень много. Ниже будет показано одно из возможных определений слова NUMBER, которое воспринимает символы : , - . /

как правильные пунктуационные знаки, указывающие, что данный фрагмент нужно считать числом двойной длины. Если внутри какого-либо числа появился один из перечисленных символов, то в переменную DPL (положение десятичной точки) заносится количество цифр в числе справа от точки. Например, при вводе фрагмента 200.2 DPL содержит единицу. Если в числе нет знаков пунктуации, то значение DPL окажется равным -1.\ Определение слова NUMBER : NUMBER? ( адр - d t-успешное-завершение) DUP 1+ С@ Получение первой цифры ASCII - = Это знак минус? DUP >R Запоминать флага в стеке возвратов - Если первым символом является "-" , то к адр добавляется 1, чтобы тот указывал на первую цифру ( вычитание -1 равносильно прибавлению 1) -1 DPL ! Отметка того, что знаков пунктуации пока нет. 0 0 ROT В качества первоначального накапливаемого значения берется 0 двойной длины.


Начало  Назад  Вперед



Книжный магазин