如何自己寫編譯器
❶ 怎樣去寫一個編譯器(用C語言寫C語言編譯器),需要哪些知識做鋪墊,可以給一下相關網站和書籍的推薦嗎
書籍請參考編譯原理的龍書,以及flex,bison,llvm的manual。
如何寫我可以給你一個大致的流程,
編譯器由詞法分析器->語法分析器->中間代碼生成器->後端組成。
用C語言寫編譯器一般可以按照以下步驟:
1.使用flex生成詞法分析器。(flex可以通過自己編寫的描述文件來自動生成詞法分析器)
2.使用bison生成語法分析器。(bison可以通過自己編寫的描述文件來自動生成語法分析器)
3.通過語法分析器得到輸入代碼的語法樹表示。
4.編寫遍歷函數遍歷語法樹生成中間代碼。(這里推薦使用LLVM的中間代碼表示)
5.利用LLVM工具集來編譯執行所得到的中間代碼。
相關網站:
龍書(當當上去買一本)
http://dinosaur.compilertools.net/flex/index.html(flex手冊)
http://dinosaur.compilertools.net/bison/index.html(bison手冊)
http://www.llvm.org(LLVM官網)
❷ 如何用c寫一個編譯器
先學編譯原理。
然後根據步驟,
1 處理預編譯
2 詞法分析
3 語法分析
4 語義分析
5 中間代碼轉換
6 二進制代碼生成。
簡單起見,不需要考慮優化。 初期可以不需要支持太多語法。
❸ 自己寫編譯器怎麼寫,我想為中國程序員做個編譯C語言的編譯器。
首先做這個東西的意義並不大,如果是想學習的話,看看這本書Modern Compiler by Andrew W. Appel
❹ 如何寫一個簡單的編譯器
如果你想寫一個簡單的編譯器,那麼首先你要有寫軟體的才能,或者是你要會有變形軟體這方面的技術。那麼你就可以很簡單的編寫一個編譯器。或者你可以叫我別人幫你寫一個編譯器
❺ 如何寫一個簡單的編譯器
因為我這里都只寫了 Parser ,所以就只談談第一次寫 Parser 的建議。
1. 扔掉龍書虎書鯨魚書。這些書都有一個問題,就是在自己手寫完一個自己的 Parser 之前,書上寫的那些鬼東西完全都不知道該怎麼用,用在哪裡。
2. 大膽地擼。不要在意性能啊,擴展性,復用啊這些鬼東西,先把東西做出來再說。
3. 記住代碼只不過是格式化文本。不要覺得代碼是什麼復雜的東西,它跟 Json / XML 這些東西沒啥太大區別。Parser 的意義就是把人能看懂的格式化數據編程計算機能看懂的格式數據。
❻ 如何自己寫一個編譯器
編譯器的編寫涉及一些專業編寫工具和一些專業技能代碼,自己想編寫的話只能用工具套比較簡單的代碼直接帶入,未必能達到自己要的效果
❼ 如何編寫自己的編譯器
我暈,你們老師真NB,你學的什麼語言啊?是c嗎?上來就讓你做個編譯器,你們老師吃錯葯了吧?
我大學同學畢業設計才是做個編譯器,那會那倆人合作做的,還都是我們系公認的c最強的兩個,合作還做了半年,你認為大一剛上來就做這個?!
❽ 怎麼開始動手自己寫一個編譯器,編譯器的理論學習該從
編譯器的目標是寫編程語言,學習編譯器理論,現已有專門編譯器原理的書籍,中文和原文都有。不過要在編譯器方面有建樹很難,至少 編譯器-編程語言-操作系統-界面編寫-晶元匯編 他們要捆綁在一塊的。
❾ 匯編語言編譯器是怎麼編寫的
編譯器自舉!搜索這個關鍵字
程序都是編譯器編譯的。這個是肯定的
至於第一款X語言編譯器是不是直接1010101010自己寫的那就不知道啦
一般開發編譯器的話。有兩條路選擇
1.利用yacc(或者其變種)&lex(詞法分析)-等工具自己生成語法模板
詞法語法都可以使用這些工具自己生成
然後自己編寫生成的中間碼和生成的機器碼就可以了
一般做編譯原理類似試驗都是如此的。許多編譯器也的確是這樣
2.自己寫詞法分析和語法分析。可以參考一些開源的編譯器
lcc-這個是ANSI C99標準的編譯器是開源的
或者nasm,watcom等編譯器到www.sf.net上不少開源的編譯器
總的來說。高級語言編譯器比較難寫
如果想快速寫出一個的話
可以採用第一種做法。利用工具生成語法詞法模板
先寫一個簡單的匯編編譯器比較簡單
開源的有nasm,jwasm(支持masm語法開源的編譯器)
http://www.japheth.de/JWasm.html
fasm(這款編譯器是自舉的.就是自己可以編譯自己),
http://flatassembler.net/
剩下的就是自己做好語言規則關鍵字map
引用高手的話。語言map做好了你的編譯器也做好一半了
剩下的都是機械性的工作了。
生成x86或者arm指令。
優化工作這個很難解釋.根據你所需要的做吧
畢竟可以做出一個無錯,又XX的編譯器已經很難得
你可以選擇使用現有的編譯器開發自己的編譯器
然後等到你的編譯器支持相當數量指令和成熟度的時候
使用自己的語法重新寫一遍編譯器.
這樣你就可以用自己的編譯器開發自己的編譯器了(是不是很邪惡?)
另外舉幾個例子
Delphi的編譯器是C++ Builder開發的。
而C++ Builder的IDE是Delphi開發的
C++ Builder的編譯器是C++ Builder開發的-這個就是編譯器自舉了。。Delphi和C++ Builder共享一個後端化優化器。
Delphi 早期的版本的編譯器是tasm直接編譯的。可見Anders的匯編功力多強悍(Anders也就是後來VJ++,C#,.NET工程的核心架構師.最關鍵的靈魂級人物)
VC++的編譯器是VC++開發的。很明顯這都說明了編譯器自舉
自己開發自己。如果一個編譯器可以做到自己編譯自己。那基本上就可以實現任何功能了。
關於編譯器開發的書籍可以看一下
龍書《編譯原理(第二版)》
虎書《現代編譯原理-C語言描述》
鯨書《高級編譯器設計與實現》
建議從鯨書看起。然後是龍書
再來是虎書--虎書裡面描述了許多現代編譯器(正如其名)技術
例如面向對象啦,優化,垃圾回收等等.
鯨書看完基本上就可以實現一個簡單的Tiny C編譯器了
然後在龍書鞏固,讀一下語言規范,自己看一些開源的匯編編譯器代碼
自己就可以嘗試做一個匯編語言編譯器了.等到技術提高了
在嘗試做一些高級語法識別,參考LCC代碼做一下ANSI C99的
C語言編譯器。再來就看你自己的興趣和領悟度拉
如果想支持C++的話就得要對編譯器做許多方便的研究
類似Java那種跨平台或者Ruby,Python等動態語言
虎書中也有描述。當然看自己功力了