回覆列表
  • 1 # 咒你今晚

    編譯器自舉!搜尋這個關鍵字

    程式都是編譯器編譯的。這個是肯定的

    至於第一款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等動態語言

    虎書中也有描述。當然看自己功力了

  • 中秋節和大豐收的關聯?
  • 交通事故不夠定殘誤工天數怎算?