C語言直譯器的實現 序 零

2022-04-04 06:27:42 字數 795 閱讀 2895

在寫cutec文字編輯器的同時,為了使之有指令碼執行能力。特意實現了乙個簡易的c語言直譯器,所謂的直譯器,就是它是解析執行指令碼檔案的,並不產生可執行的目標**。它具備了c語言的幾乎全部的語法。隨著時間的推移,我打算把它作為乙個獨立的專案來開發了。在這個過程中,自己也學到了不少的知識,所以也打算跟大家分享。寫這些東西,雖然是重**明輪子的事,但也不至於是在浪費生命。程式設計師嘛,我總覺得應該是要理解我們每天所編譯出來的程式是怎麼被執行,應該明白我們敲打的每行**的實際意義。

我打算寫乙個系列的文章來說明這個直譯器的實現過程,其中對於編譯原理的理論知識不做太多的講解,一是不容易提高大家的積極性,二是自己水平有限。所以我覺得大部分從例子出發,講解乙個個目標的實現過程,大家慢慢體會,估計收穫會比較大。

通過這一系列的文章,大家應該可以學到以下的知識。

1.更深入的理解c的內部細節,對以後的開發總是有好處的。例如,你能很清楚c語言的型別定義,通過基本的型別為何能夠定義出無窮的各種型別。

2.了解表示式的解析,中間**的產生。這點非常有意思,了解了這點,可以用同樣的方法做很多事情,包括設計個計算器,解析複雜的配置檔案,在軟體中解析命令等等。

3.對編譯器有乙個感性的認識,雖然離寫出編譯器還比較遙遠,但對於語法解析,預編譯,理解的就比較深入了。現在很多軟體都有預編譯的模組在裡面,比如pro*c, gsoap等等。

4.我們產生的中間**其實已經非常接近彙編**,這對理解c的執行過程總是有好處的。

總之,曬曬自己的成果,怎麼說也是我親親苦苦寫出來的,希望大家能找到點可以借鑑的東西吧~**我還在努力的編寫,過一段時間再放出來乙個初級的版本。如果工作忙,那估計就要再等一段時間了。

C語言直譯器的實現 儲存結構 一

目錄 1.記憶體池 2.棧 3.hash表 1.記憶體池 在一些小的程式裡,沒什麼必要新增記憶體管理模組在裡面。但是對於比較複雜的 如果需要很多的記憶體操作,那麼加入自己的記憶體管理是有必要的。至少有一些好處 能夠加快記憶體的申請和釋放 能夠輕鬆的查詢記憶體洩露問題 能夠對整個軟體的記憶體消耗做乙個...

C語言直譯器的實現 儲存結構 一

目錄 1.記憶體池 2.棧 3.hash表 1.記憶體池 在一些小的程式裡,沒什麼必要新增記憶體管理模組在裡面。但是對於比較複雜的 如果需要很多的記憶體操作,那麼加入自己的記憶體管理是有必要的。至少有一些好處 能夠加快記憶體的申請和釋放 能夠輕鬆的查詢記憶體洩露問題 能夠對整個軟體的記憶體消耗做乙個...

直譯器模式(C 實現)

本部落格旨在個人總結回顧 直譯器模式 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。說明 優點 可擴充套件性比較好,靈活。增加了新的解釋表示式的方式。易於實現簡單文法。缺點 可利用場景比較少。對於複雜的文法比較難維護。直譯器模式會引起類膨脹。直譯器模...