Compiler
========

The Compiler is the part of phpDocumentor that is responsible for actually generating the documentation
from the cache generated by the Parser.

It does this by processing a series of :term:`Compiler Passes`; where each :term:`Compiler Pass` is responsible
for manipulating or handling the :term:`Project Descriptor` to progress through the compilation process.

phpDocumentor's Compiler component encapsulates the following processes:

:doc:`compiler/compiler`
    Executes a series of compiler steps to transform the ProjectDescriptor (and its children) to a set of
    :term:`artifacts`. phpDocumentor provides a few compiler steps by default, such as the linker and transformer.
    Consumers can add additional compiler passes using Service Providers.

:doc:`compiler/linker`
    The cached ProjectDescriptor only contains textual references to other elements (such as a parent class). The
    linker subsequently creates a series of default indexes and replaces textual references with Class Descriptor
    objects.
    The linker is one of the first compiler passes in the compiler.

Transformer
    The transformer process is responsible for interpreting a template and executing transformations contained in that
    template. The end-result of this process is that a series of :term:`artifacts` is generated, such a PDF or HTML
    documentation.
