คอมไพเลอร์จากมุมมองของผู้ใช้เป็นซอฟต์แวร์ที่อ่านไฟล์ต้นทางและคอมไพล์ ผลลัพธ์ของคอมไพเลอร์มักเป็นไฟล์ปฏิบัติการหลักและไฟล์เสริมบางไฟล์

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

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

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

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

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

Source by sbobet

Leave a Comment