Реализация препроцессора C

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

Ответ 2

Хартмут Кайзер, автор Boost Wave, написал хорошую статью о CodeProject http://www.codeproject.com/KB/recipes/wave_preprocessor.aspx о проекте Boost Wave. Вы можете использовать Boost Wave для создания собственного препроцессора C с пользовательскими расширениями.

Ответ 4

Почему вы хотите реализовать свой собственный препроцессор C?

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

И на практике для нескольких компиляторов C, о которых я знаю (в частности, для GCC), предварительная обработка не выполняется за пределами компилятора (т.е. эти компиляторы больше не едят предварительно обработанные источники, созданные отдельным препроцессором), поэтому имеет смысл расширить или адаптировать собственный препроцессор. Расширение препроцессора GCC достаточно просто (и добавление новой директивы очень просто, для этого достаточно модульный код).

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

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

Я бы предпочел расширить GCC, чтобы удовлетворить ваши потребности, если вы действительно этого хотите. И GCC может быть расширен (через плагины или расширения GCC MELT), не касаясь препроцессора (но предоставляя дополнительные прагмы, встроенные атрибуты...),