.
Ajax,.
Ford,.
Act I:.
Scene I:.
[Enter Ajax and Ford]
Scene II:.
Ford:
Open your mind.Is sky nicer than you?If so, let us return to scene IV.
Ajax:
Open your mind.You is sum you and sum big big big big big big pig and big big big big cat!
Scene III:.
Ford:
Speak thy mind.
Ajax:
You is sum you and pig!Is you as big as zero?If so, let us return to scene II.Let us return to scene III.
Scene IV:.
[Exeunt]
Негольована версія:
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Act I: In which the lengths of runs are decoded.
Scene I: A silent entrance.
[Enter Romeo and Juliet]
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Juliet:
Open your mind. Is my mother jollier than thou? If so,
we must proceed to scene IV.
Romeo:
Open your mind. Thou art the sum of thyself and the sum of my good aunt and
the difference between nothing and the quotient of the square of twice the sum
of thy foul fat-kidneyed goat and thy death and thy evil variable!
Scene III: In which Romeo snaps and brutally insults Juliet.
Juliet:
Speak thy mind.
Romeo:
Thou art the sum of thyself and a hog! Art thou as rotten as nothing? If so,
let us return to scene II. Let us return to scene III.
Scene IV: Finale.
[Exeunt]
Я використовую компілятор Python SPL drsam94 , у якого є кілька помилок (саме тому, наприклад, я використовую Open your mindзамість Open thy mindверсії для гольфу).
Для запуску цієї програми використовуйте:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Як це працює
SPL - це езотерична мова програмування, призначена для того, щоб програми виглядали як п’єси Шекспіра. Це робиться за допомогою символів як змінних, а обробка виконується шляхом того, щоб символи говорили речі один одному.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Це назва п’єси; його ігнорує компілятор.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Тут ми оголошуємо змінні, які використовуються в решті програми. Все відбувається ,і .ігнорується компілятором. У цьому випадку ми оголошуємо Romeo, що використовується для утримання символу, який декодується, і Juliet, що використовується для утримання довжини пробігу символу.
Act I: In which the lengths of runs are decoded.
Тут ми оголошуємо перший і єдиний акт програми. Дії та сцени - як бирки; їх можна перейти в будь-який час, використовуючи let us return to scene IIчи інший варіант цього. Ми використовуємо лише один вчинок, оскільки це достатньо для наших потреб. Знову ж таки, що між ними :і .компілятор ігнорується.
Scene I: A silent entrance.
Тут ми оголошуємо першу сцену. Сцени пронумеровані римськими цифрами: перший є Scene I, другий Scene IIтощо.
[Enter Romeo and Juliet]
Це сценічний напрямок; в ньому ми повідомляємо, Romeoі Julietзмінні повинні вийти на "етап". Лише дві змінні можуть бути одразу на "сцені"; етап використовується для того, щоб компілятор міг зрозуміти, до якої змінної звертається, до якої, коли вони говорять. Оскільки у нас є лише дві змінні, Ромео і Джульєтта залишаться на сцені протягом тривалості програми.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Ще одна декларація сцени. Сцена II буде перескакувана для того, щоб декодувати ще одну довжину пробігу.
Juliet:
Ця форма декларації означає, що Джульєтта почне говорити. Усе до наступного Romeo:, сценічного напряму чи декларації сцени / дії буде рядком, про який говорить Джульєтта, і таким чином "я" буде посилатися на Джульєтту, "ти" / "ти" на Ромео тощо.
Open your mind.
Ця команда зберігає порядкове значення одного символу з STDIN в Romeo.
Is my mother jollier than thou?
У SPL іменники перекладаються на 1 або -1 залежно від того, є вони позитивними чи негативними. У цьому випадку my motherперекладається на 1. Прикметники (позитивні чи негативні) множать свій іменник на 2.
Це питання; в ньому Джульєтта запитує, чи my mother(AKA 1) "веселіший", ніж Ромео. Порівняння або перекладається на less than(якщо вони негативні, як worse) або greater than(якщо вони є позитивними, як jollier). Тому це питання зводиться до Is 1 greater than you?.
Причиною, з якої ми задаємо це питання, є виявлення кінця введення. Оскільки значення EOFзмінюється залежно від платформи, але зазвичай менше 1, ми використовуємо це для його виявлення.
If so, we must proceed to scene IV.
Якщо попереднє питання оцінюється на true, ми переходимо до сцени IV - це просто кінець програми. Словом, якщо ми виявимо EOF, ми закінчуємо програму.
Romeo:
Тепер це рядки Ромео: "я" і "ти" відносяться до Ромео і Джульєтти відповідно.
Open your mind.
Знову ж таки, це твердження додає порядкове значення одного символу з STDIN в Джульєтту, що в даному випадку є довжиною пробігу символу, що зберігається в Romeo.
Thou art the sum of thyself and the sum of my good aunt and the difference
between nothing and the quotient of the square of twice the sum of thy foul
fat-kidneyed goat and thy death and thy evil variable!
Це занадто довго, щоб переглядати детально, але просто довіряйте мені в тому, що це означає Juliet -= 48. Ми робимо це тому, що Джульєтта має значення ASCII числа, і ord('0') == 48; віднімаючи 48, ми переводимо з ASCII значення числа на саме число.
Scene III: In which Romeo snaps and brutally insults Juliet.
Ще одна декларація сцени. Цей для циклу, в якому ми неодноразово друкуємо значення символів Romeo, Julietразів.
Juliet:
Speak thy mind.
Це твердження змушує Ромео друкувати його значення як персонажа; тобто будь-яке значення символу раніше зберігалося в Ромео, тепер виводиться.
Romeo:
Thou art the sum of thyself and a hog!
Хог - негативний іменник, тому a hogперекладається на -1; тому це твердження оцінюється до Juliet -= 1.
Art thou as rotten as nothing?
Тут Ромео запитує, чи "Джульєтта" така ж гнила, чи дорівнює 0.
If so, let us return to scene II.
Якщо значення Джульєтти дорівнює 0, ми повертаємося до сцени II, щоб розшифрувати довжину пробігу іншого персонажа.
Let us return to scene III.
Інше, ми повертаємося назад до сцени III, щоб знову вивести персонажа Ромео.
Scene IV: Finale.
[Exeunt]
Ця фінальна декларація сцени є лише маркером для завершення програми. [Exeunt]Режисура необхідно отримати компілятор насправді створити фінальну сцену.