Вот выложил, что обещал. https://yadi.sk/d/t9ahKVuYgNVky
Перенёс из темы "Qt и пакет Windows.", чтобы там не мусорить.
1. В папке .SP-ForthSPForth_DLL исходники программы для создания dll.
В папке .SP-ForthSPForth_DLLspfscript пример скрипта для создания функций dll.
Аналог IC скрипта в примере, что я приводил.
Это моя первая программа на Hiasm, так что... Переделывать не хочу. Дорога, как память.
Файл .SP-Forthsrcspf2.f нужен для получения spf4_1.exe со смещением, spf4_0.exe без смещения.
Нужны для получения Relocation table. Иконки тоже вырезаны.
2. В папке devel~lllAssemb исходники получения ассемблерного кода для пакета Windows delphi7.
Для delphi4 нужно под рихтовать закомментированые строки, чтобы кроме мнемоники печатались дампы команд.
Дельфи4 в Hiacm не понимает некоторые команды ассемблерного кода. Надо заменять ручками.
Вот так:
@574E04:
db $81,$7C,$24,$0C,$01,$00,$00,$00
JGE @574E3F
MOV ECX , [ESP +20]
OR ECX , ECX
Запускаем TEST3.f и получаем lll.log с кодом. Для запуска *.f лучше сделать ассоциацию с spf4.exe.
В дельфи коде нужно вставить такой кусок:
Function MatchPattern(const cStr:string; strlen:Integer; const cMask:string; wclen:Integer): Integer; pascal;
asm MOV EAX , 0
MOV DWORD [l2],EAX
MOV EAX , [EBP + 20]
SUB EAX , 1
MOV DWORD [PK],EAX
MOV EAX , ESP
SUB ESP , $F80
MOV EBP, DWORD [EAX+4]
PUSH EBP
MOV EBP, DWORD [EAX]
PUSH EBP
MOV EBP , EAX
ADD EBP , $C
PUSH EBX
PUSH ESI
PUSH EDI
MOV EAX , -4[EBP]
CALL @@Flint2 переход на метку твоей программы на ассемблере
LEA EBP , -4[EBP]
MOV $0[EBP] , EAX
POP EDI
POP ESI
POP EBX
MOV EAX , ESP
MOV ESP , EBP
MOV EBP , [EAX]
MOV EAX , 4[EAX]
XCHG EAX , [ESP]
RET
Далее твой код на ассемблере из файла lll.log.
Это организация второго стека и передача туда параметров.
Само собой параметры приведены для примера и могут быт другими, или совсем не быть.
3. Откуда ноги растут?
Мне нужно было проверить одну мою теорию в компьютерной лингвистике.
Что это такое можно почитать здесь:
http://nlpub.ru/
http://habrahabr.ru/post/148124/
http://geektimes.ru/post/80081/
https://tech.yandex.ru/tomita/
http://habrahabr.ru/post/229403/
http://markup.dusi.mobi/
http://project.phil.spbu.ru/AGFL/rus/index.htm
http://habrahabr.ru/post/137799/
http://solarix.ru/
http://geektimes.ru/post/109382/
Так как я в программировании ни бум-бум, мне показалось, что SPForth лёгок для понимания чайника.
Решил обкатать свою идею на нём. Получилось не плохо!
Но потом потребовалась графика, opengl в том числе. Стал икать на чём можно сделать. Нашел Hiasm.
Сделал лингвистический процессор на Hiasm. Сейчас порядка 30 компонентов.
Джентельменский набор: Графематический анализ, Морфологический анализ, Морфологический словарь, Синтаксический анализ, Семантический анализ, Перевод на английский и обратно, Построение дерева разбора. По качеству и скорости разбора, пониманию текста и снятию лексико-семантической омонимии круче чем у AOT и Яндекса.
Дополнительные компоненты: Пролог для delphi4 - 12 компонентов, нейронные сети - 8 компонентов. (пока в стадии доработки).
Вот программка с использованием этих технологий по моей методе. https://yadi.sk/d/vmsqeDaSf53ms
( не надо пытаться запустить Редактор_new.sha, потому что в архиве нет нужных компонентов и дополнительных файлов. Компилятор delphi7.)
Это вторая программа сделанная мной на Hiasm, так что... взятки - гладки.
Программа снимает омонимию и делает разметку текста ударениями для TTS голосов.
На первую вкладку перетаскивается файл и нажимается кнопка со стартовым флажком.
Есть более новые программы, но они более академичны и понятны для тех, кто в этой кухне варится.
На одной из вкладок есть пример синтаксического и морфологического анализа. Надо только вставить в окно своё предложение.
Если будет интересно, то могу периодически выкладывать компоненты по этой тематике.
Этот топик читают: Гость
Ответов: 2059
Рейтинг: 132
|
|||
карма: 6 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 06:10:55 |
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
но название топика лучше дополнить и может привести ссылки на топики близкого обсуждения на данном форуме Не понял, как это? Может открыть отдельную тему, допустим "Компьютерная лингвистика" и выкладывать там компоненты и алгоритмы по этой тематике? Он свои инструменты делал с использованием Форт Win32Forth Любопытный факт. Не знал. Не удивительно, Forth не процедурный язык. На нём легко делать такие вещи. Как пластилин. В процедурных языках за деревьями леса не видно. Кстати, в SP-Forth есть очень красивая реализация backtracking`а. (SP-Forthdevel~profitlibac4th.f) А какое мнение по монографии Тузова В.А. Мне очень нравится его идея "ввести онтологию (иерархию понятий), и каждому слову приписать «класс»". Не зная о его работах, я реализовал похожее в алгоритме обработки текста словарём 0mograph2.omn в программе "Редактор ударений". За`мок-Замо`к, ви`ски-виски`. Ещё у него не явно прослеживается идея выразить понятие слова, как функцию, а не словами какого либо языка. Может мне так кажется, потому что это моя навязчивая идея. |
|||
карма: 6 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 06:10:56 |
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Да, я чего-то выкладывал, в период знакомства с Hiasm, но всё изменилось в лучшую сторону.
Можно найти топик и продолжить. Но есть мысли всё переделать на C++. Пока не определился. Дело в том, что через квадратики всё неуклюже получается, Лучше делать через dll (настоящие, а не Hiasm), или в больших IC, либо укрупнённые компоненты - логически законченные, т.е. сами в себе. Задача - как можно меньше гонять данные через точки. А на квадратиках только окошки с кнопочками. По этому какой язык использовать - не критично. Что касательно Форта, то он очень плохо вписывается в delphi, или C, со своими двумя, а то и тремя стеками. Скрипты, это не решение. Да и зачем? Вижу только два применения - это посмотреть что-то "на ходу" изнутри (продампить, дизассемблировать, изменить код в памяти). Это удобней, чем из OLLYDBG. Кстати, очень удобно исследовать "левые" dll. Загружаем на ходу библиотеку через USES dwf.dll и обращаемся по именам функций в интерактивном режиме. Смотрим, что и сколько функция берёт из стека и чего возвращает. Тут-же можно продампить любой адрес, и всё это без множества изнуряющих компиляций. Я так поступаю с библиотеками, на которые нет мануалов. Второе применение, - это добавление чего-то своего при компиляции, допустим выполнение каких-то программ при компиляции. Компиляторы delphi и C такого, как известно, не позволяют сделать. А так, если приспичит, можно подключить dll с программой на форте, или внедрить бинарный код, что одно и тоже. Думаю, что тема "SP-Forth" обречена на забвение. |
|||
карма: 6 |
|
Ответов: 964
Рейтинг: 12
|
|||
От чего-же сразу "на забвение" ?
Уверен время ПАКЕТА "ФОРТ" в хайсме еще придет ... (кстати кто-то тут его для ОС-колибри совместно с хайасм продвигал ...) И почему обязательно использовать ДЛЛ ? Можно ведь пойти по примеру линукса разделить программу на "консольное мясо" back-end и простой и понятный интерфейс в front-end... Даже обычную программу проще делать через законченные функциональные EXE-модули увязанные достаточно простой оболочкой или вообще через меню управляемое скриптом ... Ни по памяти ни по объему конечного пакета для более или менее серьезного пакета ничего не изменится, а писать обновления и прочее обслуживание проводить станет значительно проще ... |
|||
карма: 0 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 06:10:56 |
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
а вот делать из HIASM Форт программы наверно ещё не получится. Как раз нет. (Правда надо договорится о терминологии, а то мы можем говорить о разном.) Надо переделать определение слова SAVE и вперёд. Даже как то делал. Надо найти. Мало того, можно делать полноценные dll из Hiasm_программ.exe, как в прочем и других exe (из других, если не нужны коллбэки. На этот счёт есть мысли, но тут надо на примере показывать, иначе затрудняюсь объяснить ). Со временем выложу схемку. Сейчас не могу, другой задачей сильно занят. Можно ведь пойти по примеру линукса разделить программу на "консольное мясо" В форте есть такая практика, - подгружать байткод на одни и те-же адреса . ____________________________________________________________________________________________________________________________ Короче говоря, если сделать перехват при компиляции по какой-то директиве, к примеру как мы пишем asm ... end, также писать forth ... end, то можно верёвки вить. Тем форт и хорош, что есть определения (слова) немедленного исполнения и определения (слова), которые просто компилируются. Иными словами - мастерим компилятор сами при написании программы. Но вот как перехват сделать??? А дальше просто. Есть другой вариант, если не привязываться к SP-Forth, то можно сделать подгружаемую библиотеку forth.pas - uses forth,Kol,Share,Debug; http://forum.hiasm.com/forum_serv.php?q=56&id=3941 P.S. Вот чего нашел http://fforum.winglion.ru/viewtopic.php?f=34&t=2696&start=75 ------------ Дoбавленo в 13.58: Посетила шальная мысль. Пока не ушла: Известно, что к форту без проблем можно подключить любой компилятор. С интерпритаторами немного нужно больше усилий, но тоже всё работает. Т.е. одно определение слова на одном языке, следующее на другом и всё это работает. (только что попробовал Си и паскаль) Так вот, сделать общую оболочку на форте, где передача данных происходит через стек данных, а не через потоки. Что это даёт? 1. Не нужны отдельные пакеты заточенными под один язык. Как следствие - компоненты становятся общими для всех языков. 2. Передача данных через стек на порядки быстрее, чем через потоки, что является "ахиллесовой пятой" Hiasm. 3. Нет излишнего кода. Кстати, почему и был введён KOL - для уменьшения объёма генерируемого кода. Это значит, что если есть сотня одинаковых квадратиков, то будет присутствовать код на один квадратик. Не кто не запрещает иметь код и на сотню одинаковых квадратиков. Наследование и т.д., всё это есть. 4. Наверное самое главное свойство - естественное и безболезненное наращивание компилятора и операторов, функции и процедуры (слова) немедленного исполнения. 5. Нет проблем с типами. Минусы: 1. Нужно делать все компоненты заново. По этой причине я пользуюсь только пакетом Windows - там палитра богаче, хотя часто требуется Python и другие. 2. Не понятно как будет всё это выглядеть без соединительных линий. Хотя они пригодятся для указания вызовов и их очерёдности. 3. И самое главное - это уже не Hiasm! От него остаётся только визуализация квадратиков. Для реализации нужен стимул, необходимость, какая то реальная задача. Реализация, ради реализации, интереса - не прокатит. P.S. SP-Forth для этой цели не подойдёт. Нужна целевая компиляция. В принципе на SP-Forth целевая компиляция тоже делается без проблем. Надо чуть изменить код disasm1.f. Там тоже делается map. Про Байт-код http://www.genon.ru/GetAnswer.aspx?qid=5f39e0bb-374f-441f-968f-2cc5871241bd http://www.gunsmoker.ru/2013/05/modern-delphi.html |
|||
карма: 6 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 06:10:56 |
|||
карма: 0 |
|
Ответов: 964
Рейтинг: 12
|
|||
Вах как вкусно звучит! Даже Хайсм на базе ФП но уже без Кол будет здорово ...
А уж с возможностями ФОРТА! Жаль давно я фортом не интересовался ... Хотя здесь на форуме писал о нем аж летом 2005г ... |
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Не знаю, возьмусь-ли я за эту задачу?
Сейчас есть задачи поважнее. Одной задачкой уже три месяца занимаюсь... Надо добить! Но вы заразили меня этой темой. Начал собирать материал в фоновом режиме и обдумывать, как да что. Первый вопрос, как шустро компонентов наклепать и чтоб сильно не напрягаться? Второй вопрос, к чему привязываться? Win API, с Delphi библиотек слизать, или C++ Builder? Вот что нарыл: http://narod.ru/disk/40960819001/AutoIt3_v3.3.6.1_Ed7.exe.html Какой то скриптовый язык для написания сценариев, но из этих скриптов можно много чего надёргать. А оправу можно любую сделать, и из форта, и из delphi, и из... Плюс к этому есть другая программка для создания своих визуальных компонентов. Она генерит скрипты на этом языке. Что касается не визуальных, так вот тут http://www.autoitscript.com/forum/topic/120061-dll-collection-thread/ 1100, можно сказать, готовых компонентов. И bass, и sqlite, и медиа, и графика, и чёрта лысого и всё эти же скрипты. Может возьмётесь, а я потом подключусь? |
|||
карма: 6 |
|
Ответов: 5227
Рейтинг: 587
|
|||
По мне так пакет Delphi ещё долго будет востребован. Другое дело что бывает чего-то не хватает.
flint2, а на кой ляд ещё один скриптовый язык нужен? Какие есть и те не используют по моему. |
|||
карма: 4 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Ни в коем случае (не про дельфи)! Ты не так меня понял! ( тут Арбокайте поёт в паузе)
Наверное плохо излагаю. Скриптовые технологии стараюсь обходить стороной. "Чего-то не доброе в ...", как говорил Воланд. Интуитивно чувствуется обман и ущербность. Ява и php в первых рядах. Дело в том, что я ни бум-бум в области программирования. Я два года назад только узнал слова "паскаль", "delphi", "C++", "Пролог", "Forrth", - стараюсь понять. Я и до сих пор не знаю, какие написать нужные буковки . Я беру описание языка и вперёд. Конечно это туфта, но "Это огромный скачок для человека и маленький шаг для человечества.", наверняка, зная где соломку подстелить, на грабли бы не наступал. Опыт - хранитель от шишек и синяков. Я воспринимаю, о чём я писал выше, как: 1. список компонентов, когда не знаешь чего придумано. 2. Если мишуру отбросить, то готовые явки и пароли - "готовте списки, готовте списки". Проще чем выискивать, и Америку открывать - для меня так. code_35567.txt http://www.youtube.com/watch?v=oYTl-6RsiqQ Так и делаю. 22 года в поликлинике не был, не считая случая с ангиной. Но тут стереотип подвёл - "Лучше больше, чем никогда". |
|||
карма: 6 |
| ||
файлы: 1 | code_35567.txt [2.1KB] [559] | ||
Голосовали: | andrestudio |
Ответов: 5227
Рейтинг: 587
|
|||
flint2 писал(а): "Лучше больше, чем никогда"flint2, по поводу скриптовых движков примерhttp://www.fbsl.net/phpbb2/viewtopic.php?f=12&t=3000 там же на форуме читал что AutoIt в скорости проигрывает почти 2,5 раза. |
|||
карма: 4 |
|
Ответов: 2059
Рейтинг: 132
|
|||
По большому счёту AutoIt тут ни причём. Случайно под руку попался, как впрочем и форт.
AutoIt выступает в роли справочной информации и только. Никто не собираается его использовать. Что-то в виде справочника по Win API. Там компактно собрано всё в кучу и bass, и графика, и базы. Не надо просматривать сотни форумов, по той или иной теме. Компоненты от дельфи менее информативны из за черезчур раздутого синтаксиса. Отношение колличества литер к сути излагаемого чудовищьно, как впрочем и в С++. Человек привыкший к этим языкам не замечает, как нелепо выглядят объявления до implementation. Конечно всё логично и объяснимо, но выглядит перегружено и не изящно. Люди привыкают и думают, что иначе и быть не может. Воспитание на примерах и сила привычки. Это всё лирика. Не вдаваясь в полемику о передаче данных, речь идёт о расширяемости и модификации без горбачёвских перестроек, правок кода и перекомпиляций. Любой, кто посажен в клетку dll, или exe не способен к размножению. В неволе никто не размножается. Форт свободен от этих пут. Я не рассматривал скриптовые языки, потому что не люблю их. Но! Интерпретаторы даже очень и очень подходят на эту роль. Скорость тут не имеет ни малейшего значения. Ведь ни байта кода из оболочки не попадает в конечный продукт. Конечный exe может быть написан на C++, а оболочка допустим на Ява, как сейчас оболочка на delphi, а сам пакет для другого языка. На форте свет клином не сошёлся, но мне кажется, что он закрывает большее количество дыр. Вплоть до трубопровода между квадратиками. Я одинаково плохо знаю все мне известные языки, по этому у меня любимчиков нет. Само собой, что все инструменты (списки, графическое поле и т.д, чуть не сказал база.), как положено - на delphi. Грубо говоря, нужна возможность влезть в процесс компиляции, т.е. взять на себя роль линковщика. И менять компиляторы, как перчатки, а не плодить пакеты и dll. |
|||
карма: 6 |
|