2011-07-05 42 views
1

我一直在重讀http://cm.bell-labs.com/who/ken/trust.html,我似乎無法在階段II中使用垂直製表符來理解這個概念。我對你們的問題是:字符被包含\ v轉義字符現在被檢查兩次了嗎?因爲我看到的方式是安裝了這個新的編譯器,所以當使用\ v時,它會經過圖3中的代碼,然後在返回('\ v')語句中,圖4中的代碼將會然後調用它返回垂直製表符的真正的ASCII表示。這不會減慢編譯時間,儘管它可以更好地表示當前的編譯器。請讓我知道你是否需要我重新說明我的問題。乾杯!編譯器/引導 - 通過重新編譯舊的引導編譯器而變慢?

回答

0

代碼不會遍歷兩次。在初始狀態下,圖3不能編譯,因爲\v沒有定義的含義。 (只是把它看作是定義編譯看中變量)。

一旦你編譯圖4的代碼,你已經表示,\v代表11。由此產生的編譯器可以將\v映射到一個值,因此您可以將\v定義爲\v

一個與真實變量非編譯例子是這樣的:

x = 11; 
/* ... */ 
x = x; 

一旦你定義什麼x代表,你可以使用它,甚至它的值賦給本身。與解析器的主要區別在於,不是在同一文件的不同位置上有兩個聲明,\v的定義分佈在兩個不同版本的編譯器中,第二個由新編譯器編譯(因爲舊編譯器不包括這個定義)。

+0

啊我現在明白了。我認爲它只需要在新的編譯器中引用圖3的代碼,但它基本上只是用11代替字節代碼中的\ v。因此,當你用新的編譯器重新編譯該源代碼時,你只會得到相同的字節碼。抽象讓我困惑。謝謝! – edaniels