Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

สร้างภาษาการเขียนโปรแกรมของเล่นใน Ruby

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

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

เหตุใดจึงต้องสร้างภาษาการเขียนโปรแกรม

Stoffle อาจจะไม่แทนที่ Python หรือ Ruby เลย แล้วจะพัฒนาไปทำไม? นอกจากเรื่องสนุกแล้ว สิ่งที่ฉันหวังว่าจะได้แสดงในซีรีส์นี้คือ การสร้างภาษาเป็นแบบฝึกหัดการเขียนโปรแกรมที่ยอดเยี่ยม ประสบการณ์นี้มีประโยชน์หลายประการ:

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

  • แบบฝึกหัดนี้จะนำเสนอความท้าทายในการเขียนโปรแกรมที่ไม่ธรรมดา ที่พวกเราส่วนใหญ่ไม่เคยพบเจอในชีวิตประจำวัน

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

ภาษาการเขียนโปรแกรมทำงานอย่างไร

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

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

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

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

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

ภาพมุมสูงของ Stoffle

ดังที่ได้กล่าวไว้ก่อนหน้านี้ Stoffle จะเป็นภาษาโปรแกรมเบื้องต้น ตีความ และพิมพ์แบบไดนามิก ซึ่งจะประกอบด้วยข้อมูลพื้นฐานเพียงไม่กี่ชนิด ตัวดำเนินการเลขคณิตพื้นฐานสี่ตัว การเปรียบเทียบและความเท่าเทียมกัน ตัวดำเนินการเชิงตรรกะ if / else while loop ฟังก์ชัน และความสามารถในการพิมพ์ไปยังคอนโซล

เรื่องไม่สำคัญ:ภาษาที่คล้ายกับ Stoffle ซึ่งมีจุดประสงค์หลักคือการเรียนรู้และการทดลองมักเรียกว่า ภาษาของเล่น .

ล่ามของ Stoffle จะดำเนินการโดยใช้ Ruby ที่น่าเชื่อถือและเป็นที่รักของเราดังที่ได้กล่าวไว้ก่อนหน้านี้ เมื่อเราจุดไฟล่ามของเรา (stoffle hello_world.sfe ) ส่วนประกอบและเฟสที่ไฟล์ต้นฉบับของเราจะผ่านก่อนที่จะรันมีดังนี้:

สร้างภาษาการเขียนโปรแกรมของเล่นใน Ruby

ส่วนต่างๆ ของล่ามของเราและสิ่งที่จะเกิดขึ้นเมื่อมีการเรียกใช้ไฟล์ .sfe

เล็กเซอร์

ยังเป็นที่รู้จักกันในนามเครื่องสแกน ภารกิจของ lexer คือการแปลงสตริงอักขระธรรมดาให้เป็นกลุ่มที่สมเหตุสมผลซึ่งโดยทั่วไปเรียกว่า 'โทเค็น' ลองนึกภาพเราประกาศตัวแปรชื่อ my_var. lexer ของเราจะอ่านอักขระเหล่านี้และสร้าง Token::VARIABLE โทเค็น

ตัวแยกวิเคราะห์

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

งานหลักของ parser คือการแปลงลำดับโทเค็นแบบเรียบเป็นโครงสร้างข้อมูลที่สามารถแสดงความสัมพันธ์ที่มีอยู่ระหว่างพวกเขาได้ หน้าที่ที่สำคัญอีกประการของ parser คือการแจ้งให้เราทราบเมื่อเราทำผิดพลาดโดยการรายงานข้อผิดพลาดทางไวยากรณ์

ล่าม

ล่ามของ Stoffle จะเรียบง่ายและทำงานโดยตรงกับโครงสร้างข้อมูลที่สร้างโดย parser ล่ามจะวิเคราะห์โครงสร้างนี้ทีละชิ้นและดำเนินการตามที่เกิดขึ้น

ในภาษาการเขียนโปรแกรม Stoffle การแปลงเป็นรหัสเครื่องจะเกิดขึ้นเนื่องจากล่ามเองจะเป็นโปรแกรม Ruby (และดังนั้นจึงตีความโดยล่ามของ Ruby ขณะที่เราเรียกใช้!)

สรุป

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

ในบล็อกโพสต์ถัดไปในชุดนี้ เราจะเริ่มทำให้มือของเราสกปรกโดยการใช้ lexer ของ Stoffle ซึ่งหมายความว่าในตอนท้ายของโพสต์ถัดไป เราจะพัฒนาโปรแกรม Ruby ที่สามารถอ่านซอร์สโค้ดของ Stoffle และแปลง a ลำดับอักขระที่ไม่สุภาพเป็นลำดับโทเค็นที่มีโครงสร้างมากขึ้น (และน่าสนใจ!)

แล้วพบกันใหม่ในงวดหน้าของซีรีส์นี้!