Forth

Forth

Mittel

Anleitung

Implementiere einen Evaluator für eine sehr einfache Teilmenge von Forth.

Forth ist eine stapelbasierte Programmiersprache. Implementiere einen sehr einfachen Evaluator für eine kleine Teilmenge von Forth.

Dein Evaluator muss die folgenden Wörter unterstützen:

  • +, -, *, / (Ganzzahlarithmetik)
  • DUP, DROP, SWAP, OVER (Stapelmanipulation)

Dein Evaluator muss außerdem das Definieren neuer Wörter mit der üblichen Syntax unterstützen: : word-name definition ;.

Um es einfach zu halten, ist der einzige Datentyp, den du unterstützen musst, vorzeichenbehaftete Ganzzahlen mit einer Größe von mindestens 16 Bit.

Für die Syntax solltest du die folgenden Regeln verwenden: Eine Zahl ist eine Folge von einer oder mehreren (ASCII-)Ziffern, ein Wort ist eine Folge von einem oder mehreren Buchstaben, Ziffern, Symbolen oder Satzzeichen, die keine Zahl ist. (Forth verwendet wahrscheinlich leicht abweichende Regeln, aber das kommt dem schon sehr nahe.)

Bei Wörtern wird nicht zwischen Groß- und Kleinschreibung unterschieden.

Ausnahmen anpassen und auslösen

Manchmal ist es notwendig, Ausnahmen in deinem Code sowohl anzupassen als auch mit raise auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, die zeigt, woher der Fehler stammt. Das macht deinen Code lesbarer und hilft erheblich beim Debugging.

Benutzerdefinierte Ausnahmen kannst du über neue Ausnahmeklassen erstellen (siehe classes für mehr Details), die typischerweise Unterklassen von Exception sind.

Wenn du weißt, dass die Fehlerquelle von einem bestimmten Ausnahmetyp abgeleitet ist, kannst du von einem der built in error types unter der Klasse Exception erben. Beim Auslösen des Fehlers solltest du trotzdem eine aussagekräftige Meldung angeben.

Diese Übung erfordert, dass du eine benutzerdefinierte Ausnahme erstellst, die ausgelöst/„geworfen“ wird, wenn der Stack nicht ausreichend gefüllt ist. Die Tests bestehen nur, wenn du eine passende Ausnahme anpasst, diese Ausnahme mit raise auslöst und passende Fehlermeldungen angibst.

# 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")

Zusätzlich erfordert diese Übung, dass du mehrere built-in exceptions mit Fehlermeldungen auslöst. Um eine built-in exception mit einer Meldung auszulösen, schreibe die Meldung als Argument an den exception-Typ:

# an example when division by zero is attempted.
raise ZeroDivisionError("divide by zero")

#an example when the operation is undefined.
raise ValueError("undefined operation")
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Python Exercism

Bereit, mit Forth zu starten?

Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.