Forth

Forth

中等

說明

為 Forth 的一個非常簡單的子集實作評估器。

Forth 是一種以堆疊為基礎的程式語言。請為 Forth 的一小部分子集實作一個最基本的評估器。

你的評估器必須支援以下詞彙:

  • +、-、*、/(整數運算)
  • DUP、DROP、SWAP、OVER(堆疊操作)

你的評估器也必須支援以慣用語法定義新的詞彙:: word-name definition ;。

為了保持簡單,你只需要支援一種資料型態:至少 16 位元大小的有號整數。

你應該採用以下語法規則:數字是由一個或多個(ASCII)數字字元組成的序列,詞彙則是由一個或多個字母、數字、符號或標點符號組成、且本身不是數字的序列。 (Forth 的規則可能略有不同,但這樣已經夠接近了。)

詞彙不分大小寫。

自訂與拋出例外

有時候,你會需要在程式碼中同時自訂和raise例外。這麼做的時候,一定要附上有意義的錯誤訊息,指出錯誤的來源。這能讓程式碼更好讀,對除錯也有很大的幫助。

自訂例外可以透過建立新的例外類別來達成(詳見 classes),這些類別通常是 Exception 的子類別。

如果你知道錯誤來源會是某種例外型別的衍生,可以選擇繼承 Exception 類別底下的其中一種built in error types。拋出錯誤時,仍然要附上有意義的訊息。

這個練習要求你建立一個 自訂例外,在堆疊內容不足時拋出/「擲出」。只有在你自訂了適當的例外、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,透過 17 個概念146 個練習 和真人引導來學習並精通 Python,全部免費。