Каковы лучшие (мощные, но простые) языки для реализации обработки текста / данных и генерации кода? - PullRequest
2 голосов
/ 12 мая 2010

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

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Пролог. Определенно пролог. Я знаю, что это не ванильный вариант, поэтому вот обоснование:

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

На самом деле я занимался такими проектами: генераторы от естественного пролога до таких языков, как SQL и Erlang. Знакомство с Прологом занимает некоторое время, но, по моему опыту, оно того стоит.

0 голосов
/ 12 мая 2010

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

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

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

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

(Полное раскрытие: я являюсь руководителем DMS).

...