Програмски језик Шекспир
Програмски језик Шекспир је езотерични програмски језик који је дизајниран од стране Џона Аслунда и Карла Хаселсторма.[1] Баш као и програмски језик Шеф, он је дизајниран да направи програме да постану нешто више од других програма; у овом случају, Шекспирова игра. Листа карактера на почетку програма декларише стек бројева, природно названим "Ромео" и "Јулија". Ти карактери улазе у дијалог сами са собом при чему манипулишу међусобним највишим вредностима, гурају и искачу једни друге, и раде улаз/излаз. Карактери такође могу да постављају питања једни другима која се понашају као условне изјаве. Оквирно, модел програмирања је најсличнији асемблеру али са мало више речи у језику.
Shakespeare Programming Language | |
---|---|
Дизајнер(и) | Џон Ашлунд и Карл Хаселсторм |
Веб-сајт | shakespearelang |
Програмирање у Шекспиру
[уреди | уреди извор]Наслов (Title)
[уреди | уреди извор]Прва линија кода у Шекспиру носи име „наслов”("title"). Компајлер преводи све од прве линије кода до прве тачке за коментар.
Драматична персона
[уреди | уреди извор]Ово је секција у којој се декларишу променљиве. Свака променљива може да садржи означену целу вредност и то изгледа овако:
Име(Name), Опис(Description)
Где је Име (Name)
име променљиве , а Опис (Description)
је игнорисан од стране компајлера. Компајлер ће препознати само имена која одговарају правим Шекспировим карактерима.
Улоге и сцене
[уреди | уреди извор]Део кода у Шекспиру је подељен на Улоге (Acts)
које одговарају Сценама (Scenes)
у којима се карактери (променљиве) међусобно односе. Свака Улога (Acts)
и Сцена (Scene)
је нумерисана са Ромеовим бројем и служи као опција Иди до (GO TO
). Сваки код после две тачке садржи коментар. Они су написани у следећој форми:
Act I: Hamlet's insults and flattery. Scene I: The insulting of Romeo.
Улога I: Хамлет вређа и ласка. Сцена I: Вређање од стране Ромеа.
Улаз, излаз и одлазак
[уреди | уреди извор]Индивидуалне линије кода узимају облик дела дијалога изговорен од једног до другог карактера,а ово је начин на који је вредност променљиве додељена, промењена или прослеђена на излаз. Карактер може бити адресиран само као „ти(you)”. Према томе, морају бити тачно два карактера „на сцени” сваки пут када линије кода комуницирају; једна променљива прича, а друга слуша.[1] За позивање променљиве на сцену, команда Улаз(Enter)
је коришћена са листом од једног или више карактера. Команда Излаз (Exit)
говори да тачно један карактер напусти сцену. Одлазак (Exeunt)
позива више од једног карактера да напусти или у случају да нема излистаних карактера, да сви карактери напусте сцену. Користи се следећи облик:
[Enter Juliet] [Enter Romeo and Juliet] [Exit Romeo] [Exeunt Romeo and Juliet] [Exeunt]
[Улаз Јулија] [Улаз Ромео и Јулија] [Улаз Ромео] [Одлазак Ромео и Јулија] [Одлазак]
Линије
[уреди | уреди извор]Линије су репрезентоване као дијалог између два карактера и садржи бар једну реченицу. Свака реченица може да додељује нову вредност променљивој, да нареди променљивој да на излазу прикаже своју вредност или да јој нареди да прими нову вредност. Линије такође могу да манипулишу стеком или да глуме као „ако/онда” (if/then) или као „иди на” (go to) наредбе. Линија почиње именом карактера, или двотачком . Пошто је овај карактер говорник, други карактер на сцени је променљива која је адресирана као „ти”(you).
Константе и додељивање вредности
[уреди | уреди извор]Константе су репрезентоване комбинацијом именица и придева; језик препознаје коначну листу од сваке врсте, и обе листе су подељене на оне које имају позитиван, негативан или неутралан тон, препознат од стране Аслунда и Хаселсторма. Позитивне и неутралне именице имају вредност 1, а негативне именице имају вредност -1. Било који придев множи именицу 2 пута и придеви могу бити уједињени.[1] Присвојне заменице су игнорисане од стране парсера, док се речи које се односе на основну аритметику која је препозната као оператор, као „сума”(sum), „количник”(quotient) и „куб”(cube). Реченица која показује на вредност карактера која почиње са „ти”(you), могу да се наставе са „као и [било који придев]”(are as [any adjective] as), и онда даје математичку формулу у именицама, придевима, променљивима и операцијама за нове вредности. Пример је дат у прилогу:[1]
Hamlet: You lying stupid fatherless big smelly half-witted coward! Juliet: You are as villainous as the square root of Romeo!
Улаз и излаз
[уреди | уреди извор]Линије такође могу да зову променљиву да оде на излаз програма или да јој нареде да добије нови унос. "Отвори своје срце(Open your heart)" избацује на излаз нумеричку вредност променљиве, док "Отвори свој ум(Speak your mind)" избацује на излаз одговарајући ASCII карактер. "Слушај своје срце(Listen your heart)" или "Отвори свој ум(Open your mind)" узрокује да променљива добије нови унос од стране корисника, првобитни за број и слово за карактер.
Условне изјаве и иди до
[уреди | уреди извор]IF THEN изјава се означава као питање постављено од карактера. Реч "AS [ANY ADJECTIVE] AS " репрезентује тест за једнакост, док "BETTER" и "WORSE" одговара командама веће од или мање од. Следећа линија, која почиње са "IF SO" или "IF NOT", одређује шта се дешава у одговору, да ли је тачан или погрешан одговор у односу на оригинално стање. "GO TO" изјава почиње са "LET US", "WE SHALL" или "WE MUST", наставља се са "RETURN TO" или "PROCEED TO", и даје јој улогу или сцену. Сцена би била парсирана као та сцена у тренутној улози; GOTO изјава не може да назове сцену из неке друге улоге. Условна изјава да би се позвала наредба GOTO изгледа овако:
Juliet:
Am I better than you?
Hamlet:
If so, let us proceed to scene III.
Гурање и искакање стекова
[уреди | уреди извор]Свака променљива је апстрактни тип податка. Променљива ће имати интиџер који је додељен њеном типу податка ако линија кода каже карактеру да запамти прикладну вредност, као што је "REMEMBER ME" (запамти ме) или "REMEMBER YOURSELF" (запамти сам себе). Највиша вредност у апстрактном типу податка је стављена (варијабла претпоставља ову вредност) ако је карактеру речено да опозове било шта; сав текст после ове команде је третиран као коментар.
Пример кода
[уреди | уреди извор]Ово је стандардни "Hello World" програм (који исписује на екрану речи "Здраво свете" упућене кориснику) у програмском језику Шекспир.
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. Prince 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 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]