前兩個(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