Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт дек 06, 2019 00:33

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - И еще один вариант управления контекстом
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
это еще чего, вот появилась мысля каждый файл в отдельный словарь упихивать.
решил попробовать... вот:
<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)
Сообщение Добавлено: Сб ноя 07, 2009 16:19
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Итак, основная идея заключается в том, чтобы несколько более удобно можно было работать с контекстом (без всяких ALSO и подобным им слов). В нужном месте пишется JOINT и за ним до конца строки идет перечисление необходимых словарей (только словарей, другие слова вернут ошибку!). Все перечисленные словари добавляются в контекст, причем, текущее состояние контекста сохраняется на специальном стеке! Все словари добавляются под верхний контекстный словарь (верхний же контекстный словарь всегда остается на верху!). Дальше с контекстом можно работать как обычно, то есть возможны и PREVIOUS и другие манипуляции.
... наследование классов
Сообщение Добавлено: Сб ноя 07, 2009 16:09
  Заголовок сообщения:  И еще один вариант управления контекстом  Ответить с цитатой
мысля на месте не стоит. Все думаю, как удобнее работать с контекстом, чтобы было поменьше всяких там 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
;
Сообщение Добавлено: Сб ноя 07, 2009 15:33

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


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