Gibt es irgendetwas in .NET, das es mir ermöglicht, eine Grammatik zu definieren und eine Programmiersprache zu generieren?

18

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?

user1525474
quelle
6
PHP und Javascript sind eigentlich keine DSL's. Eine DSL ist eine Sprache, die sich mit einer bestimmten Problemdomäne befasst, beispielsweise mit medizinischen Dienstleistungen. SQL ist ein DSL, da es spezifisch für die Problemdomäne der Arbeit mit relationalen Datensätzen ist. Weitere Informationen finden Sie unter en.wikipedia.org/wiki/Domain-specific_language .
Robert Harvey
Nemerle vielleicht?
CND

Antworten:

10

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:

k3b
quelle
Update: ANTLR4 gibt nur Java aus, während ANTLR3 weiterhin C # unterstützt, es werden jedoch keine größeren Updates angezeigt.
Stefano Sanfilippo
3

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 #?

Gemeinschaft
quelle