Whitespace
Whitespace je humorný ezoterický programovací jazyk vytvořený Edwinem Bradym a Chrisem Morrisem, představený 1. dubna 2003. Veškerá syntaxe jazyka sestává z bílých znaků (mezer, tabulátorů a konců řádek; anglicky se označují jako whitespace, odtud název), veškeré jiné znaky (písmena, čísla, symboly atd.) jsou ignorovány.
Whitespace je imperativní jazyk běžící na virtuálním stroji v podobě zásobníkového počítače vybaveného haldou.
Syntaxe
Program je tvořen posloupností příkazů, z nichž každý sestává z řetězce významných symbolů (mezerník SP, tabulátor TAB, znak konce řádky LF), jiné symboly jsou zcela ignorovány. Před každým příkazem je označení typu příkazu:
Označení | Typ příkazu |
---|---|
SP | Manipulace se zásobníkem |
TAB SP | Aritmetický příkaz |
TAB TAB | Práce s haldou |
LF | Řídící příkazy |
TAB LF | Vstup/výstup |
Čísla (která se vyskytují jako parametry některých příkazů) mohou být libovolně velká, zadávají se v binárním zápisu jako posloupnost znaků SP a TAB (reprezentující 0, resp. 1) a ukončená znakem LF. První znak určuje znaménko – číslo začínající SP je kladné, číslo začínající TAB je záporné.
Návěští jsou tvořena libovolnou posloupností znaků SP a TAB ukončenou LF. Tyto posloupnosti musí být jednoznačné (nesmí se v programu opakovat).
Instrukce pro práci se zásobníkem
Na zásobník lze ukládat celá čísla libovolné velikosti.
Příkaz | Parametr | Význam |
---|---|---|
SP | Číslo | Uložit číslo na zásobník. |
LF SP | — | Zduplikovat číslo na vrcholu zásobníku. |
TAB SP | Číslo | Okopírovat n-tou položku zásobníku na jeho vrchol. |
LF TAB | — | Zaměnit horní dvě položky zásobníku. |
LF LF | — | Zahodit vrchní položku zásobníku. |
TAB LF | Číslo | Zahodit n položek ze zásobníku těsně pod vrchní (tu ponechat). |
Aritmetické instrukce
Ve Whitespace se pracuje pouze s celými čísly, v aktuální verzi nejsou čísla s plovoucí řádovou čárkou podporována.
Aritmetické instrukce provedou zadanou operaci se dvěma vrchními čísly, která ze zásobníku vyjmou, a výsledek uloží na zásobník. První (hlouběji) uložené číslo je považováno za levý operand.
Příkaz | Parametr | Význam |
---|---|---|
SP SP | — | Sčítání |
SP TAB | — | Odčítání |
SP LF | — | Násobení |
TAB SP | — | Celočíselné dělení |
TAB TAB | — | Zbytek po celočíselném dělení |
Instrukce přístupu k haldě
Halda je adresována celými čísly uloženými na vrcholu zásobníku. Při čtení je adresa na zásobníku nahrazena hodnotou z haldy, při zápisu je adresa a hodnota ze zásobníku přečtena a vyjmuta.
Příkaz | Parametr | Význam |
---|---|---|
SP | — | Zapsat na haldu |
TAB | — | Přečíst z haldy |
Řídící instrukce
Příkaz | Parametr | Význam |
---|---|---|
SP SP | Návěští | Návěští – označení místa v programu |
SP TAB | Návěští | Volání podprogramu |
SP LF | Návěští | Nepodmíněný skok na návěští |
TAB SP | Návěští | Podmíněný skok – pokud je na vrcholu zásobníku nula |
TAB TAB | Návěští | Podmíněný skok – pokud je na vrcholu zásobníku záporné číslo |
TAB LF | — | Konec podprogramu, návrat za volající instrukci |
LF LF | — | Konec programu (povinná instrukce) |
Instrukce vstupu a výstupu
Whitespace obsahuje instrukce umožňující komunikaci s uživatelem. Instrukce pro vstup ukládají přečtené hodnoty do haldy, na adresu obsaženou na zásobníku.
Příkaz | Parametr | Význam |
---|---|---|
SP SP | — | Vypsat znak na vrcholu zásobníku |
SP TAB | — | Vypsat číslo na vrcholu zásobníku |
TAB SP | — | Přečíst znak a uložit ho na adresu uvedenou na vrcholu zásobníku |
TAB TAB | — | Přečíst číslo a uložit ho na adresu uvedenou na vrcholu zásobníku |