Зачем нужны инструменты синтаксического анализа для 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. С его помощью вы можете написать несколько очень сложных программ ввода данных, которые будут вращаться вокруг современных программ ввода данных.