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

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

5 ответов

Решение

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

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

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

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

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

У вас все равно будет только семантика языка хоста.

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

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

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

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

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

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

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

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

Другие вопросы по тегам