Зачем нужны инструменты синтаксического анализа для DSL?

StackOverflow https://stackoverflow.com/questions/501787

  •  20-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Вы можете встроить DSL в более общий язык программирования.Часто это хорошее решение.(Вы могли бы сказать, что этот DSL принимает форму определенного API.)

Вы также можете создать отдельный язык с собственным интерпретатором для представления концепций вашей предметной области.Как правило, это более масштабное мероприятие, в котором часто нет необходимости.

Другие советы

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

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

Прагматичный Программист:От Подмастерья к Мастеру содержит хорошее описание DSL и обстоятельств, в которых они полезны, с примерами.Настоятельно рекомендуется.

У вас по-прежнему будет только семантика принимающего языка.

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

Да, безусловно - a простой API прекрасно подойдет в качестве DSL, если язык хостинга обладает достаточной гибкостью для его поддержки.

Ruby - очень хороший язык для таких целей, особенно учитывая необязательные скобки и другие гибкие возможности.

  • Rails часто называют DSL для написания веб-приложений, управляемых базами данных .

  • Rake - это система сборки с DSL для написания (более интеллектуальных) make-файлов.

Мой собственный ООФАЙЛ это фреймворк, который вы можете рассматривать как DSL для написания приложений баз данных на C ++ - он был вдохновлен dBase и очень интенсивно использует перегрузку операторов C ++, локальные объекты и идиомы потоков.

Forth - классический язык, который стирает грань между DSL и API, поскольку программа Forth состоит чуть больше, чем из серии слов, разделенных пробелами.Вероятно, самым впечатляющим примером Forth DSL является Изобилие - Abundance - это бизнес-язык программирования на базе Forth, написанный на BBL Forth.BBL - это 32-разрядный компилятор DOS FORTH.Распространяется как есть.Смотрите предупреждения.Это не для слабонервных.Это было бы интересно в основном тем, кто разрабатывает программное обеспечение для стран третьего мира, где требуется быстрое выполнение на старом klunker XT и на компьютерах.С его помощью вы можете написать несколько очень сложных программ ввода данных, которые будут описывать круги вокруг современных программ ввода данных.

И, конечно, графический DSL вообще не потребовал бы синтаксического анализа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top