Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 14:51

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 04, 2009 23:25 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Вообще, это все выглядит несколько косметическим. Есть NUMBER, который занимается преобразованием. Его вариантов можно иметь хоть два десятка - под все мыслимые комбинации правил разбора, приемом/неприемом 0x 0b 0d в качестве принудительной установки системы счисления, L или : для признака числа двойной длины, точки для нее же или для вещественных чисел.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 04, 2009 23:52 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
А можно, как в Аде: 16rOFB15 8r4253 10r123 36R_YET_ONE_NUMBER
Последнее число с большим R - длинное, подчёркивания - для наглядности представления групп разрядов...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 00:42 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
вопрос писал(а):
и 0 (NULL) перед восьмеричными

точно NULL, а не OCTAL?

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 00:44 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Wlad писал(а):
16rOFB15 8r4253 10r123 36R_YET_ONE_NUMBER

ой, а я поначалу решил, что это UUE-кодирование...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 11:48 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
в бейсике аналогичная система: &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


Последний раз редактировалось garbler Ср авг 05, 2009 14:34, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 13:11 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
аналогичный принцип, кстати, к строкам применим

слишком большая свобода рещений препятствует унификации и, в конечном счёте, публичному успеху технологии


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 13:34 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
вопрос писал(а):
garbler писал(а):
аналогичный принцип, кстати, к строкам применим

слишком большая свобода рещений препятствует унификации


да какая уж тут свобода? в парсере полностью отсутствуют исключения и умолчания,
а значение слов исходного текста определяется исключительно префиксами (нечто обратное
к "total rpn").

что касается скобок для текстовых строк (парные скобки + произвольный символ), так это
было ещё в MACRO-11 (ассемблер в PDP системах), а из современных языков, ну, например, PERL.

p.s.


и, если очень хочется, всегда можно сделать ' D: IS NOTFOUND
(этот фрагмент кода для "воображаемой" системы)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 14:00 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
по поводу вопроса 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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 16:47 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Что то уж сильно навороченно получается, парсер сам может разобраться какой размер числа в строке. Может тогда по выходу с преобразования давать добавочный аргумент который будет объяснять что все же после парсинга на стеке лежит?

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 18:26 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
garbler писал(а):
по поводу вопроса mOleg, на самом деле - все варианты могут быть полезны.
я вижу 2 формы использования:

ну, для начала напомню, что в Форте с точкой идут двойные числа, но вот тут есть хитрый момент, одни форты считают точку просто признаком двойного числа (СПФ), а другие(СМАЛ32) точкой разделения младшей части от старшей части, так к примеру пока что и в форке сделано.
Но, точка у большого количества народа вызывает отвращение, поэтому, я решил таки ставить :
собственно говоря я так же уже сделал предупреждение в случае, если число имеет двойную длину но не содержит точку :)
напомню, что у меня числа опознаются так же, как обычные слова, то есть их распознает словарь, поэтому навернуть можно любой синтаксис с помощью другого словаря 8)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 20:53 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Pretorian писал(а):
Что то уж сильно навороченно получается, парсер сам может разобраться какой размер числа в строке. Может тогда по выходу с преобразования давать добавочный аргумент который будет объяснять что все же после парсинга на стеке лежит?

Бывают ведь и опечатки. Автоматическое распознавание может зайти слишком уж далеко, и получится хитрая логическая ошибка. Например, D0 вместо DO может автоматически распознаться как 0xD0, что вполне допустимо с точки зрения формата числа, но бессмысленно как замена слову DO.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 22:29 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Хищник писал(а):
.... skip... Бывают ведь и опечатки. Автоматическое распознавание может зайти слишком уж далеко, и получится хитрая логическая ошибка. Например, D0 вместо DO может автоматически распознаться как 0xD0, что вполне допустимо с точки зрения формата числа, но бессмысленно как замена слову DO.


угу, очень похожий пример из реальной жизни: http://catless.ncl.ac.uk/Risks/5.66.html#subj2 NASA ракеты со спутниками так теряла


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 05, 2009 22:32 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
mOleg писал(а):
...skip... Но, точка у большого количества народа вызывает отвращение, поэтому, я решил таки ставить :


ну, к слову, в лиспе она применяется для этих целей, запись вида (1.2) там никого не смутит
(точечная пара из двух чисел 1 и 2) http://www.csci.csusb.edu/dick/samples/lisp.syntax.html


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 06, 2009 00:00 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Точечная пара - не представление числа.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 06, 2009 00:49 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
Например, D0 вместо DO может автоматически распознаться как 0xD0, что вполне допустимо с точки зрения формата числа, но бессмысленно как замена слову DO.

Префиксы - всему, что не десятичное и, может быть, вообще всему, что может вызвать разночтение


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB