Arcee:又一個Parser Generator的輪子

Arcee:又一個Parser Generator的輪子

10 人贊了文章

項目地址:tdkihrr/arcee

為什麼要做這樣一個東西呢?不是有Antlr嗎,Python下不是也有相應的bind嗎?人類為什麼又要再做一遍已經成熟了的東西呢?

答案是不爽

之前刷 EOPL ,想用 Python 改寫其中的玩具語言,重寫了三四個後,感覺很彆扭。教材里自帶了一個parser,所以不用考慮解釋器前端的東西,但我用Python改寫時,由於沒有可口的前端,寫起來很不爽,每次寫完後端,都只能自己用 Python 手敲一遍AST,真的很麻煩,所以我就萌生了自己寫一個 parser generator 的想法。

所以,就有 Arcee 。

學到了什麼:

  1. 編譯原理,這個不用說
  2. 如何寫函數式風格的Python。目前就是使用了_ror_魔方方法實現了一套還算可用的 Map, Filer, FlatMap, ToTuple, ToSet 等基礎設施。
  3. TDD。這個太重要了,如果沒有採用這種開發方式,估計我的項目全是Bug。這次的實踐教育了我,寫好測試用例是多麼的重要,不僅保證了代碼的質量,更重要的是,當你隔了很久再碰這個項目,好的測試用例會幫你快速地理解代碼的結構與功能。
  4. CI。使用 Travis CI 作為 CI 系統,對當前這樣的小項目還算湊合,上Jenkins什麼的有些殺雞焉用牛刀的感覺。
  5. kanban。使用 Trello 管理。每一個commit,除了重構,都對應一張卡。這樣即使很久沒有碰這個項目,也能很輕鬆地了解進度。

這個輪子目前還有一點小問題,不過自己用的話還是沒問題。由於工作緣故,估計是要去學 JavaScript 了,這個東西估計不會再更新了(也許哪天還會的。。。),到時估計就是重寫一個 npm 包吧,這個再說。

最後,感謝 @NightyNight 的幫助。


推薦閱讀:

從編譯原理看一個解釋器的實現
QG暑期訓練:第三周周二兩日結
編譯原理(3)
詞法分析器

TAG:編譯原理 | Python | 編程 |