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