Пролог как DSL для генерации Perl-кода? - PullRequest
3 голосов
/ 22 февраля 2011

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

Ответы [ 4 ]

2 голосов
/ 25 февраля 2011

DCG могут быть отличным выбором!

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

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

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

1 голос
/ 22 декабря 2011

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

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

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

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

1 голос
/ 23 февраля 2011

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

1 голос
/ 22 февраля 2011

Я не уверен, почему вы хотели бы сделать это?

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

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

...