Forth

Forth

Середня

Вказівки

Реалізуйте обчислювач для дуже простої підмножини Forth.

Forth належить до стекових мов програмування. Реалізуйте дуже простий обчислювач для невеликої підмножини Forth.

Обчислювач має підтримувати такі слова:

  • +, -, *, / (арифметика з цілими числами)
  • DUP, DROP, SWAP, OVER (операції зі стеком)

Обчислювач також має підтримувати визначення нових слів за допомогою звичного синтаксису: : word-name definition ;.

Задля простоти потрібно підтримувати лише один тип даних: знакові цілі числа розміром щонайменше 16 біт.

Для синтаксису діють такі правила: число - послідовність з однієї або більше (ASCII) цифр, а слово - послідовність з однієї або більше літер, цифр, символів або розділових знаків, яка не є числом. (Forth, імовірно, використовує дещо інші правила, але це досить близько.)

Слова не чутливі до регістру.

Власні винятки та їх виклик

Іноді в коді буває потрібно і створити власний виняток, і raise його. Коли ми це робимо, варто завжди додавати змістовне повідомлення про помилку, яке вказує, у чому причина. Це робить код зрозумілішим і суттєво допомагає з налагодженням.

Власні винятки можна створювати через нові класи винятків (докладніше див. classes), які зазвичай є підкласами Exception.

Якщо відомо, що джерело помилки буде похідним від певного типу винятку, можна успадкувати його від одного з built in error types під класом Exception. Викликаючи помилку, все одно варто додати змістовне повідомлення.

У цій вправі потрібно створити власний виняток, який викликають/«кидають», коли стек заповнено недостатньо. Тести пройдуть, лише якщо створити відповідний виняток, викликати його через raise і додати відповідні повідомлення про помилки.

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

Крім того, у цій вправі потрібно викликати кілька built-in exceptions із повідомленнями про помилки. Щоб викликати built-in exception з повідомленням, запишіть повідомлення як аргумент до типу 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")
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Python Exercism

Час розпочати Forth?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.