sf.net bugtracker

17 messages Options
Embed this post
Permalink
yGREK Heretix

sf.net bugtracker

Reply Threaded More More options
Print post
Permalink

 Багтрекер spf на SF - http://sourceforge.net/tracker/?group_id=17919
 Ввиду длительного дауна trac'а на activekitten.
 С русской кодировкой вроде всё нормально.
 Перенёс часть багов из RSS - без обсуждений :(
 Все изменения идут в рассылку spf-tickets

 ЗЫ В новости на forth.org.ru добавить?

 ЗЫЫ Кстати есть потребность по всей видимости сделать
 "снапшот" devel, или может даже сборку :)

--
ygrek


attachment0 (187 bytes) Download Attachment
Andrey Cherezov

Re: sf.net bugtracker

Reply Threaded More More options
Print post
Permalink
Добрый день, ygrek!

Ваше сообщение от 05.03.2007 10:04:
>  Багтрекер spf на SF - http://sourceforge.net/tracker/?group_id=17919
>  Ввиду длительного дауна trac'а на activekitten.
>  С русской кодировкой вроде всё нормально.
>  Перенёс часть багов из RSS - без обсуждений :(
>  Все изменения идут в рассылку spf-tickets
>
>  ЗЫ В новости на forth.org.ru добавить?
>  
Да.
>  ЗЫЫ Кстати есть потребность по всей видимости сделать
>  "снапшот" devel, или может даже сборку :)
>  
У тебя есть потребность сделать, или у кого-то есть потребность получить
это сделанное?
Снапшоты CVS sf вроде каждый день архивирует и выкладывает.



yGREK Heretix

Re: sf.net bugtracker

Reply Threaded More More options
Print post
Permalink

> У тебя есть потребность сделать, или у кого-то есть потребность
> получить это сделанное?

Мне кажется есть потребность получить.

> Снапшоты CVS sf вроде каждый день архивирует и выкладывает.

По-моему только по запросу.

--
ygrek


attachment0 (187 bytes) Download Attachment
Andrey Cherezov

Re: sf.net bugtracker

Reply Threaded More More options
Print post
Permalink
Some javascript/style in this post has been disabled (why?)
Добрый день, ygrek!

Ваше сообщение от 06.03.2007 10:27:
Снапшоты CVS sf вроде каждый день архивирует и выкладывает.
    
По-моему только по запросу.
  
А, оказывается уже вообще отменили:
Nightly tarballs have been deprecated. Use rsync instead.
Andrey Cherezov

Re: sf.net bugtracker

Reply Threaded More More options
Print post
Permalink
In reply to this post by yGREK Heretix
Some javascript/style in this post has been disabled (why?)
Добрый день, ygrek!

Ваше сообщение от 06.03.2007 10:27:
У тебя есть потребность сделать, или у кого-то есть потребность
получить это сделанное?
    
Мне кажется есть потребность получить.
  
Тогда пора выпускать :)
Yuriy Zhilovets

Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
Привет всем!

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

Схема примерно такая:

:  INTERPRET
  ( разбор очередного слова)
  exec-read-macros 0= IF NOTFOUND EXECUTE THEN
;

: exec-read-macros { a n -- ? }
 ( перебрать все слова в словаре READ-MACROS)
 a n ( текущее слово) EXECUTE IF TRUE EXIT THEN
 ( конец перебора)
 FALSE
;

VECTOR READ-MACROS  FORTH-READ-MACROS TO READ-MACROS

VOCABULARY FORTH-READ-MACROS

: find-in-wordlists ( a n -- ) ( стандартный поиск по всем словарям)
STATE @ IF компиляция ELSE исполнение THEN TRUE ;

: isnumber ( a n -- n/d T / F) ( попытка разбора как числа) ;

: is-hex ( a n -- n/d T / F) ( разбор чисел типа 0x12345678) ;

: is-string ( a n -- a n T / F) разбор строк вида 'hello' -> -- a n ;

: is-asciiz ( a n -- a T / F) разбор строк вида "hello" -> -- a ;

