งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

รหัสระหว่างกลาง (Intermediate code)

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "รหัสระหว่างกลาง (Intermediate code)"— ใบสำเนางานนำเสนอ:

1 รหัสระหว่างกลาง (Intermediate code)

2 รหัสระหว่างกลาง เป็นรหัสชั่วคราวที่คอมไพเลอร์ใช้แทนภาษาต้นฉบับไปเป็นภาษาเครื่อง การแทนด้วยรหัสระหว่างกลางมีข้อดีคือ การทำรหัสให้ได้ผลดีที่สุด จะกระทำได้ง่ายกว่า เมื่อจำเป็นต้องผลิตภาษาเป้าหมายใหม่ ก็เพียงแต่เขียนเฉพาะขั้นตอนที่เปลี่ยนจากรหัสระหว่าง กลางไปเป็นภาษาเป้าหมายใหม่ โดยไม่จำเป็นต้องเขียนโค้ดขึ้นมาใหม่ มีข้อเสียคือ ภาษาเป้าหมายที่ผลิตจากรหัสระหว่างกลาง อาจจะมีประสิทธิภาพน้อยกว่าการผลิต ภาษาเป้าหมายโดยตรงโดยไม่ใช้รหัสระหว่างกลาง

3 ต้นไม้วากยสัมพันธ์ ((abstract) syntax tree)
E  E+T | T T  T*F | F F  (E) | id Input: id*(id+id) Parsing tree Syntax tree

4 Another example a + a * (b – c) + (b – c) * d
A Directed acyclic graph (DAG) for an expression identifies the common subexpressions (subexpressions that occur more than once) of the expression.

5 Three-address code จะมีคำสั่งใกล้เคียงกับภาษาแอสเซมบลี หรือภาษาเครื่อง
คำสั่งโดยทั่วไปจะเขียนอยู่ในรูป A, B และ C เป็นตัวถูกดำเนินการ ซึ่งอาจเป็นได้ทั้งตัวระบุ (identifier) ค่าคงที่ (Constant) หรือที่เก็บ ชั่วคราวซึ่งผลิตโดยคอมไพเลอร์ เช่น x + y * z เขียนให้อยู่ในรูป three-address code ได้เป็น T0 := y * z T1 := x + T1 A := B op C

6 จากตัวอย่างเดิม a + a * (b – c) + (b – c) * d
เขียนให้อยู่ในรูป Three-address code ได้เป็น

7 Three-address code (cont)
คำสั่งของ Three-address code อื่นๆ ที่อาจจะมี address น้อยกว่าสามได้แก่ (1) A := op B เมื่อ op เป็นตัวดำเนินการเอกภาค (unary operator) (2) คำสั่งกระโดดแบบไม่มีเงื่อนไข goto L (3) คำสั่งกระโดดแบบมีเงื่อนไข if A relop B goto L เมื่อ relop เป็นตัวดำเนินการสัมพันธ์ (<, ==, >=, etc.) (4) คำสั่งเพื่อเรียกใช้กระบวนการ P และมีการผ่านพารามิเตอร์ A1, A2, …, An เขียนได้ดังนี้ param A1 param A2 … param An call P, n

8 Three-address code (cont)
(5) ดรรชนีกำกับ สามารถเขียนในรูป A := B[I] หรือ A[I] := B (6) เลขที่อยู่ และตัวชี้ สามารถเขียนได้อยู่ในรูป A := addr B หรือ A := *B หรือ *A := B จากส่วนหนึ่งของโปรแกรมต่อไปนี้ while (A < B) do if (C < D) then X := Y+Z จงเขียน Three-address code

9 Quadruple เราอาจใช้โครงสร้างที่มี 4 เขตข้อมูล (field) คือ OP, ARG1, ARG2 และ RESULT แทน จงเขียน A := -B*(C+D) ด้วยวิธี three-address และ quadruple

10 Triple หากต้องการเลี่ยงเลี่ยงการใช้ตัวแปรชั่วคราว เราอาจใช้หมายเลขระเบียน (record) แทน โครงสร้างข้อมูลแบบ triple จึงอาจมีแค่สามเขตข้อมูล คือ OP, ARG1 และ ARG2 โดยไม่ต้องมีเขตข้อมูล RESULT จากโจทย์เดิม A := -B*(C+D) ลองเขียนด้วย triple

11 Exam: try to write triple
A[I] := B A := B[I] if A relop B goto L

12 Indirect triple ในการทำรหัสระหว่างกลางให้ได้ผลดีที่สุด อาจจะต้องมีการจัดลำดับของคำสั่งใหม่ ถ้าแทนรหัสระหว่างกลางแบบ triple ต้องย้ายระเบียนที่เก็บคำสั่งเหล่านั้น ทำให้หมายเลขระเบียนเปลี่ยนไป จึง ต้องแก้ไขหมายเลขระเบียนในเขตข้อมูล ARG1 หรือ ARG2 ให้ตรงกับหมายเลขระเบียนที่เปลี่ยนไปด้วย เพื่อหลีกเลี่ยงปัญหานี้ เราอาจใช้ indirect triple แทน จากส่วนหนึ่งของโปรแกรมนี้ for I := 1 to N do begin A[I] := 10; X := B; end

13 Indirect triple (cont)
คำสั่ง X:= B เอาออกมาไว้ก่อนคำสั่ง for ได้ โดยการแก้ลำดับของคำสั่งเฉพาะใน STATEMENT ได้ ดังนี้ STATEMENT [0] (5) [1] (0) [2] (1) [3] (2) [4] (3) [5] (4) [6] (6) [7] (7) [8] (8) [9] (9)


ดาวน์โหลด ppt รหัสระหว่างกลาง (Intermediate code)

งานนำเสนอที่คล้ายกัน


Ads by Google