Написал интерпретатор лиспа на степлере.
Может, это не совсем лисп, так как я с ним не знаком, но должно быть похоже.
А язык таков: в нём есть функции, которые берут аргументы, и возвращают значения.
Функции такие:
Арифметические:
+ возвращает сложение двух аргументов.
- разность
* умножение
/ деление
% остаток от деления
q корень числа (один аргумент)
? случайное число
Логические:
= равенство двух чисел
> больше
< меньше
! отрицание
| или
& и
Другие:
. остановка программы
v берёт один аргумент и возвращает значение переменной, которая имеет номер, заданный в аргументе.
s установить значение переменной. Первый аргумент - номер, второй - значение. Функция возвращает присвоенное значение.
p напечатать строку. Строка пишется в "".
l возвращает значение последнего условия.
Условные конструкции:
В языке есть две условные конструкции:
Условный блок:
{Условие действие, действие, ...}
Вначале пишется условие, потом действие, которое будет выполняться. Пример:
{=(v(5) 10) p("Пятая переменная - 10")}
Чтобы сделать If-Else, надо использовать функцию последнего условия:
{=(v(5) 10) p("Пятая переменная - 10")}
{!(l) p("Пятая переменная не 10")}
Ещё одна конструкция - цикл while:
{Условие действия}@
По сути, тот же условный блок, только с собакой на конце.
Вот такой вот язык.Теперь об истории создания.
Идея создать такой интерпретатор пришла ко мне в голову ночью, когда мне не спалось.
Я тогда полностью продумал язык, а также структуру интерпретатора. Как проснулся, начал всё записывать. Написал интерпретатор почти полностью, и забыл, как на степлере читать из файла.
Сделал простую программку, которая должна выводить на экран текстовой файл. Заставил выводить исходник лиспа, запустил... Что-то ничего не выводится, а размер файла исходника стремительно увеличивается. И до меня дошло, что я перепутал функцию чтения с записью, то есть, я полностью затёр всю свою работу. :angry
Что делать, пришлось всё писать заново. Переписал на следующий день, и вот, оно работает!
В архиве сам интерпретатор, хеллоуворлд, игра угадай число и поиска простых чисел.
Может быть, потом что-то ещё напишу.
А также грустная новость: Это, наверное, моя последняя программа в этом году. Скоро начнётся школа, там 11 класс, ЕГЭ и всё такое, то есть не до программирования будет![]()