Coco/R เป็นเครื่องกำเนิดไฟฟ้าคอมไพเลอร์ซึ่งใช้ไวยากรณ์ที่มาจากภาษาต้นทางและสร้างเครื่องสแกนและตัวแยกวิเคราะห์สำหรับภาษานี้ สแกนเนอร์ทำงานเป็นออโตเมตา จำกัด ที่กำหนดได้ ตัวแยกวิเคราะห์ใช้เชื้อสายแบบเรียกซ้ำ LL (1) ความขัดแย้งสามารถแก้ไขได้โดย lookahead หลายสัญลักษณ์หรือโดยการตรวจสอบความหมาย ดังนั้นชั้นเรียนของไวยากรณ์ที่ได้รับการยอมรับคือ LL (K) สำหรับ K โดยพลการ
ฉันใช้ Coco / R เวอร์ชันเทอร์โบมาเป็นเวลานาน บางครั้งจำเป็นต้องเปลี่ยนรหัส หากแหล่งที่มาเปลี่ยนไปฉันจะทำการคอมไพล์อีกครั้ง แต่หลังจากอัปเดต Windows บางครั้งฉันพบว่า Turbo Pascal ไปที่ที่ดีกว่าและหยุดทำงาน โดยทั่วไปฉันคิดว่าภาษาของคนจำนวนมากจาก Niklaus Emil Wirth ทำให้ไม่ชอบ
โดยทั่วไปฉันเชื่อว่ามีคนไม่กี่คนที่มีส่วนร่วมในการพัฒนาการเขียนโปรแกรมและภาษาวิทยาศาสตร์คอมพิวเตอร์
มันง่ายที่จะหาวิธีแก้ปัญหาที่ซับซ้อนและมักจะเข้าใจไม่ได้กับปัญหา เป็นการยากที่จะทำให้ทางออกที่เรียบง่ายสะอาดและเข้าใจได้
เมื่อคุณเห็นการตัดสินใจดังกล่าวเป็นที่ชัดเจนว่านี่เป็นงานของปรมาจารย์ที่มีจดหมายทุน ก่อนอื่นฉันพอร์ตรหัสจาก Turbo Pascal แต่ฉันค้นพบว่าในเกือบ 20 ปีมีน้ำจำนวนมากไหลผ่านสะพานและรหัส Coco/R ก็ดีขึ้นเช่นกัน
เวอร์ชันสุดท้ายที่ฉันพบคือ C ++, C #, Java จากนั้นฉันตัดสินใจพอร์ตรหัสและเลือก C # ด้วยจิตวิญญาณนี่เป็นภาษาที่ใกล้เคียงกับ Delphi มากที่สุดอาจเกิดจากความจริงที่ว่าพวกเขามีสถาปนิกหัวหน้าคนหนึ่ง
คุณสามารถดูตัวอย่างการใช้งานในโครงการ Protobuf-Delphi
มันควรจะใช้ชุดเฟรมเดียวกันสำหรับสแกนเนอร์และตัวแยกวิเคราะห์สำหรับภาษาที่แตกต่างกัน คอมไพเลอร์ขึ้นอยู่กับโครงสร้างเฟรมที่ค่อนข้างคงที่สำหรับสแกนเนอร์และตัวแยกวิเคราะห์ ไม่เป็นที่พึงปรารถนาที่จะเปลี่ยนลำดับของส่วนเนื่องจากสามารถนำไปสู่ข้อผิดพลาดในการรวบรวมในรหัสที่สร้างขึ้น
Cocor.exe -namespace Taste -checkEOF -trace AG taste.atg.
เนมสเปซใช้เมื่อสร้างชื่อโมดูล ตอนนี้ใช้ในเฟรมสแกนเนอร์และตัวแยกวิเคราะห์
MACROS
prefix = "cr" .