從無到有 製作簡易編譯器(一)

2021-07-22 04:19:31 字數 1062 閱讀 8617

從無到有——製作簡易編譯器(一)

編譯原理是計算機專業大三或者大四的必修課程之一,許多學員都會對學生提出硬性或者軟性的製作簡易編譯器的要求。許多學生手足無措,別急,學長也是過來人,看完這個教程,保證你輕輕鬆鬆完成屬於你自己的編譯器。

首先第一篇教程不會涉及具體的實現。在這種大工程之前,正確的模組劃分是極為重要的。這樣可以讓你階段性地看到自己的成果,對於自信心是乙個極大的幫助;此外,正確的模組劃分有助於後期排除錯誤。

在此之前也介紹一下工作量。如果完全自己手撕乙個編譯器,其工作量可能和手撕乙個cpu(用verilog)工作量差不多,大概會耗時乙個月左右,不過如果只是交乙個作業,完全不用全部自己完成。特別是語義分析這種工作,有大量現成的**稍加修改就可以直接使用(當然,嚴格意義上來講,所有部分都可以稍加修改直接使用)。

我們將編譯器製作分為以下四個模組分塊實現完成:

一、語法分析、詞法分析模組(yacc、lex)

yacc、lex是linux環境下的語法生成器和詞法生成器,使用非常廣泛。一般情況下老師也比較鼓勵學生去用yacc和lex去完成這樣的實驗。需要說明的是,在現存的linux作業系統中,yacc和lex已經發生了變異。我們所採用的是ubuntu環境下的bison和flex。

二、語義分析(c語言

語義分析是在詞法分析語法分析結束,生成了語法樹的基礎上,對語法樹進行遍歷,建表,查錯。

三、中間**生成(c語言

這一部分就是在語義分析的基礎上,生成三元式、四元式之類的。

四、目標**生成(c語言)

這一步就實現了從某種語言(你制定的語言)到mips**的轉換。有人說我不要mips,我要x86的,沒問題,從中間引入llvm即可

跟著我的教程走,學到**,編譯器做到**;做到**,作業交到**。即使你只做了語法分析、詞法分析,你也可以交乙個語法生成樹,就是這麼簡單、這麼人性化。看到這裡,如果符合你的要求,follow me;不符合的話,可以去看看其他的教程。

Makefile 從無到有

makefile這玩意在上學時就應該學,可是一直沉浸於ide的 所謂 死於安樂 直到現在一把年紀才開始接觸這種基礎東西。建立c程式 先寫個c程式,儲存在main.c裡 view plain file main.c include int main 看看我這時的目錄結構 view plain code...

Redis從無到有

redis最佳執行環境是linux作業系統,所以要在虛擬機器裡的linux系統裡安裝redis 安裝教程 安裝過程中遇到的問題 1 windosws系統預設是沒開啟虛擬機器功能的,進入bios設定,將相應的disable改為enable 2 license not accept 依次輸入 1,2,c...

GitHub從無到有

2018年07月04日 09 23 40 夏雨薇安 首先你得註冊乙個自己的github賬號,註冊 有了自己的賬號以後,就可以進行登入,開始建立乙個新的專案 建立乙個新的專案,填寫專案名稱,描述 建立完成之後,跳轉到下面的頁面,下面紅框中的 要記住,在後面上傳 的時候需要使用 出現以下介面 第一步 c...