跳到主要內容

發表文章

目前顯示的是 4月, 2013的文章

C0 Scanner and Parser in Python

下雨天在家沒事作,整理書架時,翻了一下之前介紹過的 系統程式 一書,突然想到自己好一陣子沒機會寫 Python ,就試著用 Python 改寫書中所實作的 C0 語言 scanner  以及 parser。C0 是一個類似 C 的語言,但經過大幅簡化,所以很適合當作一個下午的娛樂。:-) scanner 的部份基本只用了基本的字串處理,輸出 token list 後,餵給 parser 。parser 則用簡單的 recursive descent 完成。可以從 github 上抓下來玩玩,運行結果如下: [mars@dream compiler]$ cat sample0.c0 reto = 9; reto = reto + 1; return reto; [mars@dream compiler]$ python parser.py sample0.c0 :PROG  :BASELIST   :BASE    :STATMENT     :id reto     := =     :EXP      :number 9    :; ;   :BASE    :STATMENT     :id reto     := =     :EXP      :id reto      :+ +      :number 1    :; ;   :BASE    :STATMENT     :return return     :id reto    :; ;