Forth http://www.fforum.winglion.ru/ |
|
представление чисел http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2221 |
Страница 3 из 5 |
Автор: | Hishnik [ Вт авг 04, 2009 23:25 ] |
Заголовок сообщения: | |
Вообще, это все выглядит несколько косметическим. Есть NUMBER, который занимается преобразованием. Его вариантов можно иметь хоть два десятка - под все мыслимые комбинации правил разбора, приемом/неприемом 0x 0b 0d в качестве принудительной установки системы счисления, L или : для признака числа двойной длины, точки для нее же или для вещественных чисел. |
Автор: | Wlad [ Вт авг 04, 2009 23:52 ] |
Заголовок сообщения: | |
А можно, как в Аде: 16rOFB15 8r4253 10r123 36R_YET_ONE_NUMBER Последнее число с большим R - длинное, подчёркивания - для наглядности представления групп разрядов... |
Автор: | WingLion [ Ср авг 05, 2009 00:42 ] |
Заголовок сообщения: | |
вопрос писал(а): и 0 (NULL) перед восьмеричными
точно NULL, а не OCTAL? |
Автор: | WingLion [ Ср авг 05, 2009 00:44 ] |
Заголовок сообщения: | |
Wlad писал(а): 16rOFB15 8r4253 10r123 36R_YET_ONE_NUMBER
ой, а я поначалу решил, что это UUE-кодирование... |
Автор: | garbler [ Ср авг 05, 2009 11:48 ] |
Заголовок сообщения: | |
в бейсике аналогичная система: &h (hex) &b (bin) &o (oct) и т.д. (хотя с адой, конечно, не сравнится) причём совершенно необязательно тянуть это всё в NUMBER, т.к. префикс можно реализовать отдельным словом. в принципе, даже сам NUMBER необязателен (особенно в bootstrap компиляторе). т.е. H: D: B: 2H: 2D: 2B: N: 2N: Код: REQUIRE .S lib/include/tools.f ( bootstrap primitives ) DECIMAL : 0 0 ; \ --------------------------------------------------------- : N: 0 0 BL WORD COUNT >NUMBER IF ( here we can deal with suffix ) THEN 2DROP STATE @ IF LIT, THEN ; IMMEDIATE \ --------------------------------------------------------- : MK-FN-BASE-NUM: CREATE , IMMEDIATE DOES> @ BASE @ SWAP BASE ! [COMPILE] N: STATE @ 0= IF SWAP THEN BASE ! ; \ --------------------------------------------------------- N: 2 MK-FN-BASE-NUM: B: N: 8 MK-FN-BASE-NUM: O: N: 10 MK-FN-BASE-NUM: D: N: 16 MK-FN-BASE-NUM: H: \ --------------------------------------------------------- : test D: 321 . H: FF . CR ; test D: 123 . H: FF . CR \ --------------------------------------------------------- BYE WingLion писал(а): ой, а я поначалу решил, что это UUE-кодирование... в UUE регистр букв всегда одинаковый p.s. аналогичный принцип, кстати, к строкам применим Код: \ ---------------------------------------------------------
: S: BL PSKIP >IN @ TIB + C@ [CHAR] < OVER = IF DROP [CHAR] > ELSE [CHAR] ( OVER = IF DROP [CHAR] ) ELSE [CHAR] { OVER = IF DROP [CHAR] } ELSE [CHAR] [ OVER = IF DROP [CHAR] ] ELSE THEN THEN THEN THEN >IN 1+! PARSE [COMPILE] SLITERAL ; IMMEDIATE \ --------------------------------------------------------- S: <qwe> TYPE CR S: (zxc) TYPE CR S: /asd/ TYPE CR S: "'quote'" TYPE CR S: '"quote"' TYPE CR : test S: <qwe> TYPE CR S: (zxc) TYPE CR S: /asd/ TYPE CR S: "'quote'" TYPE CR S: '"quote"' TYPE CR ; test \ --------------------------------------------------------- BYE |
Автор: | вопрос [ Ср авг 05, 2009 13:11 ] |
Заголовок сообщения: | |
Цитата: аналогичный принцип, кстати, к строкам применим
слишком большая свобода рещений препятствует унификации и, в конечном счёте, публичному успеху технологии |
Автор: | garbler [ Ср авг 05, 2009 13:34 ] |
Заголовок сообщения: | |
вопрос писал(а): garbler писал(а): аналогичный принцип, кстати, к строкам применим слишком большая свобода рещений препятствует унификации да какая уж тут свобода? в парсере полностью отсутствуют исключения и умолчания, а значение слов исходного текста определяется исключительно префиксами (нечто обратное к "total rpn"). что касается скобок для текстовых строк (парные скобки + произвольный символ), так это было ещё в MACRO-11 (ассемблер в PDP системах), а из современных языков, ну, например, PERL. p.s.
VAX MACRO has the following four ASCII character storage directives http://perldoc.perl.org/perlop.html Quote and Quote-like Operators и, если очень хочется, всегда можно сделать ' D: IS NOTFOUND (этот фрагмент кода для "воображаемой" системы) |
Автор: | garbler [ Ср авг 05, 2009 14:00 ] |
Заголовок сообщения: | |
по поводу вопроса mOleg, на самом деле - все варианты могут быть полезны. я вижу 2 формы использования: 1.2 => 2 1 позволяет управлять содержимым ячеек на стеке, и доступом к ним но тогда это не число, а числовая пара (скажем - указатель на что-то или значение плюс тег или эмуляция плавающей точки (ввода)) 1.2 => 12 0 (или 0 12) позволяет вводить числа двойного размера для дальнейших действий с ними. представляется полезным оставить формат: 1.2, который бы всегда выдавал 2 числа: 2 и 1 и добавить к нему набор конвертеров: CVTF в плавающую точку, CVTD в целое число двойного размера (т.е. превращая эти 2 1 в 12 0 или 0 12 в зависимости от архитектуры) и т.д. правда, при такой схеме становятся представимы не все числовые константы, но, опять-же, лично я реализовал бы 2D: (или DD: - кому что нравится) если очень хочется по умолчанию иметь возможность обрабатывать числа двойной длины, то точку лучше закрепить за флоатами, а признаком числа двойной длины сделать "_", которыми (в произвольном количестве) визуально разделять разряды: 123_456 или 2_3_4_56_78_9 или 10_000 или 99_999_999_999 тем более, что это согласуется с мэйнстримом http://www.ruby-doc.org/docs/Programmin ... types.html |
Автор: | Pretorian [ Ср авг 05, 2009 16:47 ] |
Заголовок сообщения: | |
Что то уж сильно навороченно получается, парсер сам может разобраться какой размер числа в строке. Может тогда по выходу с преобразования давать добавочный аргумент который будет объяснять что все же после парсинга на стеке лежит? |
Автор: | mOleg [ Ср авг 05, 2009 18:26 ] |
Заголовок сообщения: | |
garbler писал(а): по поводу вопроса mOleg, на самом деле - все варианты могут быть полезны.
я вижу 2 формы использования: ну, для начала напомню, что в Форте с точкой идут двойные числа, но вот тут есть хитрый момент, одни форты считают точку просто признаком двойного числа (СПФ), а другие(СМАЛ32) точкой разделения младшей части от старшей части, так к примеру пока что и в форке сделано. Но, точка у большого количества народа вызывает отвращение, поэтому, я решил таки ставить : собственно говоря я так же уже сделал предупреждение в случае, если число имеет двойную длину но не содержит точку напомню, что у меня числа опознаются так же, как обычные слова, то есть их распознает словарь, поэтому навернуть можно любой синтаксис с помощью другого словаря |
Автор: | Hishnik [ Ср авг 05, 2009 20:53 ] |
Заголовок сообщения: | |
Pretorian писал(а): Что то уж сильно навороченно получается, парсер сам может разобраться какой размер числа в строке. Может тогда по выходу с преобразования давать добавочный аргумент который будет объяснять что все же после парсинга на стеке лежит?
Бывают ведь и опечатки. Автоматическое распознавание может зайти слишком уж далеко, и получится хитрая логическая ошибка. Например, D0 вместо DO может автоматически распознаться как 0xD0, что вполне допустимо с точки зрения формата числа, но бессмысленно как замена слову DO. |
Автор: | garbler [ Ср авг 05, 2009 22:29 ] |
Заголовок сообщения: | |
Хищник писал(а): .... skip... Бывают ведь и опечатки. Автоматическое распознавание может зайти слишком уж далеко, и получится хитрая логическая ошибка. Например, D0 вместо DO может автоматически распознаться как 0xD0, что вполне допустимо с точки зрения формата числа, но бессмысленно как замена слову DO.
угу, очень похожий пример из реальной жизни: http://catless.ncl.ac.uk/Risks/5.66.html#subj2 NASA ракеты со спутниками так теряла |
Автор: | garbler [ Ср авг 05, 2009 22:32 ] |
Заголовок сообщения: | |
mOleg писал(а): ...skip... Но, точка у большого количества народа вызывает отвращение, поэтому, я решил таки ставить :
ну, к слову, в лиспе она применяется для этих целей, запись вида (1.2) там никого не смутит (точечная пара из двух чисел 1 и 2) http://www.csci.csusb.edu/dick/samples/lisp.syntax.html |
Автор: | Wlad [ Чт авг 06, 2009 00:00 ] |
Заголовок сообщения: | |
Точечная пара - не представление числа. |
Автор: | вопрос [ Чт авг 06, 2009 00:49 ] |
Заголовок сообщения: | |
Хищник писал(а): Например, D0 вместо DO может автоматически распознаться как 0xD0, что вполне допустимо с точки зрения формата числа, но бессмысленно как замена слову DO.
Префиксы - всему, что не десятичное и, может быть, вообще всему, что может вызвать разночтение |
Страница 3 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |