]]> ]]>
Править | Обсудить | История

Shakespeare

Дата создания:
2001
Парадигма:
Типизация:
Принятые расширения файлов:
.spl
Реализации и версии (свернуть все | развернуть все):
Язык программирования

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

Элементы синтаксиса:

Регистрозависимость нет
Регулярное выражение идентификатора переменной имя персонажа пьес Шекспира
Присваивание значения переменной You are <выражение> / You are as <прилагательное> as <выражение>
Объявление переменной <имя>, <произвольное описание>
Блок Scene <номер>: <произвольное название>.
Равенство Am I as <прилагательное> as <выражение>?
Неравенство Am I not as <прилагательное> as <выражение>?
Сравнение Am I better than <выражение>?
Если - то If so, let us proceed/return to scene <номер>.

Примеры:

Hello, World!:

Пример для версий Lingua::Shakespeare 1.00

Для вывода сообщения используется самый простой метод: ASCII-код каждого символа вычисляется заново как сумма степеней двойки, присутствующих в его двоичной записи.

use Lingua::Shakespeare;

Shakespeare-style Encoded Message.

Desdemona, the talker.
Pericles, a shut-pan with notable patience.

Act I: Message output.

Scene I: Letter by letter.

[Enter Desdemona and Pericles]

Desdemona:
  You honest reddest gentle loving sweet brave rose!
  You are as bottomless as the sum of yourself and a rural red purple hamster!
  Speak your mind!

  You bold cunning peaceful proud good sweetest hero!
  You are as pretty as the sum of thyself and a warm cunning cute fine delicious kingdom!
  You are as bottomless as the sum of yourself and a rural white morning!
  You are as small as the sum of yourself and a grandfather!
  Speak your mind!

  You sweetest proud happy prompt cunning loving joy!
  You are as embroidered as the sum of yourself and a reddest loving beautiful cunning handsome happiness!
  You are as reddest as the sum of yourself and a peaceful cunning beautiful pony!
  You are as rural as the sum of yourself and a white tiny sky!
  Speak your mind!
  Speak your mind!

  You healthy amazing loving clearest trustworthy good happiness!
  You are as brave as the sum of yourself and a cunning golden loving peaceful mighty pony!
  You are as delicious as the sum of thyself and a mighty rich gentle plum!
  You are as embroidered as the sum of yourself and a fine bold hero!
  You are as old as the sum of yourself and a tiny cat!
  You are as green as the sum of thyself and a stone wall!
  Speak your mind!

  You bottomless big blue purple huge horse!
  You are as lovely as the sum of thyself and a gentle prompt delicious Heaven!
  You are as red as the sum of yourself and a bottomless big moon!
  Speak your mind!

  You tiny red furry rural bottomless sky!
  Speak your mind!

  You rural bluest large bottomless little purple cow!
  You are as sweet as the sum of yourself and a embroidered cute trustworthy rich rose!
  You are as bottomless as the sum of yourself and a green normal cow!
  You are as proud as the sum of thyself and a handsome summer's day!
  You are as happy as the sum of thyself and a flower!
  Speak your mind!

  You tiny bluest large huge hard normal uncle!
  You are as warm as the sum of yourself and a pretty rich charming reddest mighty Heaven!
  You are as small as the sum of yourself and a huge green little morning!
  You are as sweetest as the sum of yourself and a beautiful sweet kingdom!
  You are as warm as the sum of yourself and a proud happiness!
  You are as hard as the sum of yourself and a roman!
  Speak your mind!

  You warm cute happy pretty golden loving Lord!
  You are as huge as the sum of thyself and a little furry small green yellow brother!
  You are as peaceful as the sum of thyself and a honest brave happy fine flower!
  You are as small as the sum of yourself and a yellow purse!
  Speak your mind!

  You normal purple rural old white big morning!
  You are as blossoming as the sum of yourself and a charming cunning gentle lovely amazing happiness!
  You are as normal as the sum of thyself and a large red big animal!
  You are as charming as the sum of yourself and a healthy delicious hero!
  Speak your mind!

  You large old bluest green red rural lantern!
  You are as sweet as the sum of yourself and a beautiful loving sunny mighty reddest summer's day!
  You are as lovely as the sum of yourself and a bold clearest happiness!
  Speak your mind!

  You golden loving fair charming lovely King!
  You are as rural as the sum of thyself and a squirrel!
  Speak your mind!

[Exeunt]

Факториал:

Пример для версий Lingua::Shakespeare 1.00

Используется итеративное определение факториала. В первой сцене инициализируются переменная факториала (счетчик цикла по умолчанию равен 0), а также ряд переменных-символов. Вторая сцена — цикл, в котором выводятся текущее число и его факториал, а затем проверяется, равно ли текущее число 17 — если да, цикл прекращается.

use Lingua::Shakespeare;

Elizabethan Factorial.

Ferdinand, for factorial.
Isabella, for loop index.
Emilia, for exclamation mark.
Sebastian, for space.
Egeus, for equality sign.
Lucio, for newline.

Act I: Factorial calculations.

Scene I: Initialization.

[Enter Isabella and Sebastian]

Isabella:
  You are as fat as the product of a big black furry old cat and a white cow!

[Exit Sebastian]
[Enter Emilia]

Isabella:
  You are as distasteful as the sum of Sebastian and a chihuahua!

[Exit Emilia]
[Enter Egeus]

Isabella:
  You are as good as the difference between the sum of Sebastian and Emilia and a bold brave hero!

[Exit Egeus]
[Enter Lucio]

Isabella:
  You are as cute as the sum of a peaceful warm delicious summer's day and a cute squirrel!

[Exit Lucio]
[Enter Ferdinand]

Isabella:
  You brother!

Scene II: Loop.

Ferdinand:
  Open your heart!

[Exit Ferdinand]
[Enter Emilia]

Isabella:
  Speak your mind!

[Exit Emilia]
[Enter Sebastian]

Isabella:
  Speak your mind!

[Exit Sebastian]
[Enter Egeus]

Isabella:
  Speak your mind!

[Exit Egeus]
[Enter Sebastian]

Isabella:
  Speak your mind!

[Exit Sebastian]
[Enter Ferdinand]

Isabella:
  Open your heart!

[Exit Ferdinand]
[Enter Lucio]

Isabella:
  Speak your mind!

[Exit Lucio]
[Enter Ferdinand]

Ferdinand:
  You are as good as the sum of yourself and a rose.

Isabella:
  You are as gentle as the product of myself and yourself.
  Am I not as beautiful as the sum of your sweet charming lovely noble sister and a flower?

Ferdinand:
  If so, let us return to scene II.

[Exeunt]

Числа Фибоначчи:

Пример для версий Lingua::Shakespeare 1.00

Используется итеративное вычисление чисел Фибоначчи. После выхода из цикла (конец второй сцены) счетчик цикла Isabella используется для вывода троеточия.

use Lingua::Shakespeare;

Fibonacci Numbers.

Isabella, the loop index.
Falstaff, a Fibonacci number.
Fortinbras, another Fibonacci number.
Sebastian, space.
Cordelia, comma.

Act I: Factorial calculations.

Scene I: Initialization.

[Enter Isabella and Sebastian]

Isabella:
  You are as fat as the product of a big black furry old cat and a white cow!

[Exit Sebastian]
[Enter Cordelia]

Isabella:
  You are as beautiful as the sum of Sebastian and the sum of a tiny yellow furry hamster and the clearest blue sky!

[Exit Cordelia]
[Enter Fortinbras]

Isabella:
  You father!

Scene II: Loop.

Isabella:
  Open your heart!
  You are as noble as the sum of yourself and Falstaff.

[Exit Fortinbras]
[Enter Falstaff]

Isabella:
  You are as brave as the difference between Fortinbras and yourself.

[Exit Falstaff]
[Enter Cordelia]

Isabella:
  Speak your mind!

[Exit Cordelia]
[Enter Sebastian]

Isabella:
  Speak your mind!

[Exit Sebastian]
[Enter Fortinbras]

Fortinbras:
  You are as good as the sum of yourself and a rose.

Isabella:
  Am I not as beautiful as your sweet charming lovely noble sister?

Fortinbras:
  If so, let us return to scene II.
  You are as good as the sum of Cordelia and a fine horse!
  Speak your mind! Speak your mind! Speak your mind!

[Exeunt]

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам