前兩個(gè)周末寫了《手寫PHP轉(zhuǎn)Python編譯器》的詞法,語法分析部分,上個(gè)周末卡文了。

訪問器部分寫了兩次都不滿意,沒辦法,只好停下來,參考一下Python的實(shí)現(xiàn)。我實(shí)現(xiàn)的部分正好和Python是一個(gè)思路,就是生成CST(Concrete syntax tree)之后,再生成AST。由于我想創(chuàng)(tou)新(lan),所以未沒有詳細(xì)實(shí)現(xiàn)AST,而想繞過AST去生成代碼。這下有點(diǎn)欲速不達(dá)了。

先看看Python執(zhí)行代碼的過程:

1.     Tokenizer進(jìn)行詞法分析,把源程序分解為Token

2.     Parser根據(jù)Token創(chuàng)建CST

3.     將CST轉(zhuǎn)換為AST

4.     將AST編譯為字節(jié)碼

5.     執(zhí)行字節(jié)碼

現(xiàn)在我們要實(shí)現(xiàn)第3步。參考一下Python源碼:

/* Transform the CST rooted at node * to the appropriate AST*/mod_ty
PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filenam