2010-05-12 5 views
2

Если я хочу написать свой движок, который будет генерировать весь код, решающий задачу, описанную в простом декларативном стиле, на каких языках я должен смотреть?Каковы лучшие (мощные, но простые) языки для реализации обработки текста и данных и генерации кода?

+1

Пожалуйста, сделайте это вопросом сообщества Wiki; нет единого правильного ответа. –

+0

Ответ отсутствует. Сгенерировать все решения для «задачи»? Какая задача? – bmargulies

ответ

1

Пролог. Определенно, Пролог. Я знаю, что это не вариант ванили, так вот объяснение:

  • Пролога имеет гибкий синтаксис, который может быть сделан еще более гибким при использовании его интерпретации время механизма макроподстановок (a.k.a срока расширения).
  • В том случае, если собственный синтаксис не будет выполняться, Prolog имеет хороший встроенный механизм синтаксического анализа: определенная классовая грамматика (DCG).
  • Prolog предназначен для поиска решений на основе объявлений.
  • В Prolog есть несколько полезных библиотек для декларативных вычислений, таких как решение ограничения, решение линейных уравнений и т. Д.
  • Пролог ищет все решения, делая естественным изменения и оптимизацию.
  • В Prolog используются гибкие структуры данных (функторы), которые он может анализировать и генерировать, что создает сложные структуры в довольно естественном виде. Вам не требуется генерация строк: вы можете создавать функторы, а затем печатать их. DCG также помогает в этом.

Я действительно делал такие проекты: генераторы из естественного пролога на такие языки, как SQL и Erlang. Знакомство с Prolog занимает некоторое время, но по моему опыту это стоит вашего времени.

0

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

Двигатель, предназначенный для реализации произвольной обработки и генерации кода, является DMS Software Reengineering Toolkit. DMS анализирует большое количество языков, будет принимать определённые количества языков (включая спецификации или языки моделирования), обеспечивает сопоставление и преобразование шаблонов с использованием декларативных шаблонов, написанных на синтаксисе источника и т. Д.

DMS не является ни одним языком; скорее, это набор доменных языков (DSL), каждый из которых обеспечивает поддержку одной из проблем, которые должен решать инструмент метапрограммирования кода: langauge grammars, вычисления атрибутов, сопоставление/преобразование шаблонов, анализ потоков, сценарий задач.

DMS чрезвычайно мощный; он используется для создания многих инструментов анализа кода, генерации и трансформации (на веб-сайте, предлагаемом в качестве инструментов COTS, вы можете увидеть множество примеров). Не обязательно легко, потому что анализ/преобразование кода для реальных langauges, таких как Java, C# и C++, является сложным, поскольку эти языки сложны и потому что основная проблема преобразования кода с одного уровня абстракции в другой и создания оптимизированных результаты в корне сложны. Я заявлю, что DMS так же просто, как и практический для целевой задачи.

(Полное раскрытие информации: Я являюсь главным за DMS).