04 Comment un programme Espace est-il structuré ?

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.

IMPSignification
sManipulation des piles
t sArithmétique
t tAccès au tas
lContrôle du débit
t lEntrée/sortie

Manipulation des piles

IMPCommandeParamètreSignification
ssNuméroPousser le numéro sur la pile
sl sDupliquer l’élément supérieur de la pile
sl tIntervertir les deux premiers éléments de la pile
sl lJeter l’élément supérieur de la pile

Arithmétique

IMPCommandeParamètreSignification
t ss sAddition
t ss tSoustraction
t ss lMultiplication
t st sDivision des nombres entiers
t st tModulo

Accès au tas

IMPCommandeParamètreSignification
t tsStocker dans le tas
t tsRécupérer à partir du tas

Contrôle du débit

IMPCommandeParamètreSignification
ls sÉtiquetteMarquer un emplacement dans le programme
ls tÉtiquetteAppeler une sous-routine
ls lÉtiquetteSauter à une étiquette
lt sÉtiquetteSauter à une étiquette si le sommet de la pile est zéro.
lt tÉtiquetteSauter à une étiquette si le haut de la pile est négatif
lt tTermine une sous-routine et transfère le contrôle à l’appelant.
ll lTerminer le programme

Entrée/sortie

IMPCommandeParamètreSignification
t ls sAffiche le caractère au sommet de la pile
t ls tAffiche le nombre au sommet de la pile
t lt sLire un caractère et le placer à l’endroit donné par le sommet de la pile.
t lt tLire 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.