Wat is Whitespace?
Whitespace is een esoterische programmeertaal die in 2002 is ontwikkeld door Edwin Brady en Chriss Morris. De commando’s bestaan uit de drie tekens “spatie”, “tab” en “linefeed” – de zogenaamde whitespaces – niet-afdrukbare tekens.
Voor betere leesbaarheid worden ook de tekens s, t en l gebruikt.
De structuur van Whitespace
Whitespace is een commando-georiënteerde stapel-gebaseerde programmeertaal die programmeurs een stack (stapel) en heap (geheugenruimte) biedt.
Alle bewerkingen werken intern met gehele getallen van willekeurige bitlengte. Er is een optie om een teken weer te geven dat wordt geïdentificeerd door zijn ASCII-codewaarde.
De commando’s en controle-instructies bestaan uit gedefinieerde reeksen van spaties (s), tab-tekens (t) en linefeeds (l). Er is geen syntaxische element om commentaar te herkennen. In plaats daarvan kunnen opmerkingen, die zelf geen whitespaces mogen bevatten, overal in de broncode worden ingevoerd. GC Wizard negeert alle tekens die voor geen betekenis hebben.
Commando’s
Commando’s bestaan uit reeksen van spaties, tabstops en linefeeds. Bijvoorbeeld, t-s-s-s voert een wiskundige optelling uit van de bovenste twee elementen op de stapel. Gegevens worden in binair formaat weergegeven met spaties (0) en tabs (1), gevolgd door een linefeed; dus, s-s-s-t-s-t-t-l is het binaire getal 0001011, wat 11 is in decimale vorm. Alle andere tekens worden genegeerd en kunnen dus voor opmerkingen worden gebruikt. Code wordt geschreven als een Instruction Modification Parameter (IMP) gevolgd door de bewerking en een parameter indien nodig.
IMP | Omschrijving |
---|---|
s | Stack Manipulatie |
t s | Rekenkundig |
t t | Heap Toegang |
l | Stroomcontrole |
t l | Invoer/Uitvoer |
Stack manipulatie
IMP | Commando | Parameter | Omschrijving |
---|---|---|---|
s | s | Getal | Plaats het getal op de stapel |
s | l s | – | Dupliceer het bovenste item op de stapel |
s | l t | – | Wissel de bovenste twee items op de stape |
s | l l | – | Verwijder het bovenste item op de stapel |
Rekenkundig
IMP | Commando | Parameter | Omschrijving |
---|---|---|---|
t s | s s | – | Optelling |
t s | s t | – | Aftrekking |
t s | s l | – | Vermenigvuldiging |
t s | t s | – | Gehele Deling |
t s | t t | – | Modulo |
Heap Toegang
IMP | Commando | Parameter | Omschrijving |
---|---|---|---|
t t | s | – | Opslaan in heap |
t t | s | – | Ophalen uit heap |
Stroomcontrole
IMP | Commando | Parameter | Omschrijving |
---|---|---|---|
l | s s | Label | Markeer een locatie in het programma |
l | s t | Label | Roep een subroutine aan |
l | s l | Label | Spring naar een label |
l | t s | Label | Spring naar een label als de top van de stapel nul is |
l | t t | Label | Spring naar een label als de top van de stapel negatief is |
l | t t | – | Eindig een subroutine en geef controle terug aan de oproeper |
l | l l | – | Eindig het programma |
Invoer/Uitvoer
IMP | Commando | Parameter | Omschrijving |
---|---|---|---|
t l | s s | – | Geef het teken bovenaan de stapel weer |
t l | s t | – | Geef het getal bovenaan de stapel weer |
t l | t s | – | Lees een teken en plaats het op de locatie aangegeven door de top van de stapel |
t l | t t | – | Lees een getal en plaats het op de locatie aangegeven door de top van de stapel |
Data
Terwijl de commando’s een drie-waarde plaatsingssysteem gebruiken, worden de gegevens in het binaire systeem weergegeven: Op de eerste plaats van links, staat een “t” voor een negatief getal; een “l” staat voor een positief getal. Verderop staat “t” voor 1 en “l” voor 0. De specificatie stelt dat getallen elke bitlengte kunnen hebben, maar compilers en interpreters kunnen hier een redelijke bovengrens stellen. Een gegeven wordt afgesloten door een linefeed.
Lees meer over Whitespace op Wikipedia (en)
De functie Whitespace
Bijna bovenaan het scherm staat een schuifknop waarmee je kunt kiezen uit Vertaler en Generator.
Vertaler
Als je kiest voor ‘vertaler’ verschijnt er bovenaan het scherm een tekstveld waar je de whitespace tekst plaatst. Dit kan de whitepace tekst zelf zijn of de leesbare variant.
Nadat je op de Startknop hebt gedrukt voert GC Wizard het programma uit en plaatst onder Uitvoer het resultaat als tekst.
Daaronder zie je de Leesbare code.
Generator
Als je kiest voor ‘Generator’ verschijnt er een tekstveld bovenaan het scherm waar je de tekst plaatst die je als resultaat wil hebben van het Whitespace programma.
Nadat je op de Startknop hebt gedrukt voert GC Wizard het programma uit en plaatst onder Uitvoer het resultaat als whitespace code en een Leesbare code variant. Beide varianten zijn uitvoerbaar.