คอมไพเลอร์เป็นโปรแกรมที่แปลซอร์สโค้ดสำหรับโปรแกรมอื่นจากภาษาการเขียนโปรแกรมเป็นโค้ดที่ทำงานได้
โดยทั่วไปแล้วซอร์สโค้ดจะเป็นภาษาโปรแกรมระดับสูง (เช่น Pascal, C, C ++, Java, Perl, C #, ฯลฯ ) รหัสที่สามารถใช้งานได้นั้นอาจเป็นลำดับของคำสั่งเครื่องที่สามารถดำเนินการโดย CPU โดยตรงหรืออาจเป็นการแสดงสื่อกลางที่ตีความโดยเครื่องเสมือน (เช่นรหัส Java byte)
กล่าวโดยสรุปคอมไพเลอร์แปลงโปรแกรมจากรูปแบบที่มนุษย์สามารถอ่านได้เป็นรูปแบบที่เครื่องอ่านได้
สำหรับวิธีการทำงานของคอมไพเลอร์มันซับซ้อนจริงๆ มีหนังสือและหลักสูตรของมหาวิทยาลัยในเรื่องนี้ ฉันจะพยายามสรุปขั้นตอนหลักของกระบวนการโดยย่อ แต่นี่จะเป็นภาพรวมคร่าวๆ
- Lexing - แยกข้อความของโปรแกรมเป็น "โทเค็น" โทเค็นคือ "คำ" ของภาษาการเขียนโปรแกรมเช่นตัวระบุ (คำหลักชื่อตัวแปรชื่อฟังก์ชัน ฯลฯ ) หรือตัวดำเนินการ (=, *, &, ฯลฯ )
- การแยกวิเคราะห์ - แปลงลำดับของโทเค็นลงในทรีการแยกวิเคราะห์ซึ่งเป็นโครงสร้างข้อมูลที่แสดงโครงสร้างภาษาต่างๆ: การประกาศชนิดการประกาศตัวแปรการกำหนดฟังก์ชันนิยามลูปเงื่อนไขการแสดงออก ฯลฯ
- การเพิ่มประสิทธิภาพ - ประเมินนิพจน์ค่าคงที่ปรับค่าตัวแปรที่ไม่ได้ใช้หรือโค้ดที่ไม่สามารถเข้าถึงได้ปรับลูปถ้าเป็นไปได้ ฯลฯ
- แปลแผนผังการแยกวิเคราะห์เป็นคำสั่งเครื่อง (หรือรหัส JVM ไบต์)
อีกครั้งฉันเน้นว่านี่เป็นคำอธิบายสั้น ๆ คอมไพเลอร์สมัยใหม่นั้นฉลาดมากและก็ซับซ้อนมาก