เห็นได้ชัดว่าการรับรู้ของมนุษย์และอุปกรณ์อิเล็กทรอนิกส์เช่นคอมพิวเตอร์นั้นแตกต่างกัน มนุษย์สามารถเข้าใจอะไรก็ได้ผ่านภาษาธรรมชาติ แต่คอมพิวเตอร์ก็ไม่เข้าใจ คอมพิวเตอร์ต้องการนักแปลเพื่อแปลงภาษาที่เขียนในรูปแบบที่มนุษย์อ่านได้ไปเป็นรูปแบบที่คอมพิวเตอร์อ่านได้
คอมไพเลอร์และล่ามเป็นประเภทของนักแปลภาษา ตัวแปลภาษาคืออะไร คำถามนี้อาจเกิดขึ้นในใจของคุณ
ตัวแปลภาษาเป็นซอฟต์แวร์ที่แปลโปรแกรมจากภาษาต้นฉบับที่อยู่ในรูปแบบที่มนุษย์สามารถอ่านได้เป็นโปรแกรมที่เทียบเท่าในภาษาวัตถุ โดยทั่วไปภาษาต้นฉบับนั้นเป็นภาษาการเขียนโปรแกรมระดับสูงและโดยทั่วไปภาษาวัตถุจะเป็นภาษาเครื่องของคอมพิวเตอร์จริง
คอมไพเลอร์เป็นโปรแกรมที่อ่านโปรแกรมที่เขียนด้วยภาษาระดับสูงและแปลงเป็นเครื่องหรือภาษาระดับต่ำและรายงานข้อผิดพลาดในโปรแกรม มันจะแปลงซอร์สโค้ดทั้งหมดในครั้งเดียวหรืออาจใช้เวลาหลายครั้งในการทำเช่นนั้น แต่ในที่สุดผู้ใช้จะได้รับรหัสที่คอมไพล์ซึ่งพร้อมที่จะดำเนินการ
• ขั้นตอนการวิเคราะห์ ของคอมไพเลอร์ยังเรียกว่าส่วนหน้าซึ่งโปรแกรมจะถูกแบ่งออกเป็นส่วนที่เป็นส่วนประกอบพื้นฐานและตรวจสอบไวยากรณ์ความหมายและไวยากรณ์ของรหัสหลังจากที่สร้างรหัสกลาง ขั้นตอนการวิเคราะห์รวมถึงการวิเคราะห์คำศัพท์วิเคราะห์ความหมายและการวิเคราะห์ไวยากรณ์
• ขั้นตอนการสังเคราะห์ คอมไพเลอร์ยังเป็นที่รู้จักกันในนามแบ็คเอนด์ที่รหัสกลางถูกปรับให้เหมาะสมและสร้างรหัสเป้าหมาย ขั้นตอนการสังเคราะห์รวมถึงการเพิ่มประสิทธิภาพรหัสและตัวสร้างรหัส
• ตัววิเคราะห์คำย่อ : มันสแกนรหัสเป็นกระแสของตัวละครจัดกลุ่มลำดับของตัวอักษรเป็นคำย่อและส่งออกลำดับของโทเค็นที่มีการอ้างอิงถึงภาษาการเขียนโปรแกรม
• ตัววิเคราะห์ไวยากรณ์ : ในขั้นตอนนี้โทเค็นที่สร้างขึ้นในขั้นตอนก่อนหน้านี้จะถูกตรวจสอบกับไวยากรณ์ของภาษาการเขียนโปรแกรมไม่ว่านิพจน์นั้นจะถูกต้องทางไวยากรณ์หรือไม่ มันทำให้ต้นไม้แยกวิเคราะห์สำหรับการทำเช่นนั้น
• Semantic Analyzer : ตรวจสอบว่านิพจน์และคำสั่งที่สร้างขึ้นในเฟสก่อนหน้าเป็นไปตามกฎของภาษาการเขียนโปรแกรมหรือไม่และจะสร้างทรีการแยกวิเคราะห์ที่มีคำอธิบายประกอบ
• ตัวสร้างรหัสระดับกลาง : มันสร้างรหัสระดับกลางที่เทียบเท่าของรหัสต้นฉบับ มีตัวแทนจำนวนมากของรหัสกลาง แต่ TAC (รหัสที่อยู่สาม) เป็นที่ใช้กันอย่างแพร่หลายมากที่สุด
• เครื่องมือเพิ่มประสิทธิภาพโค้ด : ปรับปรุงความต้องการด้านเวลาและพื้นที่ของโปรแกรม สำหรับการทำเช่นนั้นมันจะกำจัดรหัสซ้ำซ้อนที่มีอยู่ในโปรแกรม
• ตัวสร้างโค้ด : นี่คือขั้นตอนสุดท้ายของคอมไพเลอร์ซึ่งโค้ดเป้าหมายสำหรับเครื่องนั้นถูกสร้างขึ้น จะดำเนินการเช่นการจัดการหน่วยความจำการลงทะเบียนที่ได้รับมอบหมายและการปรับแต่งเฉพาะเครื่อง
ตารางสัญลักษณ์ เป็นโครงสร้างข้อมูลที่จัดการตัวระบุพร้อมกับชนิดข้อมูลที่เกี่ยวข้องที่เก็บอยู่ ตัวจัดการข้อผิดพลาด ตรวจจับรายงานแก้ไขข้อผิดพลาดที่พบระหว่างเฟสต่างๆของคอมไพเลอร์
ล่ามเป็นอีกทางเลือกหนึ่งสำหรับการใช้ภาษาการเขียนโปรแกรมและทำงานเหมือนกับตัวแปลภาษา ล่ามดำเนินการ lexing, การ แยกวิเคราะห์ และการ ตรวจสอบประเภท คล้ายกับคอมไพเลอร์ แต่ล่ามจะประมวลผลแผนผังต้นไม้โดยตรงเพื่อเข้าถึงนิพจน์และดำเนินการคำสั่งแทนที่จะสร้างรหัสจากต้นไม้ไวยากรณ์
การรวบรวมและการตีความอาจรวมกันเพื่อใช้ภาษาโปรแกรม ซึ่งคอมไพเลอร์สร้างรหัสระดับกลางจากนั้นรหัสจะถูกตีความมากกว่ารวบรวมเป็นรหัสเครื่อง
การใช้ล่ามนั้นมีประโยชน์ในระหว่างการพัฒนาโปรแกรมซึ่งส่วนที่สำคัญที่สุดคือสามารถทดสอบการปรับเปลี่ยนโปรแกรมได้อย่างรวดเร็วแทนที่จะรันโปรแกรมอย่างมีประสิทธิภาพ
ความแตกต่างที่สำคัญระหว่างคอมไพเลอร์และล่าม
เรามาดูความแตกต่างที่สำคัญระหว่างคอมไพเลอร์และล่าม
• คอมไพเลอร์ใช้โปรแกรมทั้งหมดและแปลมัน แต่ล่ามแปลคำสั่งโปรแกรมโดยคำสั่ง
• รหัสกลางหรือรหัสเป้าหมายถูกสร้างขึ้นในกรณีของคอมไพเลอร์ เทียบกับล่ามไม่ได้สร้างรหัสกลาง
• คอมไพเลอร์เปรียบเทียบได้เร็วกว่า Interpreter เนื่องจากคอมไพเลอร์ใช้โปรแกรมทั้งหมดในครั้งเดียวในขณะที่ล่ามจะคอมไพล์โค้ดแต่ละบรรทัดหลังจากที่อื่น
• คอมไพเลอร์นำเสนอข้อผิดพลาดทั้งหมดพร้อมกันและเป็นการยากที่จะตรวจสอบข้อผิดพลาดในทางตรงกันข้ามล่ามแสดงข้อผิดพลาดของแต่ละคำสั่งทีละคนและมันง่ายต่อการตรวจสอบข้อผิดพลาด
• ในคอมไพเลอร์เมื่อเกิดข้อผิดพลาดในโปรแกรมมันจะหยุดการแปลและหลังจากลบข้อผิดพลาดทั้งโปรแกรมจะถูกแปลอีกครั้ง ในทางตรงกันข้ามเมื่อเกิดข้อผิดพลาดในล่ามจะป้องกันการแปลและหลังจากลบข้อผิดพลาดการแปลจะดำเนินการต่อ
• ในคอมไพเลอร์กระบวนการต้องใช้สองขั้นตอนซึ่งซอร์สโค้ดแรกถูกแปลเป็นโปรแกรมเป้าหมายจากนั้นเรียกใช้งาน ในขณะที่ล่ามมันเป็นกระบวนการหนึ่งขั้นตอนที่ซอร์สโค้ดรวบรวมและดำเนินการในเวลาเดียวกัน
• คอมไพเลอร์ใช้ในการเขียนโปรแกรมภาษาเช่น C, C ++, C #, Scala และอื่น ๆ ใน Interpreter อื่น ๆ ใช้ในภาษาเช่น Java, PHP, Ruby, Python เป็นต้น
คอมไพเลอร์และล่ามมีวัตถุประสงค์เพื่อทำงานเดียวกัน แต่แตกต่างกันในขั้นตอนการดำเนินงานคอมไพเลอร์ใช้ซอร์สโค้ดในลักษณะรวมขณะที่ล่ามใช้ส่วนที่เป็นส่วนประกอบของซอร์สโค้ดคือคำสั่งโดยคำสั่ง
แม้ว่าทั้งคอมไพเลอร์และล่ามมีข้อดีและข้อเสียบางอย่างเช่นภาษาที่แปลความหมายถือเป็นข้ามแพลตฟอร์มคือรหัสเป็นแบบพกพา นอกจากนี้ยังไม่จำเป็นต้องรวบรวมคำสั่งก่อนหน้าซึ่งแตกต่างจากคอมไพเลอร์ซึ่งประหยัดเวลา ภาษาที่รวบรวมได้เร็วขึ้นเกี่ยวกับกระบวนการรวบรวม