Forth
http://www.fforum.winglion.ru/

Postscript - подобные конструкции управления
http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2105
Страница 1 из 1

Автор:  mOleg [ Вс май 10, 2009 14:00 ]
Заголовок сообщения:  Postscript - подобные конструкции управления

ну, вот и до постскрипта добрался :)\
имена взяты не оригинальные (из-за колизий) на сколько удачны придуманные мною не знаю.

<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 усложнен ради переносимости. Учтен вариант, когда адреса и данные имеют разную разрядность, правда без локального стека не обошлось.
Ну, и по большому счтету, все такие конструкции желательно реализовывать на ассемблере, так как они очень сильно завязаны на устройство реальной машины с одной стороны, а с другой должны исполняться как можно быстрее.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/