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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: И еще один вариант управления контекстом
СообщениеДобавлено: Сб ноя 07, 2009 15:33 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Итак, основная идея заключается в том, чтобы несколько более удобно можно было работать с контекстом (без всяких ALSO и подобным им слов). В нужном месте пишется JOINT и за ним до конца строки идет перечисление необходимых словарей (только словарей, другие слова вернут ошибку!). Все перечисленные словари добавляются в контекст, причем, текущее состояние контекста сохраняется на специальном стеке! Все словари добавляются под верхний контекстный словарь (верхний же контекстный словарь всегда остается на верху!). Дальше с контекстом можно работать как обычно, то есть возможны и PREVIOUS и другие манипуляции.
По завершении описательной секции, то есть когда словари уже не нужны, происходит откат контекста на сохраненное состояние с помощью RECEDE .

\? ---

bla bla bla

INSIDE FORTH \ куда компилировать код

JOINT HIDDEN Console \ дополнительные словари для поиска

bla bla bla

RECEDE

bla bla bla

\? ---


JOINT и RECEDE не обязаны находиться в одном файле!
Словари создаются по-старинке с помощью VOCABULARY.
Unit: созданные словари в данный процесс лучше не вовлекать
(механизм несколько похожий, но все-же конкурирующий).

код совместим с последней src4-mc10-b229.zip сборкой
\ 23.10.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ еще один вариант управления контекстом

vocs/ shadow.fts
vocs/ vocab.fts
branch/ handlers.fts
string/ add.fts

\ сделать указанный словарь текущим и контекстным
: INSIDE ( / name --> ) NEXT-WORD ALSO EVAL-TOKEN DEFINITIONS ;

\ все перечисленные до конца строки словари добавляются в контекст
\ под верхний словарь (неинициализированные словари монтируются)
\ словари ищутся в VOC-LINK а не в текущем контексте, колизии никак
\ не учитываются, то есть, если есть несколько одноименных словарей,
\ то в контекст будет добавлен последний созданный из них.
: JOINT ( / vocs .. --> )
SAVE-ORDER
['] err-clear ON-ERROR
<: FINDVOC *IF ALSO MOUNT UNDER ;THEN
ERROR" Ожидается имя словаря!"
;> WithRest ;

\ откат на предыдущее сохраненное состояние контекста.
\ текущий словарь не затрагивается, изменения в контексте
\ не сохраняются !
: RECEDE ( --> )
RESTORE-ORDER
EXIT-ERROR
;

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 07, 2009 16:09 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
Итак, основная идея заключается в том, чтобы несколько более удобно можно было работать с контекстом (без всяких ALSO и подобным им слов). В нужном месте пишется JOINT и за ним до конца строки идет перечисление необходимых словарей (только словарей, другие слова вернут ошибку!). Все перечисленные словари добавляются в контекст, причем, текущее состояние контекста сохраняется на специальном стеке! Все словари добавляются под верхний контекстный словарь (верхний же контекстный словарь всегда остается на верху!). Дальше с контекстом можно работать как обычно, то есть возможны и PREVIOUS и другие манипуляции.
... наследование классов


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
это еще чего, вот появилась мысля каждый файл в отдельный словарь упихивать.
решил попробовать... вот:
<pre>
\ 21.10.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ сложное поведение контекста при транслировании источников...

vocs/ vocab.fts
vocs/ shadow.fts
string/ add.fts
util/ order.fts

ALSO ROOT DEFINITIONS
VOCABULARY LIBR \ словарь, в котором будут создаваться словари с именами либ
HIDDEN DEFINITIONS

\ действия при входе в каждый источник
: ent ( --> )
SAVE-ORDER
ALSO LIBR DEFINITIONS
SOURCE-NAME SelFName SVOCAB DROP
VOC-LIST A@ MOUNT
DEFINITIONS ;

\ действия при выходе из каждого источника
: ext ( --> )
RESTORE-ORDER
\ CR ~CONTEXT \ если хочется видеть контекст поиска для каждого источника
DEFINITIONS ;

\ действия выполняемые по требованию lib/ name.fts
: aus ( asc # --> asc # )
lFrame>
\ DDUP TYPE SPACE \ если хочется видеть "требуемые" библиотеки, раскоментировать
FINDVOC *IF
\ тут можно проверять, есть ли уже данный словарь в контексте и если он там
\ уже упомянут, извлекать его из глубины контекста наверх
\ это может дать ускорение поиска по словарям
ALSO WITH UNDER ;THEN
DROP
\ ERROR" Нет такого словаря!"
;

' ent IS ON-SOURCE-START ' ext IS ON-SOURCE-EXIT
' aus IS ON-LIB-NAME

RECENT SAVE-ORDER

\? а как быть с одноименными либами-то? требовать чтобы имена библиотек были уникальны?

\EOF
теперь, можно попробовать из консоли набрать, к примеру:
list/ namespace.fts

в LIBR будет список подключенных библиотек, в виде списка словарей
внутри каждого словаря находятся список слов, которые определены в файлах.

</pre>
Вобщем идея в стиле Си, когда область видимости имен ограничена файлом.
То есть содержимое файла по умолчанию образует собственную область видимости (словарь)
Дальше внутри подключаемого файла должны перечисляться требуемые библиотеки,
точнее ссылки на них в виде lib/ name.fts . Они определяют "наследование" других
пространств имен. То есть попросту эти библиотеки (если еще не подключены - подключаются
в собственные словари) оказываются в контексте под верхним (то есть текущим словарем).
В процессе трансляции источников (файлов) для каждого в контексте находится
"требуемый" список словарей.

\! 18.10.2009 идея
возможно есть смысл задавать порядок поиска в подключаемых библиотеках, впрочем,
это достаточно сложный вопрос. Но основная идея в том, что каждая либа может находиться
в собственном словаре. При подключении имен в виде lib/ name.fts на вершину
контекста выкладывать словари в указанном порядке, а после подключения библиотеки,
когда заканчивается файловый поток, делать откат контекста (убирать эти словари из
контекста, однако, нельзя при этом затрагивать другие изменения контекста!).
Интересно, что при этом не нужно выдумывать сложный синтаксис типа voc::name или
что-то подобное. Но контроль имен будет достаточно жесткий. Впрочем, такой подход
будет требовать скорее всего сильной смены "парадигмы", в любом случае со словарями
будет уже несколько меньше ручной работы (точнее она должна будет быть более осторожной).

Вобщем, можно даже пощупать. Ценность данного "изобретения" на мой взгляд сомнительна, однако она добавила два новых полезных вектора в процесс трансляции: ON-SOURCE-START и ON-SOURCE-EXIT , на которые у меня имеются другие планы 8)

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


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

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


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

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


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

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