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

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

รหัสระหว่างกลาง (Intermediate code). รหัสระหว่างกลาง  เป็นรหัสชั่วคราวที่คอมไพเลอร์ใช้แทนภาษาต้นฉบับไปเป็น ภาษาเครื่อง  การแทนด้วยรหัสระหว่างกลางมีข้อดีคือ.

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


งานนำเสนอเรื่อง: "รหัสระหว่างกลาง (Intermediate code). รหัสระหว่างกลาง  เป็นรหัสชั่วคราวที่คอมไพเลอร์ใช้แทนภาษาต้นฉบับไปเป็น ภาษาเครื่อง  การแทนด้วยรหัสระหว่างกลางมีข้อดีคือ."— ใบสำเนางานนำเสนอ:

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

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

3 ต้นไม้วากยสัมพันธ์ ((abstract) syntax tree)  Input: id*(id+id) E  E+T | T T  T*F | F F  (E) | id Parsing treeSyntax 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