: is-wordlist-ref \ разбор строк типа voc::word)

Комментарии
1) exec-read-macros не должно ничего хранить в стеке
2) NOTFOUND нельзя вынести в словарь макросов чтения, потому что в
словари нельзя вставлять слова в произвольных местах (например, перед
NOTFOUND)
3) Макросы чтения можно подменять в некоторых контекстах (например, в
automate.f)
4) Расширение анализатора можно делать, просто добавляя новые слова для
разбора

Ю. Жиловец



Aleksej Saushev

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
  Здравствуйте!

Yuriy Zhilovets <[hidden email]> writes:

> Привет всем!
>
> Предлагаю немного упорядочить лексический анализатор, сделав его
> расширяемым. NOTFOUND - механизм не очень удобный.
>
> Схема примерно такая:
>
> :  INTERPRET
>   ( разбор очередного слова)
>   exec-read-macros 0= IF NOTFOUND EXECUTE THEN

variable interprete-extensions
interprete-extensions on ( или off )

Я бы предпочёл такой способ, так лучше читается.

> : exec-read-macros { a n -- ? }
>  ( перебрать все слова в словаре READ-MACROS)

Плохо, что нет возможности управлять порядком, может, лучше
завести стек? Или связный список?

>  a n ( текущее слово) EXECUTE IF TRUE EXIT THEN
>  ( конец перебора)
>  FALSE
> ;
>
> VECTOR READ-MACROS  FORTH-READ-MACROS TO READ-MACROS
>
> VOCABULARY FORTH-READ-MACROS
>
> : find-in-wordlists ( a n -- ) ( стандартный поиск по всем словарям)
> STATE @ IF компиляция ELSE исполнение THEN TRUE ;
>
> : isnumber ( a n -- n/d T / F) ( попытка разбора как числа) ;
>
> : is-hex ( a n -- n/d T / F) ( разбор чисел типа 0x12345678) ;
>
> : is-string ( a n -- a n T / F) разбор строк вида 'hello' -> -- a n ;
>
> : is-asciiz ( a n -- a T / F) разбор строк вида "hello" -> -- a ;

Я бы сказал, что эти слова должны следовать соглашению,
заложенному в стандарте словом >NUMBER.

> : is-wordlist-ref \ разбор строк типа voc::word)
>
> Комментарии
> 1) exec-read-macros не должно ничего хранить в стеке
> 2) NOTFOUND нельзя вынести в словарь макросов чтения, потому что в
> словари нельзя вставлять слова в произвольных местах (например, перед
> NOTFOUND)
> 3) Макросы чтения можно подменять в некоторых контекстах (например, в
> automate.f)
> 4) Расширение анализатора можно делать, просто добавляя новые слова для
> разбора
Ruvim Pinka

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
In reply to this post by Yuriy Zhilovets
Привет!

"макрос чтения" я называл "транслятор слова" :)
По общей идее — транслятор: файла, текста, слова.

On 3/12/07, Yuriy Zhilovets <[hidden email]> wrote:

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

Да, у этого механизма есть ряд неудобств:
  1. оно является callback-словом и разрешается динамически по общему контексту, поэтому его нельзя переопределять произвольно, имя "зарезервированно";
  2. нет штатного API — программного интерфейса для добавления трансляторов (есть расширение nf-ext.f);
  3. нельзя убрать назначенный транслятор слова (доступный обход: назначать в отдельном словаре и добавлять/убирать этот словарь с вершины контекста).
Какие еще неудобства?

Подход располагать трансляторы слов в одном отедельном словаре — не решает ни одного из перечисленных моментов, и не имеет обхода как в п.3. (или, я что-то не так понял..)

Удобная стековая нотация для транслятора слова ( i*x c-addr u -- j*x true | c-addr u false ), и тоже для интерпретатора слова ( c-addr u -- n*x true | c-addr u false ) — при неуспехе оставлять строку нетронутой (как SEARCH и SFIND ). Это дает возможность использовать их вне контекста штатного транслятора.

