นี่เป็นส่วนหนึ่งของชุดคำถามที่มุ่งเน้นไปที่โครงการน้องกับโครงการ Abstraction ซึ่งมีจุดมุ่งหมายเพื่อสรุปแนวคิดที่ใช้ในการออกแบบภาษาในรูปแบบของกรอบ โปรเจ็กต์น้องสาวเรียกว่า OILexer ซึ่งมีวัตถุประสงค์เพื่อสร้างตัวแยกวิเคราะห์จากไฟล์ไวยากรณ์โดยไม่ต้องใช้การฉีดโค๊ดในการจับคู่
บางหน้าอื่น ๆ ที่เกี่ยวข้องกับคำถามเหล่านี้เกี่ยวข้องกับการพิมพ์โครงสร้างสามารถดูได้ที่นี่และความสะดวกในการใช้งานที่พบที่นี่ เมตาหัวข้อที่เกี่ยวข้องกับสอบถามรายละเอียดเพิ่มเติมเกี่ยวกับกรอบและสถานที่ที่เหมาะสมในการโพสต์สามารถพบได้ที่นี่
ฉันมาถึงจุดที่ฉันจะเริ่มแยกต้นไม้แยกออกจากไวยากรณ์ที่กำหนดตามด้วย Recursive Descent parser ซึ่งใช้ DFA เพื่อแยกแยะเส้นทางข้างหน้า (คล้ายกับ ANTLR 4's LL (*)) ดังนั้นฉันจึง คิดว่าฉันจะเปิดมันเพื่อรับข้อมูลเชิงลึก
ในคอมไพเลอร์ตัวแยกวิเคราะห์คุณลักษณะชนิดใดที่เหมาะที่สุด?
จนถึงตอนนี้เป็นภาพรวมคร่าวๆของสิ่งที่นำไปใช้:
- แม่แบบ
- ดูการคาดการณ์ล่วงหน้ารู้ว่าอะไรถูกต้อง ณ จุดที่กำหนด
- Rule 'Deliteralization' ใช้ตัวอักษรในกฎและแก้ไขโทเค็นที่มา
- Automata ของ Nondeterministic
- Automata ที่กำหนด
- เครื่องสถานะศัพท์ง่ายสำหรับการรับรู้โทเค็น
- วิธีอัตโนมัติของ Token:
- สแกน - มีประโยชน์สำหรับความคิดเห็น: ความคิดเห็น: = "/ *" สแกน ("* /");
- ลบ - มีประโยชน์สำหรับตัวระบุ: ตัวระบุ: = ลบ (IdentifierBody, คำหลัก);
- ตรวจสอบให้แน่ใจว่าตัวระบุไม่ยอมรับคำหลัก
- Encode - เข้ารหัสระบบอัตโนมัติเป็นจำนวนชุด X ของการเปลี่ยน N ฐาน
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
- ทำให้การหลบหนีแบบ Unicode เป็นเลขฐานสิบหกโดยมีการเปลี่ยนเป็นแบบ hex 4 จุด ความแตกต่างระหว่างสิ่งนี้และ: [0-9A-Fa-f] {4} คือการทำให้เป็นอัตโนมัติที่เกิดขึ้นพร้อม Encode จะ จำกัด ชุดค่าเลขฐานสิบหกที่อนุญาตให้อยู่ในขอบเขตของ IdentifierCharNoEscape ดังนั้นถ้าคุณให้มัน \ u005c เวอร์ชันการเข้ารหัสจะไม่ยอมรับค่า สิ่งนี้มีข้อแม้ที่ร้ายแรง: ใช้เท่าที่จำเป็น ระบบอัตโนมัติที่เกิดขึ้นอาจมีความซับซ้อนมาก
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
สิ่งที่ไม่ได้ดำเนินการคือการสร้าง CST ฉันต้องปรับระบบอัตโนมัติที่กำหนดไว้เพื่อดำเนินการตามบริบทที่เหมาะสมเพื่อให้การทำงานนี้เป็นไปได้
สำหรับทุกคนที่สนใจฉันได้อัปโหลดพิมพ์สวยของรูปแบบเดิมของ T * โครงการy♯ แต่ละไฟล์ควรเชื่อมโยงไปยังไฟล์อื่น ๆ ทั้งหมดฉันเริ่มที่จะเชื่อมโยงในกฏแต่ละข้อเพื่อติดตามพวกมัน แต่มันใช้เวลานานเกินไป (จะง่ายกว่าที่จะทำให้เป็นอัตโนมัติ!
หากต้องการบริบทเพิ่มเติมกรุณาโพสต์ตามความเหมาะสม
แก้ไข 5-14-2013 : ฉันได้เขียนโค้ดเพื่อสร้างกราฟ GraphViz สำหรับเครื่องสถานะภายในภาษาที่กำหนด นี่คือเดี่ยว GraphViz ของ AssemblyPart สมาชิกที่เชื่อมโยงในคำอธิบายภาษาควรมี rulename.txt ในโฟลเดอร์ที่สัมพันธ์กับ digraph สำหรับกฎนั้น คำอธิบายภาษาบางส่วนมีการเปลี่ยนแปลงตั้งแต่ฉันโพสต์ตัวอย่างนี้เกิดจากการทำให้สิ่งที่เกี่ยวกับไวยากรณ์ง่ายขึ้น ที่นี่เป็นที่น่าสนใจภาพ Graphviz