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!'
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org