Czy w .NET jest coś, co pozwala mi zdefiniować gramatykę i wygenerować język programowania?

18

Mam kurs, na którym profesor poprosił nas o stworzenie DSL dla naszego końcowego projektu. Przedstawił nas na pierwszych kursach xText z Eclipse. Ponieważ jest to nowy kurs, nadal jestem trochę rozmyślany nad tym, co oznaczają języki specyficzne dla domeny.

Oto moje obecne rozumienie: język specyficzny dla domeny to język, który jest tworzony w celu rozwiązania konkretnych problemów związanych z tworzeniem oprogramowania. Przykładami DSL są PHP, SQL, JavaScript, a wręcz przeciwnie - języki takie jak Java, C #, C ++, Ruby itp.

Prosimy o poprawienie mnie, jeśli się mylę.

Co chciałbym wiedzieć: czy jest jakieś narzędzie dla .NET / Visual Studio, które jest podobne do Xtext, które pozwala mi definiować gramatykę i pozwala mi generować język programowania na podstawie tego ze schematem aktywności?

użytkownik1525474
źródło
6
PHP i JavaScript nie są tak naprawdę DSL. DSL to język, który rozwiązuje konkretny problem, na przykład usługi medyczne. SQL to DSL, ponieważ jest specyficzny dla problematycznej dziedziny pracy z relacyjnymi zestawami danych. Zobacz en.wikipedia.org/wiki/Domain-specific_language aby uzyskać więcej informacji.
Robert Harvey
Może Nemerle?
cnd

Odpowiedzi:

11

Najłatwiejszym sposobem jest płynny interfejs . Nie wymaga to żadnych narzędzi i zapewnia doskonałą obsługę IntelliSense, ale nadal musisz pisać rzeczy w stylu .NET, takie jak

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

Alternatywnie możesz pisać piękne DSL w Boo . Istnieje cała książka na ten temat.

pdr
źródło
10

Możesz wypróbować ANTLR (lub inne narzędzie do rozpoznawania języka), generator parserów, który jest między innymi dostępny dla dotnet. W społeczności można znaleźć definicje języka sql, c # i wielu innych języków.

Według Google istnieje również wsparcie ide:

k3b
źródło
Aktualizacja: ANTLR4 emituje tylko Javę, podczas gdy ANTLR3 nadal obsługuje C #, ale nie zobaczy żadnej ważnej aktualizacji.
Stefano Sanfilippo
3

Twoje pierwsze pytanie - co to jest język specyficzny dla domeny ... ponieważ jest on zbyt duży, aby zmieścił się w komentarzu.

Język specyficzny dla domeny jest językiem zaprojektowanym do pracy w obrębie określonej domeny problemowej. Na przykład w silniku Unreal (używanym w strzelankach FPS) istnieje język specyficzny dla domeny o nazwie UnrealScript, który pozwala modyfikować zachowanie silnika Unreal. Ten język jest przeznaczony do rozwiązywania ogólnych problemów, ale jest ograniczony do konkretnej dziedziny. Redcode (dla rdzeni) byłby innym językiem specyficznym dla domeny. Język w kontekście wolnej sztuki kontekstowej jest specyficzny dla jego dziedziny.

Chodzi o to, że w języku specyficznym dla domeny można utworzyć DSL, który dokładnie odwzorowuje dany problem. W tym momencie łatwiej jest programować w DLS niż programować w języku ogólnym, nawet z dodanymi bibliotekami do obsługi domeny problemowej.


Co do twojego drugiego pytania - narzędzia w C # ... Nie znam C #, a zatem nie znam tak dobrze narzędzi. To powiedziawszy, kiedy brałem udział w zajęciach z kompilatora na studiach, dwa z narzędzi, które były używane (i od tamtej pory ich używałem) to lex i yacc. Over at Stack Overflow ... Lex / Yacc for C #?

Społeczność
źródło