Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 23:05

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс сен 06, 2009 19:47 
Не в сети

Зарегистрирован: Чт июл 16, 2009 17:48
Сообщения: 4
Откуда: Нижний Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Почти готово :D
(используется 16-бит assembler , ориентируюсь на FORT-83 стандарт)
реализовал слова (возможно что-то упустил)

! * */ */MOD + +! - / /MOD 0< 0= 0> 1+ 1- 2+
2- 2/ < = > ?DUP @ ABS AND C! C@ CMOVE
CMOVE> COUNT DEPTH DROP DUP NIP ROLL ROT SWAP EXECUTE
EXIT FILL I MAX MIN MOD NEGATE NOT OR OVER PICK
>R R> R@ RP! U< XOR CR EMIT EXPECT KEY ?KEY
SPACE SPACES TYPE ' ( . .S .( >IN BLK FIND
FORGET HERE QUIT SPAN TIB U. WORD , ." : ; ALLOT BEGIN
COMPILE CONSTANT CREATE DO DOES> ELSE IF IMMEDIATE LITERAL
LOOP REPEAT STATE THEN UNTIL VARIABLE WHILE [COMPILE] [ ]

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

из нестандартных слов:

?NUMB ( c-adr -- n -1/0)
получает строку и преобразует ее в число
если получилось, заносит число в стек и флаг -1
если не получилось, заносит в стек флаг 0

SC-KEY ( -- скан-код клавиши)
в отличие от KEY возвращает не ASCII-код, а скан-код, что позволяет использовать всю клавиатуру
пример:
Код:
: ?F1    KEY? DUP IF DROP SC-KEY 59 = THEN ; (скан-код F1=59)
: NAME  BEGIN ................ ?F1 UNTIL ;

слово NAME будет исполняться, пока не нажмешь F1

FILE
считывает в входном потоке имя файла, загружает его и интерпретирует
(скорее всего я не буду реализовывать работу с BLOCK , а буду с файлами)

-! ( n addr -- ) то же, что и +! только уменьшает значение по адресу addr на n

LASTWORD ( -- addr) возвращает адрес последнего слова в словаре.

Подумываю о слове FORGET+ ( -- ), которое возвращает словарь в исходное состояние
================================================
Теперь вопросы:

Вначале код NEXT выглядел так
Код:
       
  LODSW
  MOV  BX , AX
  JMP  BX

Теперь так
Код:
       
  LODSW
  MOV  BX , AX
  JMP  [BX]

Вначале был прямой шитый код, а теперь косвенный шитый ?

Не совсем понял насчет слова [COMPILE]
Например я ввожу код
Код:
:  LITERAL  COMPILE  LIT  ,  ;

и в словаре получаю такое:
xt(COMPILE), xt(LIT), xt(,) , xt(RETURN)

а если я введу такой код (допустим , что LIT -слово немедленного исполнения)
Код:
:  LITERAL  [COMPILE]  LIT  ,  ;

что я должен получить:
xt(COMPILE), xt(LIT), xt(,), xt(RETURN)
или
xt(LIT), xt(,), xt(RETURN) ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс сен 06, 2009 23:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
ibitsa писал(а):
а если я введу такой код (допустим , что LIT -слово немедленного исполнения)
Код:
: LITERAL [COMPILE] LIT , ;

что я должен получить:
xt(COMPILE), xt(LIT), xt(,), xt(RETURN)
или
xt(LIT), xt(,), xt(RETURN) ?

Второе. COMPILE не кладется в скомпилированный код, оно должно самостоятельно выбрать из входного потока LIT и скомпилировать его вызов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Сб фев 12, 2011 17:01 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Добрый день.
Eсть форт виртуальная машина, основанная на РетроФорт, написанная на
java (для мобильников). Слова, объекты в памяти наращиваются последовательно,
и не всегда удается их также последовательно удалять.
Возникла необходимость использовать "дыры" , которые возникают после
удаления старых объектов. Есть ли в форте стандартные механизмы
учета таких дыр, или какие нибудь простейшие механизмы.
Можно исрользовать значения HERE и ALLOT на момент определения слова,
которое впоследствии будет удалятся, но хотелось бы централизованного
решения. Да и самого форта нет, есть приложение, испоьзующее FVM,

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Сб фев 12, 2011 17:10 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
vikt писал(а):
Возникла необходимость использовать "дыры" , которые возникают после
удаления старых объектов. Есть ли в форте стандартные механизмы
учета таких дыр, или какие нибудь простейшие механизмы.

В Форте нет, надо использовать что-то еще. Говоря точнее, в Форте нет жестко регламентированного способа управления памятью.



