Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт дек 15, 2017 23:43

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: [BF] тестовая дема для проверки что все работает
СообщениеДобавлено: Вс июн 03, 2007 13:17 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
если вы пишете свой собственный ЦК или движок, вот тестовая дема для проверки что все работает и работает как надо

Код:
\ примеры структур управления
\ кроме 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"

_________________
http://akps.ssau.ru/forth/


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

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


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

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


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

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