回覆列表
-
1 # 經驗分享者
-
2 # 閒人老盧
一個完整的編譯器包括四個部分,詞法分析器,語法分析器,最佳化器,程式碼生成器。最困難的是語法分析和最佳化器。程式碼生成,就是需要彙編知識的是最簡單的。高階語音發展到今天,已經有大量的工具幫助你設計和實現自己的編譯器,包括著名的lex和yacc。編譯器的總體設計需要關於文法方面的知識,也就是是說給定高階語言的文法級別,LR
, LALR等等。當然作為編譯器的附件,一套基本庫也是必須的,否則一個單純編譯器是沒有價值的。以前我開發編譯器時,相容了c語言庫函式,以便驗證。
01、要掌握編譯器生成的目標平臺。下文簡稱為“目標平臺”。
02、目標平臺是裸機?還是有作業系統?也就是說:編譯生成的程式,是在裸機上執行呢?還是在目標CPU之上的作業系統裡面執行?如果是後者,不光是組合語言的問題,還要知道作業系統裡是怎麼回事,關鍵是作業系統有一個載入器,要符合它的規定。否則,目標程式就載入失敗,更執行不了。
03、對目標平臺的彙編程式的編寫、除錯、執行要熟練。
04、原因很簡單:你自己都沒有在目標平臺上寫過彙編程式,怎麼能夠深刻理解目標平臺的執行機制呢?怎麼知道生成的彙編程式是否正確呢?
05、目標平臺的彙編助記符的指令名稱和用法要能熟練查閱,會有相關的指令集。
06、目標平臺的機器碼格式,也要能熟練查閱,會有相關的機器碼格式說明。
07、要掌握很多最佳化的方案,從中選擇一個最佳的。比如:同樣一段C語言程式碼,編譯出來的彙編程式碼會有好幾種,按哪一種編譯是最優的,這個是提升編譯器效能的關鍵。