За это сообщение автора Hishnik поблагодарил: vikt
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Сб фев 12, 2011 19:43 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
vikt писал(а):
Возникла необходимость использовать "дыры" , которые возникают после
удаления старых объектов.

Если, речь идет о своих новых объектах, то и самому следует предусмотреть механизм утилизации.
Для освобождения памяти

vikt писал(а):
Можно исрользовать значения HERE и ALLOT на момент определения слова,

Для удаления последних определений (с освобождением памяти), в РетроФорте есть слово forgеt .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Сб фев 12, 2011 19:53 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
vikt писал(а):
Есть ли в форте стандартные механизмы
учета таких дыр, или какие нибудь простейшие механизмы.

Ну а в списочек связать дыры не пробовали? Глядишь, и malloc получиться. :idea:



За это сообщение автора dynamic-wind поблагодарил: vikt
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вс фев 13, 2011 17:09 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
dynamic-wind писал(а):
vikt писал(а):
Есть ли в форте стандартные механизмы
учета таких дыр, или какие нибудь простейшие механизмы.

Ну а в списочек связать дыры не пробовали? Глядишь, и malloc получиться. :idea:


Видимо так придется сделать.
В случае больших объектов, можно еще HERE и MAX_MEMORY_SIZE присвоить начало и границу
"дыры", и использоваь память обычным образом. Конечно, это напоминает решение проблемы ремонта скотчем, за то быстро и надежно.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вт авг 31, 2021 00:24 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
В своем новом форте, который скоро опубликую, дошел
наконец до реализации словарей. Зашел к Баранову и Ноздрунову,
а так же к Броуди, слава Gudfleur'у , у него на сайте эти книги
есть.
У Броуди написано
Цитата:
Техника работы с контекстными словарями существенно зависит от конкретной системы
и в какой-то степени противоречива. В Стандарте-83 подробности опущены, а потому
обойдемся без них и мы.
Обращайтесь к документации по своей системе.


У Баранова и Ноздрунова
Цитата:
Стандартное слово DEFINITIONS (определения)

: DEFINITIONS ( ---> ) CONTEXT @ CURRENT ! ;

устанавливает переменную CURRENT по текущему значению переменной
CONTEXT, т.е. соответствующий список становится вторым на очереди для
просмотра и одновременно тем списком, куда добавляются новые словарные
статьи.

То есть, если я напишу так
Код:
    ( определен словарь someList )
vocabulary mylist
myList definitions
   anycommands
      -----
   someList 
--continue-- 

то после исполнения someList система сперва будет искать не свежайшие слова
в словаре myList, а в ранее определенном словаре someList.
Нет ли тут какой-нибудь ошибки?

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вт авг 31, 2021 11:48 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
vikt,
Тут все на откуп Вашей фантазии.

Приведу логику работы словарей в Нове и СПФ для примера.

Есть список словарей.
При поиске слова они перебираются от вершины CONTEXT до дна списка (стека) словарей.
Словарь записанный в переменной CURRENT в поиске не участвует.

_________________
Цель: сделать 64-битную Нову под Винду



За это сообщение автора Victor__v поблагодарил: vikt
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вт авг 31, 2021 13:59 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
vikt писал(а):
то после исполнения someList система сперва будет искать не свежайшие слова
в словаре myList, а в ранее определенном словаре someList.
Нет ли тут какой-нибудь ошибки?


Но это же и есть смысл someList - переключить поиск на себя.



За это сообщение автора Hishnik поблагодарил: vikt
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вт авг 31, 2021 15:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Тогда буду делать так, как указано в книге.
context-->current-->forth

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вт авг 31, 2021 15:32 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Есть вариант со сцепленными списками словарей. Поиск начинается со словаря, на который указывает context. Этот словарь сам по себе где-то создан, поэтому поиск будет продолжен в его родителе, и так далее вплоть до FORTH (потому что FORTH - базовый словарь). Current используется для добавления новых слов и в поиске сам по себе не участвует.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вт авг 31, 2021 15:46 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
vikt

Никого не слушайте (даже книги) и попробуйте сделать систему поиска слов такой, как Вам будет удобной.
Это может выльится в велосипед, но по крайней мере, Вы не будете использовать решения чуть ли не полувековой давности.
Делайте, как Вам удобно будет рабоать с ФС.
Не знаете как? Откомпилируйте в уме, например.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Создание Форт-системы
СообщениеДобавлено: Вт авг 31, 2021 18:07 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Прочитать-то о существующих решениях можно, это банально экономит время. Конкретные реализации стоит основывать на примерах конкретных проектов, поскольку варианты решений взаимно противоречивы и требуют разных стилей применения. Умозрительно тут ничего не получится, абстрактные предположения "например кому-то потребовалось переключиться между тремя словарями" - тоже.


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

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


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

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


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

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