Зачем нужны инструменты синтаксического анализа для DSL? - PullRequest
5 голосов
/ 02 февраля 2009

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

Ответы [ 5 ]

5 голосов
/ 02 февраля 2009

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

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

4 голосов
/ 02 февраля 2009

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

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

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

1 голос
/ 02 февраля 2009

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

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

0 голосов
/ 11 мая 2009

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

0 голосов
/ 02 февраля 2009

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

...