มีอะไรใน. NET ที่อนุญาตให้ฉันกำหนดไวยากรณ์และสร้างภาษาการเขียนโปรแกรมหรือไม่


18

ฉันมีหลักสูตรที่ผู้ให้ศาสตราจารย์ขอให้เราสร้าง DSL สำหรับโครงการสุดท้ายของเรา เขานำเสนอเราในหลักสูตรแรกxTextกับ Eclipse นี่เป็นหลักสูตรใหม่ฉันยังคงสับสนเล็กน้อยกับความหมายของภาษาเฉพาะโดเมน

นี่คือความเข้าใจปัจจุบันของฉัน: ภาษาเฉพาะโดเมนเป็นภาษาที่สร้างขึ้นสำหรับปัญหาเฉพาะในการพัฒนาซอฟต์แวร์ ตัวอย่างของ DSL คือ PHP, SQL, JavaScript และในทางตรงกันข้ามภาษาเช่น Java, C #, C ++, Ruby เป็นต้น

โปรดแก้ไขให้ฉันถ้าฉันผิด

สิ่งที่ฉันอยากรู้: มีเครื่องมือใดสำหรับ. NET / Visual Studio ที่คล้ายกับ Xtext ที่ให้ฉันกำหนดไวยากรณ์และได้รับอนุญาตให้สร้างภาษาการเขียนโปรแกรมตามที่มีไดอะแกรมกิจกรรมหรือไม่


6
PHP และ Javascript ไม่ใช่ DSL จริงๆ DSL เป็นภาษาที่ระบุโดเมนปัญหาเฉพาะเช่นบริการทางการแพทย์ SQL เป็น DSL เนื่องจากเป็นโดเมนเฉพาะของปัญหาในการทำงานกับชุดข้อมูลเชิงสัมพันธ์ ดูen.wikipedia.org/wiki/Domain-specific_languageสำหรับข้อมูลเพิ่มเติม
Robert Harvey

Nemerle อาจจะ?
cnd

คำตอบ:


11

วิธีที่ง่ายที่สุดที่จะไปเป็นอินเตอร์เฟซได้อย่างคล่องแคล่ว สิ่งนี้ไม่จำเป็นต้องใช้เครื่องมือเลยและให้การสนับสนุน IntelliSense ที่ยอดเยี่ยมแก่คุณ แต่คุณยังต้องเขียนสิ่งต่าง ๆ ด้วยวิธีการแบบ. NET เช่น

 Mix.Paint(Color.Green).With.Paint(Color.Red);

หรือคุณสามารถเขียน DSLs สวยงามในBoo มีหนังสือทั้งเล่มในหัวเรื่องนั้น


10

คุณสามารถลองใช้ANTLR (หรือเครื่องมืออื่นสำหรับการจดจำภาษา) ตัวแยกวิเคราะห์ที่อยู่ในกลุ่มอื่น ๆ ที่พร้อมใช้งานสำหรับ dotnet ในชุมชนคุณสามารถค้นหาคำจำกัดความของ sql, c # และภาษาอื่น ๆ อีกมากมาย

ตาม google ยังมีการสนับสนุน IDE:


อัปเดต: ANTLR4 ปล่อยเฉพาะ Java ในขณะที่ ANTLR3 ยังคงรองรับ C # แต่จะไม่เห็นการอัปเดตหลัก ๆ
Stefano Sanfilippo

3

คำถามแรกของคุณ - ภาษาเฉพาะของโดเมนคืออะไร ... เนื่องจากใหญ่เกินไปที่จะแสดงความคิดเห็น

ภาษาเฉพาะโดเมนคือภาษาที่ออกแบบมาเพื่อทำงานภายในโดเมนที่มีปัญหา ตัวอย่างเช่นภายในเอ็นจิ้น Unreal (ใช้สำหรับนักกีฬาคนแรก) มีภาษาเฉพาะโดเมนที่ชื่อว่า UnrealScript ที่อนุญาตให้ผู้ใช้หนึ่งคนสามารถปรับเปลี่ยนพฤติกรรมของเอนจิน Unreal ได้ ภาษานี้ถูกออกแบบมาสำหรับการแก้ปัญหาทั่วไป แต่ค่อนข้าง จำกัด เฉพาะโดเมน Redcode (สำหรับ corewars) จะเป็นภาษาเฉพาะโดเมนอื่น ภาษาในContext Free Art ใช้เฉพาะกับโดเมน

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


สำหรับคำถามที่สองของคุณ - เครื่องมือใน C # ... ฉันไม่รู้ C # ดังนั้นจึงไม่รู้จักเครื่องมือที่ดี ที่กล่าวว่าย้อนกลับไปเมื่อฉันกำลังเรียนคอมไพเลอร์ในวิทยาลัยสองเครื่องมือที่ใช้ (และฉันได้ใช้ตั้งแต่) เป็น lex และ yacc จบที่ Stack ล้น ... Lex / Yacc สำหรับ C #?



1

เว็บไซต์นี้อาจจะน่าสนใจสำหรับคุณ: http://nemerle.org เป็นภาษาสำหรับแพลตฟอร์ม. net พร้อมฟีเจอร์ metaprogramming ที่หลากหลาย เมื่อเร็ว ๆ นี้โครงการที่อยู่ภายใต้ปีกของ JetBrains นี้: http://blogs.jetbrains.com/dotnet/2012/06/jetbrains-and-nemerle/

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