การออกแบบคอมไพเลอร์คืออะไร? ประเภท เครื่องมือก่อสร้าง ตัวอย่าง
คอมไพเลอร์คืออะไร?
คอมไพเลอร์คือโปรแกรมคอมพิวเตอร์ที่ช่วยให้คุณแปลงซอร์สโค้ดที่เขียนด้วยภาษาระดับสูงให้เป็นภาษาเครื่องระดับต่ำ โดยจะแปลโค้ดที่เขียนด้วยภาษาโปรแกรมหนึ่งเป็นภาษาอื่นโดยไม่เปลี่ยนความหมายของโค้ด คอมไพเลอร์ยังทำให้โค้ดสุดท้ายมีประสิทธิภาพ ซึ่งได้รับการปรับให้เหมาะสมกับเวลาดำเนินการและพื้นที่หน่วยความจำ
กระบวนการคอมไพล์ประกอบด้วยกลไกการแปลขั้นพื้นฐานและการตรวจจับข้อผิดพลาด กระบวนการคอมไพเลอร์ต้องผ่านการวิเคราะห์คำศัพท์ ไวยากรณ์ และความหมายที่ส่วนหน้า และการสร้างโค้ดและการเพิ่มประสิทธิภาพที่ส่วนหลัง
คุณสมบัติของคอมไพเลอร์
- ความถูกต้อง
- ความเร็วในการรวบรวม
- รักษาความหมายของรหัสให้ถูกต้อง
- ความเร็วของรหัสเป้าหมาย
- รับรู้โครงสร้างของโปรแกรมที่ถูกกฎหมายและผิดกฎหมาย
- การรายงาน/การจัดการข้อผิดพลาดที่ดี
- ความช่วยเหลือในการแก้ไขโค้ด
ประเภทของคอมไพเลอร์
ต่อไปนี้เป็นประเภทต่างๆ ของคอมไพเลอร์:
- คอมไพเลอร์ผ่านเดี่ยว
- คอมไพเลอร์ผ่านสองตัว
- คอมไพเลอร์มัลติพาส
คอมไพเลอร์ผ่านเดี่ยว
ในซอร์สโค้ดของคอมไพเลอร์แบบพาสเดียวจะแปลงเป็นรหัสเครื่องโดยตรง เช่น ภาษาปาสคาล
คอมไพเลอร์สองผ่าน
คอมไพเลอร์แบบ Two pass แบ่งออกเป็นสองส่วน ดังนี้
- ส่วนหน้า: โดยจะจับคู่รหัสทางกฎหมายเข้ากับ Intermediate Representation (IR)
- ส่วนหลัง: โดยจะแมป IR ไปยังเครื่องเป้าหมาย
วิธีคอมไพเลอร์ Two pass ยังช่วยลดความยุ่งยากของกระบวนการกำหนดเป้าหมายใหม่อีกด้วย นอกจากนี้ยังอนุญาตให้มีส่วนหน้าหลายรายการ
คอมไพเลอร์มัลติพาส
คอมไพเลอร์มัลติพาสจะประมวลผลซอร์สโค้ดหรือแผนผังไวยากรณ์ของโปรแกรมหลายครั้ง มันแบ่งโปรแกรมขนาดใหญ่ออกเป็นโปรแกรมเล็ก ๆ หลายโปรแกรมและประมวลผลพวกมัน มันพัฒนารหัสระดับกลางหลายรหัส มัลติพาสทั้งหมดนี้รับเอาต์พุตของเฟสก่อนหน้าเป็นอินพุต ดังนั้นจึงต้องใช้หน่วยความจำน้อยลง เรียกอีกอย่างว่า 'Wide Compiler'
งานของคอมไพเลอร์
งานหลักที่คอมไพเลอร์ดำเนินการคือ:
- แบ่งซอร์สโปรแกรมออกเป็นส่วนๆ และวางโครงสร้างไวยากรณ์ให้กับโปรแกรมเหล่านั้น
- ช่วยให้คุณสร้างโปรแกรมเป้าหมายที่ต้องการจากการแสดงระดับกลาง และยังสร้างตารางสัญลักษณ์อีกด้วย
- รวบรวมซอร์สโค้ดและตรวจจับข้อผิดพลาดในนั้น
- จัดการการจัดเก็บตัวแปรและรหัสทั้งหมด
- รองรับการรวบรวมแยกต่างหาก
- อ่าน วิเคราะห์โปรแกรมทั้งหมด และแปลความหมายที่เทียบเท่ากัน
- การแปลซอร์สโค้ดเป็นออบเจ็กต์โค้ดขึ้นอยู่กับประเภทของเครื่อง
ประวัติความเป็นมาของคอมไพเลอร์
จุดสังเกตที่สำคัญของประวัติของคอมไพเลอร์มีดังนี้:
- คำ “คอมไพเลอร์” ถูกใช้ครั้งแรกในช่วงต้นทศวรรษ 1950 โดย Grace Murray Hopper
- คอมไพเลอร์ตัวแรกถูกสร้างโดย John Backum และกลุ่มของเขาระหว่างปี 1954 ถึง 1957 ที่ IBM.
- ภาษาโคบอลเป็นคนแรก ภาษาโปรแกรม ซึ่งรวบรวมบนหลายแพลตฟอร์มในปี 1960
- การศึกษาปัญหาการสแกนและการแยกวิเคราะห์ดำเนินการในช่วงทศวรรษ 1960 และ 1970 เพื่อให้ได้แนวทางแก้ไขที่สมบูรณ์
ขั้นตอนสำหรับระบบประมวลผลภาษา
ก่อนที่จะทราบเกี่ยวกับแนวคิดของคอมไพเลอร์ คุณจำเป็นต้องทำความเข้าใจเครื่องมืออื่นๆ ที่สามารถทำงานร่วมกับคอมไพเลอร์เสียก่อน
- ตัวประมวลผลล่วงหน้า: ตัวประมวลผลล่วงหน้าถือเป็นส่วนหนึ่งของคอมไพเลอร์ เป็นเครื่องมือที่สร้างอินพุตสำหรับคอมไพเลอร์ มันเกี่ยวข้องกับการประมวลผลมาโคร, การเพิ่ม, การขยายภาษา ฯลฯ
- ล่าม: ล่ามก็เหมือนกับคอมไพเลอร์ที่แปลภาษาระดับสูงเป็นภาษาเครื่องระดับต่ำ ความแตกต่างที่สำคัญระหว่างทั้งสองก็คือล่ามจะอ่านและแปลงรหัสทีละบรรทัด คอมไพเลอร์อ่านโค้ดทั้งหมดพร้อมกันและสร้างโค้ดเครื่อง
- ผู้ประกอบ:แปลรหัสภาษาแอสเซมบลีเป็นภาษาที่เครื่องเข้าใจได้ ผลลัพธ์เอาต์พุตของโปรแกรมแอสเซมเบลอร์เรียกว่าไฟล์อ็อบเจ็กต์ซึ่งเป็นชุดคำสั่งเครื่องและข้อมูลที่จำเป็นในการจัดเก็บคำสั่งเหล่านี้ในหน่วยความจำ
- linker: ตัวเชื่อมโยงช่วยให้คุณสามารถเชื่อมโยงและรวมไฟล์อ็อบเจ็กต์ต่างๆ เพื่อสร้างไฟล์ปฏิบัติการได้ ไฟล์ทั้งหมดเหล่านี้อาจถูกคอมไพล์ด้วยแอสเซมเบลอร์แยกกัน งานหลักของตัวเชื่อมโยงคือการค้นหาโมดูลที่เรียกว่าในโปรแกรมและค้นหาตำแหน่งหน่วยความจำที่เก็บโมดูลทั้งหมดไว้
- รถตักดิน: ตัวโหลดเป็นส่วนหนึ่งของระบบปฏิบัติการซึ่งทำหน้าที่โหลดไฟล์ปฏิบัติการลงในหน่วยความจำและเรียกใช้งาน นอกจากนี้ยังคำนวณขนาดของโปรแกรมที่สร้างพื้นที่หน่วยความจำเพิ่มเติม
- ข้ามคอมไพเลอร์: คอมไพเลอร์ Cross ในการออกแบบคอมไพเลอร์เป็นแพลตฟอร์มที่ช่วยให้คุณสร้างโค้ดที่ปฏิบัติการได้
- คอมไพเลอร์จากต้นทางถึงต้นทาง: Source to Source Compiler เป็นคำที่ใช้เมื่อซอร์สโค้ดของภาษาโปรแกรมหนึ่งถูกแปลเป็นซอร์สของอีกภาษาหนึ่ง
เครื่องมือก่อสร้างคอมไพเลอร์
เครื่องมือสร้างคอมไพเลอร์ได้รับการแนะนำในฐานะเทคโนโลยีที่เกี่ยวข้องกับคอมพิวเตอร์ที่แพร่หลายไปทั่วโลก เครื่องมือเหล่านี้ยังเป็นที่รู้จักในชื่อคอมไพเลอร์-คอมไพเลอร์, คอมไพเลอร์-เจนเนอเรเตอร์ หรือตัวแปล
เครื่องมือเหล่านี้ใช้ภาษาหรืออัลกอริทึมเฉพาะสำหรับการระบุและนำส่วนประกอบของคอมไพเลอร์ไปใช้งาน ต่อไปนี้คือตัวอย่างของเครื่องมือสร้างคอมไพเลอร์
- เครื่องกำเนิดไฟฟ้าสแกนเนอร์: เครื่องมือนี้ใช้นิพจน์ทั่วไปเป็นอินพุต ตัวอย่างเช่น LEX สำหรับ Unix Operaระบบติ๊ง.
- เครื่องมือแปลที่กำกับด้วยไวยากรณ์: เหล่านี้ เครื่องมือซอฟต์แวร์ เสนอโค้ดระดับกลางโดยใช้แผนผังการแยกวิเคราะห์ มีเป้าหมายในการเชื่อมโยงการแปลตั้งแต่หนึ่งรายการขึ้นไปกับแต่ละโหนดของแผนผังการแยกวิเคราะห์
- เครื่องกำเนิดตัวแยกวิเคราะห์: เครื่องสร้างตัววิเคราะห์จะใช้ไวยากรณ์เป็นอินพุตและสร้างโค้ดต้นฉบับโดยอัตโนมัติ ซึ่งสามารถวิเคราะห์ชุดอักขระด้วยความช่วยเหลือของไวยากรณ์ได้
- เครื่องสร้างรหัสอัตโนมัติ: นำโค้ดระดับกลางมาแปลงเป็นภาษาเครื่อง
- เครื่องยนต์กระแสข้อมูล: เครื่องมือนี้มีประโยชน์สำหรับการเพิ่มประสิทธิภาพโค้ด ที่นี่ข้อมูลจะถูกจัดเตรียมโดยผู้ใช้ และโค้ดระดับกลางจะถูกเปรียบเทียบเพื่อวิเคราะห์ความสัมพันธ์ใดๆ เรียกอีกอย่างว่าการวิเคราะห์กระแสข้อมูล ช่วยให้คุณทราบว่าค่าต่างๆ ถูกส่งจากส่วนหนึ่งของโปรแกรมไปยังอีกส่วนหนึ่งอย่างไร
ทำไมต้องใช้คอมไพเลอร์?
- คอมไพเลอร์ตรวจสอบโปรแกรมทั้งหมด ดังนั้นจึงไม่มีข้อผิดพลาดทางไวยากรณ์หรือความหมาย
- ไฟล์ปฏิบัติการได้รับการปรับให้เหมาะสมโดยคอมไพเลอร์ ดังนั้นจึงดำเนินการได้เร็วขึ้น
- ช่วยให้คุณสร้างโครงสร้างภายในในหน่วยความจำ
- ไม่จำเป็นต้องรันโปรแกรมบนเครื่องเดียวกับที่ถูกสร้างขึ้น
- แปลโปรแกรมทั้งหมดเป็นภาษาอื่น
- สร้างไฟล์บนดิสก์
- เชื่อมโยงไฟล์เป็นรูปแบบที่ปฏิบัติการได้
- ตรวจสอบข้อผิดพลาดทางไวยากรณ์และประเภทข้อมูล
- ช่วยให้คุณเพิ่มความเข้าใจเกี่ยวกับความหมายของภาษา
- ช่วยจัดการปัญหาด้านประสิทธิภาพภาษา
- โอกาสสำหรับโครงการการเขียนโปรแกรมที่ไม่ใช่เรื่องง่าย
- เทคนิคที่ใช้ในการสร้างคอมไพเลอร์ก็มีประโยชน์สำหรับวัตถุประสงค์อื่นเช่นกัน
การประยุกต์ใช้คอมไพเลอร์
- การออกแบบคอมไพเลอร์ช่วยให้สามารถใช้งานภาษาโปรแกรมระดับสูงได้อย่างเต็มที่
- รองรับการเพิ่มประสิทธิภาพสำหรับคอมพิวเตอร์ Archiสอนความเท่าเทียม
- การออกแบบลำดับชั้นหน่วยความจำใหม่ของเครื่องจักร
- ใช้กันอย่างแพร่หลายสำหรับโปรแกรมการแปล
- ใช้กับเครื่องมือเพิ่มประสิทธิภาพซอฟต์แวร์อื่นๆ
สรุป
- คอมไพเลอร์คือโปรแกรมคอมพิวเตอร์ที่ช่วยให้คุณแปลงซอร์สโค้ดที่เขียนด้วยภาษาระดับสูงให้เป็นภาษาเครื่องระดับต่ำ
- ความถูกต้อง ความเร็วในการคอมไพล์ รักษาความหมายที่ถูกต้องของโค้ดเป็นคุณสมบัติที่สำคัญบางประการของการออกแบบคอมไพเลอร์
- คอมไพเลอร์แบ่งออกเป็นสามส่วน 1) คอมไพเลอร์แบบพาสเดียว 2) คอมไพเลอร์แบบสองพาส และ 3) คอมไพเลอร์แบบมัลติพาส
- “คอมไพเลอร์” เป็นคำที่ใช้ครั้งแรกในช่วงต้นทศวรรษ 1950 โดย Grace Murray Hopper
- ขั้นตอนสำหรับระบบประมวลผลภาษาได้แก่: พรีโปรเซสเซอร์, ล่าม, แอสเซมเบลอร์, ลิงค์เกอร์/โหลดเดอร์
- เครื่องมือสร้างคอมไพเลอร์ที่สำคัญ ได้แก่ 1) ตัวสร้างสแกนเนอร์ 2) กลไกการแปลแบบกำหนดทิศทางไวยากรณ์ 3) ตัวสร้างพาร์เซอร์ 4) ตัวสร้างโค้ดอัตโนมัติ
- งานหลักของคอมไพลเลอร์คือการตรวจสอบโปรแกรมทั้งหมด ดังนั้นจึงไม่มีข้อผิดพลาดทางไวยากรณ์หรือความหมาย