vak: (Default)
[personal profile] vak
Поисследовал я исходники Рефала, которые на Си. Вряд ли что полезное из них получится соорудить. Тяжёлый код в стиле 70-х, существенно завязанный на 32-битную архитектуру. Эта реализация была исходно сделана на ЕС ЭВМ на языке PL/I, и позже аккуратно переписана на Си для писишек. Код имеет историческую ценность, но развить его не выйдет. Переименовал репозиторий в refal2-legacy, и пусть лежит для коллекции. Главная ценность здесь - описание входного языка Рефал-2 и библиотеки функций.

Зато у нас имеется другая реализация Refal-2 на современном Си++. По входному языку она почти совпадает с Си-шной версией. Большинство тестов от той версии проходят и здесь. Этой версией можно попробовать заняться. Пока форкнул к себе для начала: github.com/sergev/refal2. Покажу как собрать refal2 и запустить простейший тест.
git clone https://github.com/sergev/refal2.git
cd refal2
cmake -B build
cd build
make
Вызывается тривиально:
$ ./refal2 --help
Usage: refal2 [OPTION]... [FILE]...

-c, --check check source FILE(s) for errors and exit
--help display this help and exit
--version output version information and exit

Report bugs to <refal2@yandex.ru>.
Сделаем простой пример в файле hello.ref:
hello   start
entry go
extrn print
go = <print 'Hello World!'>
end
Запустим:
$ ./refal2 hello.ref 
Hello World!
--------------------------------------------------------------------------------
Execution result: ok.
Field of view:
'Hello World!'

Date: 2024-07-06 00:05 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Из того старого Си должен легко получаться Паскаль, а как был устроен элемент поля зрения на БЭСМ-6, я знаю.

Date: 2024-07-06 06:07 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Ну ты же хочешь, чтобы *REFAL работало? :)