L’Espace est un langage de programmation basé sur la pile et orienté commande qui fournit aux programmeurs une pile et un tas.
Toutes les opérations fonctionnent en interne sur des entiers de longueur de bit arbitraire. Cependant, il existe une option permettant de sortir un caractère identifié par sa valeur de code ASCII.
Les commandes et les instructions de contrôle consistent en des séquences définies d’espaces (s), de caractères de tabulation (t) et de sauts de ligne (l).
Il n’existe pas d’élément syntaxique pour identifier les commentaires. Au lieu de cela, les commentaires, qui eux-mêmes ne doivent pas contenir d’espaces, peuvent être saisis n’importe où dans le code source. L’interpréteur ignore tous les caractères qui n’ont aucune signification pour lui.
Commandes
Les commandes sont composées de séquences d’espaces, de taquets de tabulation et de sauts de ligne. Par exemple, t-s-s-s effectue l’addition arithmétique des deux premiers éléments de la pile. Les données sont représentées en binaire à l’aide d’espaces (0) et de tabulations (1), suivis d’un saut de ligne ; ainsi, s-s-s-t-s-t-l est le nombre binaire 0001011, soit 11 en décimal. Tous les autres caractères sont ignorés et peuvent donc être utilisés pour les commentaires.
Le code s’écrit sous la forme d’une Instruction Modification Parameter ;(IMP) suivie de l’opération et d’un paramètre si nécessaire.
IMP | Signification |
s | Manipulation des piles |
t s | Arithmétique |
t t | Accès au tas |
l | Contrôle du débit |
t l | Entrée/sortie |
Manipulation des piles
IMP | Commande | Paramètre | Signification |
---|---|---|---|
s | s | Numéro | Pousser le numéro sur la pile |
s | l s | – | Dupliquer l’élément supérieur de la pile |
s | l t | – | Intervertir les deux premiers éléments de la pile |
s | l l | – | Jeter l’élément supérieur de la pile |
Arithmétique
IMP | Commande | Paramètre | Signification |
---|---|---|---|
t s | s s | – | Addition |
t s | s t | – | Soustraction |
t s | s l | – | Multiplication |
t s | t s | – | Division des nombres entiers |
t s | t t | – | Modulo |
Accès au tas
IMP | Commande | Paramètre | Signification |
---|---|---|---|
t t | s | – | Stocker dans le tas |
t t | s | – | Récupérer à partir du tas |
Contrôle du débit
IMP | Commande | Paramètre | Signification |
---|---|---|---|
l | s s | Étiquette | Marquer un emplacement dans le programme |
l | s t | Étiquette | Appeler une sous-routine |
l | s l | Étiquette | Sauter à une étiquette |
l | t s | Étiquette | Sauter à une étiquette si le sommet de la pile est zéro. |
l | t t | Étiquette | Sauter à une étiquette si le haut de la pile est négatif |
l | t t | – | Termine une sous-routine et transfère le contrôle à l’appelant. |
l | l l | – | Terminer le programme |
Entrée/sortie
IMP | Commande | Paramètre | Signification |
---|---|---|---|
t l | s s | – | Affiche le caractère au sommet de la pile |
t l | s t | – | Affiche le nombre au sommet de la pile |
t l | t s | – | Lire un caractère et le placer à l’endroit donné par le sommet de la pile. |
t l | t t | – | Lire un nombre et le placer à l’endroit indiqué par le sommet de la pile. |
Data
Alors que les commandes utilisent un système de place à trois valeurs, les données sont mappées dans le système dual : Dans la première place en partant de la gauche, un “t” représente un nombre négatif ; un “l” représente un nombre positif. Plus loin, “t” représente 1 et “l” 0. Plus loin, “t” représente 1 et “l” 0. La spécification indique que les nombres peuvent avoir n’importe quelle longueur de bit, mais les compilateurs et les interprètes peuvent fixer une limite supérieure raisonnable à cet égard. Une donnée est terminée par un saut de ligne.