 
/**
 * \mainpage Xreate Compiler Internals
 * \section overview_sect Overview
 * \tableofcontents
 * In a nutshell, \ref xreate::XreateManager is the entry point of the Xreate compiler API for clients to start off by instantiating it.
 * 
 * \ref xreate::XreateManager's responsibility is a control over internal compiler's workflow consisting of steps as follows:
 * - Parsing.
 * - Internal passes and analyses.
 * - Reasoning.
 * - Bytecode generation.
 *
 * \section install_sect Build and run
 * For build instructions and examples see [Build and Run](/d/build/).
 * 
 * \section grammar_sect Grammar
 * The Xreate grammar located in two files in a [COCO](http://www.ssw.uni-linz.ac.at/Coco/) parser generator's format:
 * - `/grammar/xreate.ATG` : main Xreate grammar file.
 * - `/grammar/modules.ATG`: modules management grammar. See \ref xreate::modules and [Modules Explanation](/d/syntax/modules/) for details.
 
 * \section parsing_sect Parsing
 * \ref xreate::AST represents the Xreate's syntax tree. It's produced by `Scanner` and `Parser` themselves generated by the Coco generator.
 * 
 * \section var_passes_sect Internal passes
 * Once \ref xreate::AST is built, \ref xreate::XreateManager runs number of passes as a preparation 
 * for *reasoning* (see \ref xreate::TranscendLayer)  and *compilation* (see \ref xreate::CompilePass). 
 * 
 * There is \ref xreate::Attachments to address a need of communication between various passes and stages. 
 * Passes may store additional pieces of information as AST node attachments for future use by consequent passes. 
 * Ultimately, all accumulated this way data is used to facilitate, enhance and refine the compilation process.
 * 
 * Currently there is a number of passes available, among them are:
 *  - \ref xreate::cfa::CFAPass to perform CFA(Control Flow Analysis). The output is stored in \ref xreate::cfa::CFAGraph.
 *  - \ref xreate::dfa::DFAPass to perform DFA(Data Flow Analysis). The output is stored in \ref xreate::dfa::DFAGraph.
 *  - \ref xreate::interpretation::InterpretationPass to perform the interpretation analysis. See \ref xreate::interpretation, [interpretation overview](/d/concepts/interpretation/).
 * 
 * Each pass either implements \ref xreate::IPass interface or inherits \ref xreate::AbstractPass as a more convenient wrapper.
 * \ref xreate::PassManager is the base class to manage passes and \ref xreate::XreateManager inherits \ref xreate::PassManager to control builtin passes.
 * 
 * \section reasoning_sect Reasoning
 * \ref xreate::TranscendLayer is a wrapper over an external ASP reasoner (currently [Clasp](https://potassco.org/clasp/)).
 * Previously executed passes' output is collected(see \ref xreate::IAnalysisReport, \ref analysis/utils.h)  to compose 
 * a _logic program_ in Clasp reasoner's ASP syntax format. See \ref xreate::TranscendLayer for more details.
 * 
 * Clients may implement  \ref xreate::IQuery interface to to access Clasp reasoner's solutions. There is number of existing queries, such as:
 *  - \ref xreate::containers::Query to get solutions regarding Containers.
 *  - \ref xreate::latex::LatexQuery to get solution regarding [Context](/d/concepts/context/). 
 *  - \ref xreate::polymorph::PolymorphQuery to get solutions regarding Polymorphism.
 * 
 * Also, currently a number of analyses are performed  bypassing ASP reasoner:
 *  - \ref typeinference.h Type Inference.
 *  - \ref xreate::interpretation::InterpretationPass Interpretation analysis.
 *  - \ref xreate::versions::VersionsPass Versions analysis.
 *
 * \section compilation_sect Compilation
 * \ref xreate::CompilePass iterates over \ref xreate::AST tree to produce bytecode using additional data supplied by 
 * previous passes(via \ref xreate::Attachments) along with data accessed via queries (\ref xreate::IQuery) from the external Clasp reasoner.
 * Bytecode is generated using LLVM infrastructure represented by \ref xreate::LLVMLayer.
 * There is a number of classes focused on particular compilation aspects, among them are: 
 *   - Containers support. See \ref xreate::containers.
 *   - Context support. See \ref xreate::latex.
 *   - Interpretation support. See \ref xreate::interpretation.
 *   - Loop saturation support. See \ref xreate::compilation::TransformerSaturation.
 *   - Versions support. See \ref xreate::versions.
 *   - Late Transcend support. See \ref xreate::latereasoning.
 *   - External Code access. See \ref xreate::ExternLayer..
 */
