Пролог как DSL для генерации кода perl?
Кто-нибудь знает примеры кода, написанного в прологе для реализации DSL для генерации кода perl?
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 ).
Библиотека она расширяема, но будучи очень детализированной, я думаю, что для вашей задачи вы должны в конечном итоге повторно использовать только идеи позади.