我一直在重讀http://cm.bell-labs.com/who/ken/trust.html,我似乎無法在階段II中使用垂直製表符來理解這個概念。我對你們的問題是:字符被包含\ v轉義字符現在被檢查兩次了嗎?因爲我看到的方式是安裝了這個新的編譯器,所以當使用\ v時,它會經過圖3中的代碼,然後在返回('\ v')語句中,圖4中的代碼將會然後調用它返回垂直製表符的真正的ASCII表示。這不會減慢編譯時間,儘管它可以更好地表示當前的編譯器。請讓我知道你是否需要我重新說明我的問題。乾杯!編譯器/引導 - 通過重新編譯舊的引導編譯器而變慢?
1
A
回答
0
代碼不會遍歷兩次。在初始狀態下,圖3不能編譯,因爲\v
沒有定義的含義。 (只是把它看作是定義內編譯看中變量)。
一旦你編譯圖4的代碼,你已經表示,\v
代表11
。由此產生的編譯器可以將\v
映射到一個值,因此您可以將\v
定義爲\v
。
一個與真實變量非編譯例子是這樣的:
x = 11;
/* ... */
x = x;
一旦你定義什麼x
代表,你可以使用它,甚至它的值賦給本身。與解析器的主要區別在於,不是在同一文件的不同位置上有兩個聲明,\v
的定義分佈在兩個不同版本的編譯器中,第二個由新編譯器編譯(因爲舊編譯器不包括這個定義)。
相關問題
- 1. 如何編寫自引導編譯器的編譯規則
- 2. Intellij Idea編譯器重新編譯已編譯的項目
- 3. Go 1.5的引導式編譯器比用C編寫的Go 1.4編譯器慢嗎?
- 4. 編譯器如何編譯編譯器?
- 5. TypeScript編譯器變慢?
- 6. 編譯編譯器錯誤編譯GCC
- 7. 新的gfortran編譯器無法編譯舊的gfortran程序
- 8. 編譯器循環引用
- 9. 舊的gcc編譯器
- 10. 編譯時編譯器跳過語句?
- 11. webpack手錶編譯器 - 獲取導致重新編譯的文件
- 12. 搖籃增量Java編譯導致完全重新編譯
- 13. 在Clojure Repl中重新編譯函數會導致編譯器警告
- 14. 重新編譯編譯器對編譯後的代碼有影響嗎?
- 15. Maven Spring引導編譯錯誤?
- 16. 響應引導不會預編譯
- 17. 如何編譯Arduino引導程序?
- 18. 編譯LESS文件到CSS引導3
- 19. 高效編譯自定義引導LESS
- 20. 可重新編譯的編譯器 - 用於MS Visual Studio的DLL
- 21. 通過visual C++編譯器重新編碼代碼
- 22. 引導奇怪的錯誤重新編譯資產
- 23. 通過編譯加快編譯時間
- 24. 通過編譯庫加速編譯
- 25. Java靜態導入導致編譯錯誤。可能的編譯器錯誤?
- 26. 編譯器的編譯可能會影響編譯的程序?
- 27. 編譯器如何知道何時不重新編譯?
- 28. 通過編譯參與者自定義編譯器錯誤
- 29. 在Mac X上編譯fortran90,通過Macports安裝編譯器
- 30. 如何通過Matlab使用C++編譯器Mex編譯工具
啊我現在明白了。我認爲它只需要在新的編譯器中引用圖3的代碼,但它基本上只是用11代替字節代碼中的\ v。因此,當你用新的編譯器重新編譯該源代碼時,你只會得到相同的字節碼。抽象讓我困惑。謝謝! – edaniels