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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Postscript - подобные конструкции управления
СообщениеДобавлено: Вс май 10, 2009 14:00 
Не в сети
Moderator
Moderator
Аватара пользователя

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

<pre>
\ 09.05.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ Postscript - подобные конструкции управления

\ в зависимости от значения flag выполнить либо xta либо xtb
: IfElse ( flag xta xtb --> ) ROT IF NIP ELSE DROP THEN EXECUTE ;

\ выполнять бесконечное количество раз xt
: infinite ( xt --> ) A>R BEGIN AR@ EXECUTE AGAIN ;

\ выполнять xt указанное количество раз #
: cycle ( # xt --> )
A>R
>R BEGIN R> *WHILE
>L AR@ L> 1 - >R EXECUTE
REPEAT
DROP ARDROP ;

?ABSENT test{ \EOF -- тестовая секция ---------------------------------------
test{ :> sma 3 * ;
2 3 sma cycle 54 <> THROW
:> smb 1 - *IF ;THEN ARDROP ARDROP ;
10 smb infinite THROW

:> smc 123412 ;
:> smd 509485 ;
0 smc smd IfElse smc EXECUTE <> THROW
112 smc smd IfElse smd EXECUTE <> THROW
-1 smc smd IfElse smd EXECUTE <> THROW
}test
</pre>
не сделал только аналог Фортового DO +LOOP , уж больно он муторный (думаю как сделать попроще).
что интересно, cycle усложнен ради переносимости. Учтен вариант, когда адреса и данные имеют разную разрядность, правда без локального стека не обошлось.
Ну, и по большому счтету, все такие конструкции желательно реализовывать на ассемблере, так как они очень сильно завязаны на устройство реальной машины с одной стороны, а с другой должны исполняться как можно быстрее.

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


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

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


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

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


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

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