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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
คำสั่งควบคุมในโปรแกรม Interactive C
Advertisements

Introduction to C Introduction to C.
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
ความรู้เบื้องต้นเกี่ยวกับภาษา c
โครงสร้างโปรแกรมภาษา C
การจัดการความผิดพลาด
Chapter 8 : Logic Modeling & Data Modeling
รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
การทำงานแบบเลือกทำ (Selection)
ลักษณะโครงสร้างของผังงาน
การเขียนผังงาน.
Data Structure โครงสร้างข้อมูล.
Building native COBOL applications คอมไพเลอร์ตรวจหา syntax errors แล้วสร้าง native machine code จากนั้น linker ทำหน้าที่ link native machine code ให้เป็น.
โครงสร้างควบคุมและคำสั่งแบบเงื่อนไข
Intermediate Representation (รูปแบบการแทนในระยะกลาง)
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
การผลิตโค๊ดสำหรับ Procedure Call
Type Judgments และ Type Rules. คำศัพท์ที่จะใช้ Type judgment: การตัดสินความถูกต้องของ type สำหรับ expression หรือ statement ใน โปรแกรม – เป็นบทสรุป (conclusion)
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
Functional Programming
Data Type part.III.
JavaScript.
การแก้ปัญหาด้วยคอมพิวเตอร์
องค์ประกอบของโปรแกรม
บทที่ 4 การตัดสินใจในการเขียนโปรแกรม
ภาษาคอมพิวเตอร์.
หน่วยที่ 1 ระบบคอมพิวเตอร์
เนื้อหา ประเภทของโปรแกรมภาษา ขั้นตอนการพัฒนาโปรแกรม
วิชา การออกแบบและพัฒนาซอฟต์แวร์
ฟังก์ชั่น function.
คำสั่งเงื่อนไขและการควบคุม
โปรแกรมย่อย : Pascal Procedure
บทที่ 1. พื้นฐานความรู้ทั่วไป
บทที่ 13 Pre-processor directive & macro Kairoek choeychuen
SCC : Suthida Chaichomchuen
คำสั่งแบบมีเงื่อนไข IF Statement
ตัวอย่างการใช้คำสั่ง IF_THEN
การเขียนโปรแกรมคอมพิวเตอร์และอัลกอริธึม
Computer Architecture and Assembly Language
Flowchart รูปแบบ If ซ้อน If ก็คือ การเอา If ไปไว้ใน If ทางฝั่ง True  โดยโครงสร้าง If ซ้อน If นั้นเอาไว้ใช้กับ กรณีตรวจสอบเงื่อนไขที่มากกว่า 2 กรณี เพราะเนื่องจาก.
ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)
การเขียนโปรแกรมภาษาซี
Introduction to C Language
การเขียนผังงาน.
การเขียนผังงาน จุดประสงค์ 1.อธิบายความของผังงานได้
Flow Chart INT1103 Computer Programming
โครงสร้างข้อมูลคืออะไร ?
2.3.1 รหัสเทียม (Pseudo code)
คำสั่งควบคุมขั้นตอน Flow control statements
การออกแบบโครงสร้าง (Structured Design)
หลักการเขียนโปรแกรม ( )
การเขียนโปรแกรมเบื้องต้น
หลักการเขียนโปรแกรม ( )
การจัดการฐานข้อมูล.
หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรที่ ๑ ทักษะการโปรแกรม เบื้องต้น วันที่สาม.
PHP การตรวจสอบเงื่อนไข.
หลักการแก้ปัญหา.
Interrupt.
หลักการเขียนโปรแกรม ( )
โครงสร้าง ภาษาซี.
การเขียน แบบวนซ้ำ , วนลูป
หลักการเขียนโปรแกรมเบื้องต้น
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
บทที่ 6 พจนานุกรมข้อมูล และ คำอธิบายกระบวนการ
การเขียนผังงาน ผังงาน (Flowchart)
การรับและแสดงผลข้อมูล (Input/Output)
Syntax and Semantics ธนวัฒน์ แซ่เอียบ.
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
ใบสำเนางานนำเสนอ:

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

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

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

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.

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

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

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

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

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

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

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

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

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)