ตารางสัญลักษณ์ในการออกแบบคอมไพเลอร์

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

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

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

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

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

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

Source by I. Funa

Leave a Reply

Your email address will not be published. Required fields are marked *