Чи є щось у .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 .
Роберт Харві

Немерле, може?
cнд

Відповіді:


11

Найпростіший спосіб - вільний інтерфейс . Для цього зовсім не потрібні інструменти та надається чудова підтримка IntelliSense, але ви все одно повинні писати речі в .NET-вигляді, наприклад,

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

Крім того, ви можете писати прекрасні DSL-файли в Boo . На цю тему є ціла книга .


10

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

За даними Google, існує також підтримка ide:


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

3

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

Мова, визначена для домену, - це мова, призначена для роботи в певній проблемній області. Наприклад, всередині двигуна Unreal (який використовується для шутерів від першої особи) існує спеціальна для домену мова під назвою UnrealScript, яка дозволяє змінювати поведінку двигуна Unreal. Ця мова призначена для вирішення загальних проблем, але скоріше обмежена її конкретною областю. Redcode (для corewars) був би іншою мовою, що залежить від домену. Мова в рамках контекстного вільного мистецтва є специфічною для своєї області.

Ідея полягає в тому, що за допомогою мови, що відповідає домену, можна створити DSL, який тісно відображає проблему. На даний момент програмувати в DLS простіше, ніж програмувати загальною мовою навіть із доданими бібліотеками для обробки проблемного домену.


Що стосується вашого другого питання - інструменти в C # ... я не знаю C # і, отже, не знаю інструментів так добре. Це було сказано, коли я брав у класі компілятор два інструменти, які використовував (і я з тих пір використовував) - це lex та yacc. Над на переповненню стека ... Lex / Yacc для C #?



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.