![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() 😸🧡✊✌️ Сообщений: 16 423 Спасибо сказали: 3292 раза ![]() |
Более полной документацией озабочусь позднее, пока только основные фишки:
1) Forth-подобный синтаксис. (Хотя это не совсем Forth...) 2) Компилятор на Refer, входит в поставку. 3) Только COM-файлы, никаких библиотек поддержки. Скачать 1.06 -------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]() |
![]()
Сообщение
#2
|
|
![]() 😸🧡✊✌️ Сообщений: 16 423 Спасибо сказали: 3292 раза ![]() |
Новая версия, 1.06.
1) Изменена командная строка. 1.1) Ключ -E превратился в -o (он же --outfile). 1.2) Добавлен ключ --format=<format>, где <format> либо com, либо exe. Да, мы теперь умеем в EXE-файлы. Компилятор, скомпилированный в COM-файл, по умолчанию создаёт COM-файлы, а скомпилированный в EXE-файл, — EXE-файлы. Для изменения формата используется этот ключ. 1.2a) Если компилятор, скомпилированный в COM-файл, преобразовать в EXE-файл, он должен работать. Если компилятор, скомпилированный в EXE-файл, преобразовать в COM-файл, он работать не будет, потому что в его коде запуска нет инициализации регистров SS и SP. 1.3) Слово goal добавлено для указания адреса слова, которое выполняет запуск. Для EXE-файла оно просто устанавливает значение поля IP в заголовке, для COM-файла настраивает команду безусловного перехода, которую необходимо добавить в начало кода. Способы различны, но субъективно первый самый простой, поэтому на него ссылается сообщение об ошибке: Код defer UNUSED-WORD Код code UNUSED-WORD jmp $100 # end-code Код start-code jmp $100 # end-code Код $E9 c, -3 , 1.4) Впрочем, если код запуска в начале файла (т.е., по адресу $100), команда goal факультативна и ничего не меняет. Это значит, что COM-файл не обязан начинаться с команды jmp.2) Снова перераспределена память. 2.1) Стеки вынесены в отдельный сегмент стека, увеличены, но их использование всё так же контролируется. 2.3) Файловый буфер и буфер памяти перемещены в старшие адреса в сегменте данных. 2.4) Оставшаяся часть сегмента данных это словарь, и контролируется, чтобы он не пересекал свою верхнюю границу. 3) Тестирование 3.1) Добавлены слова T{ -> }T для создания тест-кейсов. Формат: Код T{ <тестируемая-последовательность-слов> -> <ожидаемые-результаты> }T Пример:Код T{ 1 dup -> 1 1 }T В случае несовпадения актуальных результатов с ожидаемыми, будет выведено сообщение об ошибке. В случае ошибки при выполнении самих слов, скорее всего, тоже.3.2) Добавлены слова test1 и test2 для тестирования механизма catch/throw. Файл "throw-3.ref": Код T{ test1 -> 0 0 }T 3.3) Ещё много тестовых файлов с комментариями, что проверяется, и какие ожидаются результаты. Не пройдёт и полгода, и я снабжу комментариями и сам код refer. T{ test2 -> -10 }T ![]() 4) Да, теперь всюду словари. 4.1) Для компиляции макроопределения используется словарь macrodefs, для исполнения — macrocode. Комментарии удаляются в первом, do: и if-true: работают из второго. Теперь do: и if-true: валидны только в макросах. 4.2) Для ключей командной строки — словарь keyparams. 4.3) Для пропуска слов в условной компиляции — словарь condition. P.S. Добавил пару тестов. -------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 11 September 2025 - 04:09 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|