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. Прилагательные должны иметь ту же эмоциональную окраску, что и существительное, или быть нейтральными. Таким образом, непосредственно можно задать только константы, равные степеням двух; все остальные формируются из них путем применения арифметических действий.












