Shakespeare (programovací jazyk)

esoterický programovací jazyk

Programovací jazyk Shakespeare (Shakespeare Programming Language, zkráceně SPL) je esoterický programovací jazyk navržený Jonem Åslundem a Karlem Hasselströmem.[1] Stejně jako programovací jazyk Chef je navržen tak, aby program zdál být něčím jiným než programem - v tomto případě vypadá jako divadelní hra z pera Williama Shakespeara.

Na začátku programu se seznamem postav deklaruje počet zásobníků, přirozeně se jmény jako „Romeo“ a „Julie“. Tyto postavy vstupují do vzájemného dialogu, ve kterém manipulují s nejvyššími hodnotami ostatních, přidávají a odebírají ze svých zásobníků, a provádějí vstupy/výstupy. Postavy si také mohou navzájem klást otázky, které se chovají jako podmíněné příkazy. Programovací model je celkově velmi podobný assembleru, ale používá mnohem více slov.

Programování v Shakespearovi editovat

Titul editovat

První řádek v Shakespearovském programu se říká „název“. Kompilátor považuje cokoli od prvního řádku do první tečky za komentář.

Obsazení (Dramatis Personae) editovat

Toto je část, kde jsou deklarovány proměnné. Každá proměnná může obsahovat celočíselnou hodnotu (se znaménkem +, nebo -) a má následující formu:

Jméno, Popis

Kde Jméno je název proměnné, Popis je kompilátorem ignorován. Kompilátor rozpozná pouze jména, která odpovídají skutečným shakespearovským postavám.[1]

Akty a scény editovat

Shakespearovský kód je rozdělen na Akty, které obsahují Scény, ve kterých spolu interagují postavy (proměnné). Každý Akt a Scéna jsou očíslovány římskými číslicemi a slouží jako GOTO štítek. Jakýkoli kód za dvojtečkou je považován za komentář. Jsou psány ve formě:

Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.

"Dějství I: Urážky a lichocení Hamletovy.
 Scéna I: Urážka Romea."

Příchod, odchod a exeunt editovat

Jednotlivé řádky kódu mají podobu dialogu. Když jedna postava hovoří k druhé, tak její proměnné přiřazuje, mění hodnotu, nebo ji nutí k výstupu. Postavy lze oslovit pouze jako „you“ nebo „thou“ (čes. ty). Tedy, když jsou pronášeny repliky, na jevišti musí být přesně dvě postavy: jedna, která promlouvá, a druhá ke které je promlouváno.[1] K vyvolání proměnné na jeviště se používá příkaz Enter (čes. přichází) se seznamem jedné nebo více postav. Příkaz Exit (čes. odchází) řekne přesně jedné uvedené postavě, aby jeviště opustila. Po příkazu Exeunt opustí jeviště postavy uvedené v seznamu, nebo v případě, že seznam je prázdný, opustí jeviště všechny postavy.[1] Používá se následující formát:

[Enter Juliet] 
[Enter Romeo and Juliet]
[Exit Romeo]
[Exeunt Romeo and Juliet]
[Exeunt]

"[Přichází Julie] 
 [Přichází Romeo and Julie]
 [Odchází Romeo]
 [Exeunt Romeo and Julie]
 [Exeunt]"

Repliky editovat

Repliky jsou reprezentovány jako dialog vedený postavou a skládají se z alespoň jedné věty. Každá věta může proměnné přiřadit novou hodnotu, přikázat její výstup nebo přijetí vstupu. Repliky mohou také manipulovat se seznamy nebo se chovat jako podmíněný nebo goto příkazy. Replika začíná jménem postavy a dvojtečkou. Jelikož je tato postava řečníkem, druhá postava na jevišti je proměnná, která se označuje jako „you“ nebo „thou“ (čes. ty).

Konstanty a přiřazování hodnot editovat

Konstanty jsou reprezentovány kombinací podstatných a přídavných jmen; jazyk rozpozná konečný seznam každého z nich a oba seznamy rozděluje, podle toho jestli mají pozitivní, negativní nebo neutrální tón, tak jak je vnímají Åslund a Hasselström. Kladná a neutrální podstatná jména mají hodnotu 1 a záporná podstatná jména mají hodnotu -1.

Například, "flower'' (květina) má hodnotu 1, protože květiny jsou pěkné. Zatímco "pig'' (prase) má hodnotu - 1, protože prasata jsou špinavá. Neutrální jména, jako strom "tree'' (strom), se také počítají jako 1.[1]

Jakékoli přídavné jméno znásobuje podstatné jméno číslem 2 a přídavná jména lze skládat za sebe.[1] Analyzátor ignoruje přivlastňovací zájmena, zatímco slova týkající se základní aritmetiky, jako "sum", "quotient", and "cube" (čes. součet, podíl, mocnina), jsou rozpoznávána jako operace. Věta, která přiřadí hodnotu znaku, začíná slovy „you“, nebo „thou“ (čes. ty), může volitelně pokračovat slovy "are as [any adjective] as", česky jsi stejně [jakékoli adjektivum] jako“, a poté poskytuje matematický vzorec pro novou hodnotu v podstatných a přídavných jménech, proměnných a operacích. Následují příklady těchto replik:

Hamlet:
 You lying stupid fatherless big smelly half-witted coward!

Juliet:
 You are as villainous as the square root of Romeo!

"Hamlet:
 Ty lživý hloupý bezohledný o-otce-připravený velký páchnoucí přihlouplý zbabělče!

Julie:
 Jsi stejně ničemný jako druhá odmocnina Romea!"

Matematické vzorce mohou také použít jména jiných postav (i když tyto postavy nejsou na jevišti) k použití aktuální hodnoty dané postavy k výpočtu, nebo „yourself“ nebo „thyself“ (čes. sebe) k využití hodnoty postavy, k níž je mluveno.

Vstup a výstup editovat

Řádky mohou také volat proměnnou, která poskytne výstup nebo přijme vstup. "Open your heart" (čes. otevři své srdce) vydá číselnou hodnotu proměnné, zatímco „Speak your mind“ (čes. promluv od srdce) vydá odpovídající znak v tabulce ASCII.

"Listen to your heart" (čes. poslechni své srdce) nebo "Open your mind" (čes. otevři svou mysl) vloží do proměnné vstup od uživatele; první funguje pro číslo a druhé pro znak.[1]

Podmíněný a goto příkazy editovat

Podmíněný příkaz je formulován jako otázka položená postavou. Slova „as [any adjective] as" (čes. stejně [jakékoli adjektivum] jako) představují test rovnosti, zatímco „lepší“ a „horší“ odpovídají většímu, respektive menšímu než. Následující řádek začíná "If so" (čes. pokud je tomu tak) nebo „If not“ (čes. pokud tak tomu není) a určuje, co se stane v reakci na pravdivost nebo lži původního stavu. Goto příkaz začíná "Let us", "We shall", nebo "We must" a pokračuje "return to" nebo "proceed to" a poté provede akt nebo scénu (čes. pokračujme k, vraťme se k). Scéna bude syntakticky analyzována jako scéna v aktuálním aktu; příkaz goto nemůže volat scénu v jiném aktu.[1] Podmíněný příkaz k volání goto by vypadal takto:

Juliet:
 Am I better than you?

Hamlet:
 If so, let us proceed to scene III.

"Julie:
 Jsem lepší než ty?

Hamlet:
 Pokud je tomu tak, pokračujme ke scéně III."

Vkládání a vyjmutí do/z zásobníku (příkazy push a pop) editovat

Každá proměnná je zásobník . Do zásobníku proměnné bude vloženo celé číslo (push), pokud v replice zazní, aby si postava „pamatovala“ příslušnou hodnotu, například „Remember me“ nebo „Remember yourself“ (čes. pamatuj si mě/sebe).

Nejvyšší hodnota v zásobníku je vyjmuta (pop), pokud je znaku řečeno, aby si cokoli "vybavil“ - "recall"; veškerý text za tímto slovem je považován za komentář.[1]

Příklad kódu editovat

Standardní „Hello, World!“ program:

Do Not Adieu, a play in two acts.

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.


                    Act I: Hamlet's insults and flattery.

                    Scene I: The insulting of Romeo.

[Enter Hamlet and Romeo]

Hamlet:
 You lying stupid fatherless big smelly half-witted coward!
 You are as stupid as the difference between a handsome rich brave
 hero and thyself! Speak your mind!

 You are as brave as the sum of your fat little stuffed misused dusty
 old rotten codpiece and a beautiful fair warm peaceful sunny summer's
 day. You are as healthy as the difference between the sum of the
 sweetest reddest rose and my father and yourself! Speak your mind!

 You are as cowardly as the sum of yourself and the difference
 between a big mighty proud kingdom and a horse. Speak your mind.

 Speak your mind!

[Exit Romeo]

                    Scene II: The praising of Juliet.

[Enter Juliet]

Hamlet:
 Thou art as sweet as the sum of the sum of Romeo and his horse and his
 black cat! Speak thy mind!

[Exit Juliet]

                    Scene III: The praising of Ophelia.

[Enter Ophelia]

Hamlet:

 Thou art as beautiful as the difference between Romeo and the square
 of a huge green peaceful tree. Speak thy mind!

 Thou art as lovely as the product of a large rural town and my amazing
 bottomless embroidered purse. Speak thy mind!

 Thou art as loving as the product of the bluest clearest sweetest sky
 and the sum of a squirrel and a white horse. Thou art as beautiful as
 the difference between Juliet and thyself. Speak thy mind!

[Exeunt Ophelia and Hamlet]


                    Act II: Behind Hamlet's back.

                    Scene I: Romeo and Juliet's conversation.

[Enter Romeo and Juliet]

Romeo:
 Speak your mind. You are as worried as the sum of yourself and the
 difference between my small smooth hamster and my nose. Speak your
 mind!

Juliet:
 Speak YOUR mind! You are as bad as Hamlet! You are as small as the
 difference between the square of the difference between my little pony
 and your big hairy hound and the cube of your sorry little
 codpiece. Speak your mind!

[Exit Romeo]

                    Scene II: Juliet and Ophelia's conversation.

[Enter Ophelia]

Juliet:
 Thou art as good as the quotient between Romeo and the sum of a small
 furry animal and a leech. Speak your mind!

Ophelia:
 Thou art as disgusting as the quotient between Romeo and twice the
 difference between a mistletoe and an oozing infected blister! Speak
 your mind!

[Exeunt]

Po uvedení titulu a obsazení a ohlášení první scény prvního aktu přichází na jeviště Hamlet a Romeo - [Enter Hamlet and Romeo].

První repliky patří Hamletovi, manipuluje jimi s hodnotou Romea. V replice "You lying stupid fatherless big smelly half-witted coward!" je podstatným jménem "coward" česky zbabělec, což je jistě negativní, takže má hodnotu -1. Hodnotu znásobuje dvojkou 6 přídavných jmen. Romeo má tedy hodnotu -64.

V druhé replika "You are as stupid as the difference between a handsome rich brave hero and thyself!'' je složitější. Má tvar rozdílu mezi konstantou rovné 8 (pozitivní podstatné jméno a 3 přídavná jména) a Romeem (kterého hodnota je dosazena pomocí "thyself"). To odpovídá 8 - (-64) = 72.

Pomocí "Speak your mind!" je vyvolán znak odpovídají číslu 72 v ASCII tabulce. Tímto znakem je H, první písmeno v řetězci "Hello, World!".

Související články editovat

Reference editovat

V tomto článku byl použit překlad textu z článku Shakespeare Programming Language na anglické Wikipedii.

Obecné odkazy editovat

  • HERRICK, Chloe. The A-Z of Programming Languages: Shakespeare [online]. 27 June 2011 [cit. 2018-11-10]. Dostupné online. 
  • BYRNE, Michael. Know Your Language: Coding Toil and Trouble with Shakespeare [online]. 26 September 2015 [cit. 2018-11-10]. Dostupné online. 
  • LANG, Mirco; AUGSTEN, Stephan. Esoteric Programming, Teil 2: Shakespeare Programming Language [online]. 12 July 2017 [cit. 2018-11-10]. Dostupné online. (německy) 
  • NELSON, Andy. Shakespeare Programming Language [online]. 2 March 2014 [cit. 2018-11-10]. Dostupné online. 
  • KÜHNAST, Charly. Aus dem Alltag eines Sysadmin: Shakespeare Programming Language. Linux-Magazin. December 2010. Dostupné online [cit. 10 November 2018]. (německy) 
  • VEE, Annette. Coding Literacy: How Computer Programming is Changing Writing. Cambridge, MA: MIT Press, 2017. ISBN 9780262036245. S. 124–125. 
  • StackHack - Shakespeare Programming Language - Datorföreningen Stacken [online]. [cit. 2018-11-10]. Dostupné online. (švédsky) 

Externí odkazy editovat