• Semantic analysis recognizes and resolves the macro invocation.
    • It replaces the AST of the macro invocation with the AST returned by the macro.
    • If the AST returned by the macro contains other macro invocations, this process iterates.