การออกแบบคอมไพเลอร์ - ขั้นตอนของคอมไพเลอร์

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

การวิเคราะห์คำศัพท์

เครื่องสแกนระยะแรกทำงานเป็นเครื่องสแกนข้อความ ขั้นตอนนี้จะสแกนซอร์สโค้ดเป็นสตรีมของอักขระและแปลงเป็นคำศัพท์ที่มีความหมาย ตัววิเคราะห์คำศัพท์แทนคำศัพท์เหล่านี้ในรูปแบบของโทเค็นเป็น:

<token-name, attribute-value>

การวิเคราะห์ไวยากรณ์

ขั้นตอนต่อไปเรียกว่าการวิเคราะห์ไวยากรณ์หรือ parsing. ใช้โทเค็นที่สร้างโดยการวิเคราะห์ศัพท์เป็นอินพุตและสร้างโครงสร้างแยกวิเคราะห์ (หรือโครงสร้างไวยากรณ์) ในขั้นตอนนี้การจัดเรียงโทเค็นจะถูกตรวจสอบเทียบกับไวยากรณ์ของซอร์สโค้ดกล่าวคือตัวแยกวิเคราะห์จะตรวจสอบว่านิพจน์ที่สร้างโดยโทเค็นนั้นถูกต้องตามหลักไวยากรณ์หรือไม่

การวิเคราะห์ความหมาย

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

การสร้างรหัสระดับกลาง

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

การเพิ่มประสิทธิภาพรหัส

ขั้นตอนต่อไปจะทำการเพิ่มประสิทธิภาพรหัสของรหัสกลาง การเพิ่มประสิทธิภาพสามารถถือว่าเป็นสิ่งที่ลบบรรทัดรหัสที่ไม่จำเป็นและจัดเรียงลำดับของคำสั่งเพื่อเร่งความเร็วในการทำงานของโปรแกรมโดยไม่ต้องสิ้นเปลืองทรัพยากร (CPU, หน่วยความจำ)

การสร้างรหัส

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

ตารางสัญลักษณ์

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