Программы, которые пишут программы
Имея такой фрагмент на входе, несложная программа сможет произвести следующий набор деклараций для сообщений об ошибках:
У такого подхода есть несколько достоинств.
Во-первых, соотношение между значениями enum и строками, которые они представляют, получается самодокументированным, и его нетрудно сделать независимым от родного языка пользователя. Во-вторых, информация хранится только в одном месте, в одном "истинном месте", из которого генерируется весь остальной код, так что и все обновление информации выполняется лишь в одном месте. В случае, когда таких мест несколько, после ряда обновлений они неизбежно начнут друг другу противоречить. И наконец, нетрудно сделать так, чтобы файлы программ на С создавались заново и перекомпилировались при каждом изменении заголовочного файла. Когда потребуется изменить сообщение об ошибке, все, что надо будет сделать, – это изменить заголовочный файл и компилировать таким способом операционную систему, и тогда сообщения автоматически обновятся.
Программа-генератор может быть написана на любом языке. Особенно просто это сделать на языке, специально предназначенном для обработки строк, таком как Perl:
Опять в дело пошли регулярные выражения. Выбираются строки, у которых первое поле выглядит как идентификатор, после которого стоит запятая. Первая замена удаляет все символы до первого непустого символа строки комментария, а вторая – символы конца комментария и все предшествующие им пробелы.