Ich habe einen Kurs, in dem der Professor uns gebeten hat, eine DSL für unser Abschlussprojekt zu erstellen. Er hat uns in den ersten Kursen xText mit Eclipse vorgestellt. Da dies ein neuer Kurs ist, bin ich immer noch ein bisschen verwirrt, was domänenspezifische Sprachen bedeuten.
Dies ist mein derzeitiges Verständnis: Eine domänenspezifische Sprache ist eine Sprache, die für bestimmte Probleme in der Softwareentwicklung erstellt wird. Beispiele für DSLs sind PHP, SQL, JavaScript und im Gegenteil Sprachen wie Java, C #, C ++, Ruby usw.
Bitte zögern Sie nicht, mich zu korrigieren, wenn ich falsch liege.
Was ich wissen möchte: Gibt es ein Tool für .NET / Visual Studio, das Xtext ähnelt, mit dem ich eine Grammatik definieren und eine darauf basierende Programmiersprache mit einem Aktivitätsdiagramm generieren kann?
Antworten:
Der einfachste Weg ist eine flüssige Benutzeroberfläche . Dies erfordert überhaupt keine Tools und bietet großartigen IntelliSense-Support, aber Sie müssen trotzdem Dinge auf eine Art .NET-Art schreiben, wie z
Alternativ kannst du auch schöne DSLs in Boo schreiben . Es gibt ein ganzes Buch zu diesem Thema.
quelle
Sie können ANTLR (oder ein anderes Tool zur Spracherkennung) ausprobieren, einen Parser-Generator, der unter anderem für Dotnet verfügbar ist. In der Community finden Sie Definitionen für SQL, C # und viele andere Sprachen.
Laut google gibt es auch ide support:
quelle
Ihre erste Frage: Was ist eine domänenspezifische Sprache? Diese ist zu groß, um in einen Kommentar zu passen.
Eine domänenspezifische Sprache ist eine Sprache, die für eine bestimmte Problemdomäne entwickelt wurde. Beispielsweise gibt es in der Unreal-Engine (die für Ego-Shooter verwendet wird) eine domänenspezifische Sprache namens UnrealScript, mit der das Verhalten der Unreal-Engine geändert werden kann. Diese Sprache wurde zur Lösung allgemeiner Probleme entwickelt, ist jedoch auf ihre spezifische Domäne beschränkt. Redcode (für Corewars) wäre eine andere domänenspezifische Sprache. Die Sprache innerhalb von Context Free Art ist spezifisch für seine Domäne.
Die Idee ist, dass mit einer domänenspezifischen Sprache eine DSL erstellt werden kann, die das vorliegende Problem genau abbildet. Zu diesem Zeitpunkt ist es einfacher, im DLS zu programmieren, als in einer allgemeinen Sprache, selbst wenn die Bibliotheken hinzugefügt wurden, um die Problemdomäne zu behandeln.
Was Ihre zweite Frage betrifft - die Tools in C # ... Ich kenne C # nicht und daher kenne ich die Tools nicht so gut. Das heißt, damals, als ich eine Compiler-Klasse am College belegte, waren zwei der Werkzeuge, die verwendet wurden (und die ich seitdem verwendet habe), Lex und Yacc. Drüben beim Stapelüberlauf ... Lex / Yacc für C #?
quelle
Es gibt ein Visualisierungs- und Modellierungs-SDK für Visual Studio, das Text Templating (T4-Vorlagen) und domänenspezifische Sprachen unterstützt.
http://msdn.microsoft.com/en-us/library/dd820703.aspx
quelle
Diese Seite könnte für Sie interessant sein: http://nemerle.org . Es ist eine Sprache für die .net-Plattform mit umfangreichen Funktionen zur Metaprogrammierung. In jüngerer Zeit steht das Projekt unter der Schirmherrschaft der JetBrains: http://blogs.jetbrains.com/dotnet/2012/06/jetbrains-and-nemerle/ .
quelle