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

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

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

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

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

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

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

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

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

self.statema
        
		

網(wǎng)友評論