Зачем нужны инструменты синтаксического анализа для DSL?
Вопрос
Разве 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 вообще не потребовал бы синтаксического анализа.