Forth
http://fforum.winglion.ru/

моя форт-система, которая потихоньку пишется
http://fforum.winglion.ru/viewtopic.php?f=40&t=3125
Страница 5 из 6

Автор:  Victor__v [ Сб дек 16, 2017 18:14 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

gudleifr писал(а):
А там есть файлы ненулевой длины?

Если это шутка, то не смешно.
Если имеете ввиду что-то другое, поясните

Автор:  gudleifr [ Сб дек 16, 2017 18:20 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Victor__v писал(а):
Если это шутка, то не смешно.
Это не шутка.
Возможно, ошибка (раз)архивирования...

Автор:  Victor__v [ Сб дек 16, 2017 18:37 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

gudleifr писал(а):
Возможно, ошибка (раз)архивирования...

Возможно. Тот же самый архив перезалил. Теперь всё хор.

Автор:  _KROL [ Сб дек 16, 2017 18:44 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Victor__v писал(а):
gudleifr писал(а):
Возможно, ошибка (раз)архивирования...

Возможно. Тот же самый архив перезалил. Теперь всё хор.

Ну не знаю, я в 15:26 скачал - всё было в порядке.

Автор:  Victor__v [ Вт дек 19, 2017 23:48 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Нашёл достаточно ошибок в своём парсере.
Во первых, почему не работал цикл интерпретации?
Так с точки зрения слова PARSE-NAME словом является ВСЁ вплоть до пробела или конца источника.
Вот. В конце источника-консоли есмь перевод строки и он учитывался словом.
Пришлось переписать слово PARSE-NAME . Теперя словом является всё, что ограничено символами меньше пробела.
Ещё не переписал слово PARSE . С ним тоже весело. Особенно строки из входного потока брать. Всё берётся, работает. Только не корректно.
И возникает вопрос. Как вообще переписать это слово?
Чтобы оно работало вплоть до встречи символа или конца источника, или сюда ещё приплюсовать ограничитель вида перевод строки?
Будем думать, как это всё логичней и правильней провернуть.
Почему рос стек данных в режиме интерпретации?
Во всём виновато слово SFIND . Мне уже было лень разбираться и я просто переписал его вместе со словом VOC-TH , последнее стало проще - теперь это определение номера треды от хеш-значения т.е 3 AND.
И итого поиск ведётся по всем словарям, но номер цепочки для поиска у них одинаков.
Потом чуть ускорю поиск ( на манипулятор пересажу несколько частей ).
Касательно роста стека есть ещё заминка - появляется значение при создании слова и/или слов. статьи.
Ещё не разбирался в этом.

Ещё навёл марафет в словах .SN и OK(std) . Теперь вывод стека данных симпатичный.

Кодогенерация не работает (возможно я просто не доинициализировал словарь FORTH вот он и выкидывает).
Предкомпиляция не работает (вносил изменения в строй.версию. Возможна, и некая ошибка поведения т.е. иначе надо)

Трансляцию др. источников, работу стека окружений и т.д не тестировал.

Автор:  Victor__v [ Вс дек 24, 2017 18:10 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Исходники моего форта
Обновлено 15.01.2018
Как затестить?
запускаем СПФ (в архиве лежит) и вводим в нём src2\test-forth.f
Запустится образ моего форта.
Можно поиграться.

Что по финтифлюшкам?
Числа можно записывать как от тек. системы счисления так и от 16-чной -- 0x23 к примеру или -0x23.
Можно писать символы, обрамляя из в одинарную кавычку -- 'h' 'e' .
Некоторые символы уже "забиты" в словарь -- BL 'TAB' 'CR'
Возможно исполнять слово, указывая путь к нему из словаря -- FORTH::VOC1::VOC2::TEST
Как получить xt от такого слова -- ' FORTH::VOC1::VOC2::TEST
Можно указывать папки, где следует искать файлы с пом. стека окружений.
Файл дополнительно ищется в последней упомянутой (явно или неявно) директории.
Автоподключение файлов имеется, достаточно написать название файла.

Прочее.
Если файл короткий, менее кб, то он транслируется целиком, раньше такой льготы минималистам не было.
Мне так и не удалось переписать SEARCH, поэтому я скомпилил его из СПФ как есть.
Пофиксил проблему, когда в файле обнаруживалась ошибка и он не открывался другими программами.

Обновил документацию, также там справка по некоторым словам.

Думаю всё-таки засовывать строки в режиме интерпретации в стек возвратов в интерпретаторские закрома.
Возможна ситуация с evaluate в котором есть S" . Если как-то не экранировать парсинг, то строка-источник может испортиться.
А если ещё использовать экранируемые символы в S", то ситуация обостряется сильнее.


Форт-система предоставляется "как есть", скачав материалы вы берёте на себя все риски.
На всякий случай написал.

Автор:  Victor__v [ Пт янв 05, 2018 18:41 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Дополнительно в архиве либы ДЛЯ МОЕГО ФОРТА
Подробнее http://fforum.winglion.ru/viewtopic.php?f=2&t=3141&p=44592&sid=f9c4d3174cb9ce148cdd5844565db6dc#p44592

Автор:  Victor__v [ Пн янв 15, 2018 22:48 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Добавил работоспособные либы:
структуры
постфиксный ассемблер под интел
стековый манипулятор
разбор CSV

Автор:  Victor__v [ Сб фев 10, 2018 19:50 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Victor__v из прошлого писал(а):
Ситуация на текущий момент
Пробую компилировать на условные адреса (всё тоже самое, но абсолютные вызовы и переменные перевязаны на новое место)
Да уж, форт система немножко не работает при таком раскладе.
Ищу ошибку уже второй вечер.
Удалось выяснить, что проблема в переборе слов в словарях или в самой цепочке слов. М да.

М да.
Уже нашёл ошибку. Дизассемблер подсобил.
У меня все структуры управления так ,как перевязка адресов идёт, используют адресацию системы-донора (СПФ).
А вот, слово BEGIN было досадным исключением из правила. Поправил.

Теперь тестовый запуск с перевязкой работает.

Мораль:
в1) Если ошибка не находится, долби её до победного и знай, что когда остановишься, то она будет на расстоянии вытянутой руки.
в2) Если ошибка не находится, забей и отдохни. Потом вернёшься и посмотришь свежим взглядом.

Автор:  Victor__v [ Вс мар 04, 2018 11:13 ]
Заголовок сообщения:  Re: моя форт-система, которая НАПИСАНА

Всё :< форт-система написана.
Две недели наскоками мучился с PE-форматом.
Наконец-то удалось откомпилировать и запустить.
Тут полностью всё что можно в том числе и мои наработки под СПФ. Много весит.
Полный набор

Тут форт и мои либы под него (не все из них закончены).
Форт-система и наработки

А тут только форт-система для желающих поиграться.
Исполняемый файл

Сама форт-система ( её зовут NOVA ) весит примерно 33 килобайта. 12 килобайтов в EXE оставлено под расширение системы.

В самих исходниках есть мусорные файлы, попрошу лопатой не бить :)

Автор:  _KROL [ Вс мар 04, 2018 18:58 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Хм, не хватает только
Код:
1 Stdcall: ExitProcess KERNEL32.DLL
: BYE 0 ExitProcess ;
:)
А где у тебя стековый манипулятор? А то что-то не могу найти :shuffle;

Автор:  _KROL [ Вс мар 04, 2018 19:08 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Нашёл: \.\~er\stacker\

Автор:  Victor__v [ Вс мар 04, 2018 22:13 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

_KROL писал(а):
Хм, не хватает только
Код:
1 Stdcall: ExitProcess KERNEL32.DLL
: BYE 0 ExitProcess ;
:)

Никогда не пользовался этим словом. В принципе, без него жить можно. Но согласен, что немного не хватает :)

Автор:  Victor__v [ Ср мар 07, 2018 21:55 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

В настоящий момент пишу оптимизатор для своей Новы, работающий через таблицу предкомпиляции.
Всё же решил создать некоторое подобие правил оптимизации.
На мой взгляд получилось красивенько :)

Код:

~er\asm\assembler.f
ALSO ASSEMBLER

: (ENT:-CODE) R> ;

\ для задания условий-фрагментов кода
\ ENT: 'point -- ??? 'point -1| 0
: ENT:
HEADER
['] (ENT:-CODE)  COMPILE,
-1 STATE !
;

\ перебрать все условия-фрагменты и выдать сопутствующие данные, указатель на уже прошаренный код
\ и шаг, на котором условие не сработало или последний шаг
\ xt: 'point -- ??? 'point -1| 0
: >OPT \ xt1 xt2 .. xn n -- ??? 'point iter
N>R
HERE >R    \ 'point
0 >R         \ iter   
BEGIN
2 RPICK WHILE
1 RPICK
3 RPICK EXECUTE
0= IF 2R> \ 'point iter
      R> CELLS RP@ + RP! EXIT
   THEN
RP@ 1+!
RP@ CELL+ !

2R> R> 1- RDROP >R 2>R
REPEAT
2R>
RDROP
;

\ тут условия фрагменты
ENTITY.F

\ правила
EVENTS\ARIFMETIC.F
EVENTS\MEMORY.F



Одно из условий
Код:
CREATE (NUM)
EBP CELL NEGATE LEA+-
[EBP] EAX MOVr-r
EAX 0 MOVr-im

HERE (NUM) - CONSTANT (NUM).S.all
(NUM).S.all CELL- CONSTANT (NUM).S.code


ENT: NUMBER \ 'point -- num 'point -1|0
>R \ point
R@ (NUM).S.all - (NUM).S.code
(NUM) (NUM).S.code COMPARE
IF RDROP 0 EXIT THEN

R@ (NUM).S.all - (NUM).S.code +
@
R> (NUM).S.all -
-1
;



И пример правила

Код:
\ оптимизация операции над двумя числами
: arifmetic_opt2
SP@ >R
NUMBER NUMBER 2 >OPT
2 <> IF R> SP! EXIT THEN
RDROP
DP !
ROT
EXECUTE LIT,
DROP
&IMMEDIATE ['] NOOP
EVENT-EXIT
;

' +       ' -       ' /       ' *
' MOD    ' OR       ' XOR    ' AND

8 S" AR_2" NEW-GROUP
' arifmetic_opt2 S" AR_2" ->EVENT-GROUP



Попробовал оптимизировать сам оптимизатор по исходному коду. Не получилось :o. Видите ли, таблица предкомпиляции была написана так, чтобы отлавливать дубляжи и выдавать исключения при их обнаружении. В общем, с таблицей предкомпиляции "перестарался" 8)

Автор:  Victor__v [ Вс мар 11, 2018 19:20 ]
Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется

Нова-форт

Найдены мелкие косяки.
слово TO
предкомпиляция
Переписана развёртка USER-слов

В случае ошибки выводится дополнительная информация. Т.к. Нова это форт-система слегка откатная т.е. восстанавливающая своё состояние, то и дополнить информацию об вылете без правок исходного кода проблематично. По этому выводится:
код ошибки,
последнее определённое слово,
система счисления,
значение STATE

В настоящее время работаю над оптимизатором для Новы.
Добавлен ряд правил.
Также оптимизатор ведёт лог.
Для теста работоспособности подопытным кроликом является стековый манипулятор. ~ER\OPT\TEST.F

В настоящий момент код становится меньше на 1/12 . Наибольшую долю оптимизаций, на мой взгляд, составляют оптимизации связанные IF.
После прогона и теста оптимизатора, планируется запихнуть его во временный словарь.

Страница 5 из 6 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/