.NET'te bir dilbilgisi tanımlamama ve bir programlama dili oluşturmama izin veren bir şey var mı?


18

Profesörün son projemiz için bir DSL oluşturmamızı istediği bir kursum var. Eclipse ile ilk derslerde xText'i bize sundu . Bu yeni bir kurs olmakla birlikte, Etki Alanına Özgü Dillerin ne anlama geldiği konusunda biraz bulanıkım.

Şu anki anlayışım: alana özgü bir dil, yazılım geliştirmedeki belirli sorunlar için oluşturulan bir dildir. DSL örnekleri PHP, SQL, JavaScript ve tersi Java, C #, C ++, Ruby vb.

Eğer yanılıyorsam, lütfen beni düzeltmekten çekinmeyin.

Ne bilmek istiyorum: Xtext benzer, bana bir dilbilgisi tanımlamak ve bir etkinlik diyagramı ile buna dayalı bir programlama dili oluşturmak için izin veren .NET / Visual Studio için herhangi bir araç var mı?


6
PHP ve Javascript gerçekten DSL değildir. DSL, tıbbi hizmetler gibi belirli bir sorun alanına hitap eden bir dildir. İlişkisel veri kümeleriyle çalışmanın sorun alanına özgü olduğu için SQL bir DSL'dir. Daha fazla bilgi için en.wikipedia.org/wiki/Domain-specific_language adresine bakın .
Robert Harvey

Nemerle belki?
cnd

Yanıtlar:



10

Dotnet için kullanılabilen diğer çözümleyiciler arasında bir ayrıştırıcı oluşturucuyu ANTLR (veya Dil Tanıma için Başka Bir Araç) deneyebilirsiniz . Toplulukta sql, c # ve diğer birçok dil için tanımları bulabilirsiniz.

Google'a göre ide desteği de var:


Güncelleme: ANTLR4 yalnızca Java'yı yayınlarken, ANTLR3 hala C #'ı destekliyor, ancak büyük bir güncelleme görmeyecek.
Stefano Sanfilippo

3

İlk sorunuz - alana özgü bir dil nedir ... çünkü bu bir yoruma sığmayacak kadar büyük.

Etki alanına özgü dil, belirli bir sorun etki alanında çalışmak üzere tasarlanmış bir dildir. Örneğin, Unreal motoru (birinci şahıs atıcılar için kullanılır) içinde, UnrealScript adı verilen ve Unreal motorunun davranışını değiştirmesine izin veren alana özgü bir dil vardır. Bu dil genel problemleri çözmek için tasarlanmıştır ancak daha ziyade spesifik alanı ile sınırlıdır. Redcode (corewars için) alana özel başka bir dil olacaktır. Bağlamsız Sanat içindeki dil , kendi alanına özgüdür.

Fikir, etki alanına özgü bir dille, problemi el altında tutan bir DSL oluşturabilir. Bu noktada, DLS'de programlamak, sorunlu etki alanını işlemek için eklenen kütüphanelerle bile genel bir dilde programlamaktan daha kolaydır.


İkinci sorunuza gelince - C # 'daki araçlar ... C #' ı bilmiyorum ve bu yüzden araçları o kadar iyi bilmiyorum. Bununla birlikte, üniversitede bir derleyici sınıfı alırken kullanılan araçlardan ikisi (ve o zamandan beri kullandım) lex ve yacc. Stack Overflow'da ... Lex / Yacc için C #?



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.