開心生活站

位置:首頁 > 綜合知識 > 

編譯器怎麼寫

1. 彙編語言編譯器是怎麼編寫的

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

編譯器怎麼寫

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

至於第一款X語言編譯器是不是直接1010101010自己寫的那就不知道啦

一般開發編譯器的話。有兩條路選擇

1.利用yacc(或者其變種)&lex(詞法分析)-等工具自己生成語法模板

詞法語法都可以使用這些工具自己生成

然後自己編寫生成的中間碼和生成的機器碼就可以了

一般做編譯原理類似試驗都是如此的。許多編譯器也的確是這樣

2.自己寫詞法分析和語法分析。可以參考一些開源的編譯器

lcc-這個是ANSI C99標準的編譯器是開源的

或者nasm,watcom等編譯器到上不少開源的編譯器

總的來說。高級語言編譯器比較難寫

如果想快速寫出一個的話

可以採用第一種做法。利用工具生成語法詞法模板

先寫一個簡單的彙編編譯器比較簡單

開源的有nasm,jwasm(支持masm語法開源的編譯器)

fasm(這款編譯器是自舉的.就是自己可以編譯自己),

patible object format的錯誤警告,需要在通過重新設定Module的triple,我的PC的getTargetTriple的結果是“i686-pc-windows-msvc”,直接在後面再加上“-elf”即可

TheModule->setTargetTriple("i686-pc-windows-msvc-elf");

2. LLVM不支持windows下通過動態鏈接導出函數,如果需要使用C/C++的函數,需要通過addSymbol進行註冊

llvm::sys::DynamicLibrary::AddSymbol(/*std::string("_") +*/ "printd", &printd);

3. Kaleidoscope裏使用的JIT的查找函數的API,getpointerToFunction已經被棄用了,需要替換爲getFunctionAddress

4. 我自己編寫了一個程序,但要求帶有編譯器,如何實現

自己寫編譯器啊,你可以去圖書館借本《龍書》《鯨書》《虎書》,通讀。

然後用CC++編寫詞法分析器、語法分析器、語義分析器、以及中間代碼生成器

學習彙編語言,學會後,用CC++和彙編編寫目標代碼生成器和代碼優化器。

這樣你就能成功編寫一個編譯器了。以你現在的水平,至少半年或者一年吧……

其實這玩意做出來可以當畢業設計了,並且可能還能拿優。

你確定你們老師是讓你寫個編譯器?還是寫個makefile。

標籤:編譯器