diff --git "a/book/\347\265\220\344\270\271\346\265\201\347\250\213\346\246\202\350\246\275\357\274\210\351\200\232\347\224\250\347\267\250\350\255\257\346\265\201\347\250\213\357\274\211.md" "b/book/\347\265\220\344\270\271\346\265\201\347\250\213\346\246\202\350\246\275\357\274\210\351\200\232\347\224\250\347\267\250\350\255\257\346\265\201\347\250\213\357\274\211.md" index 02d1363..c3001a1 100644 --- "a/book/\347\265\220\344\270\271\346\265\201\347\250\213\346\246\202\350\246\275\357\274\210\351\200\232\347\224\250\347\267\250\350\255\257\346\265\201\347\250\213\357\274\211.md" +++ "b/book/\347\265\220\344\270\271\346\265\201\347\250\213\346\246\202\350\246\275\357\274\210\351\200\232\347\224\250\347\267\250\350\255\257\346\265\201\347\250\213\357\274\211.md" @@ -14,7 +14,7 @@ 這張圖中可以看到,在源碼跟目標碼兩種格式之中,硬生生插入了一個中介形式出來,這個中介形式通常是抽象語法樹,或是某種接近機器碼,但以比特定機器碼更有結構的中介碼,最知名的例子就是 LLVM IR。 -為什麼一定要有這個中介形式呢?如果是目標碼只有一種的編譯器,很可能不會有生出中介碼的步驟,而是直接從語法樹就變出機器語言了。此時生成語法樹之前叫前端,語法樹之後叫後端,就只是約定俗成的稱呼罷了,大致象徵著編譯程序已經把源碼轉換成有結構的形式,接下來就是優化跟生成目的碼了。 +為什麼一定要有這個中介形式呢?如果是目標碼只有一種的編譯器,很可能不會有生出中介碼的步驟,而是直接從語法樹就變出機器語言了。此時生成語法樹之前叫前端,語法樹之後叫後端,就只是約定俗成的稱呼罷了,大致象徵著編譯程序已經把源碼轉換成有結構的形式,接下來就是優化跟生成目標碼了。 然而,當源碼跟目標碼不只一種時,中介形式的存在能省去大量的重複工作。