Для транслятора ForthML — txml (translate xml) — я сделал возможность добавлять правила с обоих сторон списка ( advice-trule-after и advice-trule-before), и оставил  возможность простого отката (восстановления цепочки трансляторов через ячейку t-slot). Но, там при связывании используется возможность разметки просто описывать динамическую генерацию кода :)

--
Ruvim
Yuriy Zhilovets

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
In reply to this post by Aleksej Saushev
Aleksej Saushev пишет:

>Плохо, что нет возможности управлять порядком, может, лучше
>завести стек? Или связный список?
>  
>
Непонятно, насколько это нужно. NOTFOUND добавляется в конец.
Кому-нибудь этого не хватало?

>Я бы сказал, что эти слова должны следовать соглашению,
>заложенному в стандарте словом >NUMBER.
>  
>
Ну да, кроме строк.

Ю.Жиловец


Yuriy Zhilovets

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
In reply to this post by Ruvim Pinka
Ruvim Pinka пишет:

> "макрос чтения" я называл "транслятор слова" :)
> По общей идее — транслятор: файла, текста, слова.

Это я на лисповский манер.

>    1. оно является callback-словом и разрешается динамически по общему
>       контексту, поэтому его нельзя переопределять произвольно, имя
>       "зарезервированно";
>
Можно переопределить весь словарь целиком.

>    1. нет штатного API — программного интерфейса для добавления
>       трансляторов (есть расширение nf-ext.f
>       <http://spf.cvs.sourceforge.net/*checkout*/spf/devel/%7Epinka/samples/2006/core/trans/nf-ext.f>);
>
Просто добавление слова в словарь

>    1. нельзя убрать назначенный транслятор слова (доступный обход:
>       назначать в отдельном словаре и добавлять/убирать этот словарь с
>       вершины контекста).
>
MARKER  - тогда получается такой же стек трансляторов

Ю. Жиловец


Ruvim Pinka

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink

On 3/12/07, Yuriy Zhilovets <[hidden email]> wrote:

>    нет штатного API — программного интерфейса для добавления
>       трансляторов (есть расширение nf-ext.f
>       < http://spf.cvs.sourceforge.net/*checkout*/spf/devel/%7Epinka/samples/2006/core/trans/nf-ext.f>);
>
Просто добавление слова в словарь

Скажу по другому: способ, позволяющий простое откладывание исполнения.
Добавление слова в словарь трудно отложить. Доступны EVALUATE или INCLUDED, но оба избыточны в этом случае. Хотя, такую же специфичную обертку, как nf-ext.f, сделать можно :)


>       нельзя убрать назначенный транслятор слова (доступный обход:
>       назначать в отдельном словаре и добавлять/убирать этот словарь с
>       вершины контекста).
>
MARKER  - тогда получается такой же стек трансляторов

Точно!  Но, остается трудность с многопоточностью трансляции. Но тоже решаемое.

А ты сделай в виде модуля расширения SPF, через новое назначение вектора &INTERPRET (или даже через переопределение NOTFOUND)  — будет что пощупать :)

--
Ruvim
Aleksej Saushev

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
In reply to this post by Yuriy Zhilovets
Yuriy Zhilovets <[hidden email]> writes:

> Aleksej Saushev пишет:
>
> >Плохо, что нет возможности управлять порядком, может, лучше
> >завести стек? Или связный список?
> >  
> >
> Непонятно, насколько это нужно. NOTFOUND добавляется в конец.
> Кому-нибудь этого не хватало?

Пока не очень ясно, насколько это нужно, но если это выйдет за
пределы "песочницы", его будет трудно изменить.  См. пример с
NOTFOUND, который уже придётся изгонять с большими затратами на
понимание старого кода.

Напротив, если сделать хотя бы(!) тупой способ доступа наподобие
того, как сделано с get-order и set-order, это будет возможно.

Кроме того, это лучше решает задачу 3 из сообщения Рувима
(<[hidden email]>):

РП>    3. нельзя убрать назначенный транслятор слова (доступный обход:
РП>    назначать в отдельном словаре и добавлять/убирать этот словарь с вершины
РП>    контекста).

Решение с MARKER (<[hidden email]>) я считаю плохим,
поскольку оно требует сегментного словаря, не оставляя выбора.

> >Я бы сказал, что эти слова должны следовать соглашению,
> >заложенному в стандарте словом >NUMBER.
> >  
> >
> Ну да, кроме строк.

Почему?
Я думаю, следует стремиться к однородности, из тех же
соображений, из которых придумывают соглашения для имён.
Если сразу начинать делать исключения, то все соглашения можно
выбрасывать сразу.
Aleksej Saushev

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
In reply to this post by Aleksej Saushev
  Здравствуйте!

Aleksej Saushev <[hidden email]> writes:

> Yuriy Zhilovets <[hidden email]> writes:
>
> > Предлагаю немного упорядочить лексический анализатор, сделав его
> > расширяемым. NOTFOUND - механизм не очень удобный.
> >
> > Схема примерно такая:
> >
> > :  INTERPRET
> >   ( разбор очередного слова)
> >   exec-read-macros 0= IF NOTFOUND EXECUTE THEN
>
> variable interprete-extensions
> interprete-extensions on ( или off )
>
> Я бы предпочёл такой способ, так лучше читается.

Я вот ещё о чём подумал.

Есть такое положение "Thinking Forth":

  "Don't decide, calculate." (p. 253 of 313)

Если пользоваться им, то нужно поступить примерно так:

 : INTERPRET_ ( -> ) \ интерпретировать входной поток
   BEGIN
     PARSE-NAME DUP
   WHILE
     SFIND ?DUP
     IF
          STATE @ =
          IF COMPILE, ELSE EXECUTE THEN
     ELSE
-         S" NOTFOUND" SFIND
-         IF EXECUTE
-         ELSE 2DROP ?SLITERAL THEN
+         INTERPRET-EXTENSION
     THEN
     ?STACK
   REPEAT 2DROP
 ;

До этого сделать:

defer interpret-extension
: no-extensions  ( report the problem ) abort ;
' no-extensions is interpret-extension
Yuriy Zhilovets

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
In reply to this post by Aleksej Saushev
Привет всем!

Вот так я это вижу.
Мне кажется, что проще менять целиком весь словарь чтения, чем
добавлять/удалять по одному слову.
Последнее, впрочем, тоже возможно, если пользоватеься MARKER или
написать специальные слова удаления слов из словаря и добавления после
определенного (работа со словарем как со списком).
В общем, дело упирается в негибкость словаря как структуры. А это самый
сложный тип данных Форта :-(

Ю. Жиловец


\ ×àñòî òðåáóþùèåñÿ îïðåäåëåíèÿ, asciiz-ñòðîêè
\ Âåðñèÿ 1.10
\ Þ. Æèëîâåö, http://www.forth.org.ru/~yz

REQUIRE =OF ~yz/lib/mycase.f

CREATE "" 0 ,
: ==  CONSTANT ;
: VAR ( -- ) 0 VALUE ;
: UVAR ( -- ) USER-VALUE ;
: PRESS  NIP ;
: NOT  INVERT ;
: -! ( n a --) SWAP NEGATE SWAP +! ;
: CELL+!  CELL SWAP +! ;
: CELL-!  CELL SWAP -! ;
: CELLS+  CELLS + ;
: CELLS@  CELLS+ @ ;
: CELLS!  CELLS+ ! ;
: CELL" ( ->") [CHAR] " PARSE DROP @ STATE @ IF [COMPILE] LITERAL THEN ; IMMEDIATE
: LOWORD  [ 0x0F C, 0xBF C, 0xC0 C, ] ; \ movsx eax,ax
: HIWORD ( n--n)  16 RSHIFT LOWORD ;
: ON  ( a--) TRUE SWAP ! ;
: OFF ( a--) 0! ;
: ?  @ . ;
: 1-!  -1 SWAP +! ;
: c: POSTPONE [CHAR] ; IMMEDIATE

: ZLEN ( z -- #) DUP
  BEGIN DUP C@ WHILE 1+ REPEAT
  SWAP - ;

: CZMOVE ( a # z --) 2DUP + >R SWAP CMOVE R> 0 SWAP C! ;
: ZMOVE ( z a --) OVER ZLEN 1+ CMOVE ;

: s.  SP@ S0 @ CELL - 2DUP -
  DUP 4 = IF DROP 2DROP ." Stack is empty" CR EXIT THEN
  4 > IF 2DROP ." Stack is underflowed" CR EXIT THEN
  DO I @ . CELL NEGATE +LOOP CR ;

: .ASCIIZ ( z--) ASCIIZ> TYPE ;
: Z>NUMBER ( z--n true / false)
  0 0 ROT ASCIIZ> >NUMBER PRESS IF 2DROP FALSE ELSE D>S TRUE THEN ;

VARIABLE toadr  VARIABLE fromadr VARIABLE counter

: [yz]char ( --c/-1) counter @ 1 <
  IF -1 ELSE counter 1-! fromadr @ C@ fromadr 1+! THEN ;
: unchar  counter 1+! fromadr 1-! ;
: c> ( c--) toadr @ C!  toadr 1+! ;

: escape ( c--c ) CASE
  -1 OF 0 ENDOF
  c: n OF 10 ENDOF
  c: r OF 13 ENDOF
  c: t OF 9 ENDOF
  c: q OF c: " ENDOF
  c: ' OF c: " ENDOF
  DUP c: 0 c: 9 WITHIN IF
    c: 0 -
    BEGIN ( n) [yz]char DUP c: 0 c: 9 WITHIN WHILE
      ( n c) c: 0 - SWAP 10 * +
    REPEAT -1 <> IF unchar THEN
  THEN
  END-CASE ;

: ESC-CZMOVE ( a # to --)
  toadr ! counter ! fromadr !
  BEGIN
    [yz]char CASE
    -1 OF 0 ENDOF
    c: \ OF [yz]char escape ENDOF
    END-CASE
  DUP c> 0= UNTIL ;

: ALITERAL  R> DUP ASCIIZ> + 1+ >R ;

: ?ALITERAL ( a # -- ; -- a)
  STATE @ IF
   POSTPONE ALITERAL
       HERE DUP >R ESC-CZMOVE R> ZLEN 1+ ALLOT
  ELSE
       PAD 512 + ESC-CZMOVE PAD 512 +
  THEN
;

: " ( -->") c: " PARSE ( a #) ?ALITERAL ; IMMEDIATE

: Z" [COMPILE] " ; IMMEDIATE

: ASCIIZ ( z -- ; ->bl)
  CREATE HERE ( z here) OVER ZLEN 1+ DUP >R CMOVE R> ALLOT ;

: .H  BASE @ HEX SWAP ." 0x" U. BASE ! ;

\ óãëóáëÿåò ñòåê íà n çíà÷åíèé. Òðåáóåòñÿ äëÿ ïðîöåäóð ñ ïàðàìåòðàìè,
\ îïèñûâàåìûìè ÷åðåç WNDPROC
: PARAMS ( n --) CELLS S0 +! ;

\ ------------------------------------

: GETMEM ( # -- a) ALLOCATE THROW ;
: FREEMEM ( a -- ) FREE THROW ;

WINAPI: FormatMessageA   KERNEL32.DLL

: dll-error ( -- n) GetLastError ;
: error-text ( err -- a)
  \ âûäåëåííûé áóôåð ïîäëåæèò îñâîáîæäåíèþ
 >R 512 DUP GETMEM ( 512 a) DUP >R SWAP 0 SWAP R> 0 R> 0 0x1000 ( format_message_from_system)
 FormatMessageA DROP
;
: .ansiz ( z -- ) ASCIIZ> ANSI>OEM TYPE ;
: .err ( err# --) DUP .H
  error-text DUP .ansiz FREEMEM ;
: .lerr dll-error .err ;

WINAPI: MultiByteToWideChar   KERNEL32.DLL
WINAPI: WideCharToMultiByte   KERNEL32.DLL

: >unicode ( z a -- )
  SWAP DUP >R ZLEN 1+ 2* SWAP -1 R> 0 0 MultiByteToWideChar DROP ;
: >unicodebuf ( z -- a) \ çàïèñûâàåò ñòðîêó â âûäåëåííûé áóôåð è âîçâðàùàåò
 \ åãî àäðåñ. Áóôåð ïîäëåæèò îñâîáîæäåíèþ
  DUP >R ZLEN 1+ 2* DUP GETMEM ( # a) SWAP OVER  
  -1 R> 0 0 MultiByteToWideChar DROP ;

: unicode> ( a z --)
  SWAP >R >R 0 0 256 R> -1 R> 0 0 WideCharToMultiByte DROP ;

: unicode>buf ( a -- z) \ çàïèñûâàåò ñòðîêó â âûäåëåííûé áóôåð è âîçâðàùàåò
 \ åãî àäðåñ. Áóôåð ïîäëåæèò îñâîáîæäåíèþ
  >R
  0 0 0 0 -1 R@ 0 0 WideCharToMultiByte ( ïîëó÷èëè äëèíó ñòðîêè)
  1+ DUP GETMEM ( # a) SWAP OVER 0 0 2SWAP
  -1 R> 0 0 WideCharToMultiByte DROP ;

: .unicode ( a -- ) unicode>buf DUP .ansiz FREEMEM ;

: CZGETMEM ( a n -- a) DUP 1+ GETMEM DUP >R CZMOVE R> ;
: ZGETMEM ( z -- a) ASCIIZ> CZGETMEM ;

WINAPI: lstrcmp KERNEL32.DLL
WINAPI: lstrcat KERNEL32.DLL

: ZCOMPARE ( z1 z2 -- n) lstrcmp ;
: ZAPPEND ( z1 z2 -- ) SWAP lstrcat DROP ;
: 0APPEND ( z -- ) ASCIIZ> + 1+ 0 SWAP C! ;

: SAPPEND ( a1 n1 a2 n2 -- ) DUP >R 2OVER + SWAP CMOVE R> + ;

\ Ìàêðîñû ÷òåíèÿ
\ Þ. Æèëîâåö, 20.03.2007

REQUIRE WORDLIST: ~yz/lib/order.f
REQUIRE {         lib/ext/locals.f
REQUIRE ALITERAL ~yz/lib/common.f

0 VALUE READ-MACROS

: LINK ( ->bl; -- )
  NextWord 2DUP SFIND IF
    ROT ROT SHEADER BRANCH,
  ELSE
    -2003 THROW
  THEN
;

\ Îïðåäåëåíèÿ äîëæíû èäòè â îáðàòíîì ïîðÿäêå: îò ñàìîãî ðåäêîãî
\ äî ñàìîãî ÷àñòîãî
\ Ïåðâûì äîëæíî ñòîÿòü last-resort

: last-resort ( ... a # -- ... ? )
  S" NOTFOUND" SFIND IF
     EXECUTE
  ELSE
    2DROP -2003 THROW
  THEN TRUE
;

: is-string ( ... a # -- ... ? )
  2DUP + 1- C@ [CHAR] ' = 2 PICK C@ [CHAR] ' = AND DUP >R IF
    2- SWAP 1+ SWAP [COMPILE] SLITERAL
  ELSE
    2DROP
  THEN
  R>
;

: is-asciiz ( ... a # -- ... ? )
  2DUP + 1- C@ [CHAR] " = 2 PICK C@ [CHAR] " = AND DUP >R IF
    2- SWAP 1+ SWAP ?ALITERAL
  ELSE
    2DROP
  THEN
  R>
;

: is-hex ( ... a # -- ... ? )
  DUP 1 > 2 PICK W@ 0x7830 ( "0x") = AND IF
    HEX-SLITERAL
  ELSE
    2DROP FALSE
  THEN
;

: is-number ( ... a # -- ... ? )
  0 0 2SWAP
  OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
  >NUMBER
  DUP 1 > IF 2DROP 2DROP RDROP FALSE EXIT THEN
  IF C@ [CHAR] . <> IF 2DROP RDROP FALSE EXIT THEN
       R> IF DNEGATE THEN
       [COMPILE] 2LITERAL
  ELSE DROP D>S
       R> IF NEGATE THEN
       [COMPILE] LITERAL
  THEN TRUE
;

: find-in-wordlists ( ... a # -- ... ? )
  SFIND ?DUP IF
     STATE @ =
       IF COMPILE, ELSE EXECUTE THEN
       TRUE
    ELSE
      2DROP FALSE
    THEN
;

WORDLIST: FORTH-READ-MACROS
  LINK last-resort
  LINK is-string
  LINK is-asciiz
  LINK is-hex
  LINK is-number
  LINK find-in-wordlists
WORDLIST;

FORTH-READ-MACROS TO READ-MACROS

: traverse-read-macros { a n \ ptr -- }
  READ-MACROS @ TO ptr
  BEGIN
    ptr ?DUP
  WHILE
\ DUP ID.
    NAME> a n ROT EXECUTE IF EXIT THEN
    ptr CDR TO ptr
  REPEAT
;

:NONAME ( -> )
  BEGIN
    NextWord DUP
  WHILE
\ 42 EMIT    s.
    ( a n ) traverse-read-macros      
\ 42 EMIT 42 EMIT s.
    ?STACK
  REPEAT 2DROP
; &INTERPRET !

( 0x100 200 + .
"hello" .ASCIIZ
'giid' TYPE
BYE
)
Ruvim Pinka

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
Привет!

On 3/26/07, Yuriy Zhilovets <[hidden email]> wrote:
>  Мне кажется, что проще менять целиком весь словарь чтения, чем
> добавлять/удалять по одному слову.

Тогда было бы удобно его наследовать (через хаки -- сцепление списков
слов, наследование доступно и в преведеной реализации).

А вообще, тогда и WORDLIST использовать не оправданно!

В твоем лексиконе будет:

: TRANSLATE-WORD1
  find-in-wordlists ?EXIT
  is-number         ?EXIT
  is-hex            ?EXIT
  is-asciiz         ?EXIT
  is-string         ?EXIT
  last-resort
;
' TRANSLATE-WORD1 A-TRANSLATE-WORD !
: traverse-read-macros A-TRANSLATE-WORD @ EXECUTE ;

Но, имя "is-number" предполагает возвращение флага без побочных
эффектов (как IS-WHITE ). Сдесь лучше использовать AS -- as-number,
as-string (транслироватьк как число, как строку, и т.п.). Имя
"READ-MACROS" тоже не подходит, т.к. семантика этого имени аналогична
READ-FILE.


> В общем, дело упирается в негибкость словаря как структуры.

А почему бы не воспользоваться списком общего назначения, вместо
системного WORDLIST, раз не хватает его  гибкости?  (Утрированно:
незачем микроскопом гвозди забивать ;)

--
Ruvim
Yuriy Zhilovets

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
Ruvim Pinka пишет:

> А почему бы не воспользоваться списком общего назначения, вместо
>
>системного WORDLIST, раз не хватает его  гибкости?  (Утрированно:
>незачем микроскопом гвозди забивать ;)
>
Потому что WORDLIST - структура стандартная. Плодить еще одну реализацию
списка под конкретную задачу не хочется.

Ю. Жиловец




Aleksej Saushev

Re: Предложение: Макросы чтения

Reply Threaded More More options
Print post
Permalink
In reply to this post by Ruvim Pinka
  Здравствуй!

"Ruvim Pinka" <[hidden email]> writes:

> Но, имя "is-number" предполагает возвращение флага без побочных
> эффектов (как IS-WHITE ). Сдесь лучше использовать AS -- as-number,
> as-string (транслироватьк как число, как строку, и т.п.).

Верное замечание!

Как вариант можно предложить "?number", "?string" и т.д.

> Имя
> "READ-MACROS" тоже не подходит, т.к. семантика этого имени аналогична
> READ-FILE.

Нет устоявшейся практики использования такого слова, как "interprete-word",
или другого слова с функцией "интерпретировать строку как форт-слово".