Глядя на оригинальную статью Читама за 1966 г., на которую ссылаются работы Виллинка и Мучника, я бы суммировал различные типы макросов, например:
- Текстовые макросы выполняют замену текста перед сканированием и анализом.
- Синтаксические макросы обрабатываются во время сканирования и анализа.Вызов макроса синтаксиса заменяет вызов макроса другим фрагментом AST.
- Вычислительные макросы могут выполняться в любой момент после того, как AST был создан сканером и анализатором.Дело в том, что на данном этапе мы больше не обрабатываем какой-либо текст, а вместо этого манипулируем узлами AST, т. Е. Имеем дело с объектами, к которым уже может быть прикреплена семантическая информация.
IЯ не эксперт по внутренним компонентам C ++, но я предполагаю, что встраивание вызовов функций и создание экземпляров шаблонов связано с манипулированием синтаксическим деревом до, во время и после того, как оно аннотировано семантической информацией, необходимой для его правильной компиляции, поскольку оба из них, похоже, предполагают, что знаютмного вещей (например, информация о типе и, если что-то хорошо, чтобы быть встроенными), которые еще не известны во время сканирования и анализа.