Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср ноя 21, 2018 21:53

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: ColorForth: внутренности
СообщениеДобавлено: Пн апр 16, 2007 05:23 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Попробую показать кодогенератор CF, используя синтаксит CLCF - так больше похоже на обычный Форт.
впереди слов есть просто пометки
+ отмечено, что слово реализовано у меня в компиляторе
- - слово не реализовано, потому что не применяется.

if неразрушающий и использует флаги проца
', компилирует следующий за ним макрос
1, 2, 3, 4, компилируют столько-то байт из числа на стеке

Это для затравки.
Для понимания надо добавить описание еще нескольких слов. Сделаю это чуть позже... :(
Код был получен обработкой текста экранов одной из реализации CF.

Код:
macro
\ другое : swap 16B8 2, C28B0689 4, ;
+ : 0  ', ?dup C031 2, ;
+ : if  74 2, here ;
+ : -if  79 2, here ;
+ : a  ', ?dup  C28B 2, ;
+ : a! ?lit if BA 1, , ; then D08B 2, ', drop ;
+ : 2* E0D1 2, ;
- : a,  2* 2* , ;  \ переделать!!
+ : @  ?lit if  ', ?dup  58B 2, ', a, ; then 85048B 3, 0 , ;  \ !!
+ : !  ?lit if ?lit if 5C7 2, swap  ', a,  , ; then
   589 2,  ', a,  ', drop  ; then
   ', a!  950489 3, 0 ,  ', drop ;
+ : nip  4768D 3, ;
+ : +  ?lit if 5 1, , ; then 603 2,  ', nip  ;
+ : or  633
+ : binary  ?lit if swap 2 + 1, , ; then 2,  ', nip  ;
+ : and  623  ', binary  ;
+ : u+  ?lit if 681 2, , ; then 44601 3,  ', drop  ;
\ : ?  ?lit A9 1, , ;  \ проверить, что это такое


+ : over  ', ?dup  4468B 3, ;
+ : push  50 1,  ', drop  ;
+ : pop  ', ?dup  58 1, ;
+ : - D0F7 2, ;

: for  ', push  ', begin ;
: *next  swap
: next  75240CFF
: 0next  , here - + 1, 4C483 3, ;
: -next  79240CFF  ', 0next  ;
: i  ', ?dup  24048B 3, ;
: *end  swap
: end  EB 1, here - + 1, ;

: +!  ?lit if ?lit if 581 2, swap  ', a,  , ; then
   501 2,  ', a,  ', drop  ; then
   ', a!  950401 3, 0 ,  ', drop  ;
+ : nop  90 1, ;
+ : align  here - 3 and drop if  ', nop  ', align  ; then ;
- : or!  ', a!  950409 3, 0 ,  ', drop  ;
+ : *  6AF0F 3,  ', nip  ;
+ : */  C88B 2,  ', drop  F9F72EF7 ,  ', nip  ;
+ : /mod  ', swap  99 1, 16893EF7 , ;
+ : /  ', /mod  ', nip  ;
+ : mod  ', /mod  ', drop  ;


\ compiled macros
+ : 2/  F8D1 2, ;
: time  ', ?dup  310F 2, ;  \ только для Pentium :(

forth

+ : @  @ ;
+ : !  ! ;
+ : +  + ;
+ : */  */ ;
+ : *  * ;
+ : /  / ;
+ : 2/  2/ ;
+ : dup  dup ;
\ Arithmetic
: negate  - 1 + ;  \ проверить
: min  less if drop ; then swap drop ;
: abs  dup negate
: max  less if swap then drop ;

\ дополнения -ИН
: v+ ( vv-v )  push u+ pop + ;
- : writes ( acn )  for write next drop drop ;
- : reads ( acn )  for read next drop drop ;
- : oadf  ( qwerty )
- : save  0 dup [ nc ], @ writes stop ;


_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

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


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

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


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

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