.
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]
Phiên bản bị đánh cắp:
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]
Tôi đang sử dụng trình biên dịch Python SPL của drsam94 , có một vài lỗi (đó là lý do tại sao, ví dụ, tôi sử dụng Open your mind
thay vì Open thy mind
trong phiên bản chơi gôn).
Để chạy chương trình này, sử dụng:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Làm thế nào nó hoạt động
SPL là một ngôn ngữ lập trình bí truyền được thiết kế để làm cho các chương trình trông giống như các vở kịch của Shakespeare. Nó thực hiện điều này bằng cách sử dụng các ký tự làm biến và việc xử lý được thực hiện bằng cách yêu cầu các ký tự nói với nhau.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Đây là tiêu đề của vở kịch; nó bị bỏ qua bởi trình biên dịch.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Ở đây chúng tôi khai báo các biến được sử dụng trong phần còn lại của chương trình. Tất cả mọi thứ betwen ,
và .
được bỏ qua bởi trình biên dịch. Trong trường hợp này, chúng tôi khai báo Romeo
, được sử dụng để giữ ký tự được giải mã và Juliet
, được sử dụng để giữ độ dài chạy của ký tự.
Act I: In which the lengths of runs are decoded.
Ở đây chúng tôi tuyên bố hành động đầu tiên và duy nhất trong chương trình. Hành vi và cảnh giống như nhãn hiệu; chúng có thể được nhảy tới bất cứ lúc nào bằng cách sử dụng let us return to scene II
hoặc một số biến thể của điều đó. Chúng tôi chỉ sử dụng một hành động, vì nó đủ cho nhu cầu của chúng tôi. Một lần nữa, bất cứ điều gì giữa :
và .
được bỏ qua bởi trình biên dịch.
Scene I: A silent entrance.
Ở đây chúng tôi tuyên bố cảnh đầu tiên. Các cảnh được đánh số bằng chữ số La Mã: thứ nhất là Scene I
, thứ hai Scene II
, v.v.
[Enter Romeo and Juliet]
Đây là một hướng sân khấu; trong đó, chúng tôi nói Romeo
và Juliet
các biến sẽ đi vào "giai đoạn". Chỉ có hai biến có thể ở trên "giai đoạn" cùng một lúc; giai đoạn được sử dụng để trình biên dịch có thể tìm ra biến nào được xử lý khi chúng nói. Bởi vì chúng tôi chỉ có hai biến, Romeo và Juliet sẽ ở trên sân khấu trong suốt thời gian của chương trình.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Một tuyên bố cảnh khác. Cảnh II sẽ được nhảy tới để giải mã một chiều dài khác.
Juliet:
Hình thức tuyên bố này có nghĩa là Juliet sẽ bắt đầu nói. Tất cả mọi thứ cho đến phần tiếp theo Romeo:
, hướng sân khấu hoặc tuyên bố cảnh / hành động sẽ là một dòng được nói bởi Juliet, và do đó "tôi" sẽ đề cập đến Juliet, "bạn" / "ngươi" với Romeo, v.v.
Open your mind.
Lệnh này lưu trữ giá trị thứ tự của ký tự đơn từ STDIN trong Romeo
.
Is my mother jollier than thou?
Trong SPL, danh từ dịch thành 1 hoặc -1 tùy thuộc vào việc chúng dương hay âm. Trong trường hợp này,my mother
dịch sang 1. Tính từ (tích cực hoặc phủ định) nhân danh từ của chúng với 2.
Đây là một câu hỏi; trong đó, Juliet hỏi liệu my mother
(AKA 1) có "vui nhộn" hơn Romeo không. So sánh hoặc dịch sang less than
(nếu chúng là âm, như worse
) hoặc greater than
(nếu chúng là dương, nhưjollier
). Do đó, câu hỏi này sôi lên Is 1 greater than you?
.
Lý do chúng tôi đặt câu hỏi này là để phát hiện sự kết thúc của đầu vào. Vì giá trị EOF
thay đổi theo nền tảng, nhưng thường nhỏ hơn 1, chúng tôi sử dụng giá trị này để phát hiện nó.
If so, we must proceed to scene IV.
Nếu câu hỏi trước được đánh giá true
, chúng ta sẽ chuyển sang cảnh IV, đó đơn giản là phần cuối của chương trình. Nói tóm lại, nếu chúng tôi phát hiện EOF, chúng tôi sẽ kết thúc chương trình.
Romeo:
Bây giờ, dòng của Romeo: "tôi" và "bạn" lần lượt đề cập đến Romeo và Juliet.
Open your mind.
Một lần nữa, tuyên bố này đặt giá trị thứ tự của một ký tự từ STDIN vào Juliet, trong trường hợp này là độ dài chạy của ký tự được lưu trữ 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!
Điều này quá dài để đi qua rất chi tiết, nhưng chỉ cần tin tưởng vào tôi mà nó dịch Juliet -= 48
. Chúng tôi làm điều này bởi vì Juliet giữ giá trị ASCII của một chữ số và ord('0') == 48
; trừ 48, chúng tôi dịch từ giá trị ASCII của một số sang chính số đó.
Scene III: In which Romeo snaps and brutally insults Juliet.
Một tuyên bố cảnh khác. Cái này là cho vòng lặp trong đó chúng tôi liên tục in giá trị ký tự của Romeo
, Juliet
lần.
Juliet:
Speak thy mind.
Tuyên bố này khiến Romeo in giá trị của mình như một nhân vật; nghĩa là, bất cứ giá trị ký tự nào trước đây được lưu trữ trong Romeo đều là đầu ra.
Romeo:
Thou art the sum of thyself and a hog!
Một con heo là một danh từ phủ định, vì vậy a hog
dịch thành -1; do đó, tuyên bố này ước tính Juliet -= 1
.
Art thou as rotten as nothing?
Romeo ở đây hỏi Juliet có "thối như" hay bằng 0.
If so, let us return to scene II.
Nếu giá trị của Juliet là 0, chúng tôi sẽ quay lại cảnh II để giải mã thời lượng chạy của nhân vật khác.
Let us return to scene III.
Khác, chúng tôi lặp lại cảnh III để xuất lại nhân vật của Rome.
Scene IV: Finale.
[Exeunt]
Tuyên bố cảnh cuối cùng này chỉ là một điểm đánh dấu cho phần cuối của chương trình. Hướng [Exeunt]
giai đoạn là cần thiết để có được trình biên dịch để thực sự tạo cảnh cuối cùng.