下雨天在家沒事作,整理書架時,翻了一下之前介紹過的系統程式一書,突然想到自己好一陣子沒機會寫 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
:; ;
留言
張貼留言