Forth http://www.fforum.winglion.ru/ |
|
перемещение слов в другой словарь http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2231 |
Страница 1 из 1 |
Автор: | mOleg [ Вс авг 09, 2009 18:35 ] |
Заголовок сообщения: | перемещение слов в другой словарь |
В СМАЛ32 было очень удобно наводить порядок в словарях после сборки текста библиотеки. то есть, определялись все нужные слова в текущем словаре, а потом все не нужные для работы слова прятались, к примеру в HIDDEN. Данная либа предназначена для того же, к примеру: >VOCAB HIDDEN WithVoc unlink-hash unlink-last переместит слова: WithVoc unlink-hash unlink-last из текущего словаря в HIDDEN Соответственно, переносить слова можно только между статическими словарями. [pre]\ 09.08.2009 ~mOleg \ Сopyright [C] 2009 mOleg mininoleg@yahoo.com \ перемещение слов в другой словарь vocs/ vocadd.fts \ найти vid словаря по его имени : FINDVOC ( asc # --> vid | 0 ) D>L VOC-LIST BEGIN A@ *WHILE DUP voc-name> DL@ COMPARE WHILE off_vlink REPEAT THEN LDROP LDROP ; \ можно ли переносить слово между словарями : ?STATIC ( vid --> flag ) off_vtable A@ [ ALSO FORTH CONTEXT @ PREVIOUS off_vtable A@ LIT, ] = ; \ удалить слово из цепочки LAST указанного словаря : unlink-last ( lfa vid --> ) DDUP off_last A@ = IF SWAP LINK> SWAP off_last A! ;THEN SWAP >L off_last A@ DUP BEGIN LINK> *WHILE DUP L@ <> WHILE NIP DUP REPEAT LINK> SWAP to_link off_link A! LDROP ;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ; \ удалить слово из треды указанного словаря : unlink-hash ( lfa vid --> ) OVER ID>ASC ROT FindThread \ --> lfa thread DDUP A@ = IF SWAP LINK> SWAP A! ;THEN SWAP >L A@ DUP BEGIN to_link off_thread A@ *WHILE DUP L@ <> WHILE NIP DUP REPEAT to_link off_thread A@ SWAP to_link off_thread A! LDROP ;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ; \ извлечь слово Word из текущего словаря \ все связи слова обрываются : EXTRACT ( asc # vid --> lfa ) DUP >L (voc-search) *IF DUP L@ unlink-last DUP L> unlink-hash ;THEN ERROR" Слово не найдено в текущем словаре!" ; \ переместить слово word из текущего словаря в указанный Vocab : W>VOC ( vid Word --> ) *IF DUP ?STATIC GET-CURRENT ?STATIC AND IF NEXT-WORD GET-CURRENT EXTRACT linkto ;THEN ERROR" Слова можно перемещать только между статическими словарями!" ;THEN ERROR" Не верно задано имя целевого словаря!" ; \ переместить в указанный словарь с именем voc слово word \ имя словаря должно быть уникальным, либо, слово будет перенесено в последний \ созданный словарь с данным именем : >VOC ( / voc word --> ) NEXT-WORD FINDVOC W>VOC ; \ перемещать в указанный vid словарь слова до исчерпания входного потока :> WithVoc ( l: vid / word1 .. wordn --> l: vid ) BEGIN SeeForw NIP WHILE L@ W>VOC REPEAT ; \ переместить список слов в указанный словарь : >VOCAB ( / Vocab Name1 Name2 .. NameN --> ) NEXT-WORD FINDVOC *IF >L WithVoc Cr_ PARSE ROT >L StrSource L> EvalSrcWith LDROP ;THEN ERROR" Ожидается имя словаря" ; \ пример использования: \ >VOCAB HIDDEN WithVoc unlink-hash unlink-last \ ALSO HIDDEN WORDS[/pre] |
Автор: | вопрос [ Вс авг 09, 2009 19:13 ] |
Заголовок сообщения: | |
мы постепенно таки получаем язык управления базами данных |
Автор: | MrYuran [ Пн авг 10, 2009 09:23 ] |
Заголовок сообщения: | |
А как насчёт автоматической переупаковки словаря? В одном из фортОв видел такое - определяется корневое слово и собирается новый словарь из входящих в него слов. Очень полезно для конечной сборки, особенно применительно к эмбеду (у кого чего болит |
Автор: | mOleg [ Пн авг 10, 2009 17:08 ] |
Заголовок сообщения: | |
MrYuran писал(а): А как насчёт автоматической переупаковки словаря?
это называется TURNKEY , есть в СМАЛ32 Хотелось бы сделать и для форка, но пока еще для этого не все готово. В данном случае слово физически не перемещается, а просто правятся связи. |
Автор: | mOleg [ Сб ноя 07, 2009 15:29 ] |
Заголовок сообщения: | |
обнаружены и исправлены ошибки. Следующий код в последней src4-mc10-b229.zip сборке. [pre]\ 09.08.2009 ~mOleg \ Сopyright [C] 2009 mOleg mininoleg@yahoo.com \ перемещение слов в другой словарь vocs/ vocadd.fts vocs/ vocab.fts string/ add.fts branch/ handlers.fts ALSO HIDDEN DEFINITIONS \ является ли словарь статическим словарем, \ находящимся в базовом пространстве кода\данных : ?STATIC ( vid --> flag ) off_vtable A@ [ ALSO FORTH CONTEXT @ PREVIOUS off_vtable A@ LIT, ] = ; \ удалить слово из цепочки LAST указанного словаря : unlink-last ( lfa vid --> ) DDUP off_last A@ = IF SWAP LINK> SWAP off_last A! ;THEN SWAP >L off_last A@ DUP BEGIN LINK> *WHILE DUP L@ <> WHILE NIP DUP REPEAT LINK> SWAP to_link off_link A! LDROP ;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ; \ удалить слово из треды указанного словаря : unlink-hash ( lfa vid --> ) OVER ID>ASC ROT FindThread \ --> lfa thread DDUP A@ = IF SWAP to_link off_thread A@ SWAP A! ;THEN SWAP >L A@ DUP BEGIN to_link off_thread A@ *WHILE DUP L@ <> WHILE NIP DUP REPEAT to_link off_thread A@ SWAP to_link off_thread A! LDROP ;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ; ALSO FORTH DEFINITIONS \ извлечь слово Word из текущего словаря \ все связи слова обрываются : EXTRACT ( asc # vid --> lfa ) DUP >L (voc-search) *IF DUP L@ unlink-last DUP L> unlink-hash ;THEN ERROR" Данное слово в указанном словаре не обнаружено!" ; \ переместить слова name1 ... namen из текущего словаря в указанный vocab : >VOCAB ( / vocab name1 ... namen --> ) NEXT-WORD FINDVOC \ --> vid *IF DUP ?STATIC GET-CURRENT ?STATIC AND IF >L <: ( asc # --> ) GET-CURRENT EXTRACT L@ SWAP linkto ;> WithRest LDROP ;THEN ERROR" Слова можно перемещать только между статическими словарями!" ;THEN ERROR" Не верно задано имя целевого словаря!" ; PREVIOUS RECENT[/pre] |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |