假期抽了兩天時間,集中精力學習Haskell的Parsec庫,初次嘗試了組合子(Combinator)編程,并且實現了一個While語言的解釋器(源碼在這里)。
Parsec庫是Haskell上的一種單子式分析器組合子(monadic parser combinator)函數庫。它使得原本復雜的語言解析工作變得非常容易。雖然使用了很多單子(Monad)技術,但是我對于這個課題依然還有很多疑惑,還要隨著實踐再提高。
While語言是我在Neil D. Jones的書《可計算性與復雜性—從編程的視角看》上看到的一種簡單而優美的語言。這個語言由Hanne Riis Nielson和Flemming Nielson在1990年代發明,大概是為了作為形式語義分析的目標語言而引入。While語言只有表達式求值、賦值和DoWhile語句,非常簡單,但卻也是圖靈完全的(Turing Complete)。
盡管非常簡單,但是由于DoWhile語句需要延遲求值,我們不得不需要一個簡易的運行時(Runtime)管理。這一點是我剛開始沒有意識到的。
學無止境,常感嘆自己所知太淺,繼續努力吧。
羨慕中。