การออกแบบคอมไพเลอร์คืออะไร? ประเภท เครื่องมือก่อสร้าง ตัวอย่าง

คอมไพเลอร์คืออะไร?

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

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

ผู้รวบรวม

คุณสมบัติของคอมไพเลอร์

  • ความถูกต้อง
  • ความเร็วในการรวบรวม
  • รักษาความหมายของรหัสให้ถูกต้อง
  • ความเร็วของรหัสเป้าหมาย
  • รับรู้โครงสร้างของโปรแกรมที่ถูกกฎหมายและผิดกฎหมาย
  • การรายงาน/การจัดการข้อผิดพลาดที่ดี
  • ความช่วยเหลือในการแก้ไขโค้ด

ประเภทของคอมไพเลอร์

ต่อไปนี้เป็นประเภทต่างๆ ของคอมไพเลอร์:

  • คอมไพเลอร์ผ่านเดี่ยว
  • คอมไพเลอร์ผ่านสองตัว
  • คอมไพเลอร์มัลติพาส

คอมไพเลอร์ผ่านเดี่ยว

คอมไพเลอร์ผ่านเดี่ยว
คอมไพเลอร์ผ่านเดี่ยว

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

คอมไพเลอร์สองผ่าน

คอมไพเลอร์สองผ่าน
คอมไพเลอร์สองผ่าน

คอมไพเลอร์แบบ Two pass แบ่งออกเป็นสองส่วน ดังนี้

  1. ส่วนหน้า: โดยจะจับคู่รหัสทางกฎหมายเข้ากับ Intermediate Representation (IR)
  2. ส่วนหลัง: โดยจะแมป 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) ตัวสร้างโค้ดอัตโนมัติ
  • งานหลักของคอมไพลเลอร์คือการตรวจสอบโปรแกรมทั้งหมด ดังนั้นจึงไม่มีข้อผิดพลาดทางไวยากรณ์หรือความหมาย