編譯系統實現完了 總結下

2021-04-06 15:52:34 字數 1017 閱讀 6545

前段時間搞了個編譯方面的東東。主要分成四部分: 1.c- (注意後面有乙個橫線),乙個c語言的子集。c語言重要的東西都有了。而且也不算特別大。用來做編譯器最好了。花的時間也不會太長。具體語言規範可以去看《編譯原理設計與實踐》後面的附錄。這本書帶了個tiny 的編譯器的實現。全部用ansi c寫的。我覺得寫的不錯的。包括它所有檔案的組織。我就模仿它也搞了乙個project,檔名基本一樣。也用純c寫。這就意味著我不能用我最熟悉的stl了。不過也沒關係。正好自己寫寫玩玩。大概乙個多周的時間。利用自己每天下班回家晚上的時間。就把編譯器寫完了。前面的還好。後面的**生成剛開始一點頭緒都沒有。太多的不知道了。後來想了一會。決定先生成個pcode玩玩好了。後來又與乙個朋友討論。說.net也是先生成基於棧式的**,然後再由jit來生成基於暫存器的。我想我也可以這麼幹。於是我又把pcode轉成了基於暫存器的**。**優化實在不是我現在的水平能達到的。寫了好多**,最後還是放棄了。還是老老實實生成最基本的正確的基於暫存器的**吧。pcode轉暫存器我用的直接翻譯的方法。效率比較差。等那天自己學會**優化了再來優化好了。 2。彙編器。模仿intel 彙編的格式,簡化了下ma**的一些東西。之前雖然看彙編**比較多。但是沒怎麼寫過。搞了幾個偽彙編指令。想好了彙編指令怎麼轉位元組碼之後就開始寫**實現彙編器了。彙編器用c++寫的。因為我的指令並不多,偽彙編指令也不多。所以實現起來挺快的。這一步弄完就可以生成自己的所謂的可執行檔案了。 3。虛擬機器。我的目的是為了揭開自己對這個東西的神秘感。虛擬機器總的來說就是用軟體模擬乙個cpu。執行載入上來的可執行檔案。因為指令只有20幾條。所以寫完**也不需要很長時間。寫完虛擬機器和彙編器之後我就開始自己寫彙編**(自己定義的格式,呵呵),然後讓虛擬機器來執行它。慢慢的把一些寫錯的地方改完之後。整個虛擬機器就可以跑了。然後就把3個一起測試。弄了幾天之後確認所有的要求都達到了。就開始想搞個ide了。 4.ide乙個用mfc做的介面。技術都是msdn 和網上搜到的。不說了。學會了用那個比較酷的語法高亮控制項。

弄了幾張圖,先放在這裡.

乙個計算n!的c程式

生成彙編**.效率比較差

由彙編器生成自定義可執行檔案,然後由虛擬機器來執行之.

《自己動手寫作業系統》總結(下)

上次說到了 將控制權交給核心,接下來的工作都由核心來完成。從這裡開始,就可以用c語言來寫了。為什麼?我還是不明白 但並不是核心全用c寫,它依舊需要乙個用彙編寫得開頭,讓loader跳入進來。跳進來後需要立即做一件事 切換堆疊。因為原來的堆疊在記憶體中的位置是在loader中,而將來loader是會被...

秒殺系統實現總結

訪問量大,對網路頻寬要求高 系統如何支援瞬間的高併發 如何防止商品超賣 如何防刷 防黃牛等 cdn快取,nginx lua實現活動資料快取2秒 高併發 限流 防刷 超賣 使用redis實現原子性的操作 防刷 openresty lua 實現限流 驗證黑名單等 黑名單機制 手動 自動收集ip user...

Web系統報表實現總結

最近由於專案需要,要在web系統中做報表輸出及列印,我是基於.net平台實現的,目前了解的方法有 1.水晶報表 2.微軟的報表 3.用office 的excel 水晶報表原來在專案中用過,功能很強大,設計能力很強大,網上資料很多,就是可程式設計性不方便,部屬也不方便。微軟在vs2005後提供了個報表...