การออกแบบคอมไพเลอร์ - ขั้นตอนของคอมไพเลอร์
ขั้นตอนการคอมไพล์เป็นลำดับขั้นตอนต่างๆ แต่ละเฟสรับอินพุตจากขั้นตอนก่อนหน้ามีการแสดงโปรแกรมต้นทางของตัวเองและฟีดเอาต์พุตไปยังเฟสถัดไปของคอมไพเลอร์ ให้เราเข้าใจขั้นตอนของคอมไพเลอร์
การวิเคราะห์คำศัพท์
เครื่องสแกนระยะแรกทำงานเป็นเครื่องสแกนข้อความ ขั้นตอนนี้จะสแกนซอร์สโค้ดเป็นสตรีมของอักขระและแปลงเป็นคำศัพท์ที่มีความหมาย ตัววิเคราะห์คำศัพท์แทนคำศัพท์เหล่านี้ในรูปแบบของโทเค็นเป็น:
<token-name, attribute-value>
การวิเคราะห์ไวยากรณ์
ขั้นตอนต่อไปเรียกว่าการวิเคราะห์ไวยากรณ์หรือ parsing. ใช้โทเค็นที่สร้างโดยการวิเคราะห์ศัพท์เป็นอินพุตและสร้างโครงสร้างแยกวิเคราะห์ (หรือโครงสร้างไวยากรณ์) ในขั้นตอนนี้การจัดเรียงโทเค็นจะถูกตรวจสอบเทียบกับไวยากรณ์ของซอร์สโค้ดกล่าวคือตัวแยกวิเคราะห์จะตรวจสอบว่านิพจน์ที่สร้างโดยโทเค็นนั้นถูกต้องตามหลักไวยากรณ์หรือไม่
การวิเคราะห์ความหมาย
การวิเคราะห์เชิงความหมายจะตรวจสอบว่าโครงสร้างการแยกวิเคราะห์ที่สร้างขึ้นเป็นไปตามกฎของภาษาหรือไม่ ตัวอย่างเช่นการกำหนดค่าจะอยู่ระหว่างชนิดข้อมูลที่เข้ากันได้และการเพิ่มสตริงเป็นจำนวนเต็ม นอกจากนี้เครื่องวิเคราะห์ความหมายยังติดตามตัวระบุประเภทและนิพจน์ ไม่ว่าจะมีการประกาศตัวระบุก่อนใช้หรือไม่เป็นต้นตัววิเคราะห์ความหมายจะสร้างโครงสร้างไวยากรณ์ที่มีคำอธิบายประกอบเป็นเอาต์พุต
การสร้างรหัสระดับกลาง
หลังจากการวิเคราะห์เชิงความหมายคอมไพเลอร์จะสร้างรหัสกลางของซอร์สโค้ดสำหรับเครื่องเป้าหมาย เป็นโปรแกรมสำหรับเครื่องจักรที่เป็นนามธรรม มันอยู่ระหว่างภาษาระดับสูงและภาษาเครื่อง ควรสร้างรหัสกลางนี้ในลักษณะที่ทำให้ง่ายต่อการแปลเป็นรหัสเครื่องเป้าหมาย
การเพิ่มประสิทธิภาพรหัส
ขั้นตอนต่อไปจะทำการเพิ่มประสิทธิภาพรหัสของรหัสกลาง การเพิ่มประสิทธิภาพสามารถถือว่าเป็นสิ่งที่ลบบรรทัดรหัสที่ไม่จำเป็นและจัดเรียงลำดับของคำสั่งเพื่อเร่งความเร็วในการทำงานของโปรแกรมโดยไม่ต้องสิ้นเปลืองทรัพยากร (CPU, หน่วยความจำ)
การสร้างรหัส
ในขั้นตอนนี้ตัวสร้างรหัสจะใช้การแสดงรหัสกลางที่เหมาะสมที่สุดและแมปกับภาษาเครื่องเป้าหมาย ตัวสร้างรหัสจะแปลรหัสกลางเป็นลำดับของรหัสเครื่องที่หาตำแหน่งใหม่ได้ (โดยทั่วไป) ลำดับของคำสั่งของรหัสเครื่องจะทำงานตามที่รหัสกลางจะทำ
ตารางสัญลักษณ์
เป็นโครงสร้างข้อมูลที่ดูแลตลอดทุกขั้นตอนของคอมไพเลอร์ ชื่อตัวระบุทั้งหมดพร้อมกับประเภทจะถูกเก็บไว้ที่นี่ ตารางสัญลักษณ์ช่วยให้คอมไพลเลอร์ค้นหาเร็กคอร์ดตัวระบุและดึงข้อมูลได้อย่างรวดเร็ว ตารางสัญลักษณ์ยังใช้สำหรับการจัดการขอบเขต