制作簡單的編譯器需要怎么做?怎樣從無做到有?跟著我的教學走,你會覺得很簡單
編譯原理是計算機專業(yè)大三或者大四的必修課程之一,許多學員都會對學生提出硬性或者軟性的制作簡易編譯器的要求。許多學生手足無措,別急,學長也是過來人,看完這個教程,保證你輕輕松松完成屬于你自己的編譯器。
首先第一篇教程不會涉及具體的實現(xiàn)。在這種大工程之前,正確的模塊劃分是極為重要的。這樣可以讓你階段性地看到自己的成果,對于自信心是一個極大的幫助;此外,正確的模塊劃分有助于后期排除錯誤。
在此之前也介紹一下工作量。如果完全自己手撕一個編譯器,其工作量可能和手撕一個CPU(用verilog)工作量差不多,大概會耗時一個月左右,不過如果只是交一個作業(yè),完全不用全部自己完成。特別是語義分析這種工作,有大量現(xiàn)成的代碼稍加修改就可以直接使用(當然,嚴格意義上來講,所有部分都可以稍加修改直接使用)。
我們將編譯器制作分為以下四個模塊分塊實現(xiàn)完成:
一、語法分析、詞法分析模塊(yacc、lex)
yacc、lex是linux環(huán)境下的語法生成器和詞法生成器,使用非常廣泛。一般情況下老師也比較鼓勵學生去用yacc和lex去完成這樣的實驗。需要說明的是,在現(xiàn)存的linux操作系統(tǒng)中,yacc和lex已經(jīng)發(fā)生了變異。我們所采用的是ubuntu環(huán)境下的bison和flex。
二、語義分析(C語言)
語義分析是在詞法分析語法分析結(jié)束,生成了語法樹的基礎上,對語法樹進行遍歷,建表,查錯。
三、中間代碼生成(C語言)
這一部分就是在語義分析的基礎上,生成三元式、四元式之類的。
四、目標代碼生成(C語言)
這一步就實現(xiàn)了從某種語言(你制定的語言)到MIPS代碼的轉(zhuǎn)換。有人說我不要MIPS,我要x86的,沒問題,從中間引入llvm即可
跟著我的教程走,學到哪里,編譯器做到哪里;做到哪里,作業(yè)交到哪里。即使你只做了語法分析、詞法分析,你也可以交一個語法生成樹,就是這么簡單、這么人性化??吹竭@里,如果符合你的要求,follow me;不符合的話,可以去看看其他的教程。