Forth http://www.fforum.winglion.ru/ |
|
И еще один вариант управления контекстом http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2305 |
Страница 1 из 1 |
Автор: | mOleg [ Сб ноя 07, 2009 15:33 ] |
Заголовок сообщения: | И еще один вариант управления контекстом |
мысля на месте не стоит. Все думаю, как удобнее работать с контекстом, чтобы было поменьше всяких там ALSO DEFINITIONS и им подобного "мусора". Конечно, есть Unit: -ы, которые меня во многом, но не во всем, устраивают. Итак, основная идея заключается в том, чтобы несколько более удобно можно было работать с контекстом (без всяких ALSO и подобным им слов). В нужном месте пишется JOINT и за ним до конца строки идет перечисление необходимых словарей (только словарей, другие слова вернут ошибку!). Все перечисленные словари добавляются в контекст, причем, текущее состояние контекста сохраняется на специальном стеке! Все словари добавляются под верхний контекстный словарь (верхний же контекстный словарь всегда остается на верху!). Дальше с контекстом можно работать как обычно, то есть возможны и PREVIOUS и другие манипуляции. По завершении описательной секции, то есть когда словари уже не нужны, происходит откат контекста на сохраненное состояние с помощью RECEDE . \? --- JOINT и RECEDE не обязаны находиться в одном файле! Словари создаются по-старинке с помощью VOCABULARY. Unit: созданные словари в данный процесс лучше не вовлекать (механизм несколько похожий, но все-же конкурирующий). код совместим с последней src4-mc10-b229.zip сборкой \ 23.10.2009 ~mOleg |
Автор: | вопрос [ Сб ноя 07, 2009 16:09 ] |
Заголовок сообщения: | |
Цитата: Итак, основная идея заключается в том, чтобы несколько более удобно можно было работать с контекстом (без всяких ALSO и подобным им слов). В нужном месте пишется JOINT и за ним до конца строки идет перечисление необходимых словарей (только словарей, другие слова вернут ошибку!). Все перечисленные словари добавляются в контекст, причем, текущее состояние контекста сохраняется на специальном стеке! Все словари добавляются под верхний контекстный словарь (верхний же контекстный словарь всегда остается на верху!). Дальше с контекстом можно работать как обычно, то есть возможны и PREVIOUS и другие манипуляции. ... наследование классов
|
Автор: | mOleg [ Сб ноя 07, 2009 16:19 ] |
Заголовок сообщения: | |
это еще чего, вот появилась мысля каждый файл в отдельный словарь упихивать. решил попробовать... вот: <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 , на которые у меня имеются другие планы |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |