Реалізуйте обчислювач для дуже простої підмножини 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")
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.