Есть много проблем, которые говорят «интерпретировать X», где X - простой язык. На мой взгляд, это слишком скучно. Чтобы дать всем откладывающим людям в Интернете что-то интересное, вы можете попытаться сделать это:
Вызов
Выберите язык $LANG
. $LANG
может быть любым полным языком программирования Тьюринга или полным подмножеством языка программирования Тьюринга. Помните, что если вы опускаете функцию вашего языка $LANG
для устного перевода, вы не должны использовать ее и для своей собственной программы, поскольку ваша заявка также должна быть записана $LANG
.
Написать компилятор / интерпретатор для $LANG
написанного в $LANG
. Вы можете использовать все возможности (в том числе eval
и друзей) вашего языка, которые доступны для написания этого компилятора. Чтобы сделать задачу более сложной, есть одно ограничение: $LANG
ваша программа должна иметь возможность интерпретировать / компилировать все допустимые программы, кроме самого вашего интерпретатора / компилятора. Если выяснится, что интерпретируемая / компилируемая программа является вашим интерпретатором или самим компилятором (независимо от имени файла), ваша программа должна сделать что-то совершенно не связанное с функциональностью интерпретатора или компилятора (например, перебор или печать Hello, world!
).
Чтобы сделать эту задачу еще более сложной, ваша программа не должна читать свой собственный источник при компиляции или интерпретации.
Характеристики
- Эта задача - код гольф. Представление с наименьшим количеством правильных символов выигрывает. В случае ничьей первое решение выигрывает.
- Ваша программа / скрипт должен читать программу, которую нужно интерпретировать из файла. Вы можете жестко указать его путь и имя. Когда файл читается, вы можете скомпилировать файл в другой файл (который должен быть исполняемым в вашей системе) или запустить его напрямую. Если вам
$LANG
не хватает возможностей чтения файлов, вы можете выбрать другой способ чтения в подходящем коде$LANG
. Вы не можете выбрать$LANG
в качестве подмножества другой язык, но с удаленными возможностями чтения файлов. - Применяются обычные правила игры в гольф. То есть: ваш личный язык домашнего питомца, который вы создали для решения этой задачи, запрещен, если решение становится тривиальным с его использованием (например, определение программы с одним символом, которая точно реализует решение). Нарушение правил приветствуется.