上周寫了《ThinkPhp模板轉(zhuǎn)Flask、Django模板》

一時技癢,自然而然地想搞個大家伙,把整個PHP程序轉(zhuǎn)成Python。不比模板,可以用正則匹配偷懶,這次非寫一個Php編譯器不可。

上網(wǎng)搜了一下,發(fā)現(xiàn)大部分Python to xxx的transpile都是直接基于AST,省略了最重要的Tokenizer,Parser。直接寫個Visitor了事。要不然就是基于Antlr之類的生成器,搞一大堆代碼,看得令人心煩。

既然大家都不想做這個苦力,我就來試試,手工寫一個Php編譯器。分Tokenizer,Parser,Visitor三個部分來實現(xiàn)。

翻出《龍書》《虎書》做參考,仔細學(xué)了一回PHP,不學(xué)不知道,原來PHP有那么多特性,做個編譯器真心累人。

詞法部分很簡單,就是一個自動機。設(shè)計了一個結(jié)構(gòu)存放自動機,然后簡單粗暴地在自動機上編程,也顧不上什么性能了,就是個一錘子買賣。

寫得還算快,調(diào)試不是很順,不過我是不會說的,哈

自動機不復(fù)雜,發(fā)上來大家看看,敬請指正。

萬碼學(xué)堂,電腦培訓(xùn),計算機培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

self.statema