Cross T ของไดอะแกรม T


9

ฉันกำลังศึกษา Bootstrapping จาก Red Dragon Book Compilers และพบว่าแผนภาพ T สำหรับ cross compiler ค่อนข้างสับสน ฉันไม่เข้าใจความหมายของ "Run compiler1 ถึง compiler2" ทุกคนสามารถให้คำอธิบายที่ดีกว่าการเปรียบเทียบหรือตัวอย่างที่เกี่ยวข้องกับคอมไพเลอร์โลกแห่งความจริงได้หรือไม่?

สัญกรณ์บางอย่างก่อน โดย ฉันหมายความว่าคอมไพเลอร์สำหรับภาษา เขียนในภาษาที่ผลิตส่งออกภาษา / รหัสเครื่องNนี่คือหลุมฝังศพหรือ T-แผนภาพLSN= ป้อนคำอธิบายรูปภาพที่นี่LSN

รวบรวมคอมไพเลอร์

  1. สมมติว่าเรามีคอมไพเลอร์ข้ามภาษาใหม่ L ในภาษาที่ใช้งาน S การสร้างรหัสสำหรับเครื่อง N

    LSN=
    T-diagram สำหรับ LSN

  2. สมมติว่าเรายังมีคอมไพเลอร์ S ที่มีอยู่กำลังทำงานอยู่บนเครื่องที่ใช้รหัส M สำหรับเครื่อง M:

    SMM=
    T-diagram สำหรับ SMM

  3. เรียกใช้ LSN ผ่าน SMM เพื่อสร้าง LMN

คอมไพเลอร์ก่อสร้าง

LMN=LSN+SMM
T-diagram สำหรับ LMN = LSN + SMM


ฉันเพิ่ม T-diagram บางอันซึ่งควรทำให้เข้าใจได้ง่ายขึ้นว่าเกิดอะไรขึ้น หวังว่าใครบางคนสามารถปรับวิธีการแสดงผลให้ดีขึ้นได้
Dave Clarke

คำตอบ:


11

T-diagrams (ซึ่งคุณตัดออกจากคำถามต้นฉบับของคุณ) มีความสำคัญต่อการเข้าใจคำถามประเภทนี้ ลองดูที่แผนภาพ T สุดท้าย

ป้อนคำอธิบายรูปภาพที่นี่

T แรกอธิบายคอมไพเลอร์จาก L ถึง N เขียนใน S

T ตัวที่สองอธิบายคอมไพเลอร์จาก S ถึง M เขียนเป็น M (หรือเรียกใช้บน M) นี้จะเป็นของคุณคอมไพเลอร์คอมไพเลอร์

การใช้ T ที่สองกับ T แรกจะคอมไพล์ T แรกเพื่อให้มันรันบนเครื่อง M ผลลัพธ์จึงเป็นคอมไพเลอร์จาก L ถึง N ที่รันบนเครื่อง M

ความจริงที่ว่า T ที่สองยังทำงานบนเครื่อง M คือการจับภาพว่าคุณกำลังเรียกใช้คอมไพเลอร์คอมไพเลอร์บนเครื่องที่คุณจะรันคอมไพเลอร์แทนที่จะต้องใช้ Cross Compiler (ซึ่งจะเป็นกรณีถ้า M ด้านล่างแตกต่างกัน )


5

หมายความว่าเรารวบรวม LSN กับ SMM นั่นคือเรียกใช้ซอร์สโค้ดของ LSN ผ่าน SMM

เมื่อ SMM รวบรวมซอร์สโค้ดบางตัวมันจะสร้างไฟล์ประมวลผลสำหรับเครื่อง M ดังนั้นเมื่อเรารวบรวม LSN กับ SMM เราจะได้ LMN - ไฟล์ปฏิบัติการซึ่งรวบรวมไฟล์ต้นฉบับ L บนเครื่อง M เพื่อสร้างไฟล์ประมวลผลสำหรับเครื่อง N

บางทีมันอาจจะง่ายกว่าที่จะเข้าใจสิ่งนี้ด้วยการเปรียบเทียบ สมมติว่าเรามีคอมไพเลอร์ C ccซึ่งเขียนใน Fortran ซึ่งสร้างรหัส ARM สมมติว่าเรามีคอมไพเลอร์ Fortran fcบนคอมพิวเตอร์ x64 ของเรา ถ้าเราคอมไพล์ccซอร์สโค้ดด้วยfcเราได้โปรแกรมที่ทำงานบน x64, คอมไพล์โปรแกรม C, แต่สร้างไฟล์ประมวลผลสำหรับ ARM


0

เพื่อให้ง่าย ....

หมายเหตุ: โปรดจำไว้ว่าคอมไพเลอร์สามารถทำงานได้ในภาษาระดับต่ำเท่านั้น

ในแผนภาพที่ 1 คอมไพเลอร์เขียนใน HLL (ระดับสูง) เพื่อ inorder เพื่อเรียกใช้บนเครื่องการใช้งาน langg ของคอมไพเลอร์ควรอยู่ใน LLL

ดังนั้นใน 2nd Diagram, Implementation langg ของคอมไพเลอร์จะถูกรันบนคอมไพเลอร์ Resident ของตัวเองเพื่อให้โค้ดเป้าหมายสามารถทำงานบนเครื่องของตัวเอง

ในที่สุดการรวมทั้งสองอย่างคอมไพเลอร์ทำงานบนเครื่องที่มี langg - M

อินพุต langg - L

เอาท์พุท Langg - N

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.