Изменение сгенерированного кода - PullRequest
3 голосов
/ 17 августа 2010

Я оборачиваю библиотеку C ++ в PHP, используя SWIG , и были некоторые случаи, когда я хотел изменить сгенерированный код (как сгенерированный C ++, так и PHP):

  • Исправление ошибок генерации кода
  • Добавление кода, который имеет смысл в PHP, но не в C ++ (например, проверка типов)
  • Добавление тегов документации (например, phpDoc)

В настоящее время я автоматизирую эти модификации с помощью patch.Этот подход работает, но он кажется дорогостоящим и хрупким.Есть ли лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 18 августа 2010

Генерация кода - довольно широкая тема, и, безусловно, есть много других подходов, которые могут быть более интересными для вас, как упоминалось выше.Но если вы не хотите использовать другой инструмент, в зависимости от того, какой код генерируется и от возможностей PHP OO, вы можете использовать шаблон Generation Gap .

1 голос
/ 20 августа 2010

Лучше всего, чтобы генератор кода генерировал правильный код для ваших нужд.Ручная настройка сгенерированного вывода неустойчива.Вам придется заново настраивать его каждый раз, когда изменяется входной сигнал.

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

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

В качестве альтернативы, вы можете написать свой собственный генератор кода, но я подозреваю, что это гораздо больше работы, чем вы хотите.Это также зависит от того, что вы делаете.Иногда генерация кода на самом деле является просто макро-расширением, и для этого есть множество хороших инструментов.

Удачи!

1 голос
/ 18 августа 2010

Впоследствии у вас может возникнуть кошмар обслуживания. Вместо SWIG вы можете рассмотреть возможность использования другого генеративного подхода, который:

  • Позволяет добавить свой код непосредственно в модель (чтобы вам не нужно было добавлять его после генерации)
  • Позвольте вам определить свой собственный генератор. Эта функция сама по себе может избавить от необходимости добавлять пользовательский код все время.

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

Но исправление автоматизации с помощью другой автоматизации ...

...