กลับไปหน้าบทความ

อ่าน 2 นาที

ไม่มีชื่อบทความ

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

การพึ่งพาการควบคุม

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

คำสั่ง B มีการพึ่งพาการควบคุมจากคำสั่ง A ที่อยู่ก่อนหน้า หากผลลัพธ์ของคำสั่ง A เป็นตัวกำหนดว่าควรดำเนินการคำสั่ง B หรือไม่ ในตัวอย่างต่อไปนี้ คำสั่ง Bเอส2{\displaystyle S_{2}}มีการพึ่งพาการควบคุมตามคำสั่งเอส1{\displaystyle S_{1}}. อย่างไรก็ตาม,เอส3{\displaystyle S_{3}}ไม่ขึ้นอยู่กับเอส1{\displaystyle S_{1}}เพราะเอส3{\displaystyle S_{3}}จะถูกดำเนินการเสมอโดยไม่คำนึงถึงผลลัพธ์ของเอส1{\displaystyle S_{1}}.

S1. ถ้า (a == b) S2. a = a + b S3. b = a + b

โดยสัญชาตญาณแล้ว จะมีความสัมพันธ์เชิงควบคุมระหว่างข้อความสองข้อความ A และ B ถ้า

  • B อาจถูกดำเนินการหลังจาก A
  • ผลลัพธ์ของการดำเนินการ A จะเป็นตัวกำหนดว่า B จะถูกดำเนินการหรือไม่

ตัวอย่างทั่วไปคือ มีความสัมพันธ์เชิงควบคุมระหว่างส่วนเงื่อนไขของคำสั่ง if กับคำสั่งต่างๆ ในส่วนจริง/เท็จของคำสั่งนั้น

นิยามอย่างเป็นทางการของความขึ้นอยู่กับการควบคุมสามารถนำเสนอได้ดังนี้:

คำแถลงเอส2{\displaystyle S_{2}}กล่าวกันว่าการควบคุมนั้นขึ้นอยู่กับข้อความอื่นเอส1{\displaystyle S_{1}}ก็ต่อเมื่อ

  • มีเส้นทางอยู่พี{\displaystyle P}จากเอส1{\displaystyle S_{1}}ถึงเอส2{\displaystyle S_{2}}โดยที่ทุกข้อความเอสฉัน{\displaystyle S_{i}}เอส1{\displaystyle S_{1}}ภายในพี{\displaystyle P}ตามมาด้วยเอส2{\displaystyle S_{2}}ในแต่ละเส้นทางที่เป็นไปได้จนถึงจุดสิ้นสุดของโปรแกรมและ
  • เอส1{\displaystyle S_{1}}จะไม่จำเป็นต้องปฏิบัติตามเสมอไปเอส2{\displaystyle S_{2}}กล่าวคือ มีเส้นทางการดำเนินการจากเอส1{\displaystyle S_{1}}จนถึงจุดสิ้นสุดของโปรแกรมที่ไม่ดำเนินต่อไปเอส2{\displaystyle S_{2}}.

เมื่อแสดงออกมาโดยใช้หลักการ (หลัง) การครอบงำ เงื่อนไขทั้งสองจะเทียบเท่ากันดังนี้

  • เอส2{\displaystyle S_{2}}โพสต์ครอบงำทั้งหมดเอสฉัน{\displaystyle S_{i}}
  • เอส2{\displaystyle S_{2}}ไม่ครอบงำภายหลังเอส1{\displaystyle S_{1}}

การสร้างความสัมพันธ์การควบคุม

การพึ่งพาการควบคุมโดยพื้นฐานแล้วคือขอบเขตการครอบงำในกราฟย้อนกลับของกราฟการไหลของการควบคุม (CFG) [ 1 ]ดังนั้น วิธีหนึ่งในการสร้างสิ่งเหล่านี้คือการสร้างขอบเขตการครอบงำภายหลังของ CFG แล้วกลับด้านเพื่อให้ได้กราฟการพึ่งพาการควบคุม

ต่อไปนี้เป็นรหัสเทียมสำหรับการสร้างขอบเขตหลังการครอบงำ:

สำหรับแต่ละ X ในการท่องต้นไม้แบบจากล่างขึ้นบนของต้นไม้หลังโดมิเนเตอร์ให้ทำดังนี้ : PostDominanceFrontier(X) ← ∅ สำหรับแต่ละ Y ∈ Predecessors(X) ให้ทำดังนี้: ถ้า immediatePostDominator(Y) ≠ X: แล้ว PostDominanceFrontier(X) ← PostDominanceFrontier(X) ∪ {Y} เสร็จสิ้นสำหรับแต่ละ Z ∈ Children(X) ให้ทำดังนี้ : สำหรับแต่ละ Y ∈ PostDominanceFrontier(Z) ให้ทำดังนี้ : ถ้า immediatePostDominator(Y) ≠ X: แล้ว PostDominanceFrontier(X) ← PostDominanceFrontier(X) ∪ {Y} เสร็จสิ้นเสร็จสิ้นเสร็จสิ้น

ในที่นี้ Children(X) คือเซตของโหนดใน CFG ที่ถูกครอบงำโดยX ทันที และ Predecessors(X) คือเซตของโหนดใน CFG ที่อยู่ก่อนหน้าX โดยตรง ใน CFG โปรดทราบว่าโหนดXจะถูกประมวลผลก็ต่อเมื่อโหนด Children ทั้งหมดได้รับการประมวลผลแล้วเท่านั้น เมื่อคำนวณแผนที่ขอบเขตการครอบงำแล้ว การย้อนกลับแผนที่นี้จะส่งผลให้ได้แผนที่จากโหนดใน CFG ไปยังโหนดที่มีการพึ่งพาการควบคุมต่อโหนดเหล่านั้น

ดูเพิ่มเติม

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ

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

การสร้างความสัมพันธ์การควบคุม

การพึ่งพาการควบคุมโดยพื้นฐานแล้วคือ ขอบเขตการครอบงำ ในกราฟย้อนกลับของ กราฟการไหลของการควบคุม (CFG) [ 1 ] ดังนั้น วิธีหนึ่งในการสร้างสิ่งเหล่านี้คือการสร้างขอบเขตการครอบงำภายหลังของ CFG แล้วกลับด้านเพื่อให้ได้กราฟการพึ่งพาการควบคุม

ดูเพิ่มเติม

การวิเคราะห์ความสัมพันธ์ การพึ่งพาข้อมูล การวิเคราะห์การพึ่งพาของลูป § การพึ่งพาการควบคุม