Есть ли в .NET что-то, что позволяет мне определять грамматику и генерировать язык программирования?


18

У меня есть курс, по которому профессор попросил нас создать DSL для нашего финального проекта. Он представил нас на первых курсах xText с Eclipse. Поскольку это новый курс, я все еще немного размышляю над тем, что означает предметно-ориентированные языки.

Это мое текущее понимание: язык, специфичный для предметной области, - это язык, созданный для решения конкретных проблем при разработке программного обеспечения. Примерами DSL являются PHP, SQL, JavaScript и, напротив, такие языки, как Java, C #, C ++, Ruby и т. Д.

Пожалуйста, не стесняйтесь поправлять меня, если я ошибаюсь.

Что я хотел бы знать: есть ли какой-либо инструмент для .NET / Visual Studio, похожий на Xtext, который позволяет мне определять грамматику и иметь возможность создавать язык программирования на основе этого с диаграммой деятельности?


6
PHP и Javascript на самом деле не DSL. DSL - это язык, который решает конкретную проблемную область, например, медицинские услуги. SQL является DSL, потому что он специфичен для проблемной области работы с реляционными наборами данных. Смотрите en.wikipedia.org/wiki/Domain-specific_language для получения дополнительной информации.
Роберт Харви

Nemerle может быть?
2012 г.

Ответы:


11

Самый простой способ - это свободный интерфейс . Это вообще не требует никаких инструментов и дает вам отличную поддержку IntelliSense, но вам все равно придется писать вещи в .NET-своего рода стиле, например

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

Кроме того, вы можете написать красивые DSL в Boo . На эту тему есть целая книга .


10

Вы можете попробовать ANTLR (или ANother Tool for Language Recognition) генератор синтаксического анализатора, который среди прочего доступен для dotnet. В сообществе вы можете найти определения для sql, c # и многих других языков.

По словам гугл, есть также ide поддержка:


Обновление: ANTLR4 только испускает Java, в то время как ANTLR3 все еще поддерживает C #, но он не увидит никакого существенного обновления.
Стефано Санфилиппо

3

Ваш первый вопрос - что такое язык, специфичный для предметной области ... потому что он слишком велик, чтобы помещаться в комментарии.

Специфичный для домена язык - это язык, предназначенный для работы в конкретной проблемной области. Например, в движке Unreal (используется для шутеров от первого лица), существует предметно-ориентированный язык UnrealScript, который позволяет изменять поведение движка Unreal. Этот язык предназначен для решения общих проблем, но ограничен его конкретной областью. Redcode (для corewars) будет другим языком, специфичным для домена. Язык в контексте Free Art является специфическим для его области.

Идея состоит в том, что с помощью языка, специфичного для предметной области, можно создать DSL, который будет точно отображать проблему под рукой. На этом этапе проще программировать на DLS, чем на общем языке, даже с добавленными библиотеками, для обработки проблемной области.


Что касается вашего второго вопроса - инструментов в C # ... Я не знаю C # и, следовательно, не знаю инструментов, которые хорошо. Тем не менее, когда я брал урок по компиляции в колледже, два инструмента, которые использовались (и я с тех пор использовал), это lex и yacc. За переполнением стека ... Lex / Yacc для C #?



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.