http://progopedia.ru/language/shakespeare/
Shakespeare — эзотерический язык программирования, в котором исходный код программ имитирует пьесы Шекспира.
Язык создан скандинавскими программистами Калле Хассельстрёмом и Юном Ослунном в процессе выполнения учебных заданий по синтаксическому анализу. За несколько недель до того авторы открыли для себя мир эзотерических языков, и решили создать свой собственный. Создание компилятора не входило в задание, поэтому авторы ограничились написанием транслятора в C. Язык не проходил стандартизацию.
Возможности языка включают в себя арифметические действия, ввод-вывод символов и чисел, условные и безусловные переходы и элементарные действия со стеками. Авторы языка утверждают, что ему присуща выразительность Basic вместе с дружелюбием Assembler.
Структура программы
- заголовок — часть программы до первой точки. Интерпретируется как комментарий.
- список действующих лиц — объявление переменных. Каждая переменная описывается в формате
Имя, описание
, где в качестве имени должно использоваться имя одного из героев пьес Шекспира, а описание может быть произвольным комментарием. Все переменные хранят целые числа, кроме того, их можно использовать в качестве стеков. - тело программы — состоит из актов и сцен, пронумерованных римскими цифрами. Они служат метками для условных и безусловных переходов. Каждая сцена, в свою очередь, состоит из отдельных команд, оформленных как реплики действующих лиц.
Для выполнения большинства команд на сцене должно быть два персонажа — говорящий и тот, к кому обращаются. Персонажи выводятся на сцену ремаркой [Enter Имя]
и со сцены — ремаркой [Exit Имя]
(если сцену покидают все, кто там был — ремаркой [Exeunt]
).
Команды языка
Все команды выглядят как обращение персонажа Y
к персонажу X
.
- присвоение переменной
X
нового значения. Новое значение формируется из констант и/или значений других переменных при помощи арифметических действий. Чаще всего принимает видYou are as <прилагательное> as <выражение>
. - вывод символа
X
:Speak your mind!
- вывод числа
X
:Open your heart!
- ввод символа
X
:Open your mind!
- ввод числа
X
:Listen to your heart!
- безусловный переход:
Let us return/proceed to scene II
. Предполагается, что номер сцены задан в пределах текущего акта. Возможно также перейти в другой акт, но только на его начало. - условный переход состоит из двух частей: проверка некоторого условия и собственно переход.
- добавление выражения в стек
Y
:X: Remember <выражение>
. - извлечение значения из стека
Y
и присвоение егоX
:X: Recall <произвольный текст>
.
Константы в Shakespeare задаются как существительные с набором прилагательных при них. Существительное соответствует 1 или -1 в зависимости от того, хорошее оно, нейтральное или плохое. Каждое прилагательное при нем умножает константу на 2. Прилагательные должны иметь ту же эмоциональную окраску, что и существительное, или быть нейтральными. Таким образом, непосредственно можно задать только константы, равные степеням двух; все остальные формируются из них путем применения арифметических действий.