แม้ว่าจะมีเฟรมเวิร์กที่สร้างขึ้นโดยเฉพาะสำหรับวัตถุประสงค์ในการเขียนโปรแกรมภาษาต้นแบบ (รวมถึงความหมาย, ระบบพิมพ์, การประเมินผลรวมถึงการตรวจสอบคุณสมบัติเกี่ยวกับพวกเขา) แต่ตัวเลือกที่ดีที่สุดขึ้นอยู่กับกรณีและความต้องการเฉพาะของคุณ
เมื่อพูดถึงแล้วมีหลายทางเลือก (อาจไม่แตกต่างกันมาก) ที่คุณอาจเลือกใช้ (ซึ่งรวมถึงสิ่งที่คุณได้กล่าวถึงไปแล้ว):
- ใช้ภาษา / กรอบงานเฉพาะที่ออกแบบมาสำหรับการสร้างและสร้างต้นแบบภาษาใหม่: เช่น Redex [1] ภาษาเฉพาะโดเมนที่ฝังอยู่ใน Racket สำหรับการระบุและตรวจสอบความหมาย (ปฏิบัติการ) ของภาษาโปรแกรมซึ่งให้คำจำกัดความของ ภาษาให้การจัดการงานง่าย ๆ เช่นการเรียงพิมพ์ (ในลาเท็กซ์) การตรวจสอบร่องรอยของการลดการทดสอบหน่วยและการทดสอบแบบสุ่ม (เช่นการตรวจสอบการพิมพ์)
- ใช้ภาษาการสร้างแบบจำลองทั่วไปที่เสนอการกำหนดและดำเนินการวิเคราะห์บางอย่างได้อย่างง่ายดายตราบใดที่พวกเขาสามารถจับภาพภาษาเฉพาะที่อยู่ในมือในระดับที่จำเป็น; อัลลอยด์ [2] เป็นตัวอย่างของวิธีการดังกล่าว: แม้ว่าจะค่อนข้างทั่วไปและมีความยืดหยุ่นภาษาที่สามารถจำลองเป็นความสัมพันธ์ระหว่างรัฐในขณะที่การสนับสนุนสำหรับการตรวจสอบรูปแบบ (เช่นการประเมินภายในภาษาดังกล่าว) มาฟรีหลังจากความหมายจะแสดงด้วย โมเดลความสัมพันธ์ (เช่นแนวคิดบางประการสำหรับการสร้างแบบจำลองความหมายของภาษาสามารถพบได้ใน [3])
- การฝังภาษาเพื่อตรวจสอบคุณสมบัติโดยใช้ทฤษฏีบทพิสูจน์ ตัวอย่างจะกำหนดภาษาเช่นเดียวกับความหมายของมันโดยการฝังไว้ในระบบพิสูจน์เช่น Coq [4] (รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการนี้เช่นเดียวกับการอภิปรายและการสาธิตความแตกต่างระหว่างการฝังลึกและตื้นใน Coq 5])
- ใช้ Ott Ott ช่วยให้คุณสามารถกำหนดภาษาการเขียนโปรแกรมในสัญกรณ์ที่สะดวกและผลิตการเรียงพิมพ์และคำจำกัดความในระบบพิสูจน์ (โดยปกติจะฝังลึก) ซึ่งการตรวจสอบส่วนใหญ่ (เช่นการพิสูจน์) จะต้องดำเนินการด้วยตนเอง
- การพัฒนาภาษาและความหมายของมันเช่นเดียวกับการตรวจสอบที่เหมาะสม (เช่นการทดสอบ) "ตั้งแต่เริ่มต้น" ในภาษาโปรแกรมวัตถุประสงค์ทั่วไปและการแปลเป็นระบบอื่น ๆ หากจำเป็นต้องมีสำหรับการตรวจสอบจุดประสงค์ (บางภาษาเช่น Leon [6]) รวมตัวตรวจสอบในตัวซึ่งอนุญาตให้พิสูจน์คุณสมบัติบางอย่างโดยอัตโนมัติและทำให้วิธีนี้คล้ายกับการฝังในระบบพิสูจน์)
โปรดทราบว่ามีการแลกเปลี่ยนระหว่างความง่ายในการใช้กรอบ / เครื่องมือ (เช่นง่ายเหมือนการวางคำจำกัดความบนกระดาษหรือในลาเท็กซ์) และกลไกที่มีประสิทธิภาพสำหรับการตรวจสอบคุณสมบัติเกี่ยวกับภาษา (เช่นการฝัง ภาษาในทฤษฎีบทพิสูจน์สามารถอนุญาตให้ตรวจสอบคุณสมบัติที่ซับซ้อนมาก)
[1] Casey Klein, John Clements, Christos Dimoulas, Carl Eastlund, Matthias Felleisen, Matthew Flatt, Jay A. McCarthy, Jon Rafkind, Sam Tobin-Hochstadt และ Robert Bruce Findler ดำเนินการวิจัยของคุณ: กับประสิทธิผลของเครื่องจักรน้ำหนักเบา POPL, 2012
[2] Daniel Jackson โลหะผสม: สัญกรณ์การสร้างแบบจำลองวัตถุที่มีน้ำหนักเบา TOSEM, 2002
[3] Greg Dennis, Felix Chang, Daniel Jackson การตรวจสอบรหัสแบบแยกส่วนด้วย SAT ISSTA, 2006
[4] ระบบการจัดการพิสูจน์แบบเป็นทางการ Coq
[5] การใช้เหตุผลอย่างเป็นทางการเกี่ยวกับโปรแกรม Adam Chlipala, 2016
[6] ระบบอัตโนมัติของ Leon เพื่อตรวจสอบซ่อมและสังเคราะห์โปรแกรมสกาล่าที่ใช้งานได้