作為一個(gè)程序員,自制自己的編譯器一直是一個(gè)夢想馏锡。之前也曾為了這個(gè)夢想學(xué)習(xí)過類似龍書、虎書這種大部頭的書伟端,但是光看理論總有一些云里霧里的感覺杯道。看完只覺得腦袋昏昏沉沉并沒有覺得有多少長進(jìn)荔泳。當(dāng)初看過《瘋狂的程序員》這本書蕉饼,書里說,真正能學(xué)會編譯原理并不是靠看各種書然后通過相關(guān)考試玛歌,而是有一天你的領(lǐng)導(dǎo)找到你對你說:“小X啊昧港,你是我們公司技術(shù)能力最強(qiáng)的人,咱們現(xiàn)在用的編譯器性能有點(diǎn)跟不上支子,要不你看看能不能改進(jìn)一下”创肥。所以想要學(xué)習(xí)編譯原理相關(guān)的知識首先要做的還是實(shí)踐——實(shí)現(xiàn)一個(gè)自己的編譯器。
之前也看過類似的教你如何自制編譯器值朋,但是他們有一個(gè)共同的問題就是在很大程度上都借助第三方工具叹侄,隱藏了一些底層的細(xì)節(jié)。我希望的是每一行代碼都是自己的完成的昨登。所以一直懷揣著這個(gè)夢想直到最近我找到了一篇教程趾代。一起寫一個(gè)簡單的編譯器——魔力Python。這篇教程是實(shí)用Python完成的丰辣,但是這里我不打算使用Python
撒强,我打算實(shí)用最純粹的C
語言來完成這個(gè)任務(wù),我考慮使用C
主要基于以下幾個(gè)原因:
- Python 有一些封裝的細(xì)節(jié)笙什,不方便全方位的展示相關(guān)算法飘哨。
- 原教程使用的就是Python,還用一樣的話思路會受到教程的影響琐凭,要真正的理解需要自己一行行的敲代碼芽隆,最好的方式就是用另一種語言來實(shí)現(xiàn)同樣的算法
- 現(xiàn)在市面上大多數(shù)都是用c來實(shí)現(xiàn)編譯器,如果后續(xù)想要更近一步學(xué)習(xí)編譯原理可以考慮在我完成的這版中很方便的加入一些新學(xué)的知識點(diǎn)
- 自己有使用C的能力统屈,而且用C寫編譯器自帶裝B屬性
基于以上理由胚吁,我準(zhǔn)備開始跟著教程使用C
來實(shí)現(xiàn)自己的解釋器。
這并不是一篇教程什么的愁憔,更多的是作為一篇實(shí)踐筆記腕扶。而且根據(jù)我之前寫的Vim專欄的經(jīng)驗(yàn)來說,將它已專欄的形式發(fā)布出來之后鴿的可能性更小惩淳,更有動力來完成它蕉毯。當(dāng)然如果各位能從專欄中學(xué)到什么那就更好了。
總之后面讓我們一起進(jìn)入學(xué)習(xí)編譯原理的路程吧