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.
Il est parfois nécessaire de personnaliser et de raise des exceptions dans ton code. Dans ce cas, pense à toujours inclure un message d'erreur explicite pour indiquer l'origine de l'erreur. Cela rend ton code plus lisible et facilite grandement le débogage.
On peut créer des exceptions personnalisées à l'aide de nouvelles classes d'exceptions (voir classes pour plus de détails) qui sont généralement des sous-classes de Exception.
Lorsque tu sais que l'origine de l'erreur sera dérivée d'un certain type d'exception, tu peux choisir d'hériter de l'un des built in error types de la classe Exception. Quand tu lèves l'erreur, tu dois tout de même inclure un message explicite.
Cet exercice en particulier te demande de créer une exception personnalisée à lever/« lancer » lorsque la pile n'est pas suffisamment remplie. Les tests ne réussiront que si tu personnalises une exception appropriée, que tu lèves cette exception avec raise et que tu inclus des messages d'erreur appropriés.
# subclassing the Exception to create a StackUnderflowError
class StackUnderflowError(Exception):
"""Exception raised when Stack is not full.
message: explanation of the error.
"""
def __init__(self, message):
self.message = message
# raising a StackUnderflowError
raise StackUnderflowError("Insufficient number of items in stack")
De plus, cet exercice te demande de lever plusieurs built-in exceptions accompagnées de messages d'erreur.
Pour lever une built-in exception avec un message, écris ce message comme argument du type d'exception :
# an example when division by zero is attempted.
raise ZeroDivisionError("divide by zero")
#an example when the operation is undefined.
raise ValueError("undefined operation")
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.