
青木峯郎
本書將帶領讀者從頭開始製作一門語言的編譯器。筆者特意爲本書設計了C♭語言,C♭可以說是C語言的子集,實現了包括指針運算等在內的C語言的主要部分。本書所實現的編譯器就是C♭語言的編譯器, 是實實在在的編譯器,而非有諸多限制的玩具。另外,除編譯器之外,本書對以編譯器爲中心的編程語言的運行環境,即編譯器、彙編器、鏈接器、硬件、運行時環境等都有所提及,介紹了程序運行的所有環節。
讀過不下百本英文版的書,其中文版大都翻譯得很生硬,這固然有譯者的原因,作者也難辭其咎。本書最大的優點就是文字流暢,絲毫沒有翻譯的味道,如果真要學編譯原理,還是恐龍書專業,但是恐龍書讀着沒本書舒服。本書僅適合想了解編譯原理的讀者,代碼部分可以跳過不看。如果真要自己寫個簡單的編譯器,比如說解析 json 格式,光讀本書大概是不行的。
通讀後對編譯器的細節有所瞭解,也知道了編譯器的通用框架;多虧了前人的大量工作,現在開發一個小型語言的語法變得相對容易了。可能是翻譯的原因,書中有幾處寫的很晦澀;另外關於JavaCC的語法介紹順序有必要調整,否則第一次讀的人容易置身雲裏霧裏。
這一本書編譯部分沒有細看,看也看不懂,但後半部分講鏈接(靜態鏈接,動態鏈接)章節尤其不錯,我反覆閱讀了幾遍,獲益良多
感覺講的確實內容挺豐富的,確實是不錯,但是我想看的地方介紹的都很模糊一開始我以爲這個編譯器的製作是從0開始的,奔着學習從0開始造輪子的心態來的,結果確是用了很多工具,比如彙編器是怎麼實現的,還有編譯原理那些理論概念也沒很詳細的講,不過鏈接那裏講的是非常到位的,也可能是我一直在找一個完全獨立的語言編譯器怎麼寫的纔會有這樣的感覺,不過確實已經很好了這本書
書中對於編譯器內容講述的挺好的
非科班水平有限看不太懂[捂臉],實踐過程中使用了很多現成的工具,簡化了操作但是也增加了理解的難度,第一部分還好,硬着頭皮能理解是編譯器前端,包括詞法分析(正則語法提取token),語法分析(遞歸構建ast)的內容,啓發比較大。等到第二部分中間代碼就看不懂了,留個坑等以後學習下編譯原理基礎知識再來補吧。
作爲科普書籍這本書寫的有點太詳細,作爲專業書籍只是講怎麼用javacc定製一個編譯器顯然也是不夠的。建議只讀一下前幾章科普一下編譯器就好了。
我從事編譯器工作,但是對於編譯器開發,有成熟的平臺和框架了,llvm,對於編譯器重點,個人認爲還是優化這一塊,結合硬件來優化。
一般,講這個主題,要麼高屋建瓴,原理通俗易懂,要麼深入細節,抽絲剝繭。可惜這兩點本書都沒做到
作者對於概念的介紹很清晰,會舉例子說明,兼具理論和實踐,不可多得的好書。如果讀教科書覺得很理論,不如讀一讀這一本。