Forth http://fforum.winglion.ru/ |
|
[BF] тестовая дема для проверки что все работает http://fforum.winglion.ru/viewtopic.php?f=16&t=784 |
Страница 1 из 1 |
Автор: | forth@km.ru [ Вс июн 03, 2007 13:17 ] |
Заголовок сообщения: | [BF] тестовая дема для проверки что все работает |
если вы пишете свой собственный ЦК или движок, вот тестовая дема для проверки что все работает и работает как надо Код: \ примеры структур управления
\ кроме control flow control команд используются расширения conio (консольный ввод/вывод) и debug (отладка) \ также используются команды из CORE WORDSET типа стековых операций и операций с памятью \ в комментариях в квадратных скобках показано то, что должно выводится при выполнении кода \ этот пример демонстрирует возможности языка ассемблера системы BF, \ за исключением возможностей подсистемы многозадачности (см. отдельную дему) \ если вы пишете свою реализацию BF, корректное выполнение этого кода значит, что у вас \ есть работающий движок с самым минимальным набором команд форт-машины (к нему надо просто добавить \ еще где-то с полсотни команд из стандарта Форта) и компилятор, и вы можете писать софт, \ по необходимости добавляя недостающие команды в движок. Главное, что самый сложный этап -- реализацию \ структур управления -- вы уже прошли 8-) 0x0A const EOL \ константа -- конец строки 0x0A : cr EOL emit ; \ макрос вывода конца строки 0 var tvar \ пример переменной (используется далее в циклах) : 1+ 1 # + ; \ еще один пример макроса -- инкремент \ пустой стек { EmptyStack s. \ [ ] } \ литералы (числовые константы в коде) пишутся в коде в виде <число> # { Literals 0 # 2 # -3 # s. drop drop drop \ [ 0 2 -3 ] } { if/else/endif -1 # if 111 # else 222 # endif s. drop \ [ 111 ] 0 # if 111 # else 222 # endif s. drop \ [ 222 ] 1 # if 111 # else 222 # endif s. drop \ [ 111 ] } { do/loop cr 10 # -10 # do i . loop cr \ -10 -9 ... -1 0 1 ... 8 9 } { begin/while/repeat cr begin \ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 tvar @ 0x10 # < while tvar @ 1+ tvar ! tvar @ . repeat cr } { begin/until cr -5 # tvar ! begin \ -4 -3 -2 -1 0 1 2 3 4 5 6 tvar @ 1+ tvar ! tvar @ . tvar @ 5 # > until cr } { begin/again \ бесконечный цикл с выводом счетчика cr begin tvar @ 1+ tvar ! tvar @ . 0x0D # emit again } { DEMO EmptyStack Literals if/else/endif do/loop begin/while/repeat begin/until begin/again } save" CTLDEMO" |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |