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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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ě
[editovat | editovat zdroj]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
[editovat | editovat zdroj]| 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
[editovat | editovat zdroj]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 |
Externí odkazy
[editovat | editovat zdroj]
Obrázky, zvuky či videa k tématu Whitespace na Wikimedia Commons - Domácí stránka
- Oznámení na Slashdotu