Пролог как DSL для генерации кода perl?


Кто-нибудь знает примеры кода, написанного в прологе для реализации DSL для генерации кода perl?

4 3

4 ответа:

DCGs может быть отличным выбором!

Я использовал аналогичный подход для генерации диаграмм классов UML (действительно, graphviz-код для таких диаграмм) из простых английских предложений (shameless-plug: paper here). Вместо этого можно было бы сделать нечто подобное с генерацией кода Perl.

В приведенной выше статье мы используем хранилище ограничений (CHR) в качестве промежуточного представления, которое позволяет получить некоторую дополнительную силу рассуждения. В качестве альтернативы вы можете построить представление в качестве выходного признака / аргумента DCG.

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

Ну, не совсем то, что вы просите, но, возможно, вы можете использовать AI::Prolog для того, что вы ищете. Таким образом, Вы можете использовать Perl и генерировать код Perl, который вы хотите.

Я не понимаю, зачем тебе это нужно?

Perl-очень выразительный язык, я не уверен, почему вы хотите попытаться сгенерировать Perl-код из пролога; чтобы сделать его полезным, вы будете все ближе и ближе к Perl в вашем "DSL", и к этому моменту вам будет лучше просто написать немного Perl, конечно?

Я думаю, что вам нужно немного расширить этот вопрос, чтобы охватить то, чего вы пытаетесь достичь, немного более подробно.

SWI-Prolog библиотека(http/html_write) библиотека строит на DCG DSL для макета страницы.

Он показывает хорошо продуманную модель для интеграции пролога и HTML, но не пытается охватить всю проблему. "Остаточная логика" на стороне клиента остается недооцениваемой, но это разумно, ориентируясь на практические вопросы "отчетности" от RDF.

Таким образом, логика взаимодействия клиента с "мелкими деталями" обрабатывается в виде "черного ящика", и такие требования предъявляются к компонентам YUI в опубликованной заявке (лауреат премии Cliopatria ).

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