2010-08-06 62 views
6

我今年秋天爲我的主人學習了幾門課,其中之一是編譯器設計和構建。我對大多數與計算機技術相關的東西都非常精通,但是我並沒有太多關於編譯器如何處理髒問題的經驗,我只是在需要時才使用它們。我通常對班級並不感到緊張,但我有種感覺就像在走進這個裸體的人。如果有人能推薦一些很好的閱讀材料,或者提供一份我可以研究的基本原則的簡短列表,以便快速提醒我我將不勝感激。編譯器設計和施工課

UPDATE:

嗯,我在班上大,the text book we used其實很不錯。 This site也幫助我可視化和測試我的正則表達式(我現在認爲它是學習編譯器時最好的東西)。我很快就拿起了LEX的基礎知識,但YACC(出於某種原因)對我來說有點困難。只需在網上查找示例,就能幫助他們兩人。

+1

[學習編寫編譯器](http:// stackoverflow。)中列出的任何資源。com/questions/1669/learn-to-write-a-compiler)可能是有用的。由於您沒有說編寫編譯器的哪一部分涉及到您,因此很難推薦特定的資源。 – 2010-08-06 05:01:29

+0

感謝您的鏈接。我希望我可以更具體一些,但這會告訴你我對編譯器知之甚少,而課程教學大綱相當模糊:) – ubiquibacon 2010-08-06 05:04:45

+0

「typoknig」爲+1。 – 2010-08-06 05:44:57

回答

3

檢查Dragon Book

+0

我在第一章中深肘,我認爲這正是我所期待的。從我的閱讀中我已經可以看出,我也需要提高自己的裝配技能,但是我已經對班級感覺更好了。謝謝! – ubiquibacon 2010-08-06 06:21:57

2

通常強烈推薦使用dragon book

+1

我不認爲這是他需要的基本背景。如果他能理解龍書,他不需要上課: - } – 2010-08-06 05:04:41

+0

現在下載。我是一個快速學習者,所以我會看看它。 – ubiquibacon 2010-08-06 05:05:28

+0

@Ira,有很多種學習方式。對科目真正感興趣的人可以從中間材料中學習。對某事感興趣或興趣通常意味着你想了解這件事。如果你提出了一些你不知道的事情,並且在你的文檔中沒有很好地解釋,你通常會找出答案。也就是說,對於任何「精通大多數與計算機技術相關的東西」的人來說,如果這意味着計算機科學方面的知識和理解,那麼這本書中就不會有太多的東西。 – jer 2010-08-06 05:10:40

5

編譯器是一個頭部旋轉練習。但是,如果您對數據結構,算法和彙編代碼有着堅實的把握,並且喜歡仔細考慮細節,那麼您很可能會發現這個類很吸引人,因爲它是,所以與大多數傳統業務數據處理不同/或嵌入式計算。

我會確保你的彙編代碼背景非常好。大多數程序編碼器不用於加工指令,寄存器,地址模式和指針。如果你得到這些,教練可能會很好地解釋其餘的。

如果你不習慣指針,那麼運行不要走路,到你最近的C編譯器並編寫一堆使用它們的程序。

對於一些背景什麼的編譯器都沒有,看到 Writing compilers ... what's right and what's wrong?

如果你想有一個非常有趣的運動,你可以瞭解MetaII,這是怎麼 建立一個編譯器生成一個編譯器與一個瘋狂的小努力量。有一篇關於如何做 的10頁的文章,在你突然看到編譯器如何編譯自己的過程中,有一個令人興奮的時刻。有在MetaII教程(含紙):

http://www.bayfronttechnologies.com/mc_tutorial.html

+0

雖然你所說的一切都有價值,但其中一些嚴重限制在考慮某一類特定語言。編譯器存在許多不同類型的語言,那些涉及裝配知識的編譯器,還有更多不包含的編譯器。我相信你想說的是,你應該知道你想要做什麼,以及你想要做什麼。 – jer 2010-08-06 05:05:45

+0

@Jer:是的,但是我懷疑他會將它編譯爲Prolog目標作爲開始位置。大多數傳統的編譯器類都以某種簡化的彙編器爲目標,所以認識到這一點很有幫助。 – 2010-08-06 05:15:14

+0

不是我的意思。看看現在存在的所有系統,即使是在編程語言中,也有更多的解釋器,它們本身包含一個與read-eval循環結合的編譯器。另外還有其他系統,比如語法高亮引擎,一直到配置文件。 – jer 2010-08-06 05:22:32

0

第一次有人解釋彙編給我,我很驚訝如何根植於約定這一切了。編譯總是有相同的高級階段,在子任務中有相同的分區。

回想起來,其中的一些有點任意。編寫編譯器很困難,重新應用在過去爲無數其他人工作的技術確實是一個好主意。但是根據你的背景,你可能會首先感到驚訝的是,一切都不像計算機科學的其他領域那樣自然地從基本原理中流動。