Как написать генератор кода с учетом пользовательских IDL? - PullRequest
1 голос
/ 27 января 2009

Если у вас достаточно простая схема с базовыми булевыми строковыми полями, как писать генератор кода на C ++ Если вы когда-нибудь писали, как вы начали. Статьи / рекомендации приветствуются.

РЕДАКТИРОВАТЬ: Обратите внимание, что это не стандартный CORBA idl.

Ответы [ 3 ]

1 голос
/ 27 января 2009

В итоге:

  1. Конвертировать что-то вручную,
  2. скопируйте этот вывод в строковый литерал и затем
  3. обобщать с помощью циклов и переменных вместо фиксированных имен.

Это особенно хорошая проблема для решения с TDD - начните с настройки фреймворка, такого как CPPUnit (или одна из многих альтернатив ) с глупо простыми тестами, которые просто гарантируют может загрузить файл и просмотреть его содержимое, записав его.

Подходите к решению очень постепенно - получите что-то простое и общее, с проверкой, подтверждающей его работоспособность, затем добавьте более сложный вариант. Например: сначала обрабатывать функции с одним параметром.

Для кода со средней степенью сложности просто используйте длинный набор выходных операторов, используя стандартные ostream-классы C ++, которые позволят вам написать множество литералов кода, смешивающих любые переменные.

0 голосов
/ 03 апреля 2009

К сожалению, в вашем вопросе отсутствуют подробности о том, что именно вы пытаетесь сгенерировать. Однако я сделаю попытку и рекомендую вам взглянуть на дух библиотеки C ++ boost (http://spirit.sourceforge.net).. С помощью Spirit вы можете создавать парсеры. Итак, предположим, что вы написали парсер Spirit для вашего DSL (предметно-ориентированный язык - ваш IDL) вы получите AST (абстрактное синтаксическое дерево) после анализа ваших файлов IDL, которые вы можете использовать с шаблоном посетителя, и, создавая соответствующих посетителей, вы можете генерировать любой вывод, который вам необходим, например, генерировать код.

0 голосов
/ 27 января 2009

Comet - довольно хорошая библиотека для реализации COM.

...