У меня есть курс, по которому профессор попросил нас создать DSL для нашего финального проекта. Он представил нас на первых курсах xText с Eclipse. Поскольку это новый курс, я все еще немного размышляю над тем, что означает предметно-ориентированные языки.
Это мое текущее понимание: язык, специфичный для предметной области, - это язык, созданный для решения конкретных проблем при разработке программного обеспечения. Примерами DSL являются PHP, SQL, JavaScript и, напротив, такие языки, как Java, C #, C ++, Ruby и т. Д.
Пожалуйста, не стесняйтесь поправлять меня, если я ошибаюсь.
Что я хотел бы знать: есть ли какой-либо инструмент для .NET / Visual Studio, похожий на Xtext, который позволяет мне определять грамматику и иметь возможность создавать язык программирования на основе этого с диаграммой деятельности?
Ответы:
Самый простой способ - это свободный интерфейс . Это вообще не требует никаких инструментов и дает вам отличную поддержку IntelliSense, но вам все равно придется писать вещи в .NET-своего рода стиле, например
Кроме того, вы можете написать красивые DSL в Boo . На эту тему есть целая книга .
источник
Вы можете попробовать ANTLR (или ANother Tool for Language Recognition) генератор синтаксического анализатора, который среди прочего доступен для dotnet. В сообществе вы можете найти определения для sql, c # и многих других языков.
По словам гугл, есть также ide поддержка:
источник
Ваш первый вопрос - что такое язык, специфичный для предметной области ... потому что он слишком велик, чтобы помещаться в комментарии.
Специфичный для домена язык - это язык, предназначенный для работы в конкретной проблемной области. Например, в движке Unreal (используется для шутеров от первого лица), существует предметно-ориентированный язык UnrealScript, который позволяет изменять поведение движка Unreal. Этот язык предназначен для решения общих проблем, но ограничен его конкретной областью. Redcode (для corewars) будет другим языком, специфичным для домена. Язык в контексте Free Art является специфическим для его области.
Идея состоит в том, что с помощью языка, специфичного для предметной области, можно создать DSL, который будет точно отображать проблему под рукой. На этом этапе проще программировать на DLS, чем на общем языке, даже с добавленными библиотеками, для обработки проблемной области.
Что касается вашего второго вопроса - инструментов в C # ... Я не знаю C # и, следовательно, не знаю инструментов, которые хорошо. Тем не менее, когда я брал урок по компиляции в колледже, два инструмента, которые использовались (и я с тех пор использовал), это lex и yacc. За переполнением стека ... Lex / Yacc для C #?
источник
Существует пакет SDK для визуализации и моделирования для Visual Studio, который поддерживает текстовые шаблоны (шаблоны T4) и доменные языки.
http://msdn.microsoft.com/en-us/library/dd820703.aspx
источник
Этот сайт может быть интересен для вас: http://nemerle.org . Это язык для платформы .net с богатыми возможностями метапрограммирования. Совсем недавно проект находился под крылом JetBrains: http://blogs.jetbrains.com/dotnet/2012/06/jetbrains-and-nemerle/ .
источник