Implémente un évaluateur pour un sous-ensemble très simple de Forth.
Forth est un langage de programmation à base de pile. Implémente un évaluateur très élémentaire pour un petit sous-ensemble de Forth.
L'évaluateur doit prendre en charge les mots suivants :
+, -, *, / (arithmétique sur les entiers)DUP, DROP, SWAP, OVER (manipulation de pile)L'évaluateur doit aussi prendre en charge la définition de nouveaux mots à l'aide de la syntaxe habituelle : : word-name definition ;.
Pour simplifier, le seul type de données que tu dois prendre en charge est les entiers signés d'une taille d'au moins 16 bits.
Tu dois appliquer les règles suivantes pour la syntaxe : un nombre est une suite d'un ou plusieurs chiffres (ASCII), un mot est une suite d'une ou plusieurs lettres, chiffres, symboles ou signes de ponctuation qui ne forment pas un nombre. (Forth utilise probablement des règles légèrement différentes, mais c'est suffisamment proche.)
Les mots ne sont pas sensibles à la casse.
En Forth, les fonctions sont appelées words ; elles opèrent sur une pile de données.
Chaque mot prend ses paramètres sur la pile et renvoie ses résultats sur la pile.
La documentation de Forth contient toujours l'état de la pile de données avant l'exécution du mot et après l'exécution du mot, de la manière suivante : ( p1 p2 ... pN --- r1 r2 ... rN ).
Les valeurs p1 à pN représentent les paramètres du mot sur la pile avant l'appel (la pile peut contenir des données supplémentaires plus haut dans la pile, non représentées ici) et les valeurs r1 à rN représentent les valeurs de retour du mot sur la pile après l'appel.
Le séparateur --- distingue l'état de la pile avant et après l'exécution du mot.
Les mots à implémenter sont définis comme suit :
| mot | état de la pile | description |
|---|---|---|
+ |
( a b --- sum ) |
sum = a + b |
- |
( a b --- diff ) |
diff = a - b |
* |
( a b --- prod ) |
prod = a * b |
/ |
( a b --- quot ) |
quot = a / b |
dup |
( a --- a a ) |
dupliquer la valeur au sommet de la pile |
drop |
( a --- ) |
retirer la valeur au sommet de la pile |
swap |
( a b --- b a ) |
échanger les deux valeurs au sommet de la pile |
over |
( a b c --- a b c b ) |
copier la deuxième valeur vers le sommet de la pile |
Si tu veux jouer avec un interprète Forth en ligne ou en savoir plus sur les mots à implémenter, essaie Easy Forth (en particulier les sections Adding Some Numbers, Defining Words et Stack Manipulation).
Inscris-toi sur Exercism pour apprendre et maîtriser Odin avec 73 exercices, et un vrai mentorat humain, le tout gratuitement.