รวบรวมภาษาการเขียนโปรแกรมด้วยตัวเอง


10

ฉันเป็นนักเรียนวิทยาศาสตร์คอมพิวเตอร์ ฉันต้องการสร้างภาษาการเขียนโปรแกรมของตัวเอง (ภาษาพื้นฐานพร้อมคำแนะนำเล็กน้อย)

ฉันรู้วิธีการวิเคราะห์วากยสัมพันธ์ฉันทำมันแล้วใน Perl ในบทความฉันอ่านบางอย่างเกี่ยวกับคอมไพเลอร์คอมไพเลอร์เสร็จแล้วในตัวเอง

เช่นคอมไพเลอร์ C เขียนใน C. เป็นไปได้อย่างไร? ฉันสามารถสร้างภาษาของตัวเอง แต่ฉันไม่รู้ว่าฉันจะใช้มันได้อย่างไร ความคิดใด ๆ

เป็นคำถามที่ดีจริงๆและฉันสามารถเขียนบล็อกโครงการได้


ผู้คนอธิบายวิธีการบูทสแตรป แต่ทำไมคุณต้องทำ? ไม่มีเหตุผลที่คุณไม่สามารถรวบรวมภาษาของคุณโดยใช้คอมไพเลอร์ที่เขียนด้วยภาษา C, Perl หรืออย่างอื่น แน่นอนว่ามันจะเป็นการดีถ้าคุณมีคอมไพเลอร์สำหรับภาษาของคุณที่เขียนด้วยตัวเอง แต่นั่นจะเป็นงานที่ต้องทำมากมาย - คุณต้องเขียนคอมไพเลอร์อย่างน้อยสองตัวเพื่อให้ได้สิ่งนั้น (หนึ่งใน C / Perl / อะไรก็ตาม ภาษาของคุณ).
David Richerby

อืม .. ฉันคิดว่าฉันจะเขียนคอมไพเลอร์ตัวแรกใน C และเขียน seconde เป็นภาษาของฉัน มันน่าสนใจมากที่จะสร้างภาษาการเขียนโปรแกรมเล็ก ๆ น้อย ๆ เราสามารถเรียนรู้วิทยาศาสตร์คอมพิวเตอร์มากมาย
BaptisteL

คำตอบ:


13

เคล็ดลับคือความร่วมมือ คุณเขียนคอมไพเลอร์สำหรับภาษาของคุณ (หรือชุดย่อย) ในภาษาอื่น จากนั้นคุณเขียนคอมไพเลอร์สำหรับภาษาของคุณ (หรือชุดย่อยขนาดใหญ่ของภาษาที่คุณสามารถจัดการได้) ในภาษาของคุณ คุณใช้คอมไพเลอร์ในอดีตเพื่อรวบรวมคอมไพเลอร์ใหม่แล้วคอมไพเลอร์ใหม่สามารถรวบรวมตัวเอง


ดังนั้นฉันสามารถสร้างคอมไพเลอร์ครั้งแรกของฉันโดยใช้ C และครั้งต่อไปฉันจะรวบรวมคอมไพเลอร์ v2 ของฉันด้วย v1? แต่มีปัญหาฉันจะรู้ได้อย่างไรว่าคอมไพเลอร์ไม่มีปัญหา? ฉันจำเป็นต้องแปลงซอร์สโค้ดเป็นแอสเซมเบลอร์หรือไม่ หรือในสิ่งอื่น ๆ
BaptisteL

2
ฉันจะรู้ได้อย่างไรว่าคอมไพเลอร์ไม่มีปัญหาใด ๆ ? โดยทั่วไปคุณเขียนโปรแกรม คุณจะรู้ได้อย่างไรว่าไม่มีข้อบกพร่อง? คุณทำไม่ได้ คุณเขียนข้อสอบและหวังว่าจะดีที่สุด ฉันจำเป็นต้องแปลงซอร์สโค้ดเป็นชุดประกอบหรือไม่ ไม่อย่างแน่นอน. คุณสามารถเชื่อถือ C คอมไพเลอร์ คุณกำลังทำสิ่งเดียวกัน แต่แทนที่ชุดประกอบด้วย C (หรือภาษาอื่น ๆ ที่คุณเลือก)
Yuval Filmus

โอเคฉันต้องไว้วางใจในทักษะของฉัน ^^ ฉันต้องการถามกระบวนการที่จะรวบรวม ฉันไม่เข้าใจจริงๆว่าคอมไพเลอร์ทำอะไร, วากยสัมพันธ์และคำศัพท์วิเคราะห์โอเค แต่ต่อไป ??
BaptisteL

จากนั้นคุณสร้างรหัส หากคุณไม่ต้องการทราบรายละเอียดในการสร้างรหัสเครื่องคุณสามารถสร้างรหัสในภาษาอื่น ๆ พูดรหัส C และใช้คอมไพเลอร์ภายนอกเพื่อรวบรวมรหัสในเครื่อง (หรือคุณสามารถใช้ภาษาที่ตีความแล้วเรียกใช้ล่ามได้)
Yuval Filmus

Hummm No ฉันต้องการทำสิ่งนั้นก่อน: ภาษาของฉันในการป้อน -> รหัสเครื่อง ฉันไม่ต้องการแปลงภาษาของฉันเป็นภาษาอื่น (เหมือนกันสำหรับการรวบรวมครั้งแรก) เป็นไปได้ไหม
BaptisteL

2

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.