為 Forth 的一個非常簡單的子集實作評估器。
Forth 是一種以堆疊為基礎的程式語言。請為 Forth 的一小部分子集實作一個最基本的評估器。
你的評估器必須支援以下詞彙:
+、-、*、/(整數運算)DUP、DROP、SWAP、OVER(堆疊操作)你的評估器也必須支援以慣用語法定義新的詞彙:: word-name definition ;。
為了保持簡單,你只需要支援一種資料型態:至少 16 位元大小的有號整數。
你應該採用以下語法規則:數字是由一個或多個(ASCII)數字字元組成的序列,詞彙則是由一個或多個字母、數字、符號或標點符號組成、且本身不是數字的序列。 (Forth 的規則可能略有不同,但這樣已經夠接近了。)
詞彙不分大小寫。
要完成這個練習,你需要建立資料型態ForthState,並實作以下函式:
emptyState 回傳一個空的ForthState。evalText 會評估輸入的 Text,並回傳新的狀態。toList 會將目前的堆疊以陣列的形式回傳,堆疊最上層的元素會是最右邊(最後)的元素。你會在程式中找到已經寫好的虛設資料宣告與型別簽名,但定義這些函式、建立有意義的資料型態、newtype 或型別同義詞,都由你決定喔。