 
/**
 * \mainpage Xreate Internals
 * \tableofcontents
 * \attention For installation and examples see [Instruction: First Steps](/w/instructions/first=steps).
 * 
 * In a nutshell, xreate::XreateManager is an entry point of Xreate API and clients should start off by instantiating it. 
 * 
 * xreate::XreateManager is convenient wrapper to control all internal work-flow consisting of steps as follows:
 * - Parsing
 * - Intermediate Passes
 * - Reasoning
 * - Compilation
 *
 * \section grammar_sect Grammar
 * Xreate's  grammar located in two files in COCO parser generator's format
 * - `/grammar/xreate.ATG` : main Xreate's grammar file
 * - `/grammar/modules.ATG` : additional grammar to support modules management. See xreate::modules::XreateManagerDecoratorModules and [Modules Explanation](/w/concepts/modules/) for details 
 * \section parsing_sect Parsing
 * xreate::AST represents Xreate's syntax tree. It's produced by `Scanner` and `Parser` themselves generated by external tool Coco Parser Generator
 * 
 * \section var_passes_sect Intermediate Passes
 * Once xreate::AST is built, xreate::XreateManager runs number of passes as a preparation 
 * for *reasoning*(xreate::ClaspLayer)  and *compilation*(xreate::CompilePass). 
 * 
 * There is xreate::Attachments to address need of communication between various passes and stages.
 * 
 * Currently there are following passes:
 *  - xreate::cfa::CFAPass to perform Control Flow Analysis(CFA). Analysis' output stored in xreate::cfa::CFAGraph
 *  - xreate::dfa::DFAPass to perform Data Flow Analysis(DFA). Output stored in xreate::dfa::DFAGraph
 *  - xreate::interpretation::InterpretationPass to perform Interpretation analysis. See [Interpretation Overview](w/concepts/dfa)
 *  - xreate::versions::VersionsPass to perform Versions Analysis. See [Versions Overview](w/concepts/versions)
 * 
 * Each pass should inherit xreate::IPass interface or xreate::AbstractPass as a more convenient wrapper.
 * xreate::PassManager is base class to manage passes and xreate::XreateManager derives xreate::PassManager to control builtin passes.
 * 
 * \section reasoning_sect Reasoning
 * xreate::ClaspLayer is wrapper over external Clasp reasoner. 
 * Data gathered by previously executed passes is composed(see xreate::IAnalysisReport, \ref analysis/aux.h for details)  into _logic program_ as a _text_ according to Clasp reasoner's ASP syntax. 
 * Current list of data sources is:
 *  - Raw scripts. Client could append arbitrary ASP script to _logic program_
 *  - Includes. There is possibility to point out external files with ASP scripts to append to _logic program_
 *  - Diagnostic rules. Rules that produce diagnostic messages during compilation(warnings) or even able to halt compilation with errors
 *  - DFA data. See xreate::dfa::DFAGraph
 *  - CFA data. See xreate::cfa::CFAGraph
 *  - Dominators Analysis. See xreate::dominators::DominatorsTreeAnalysisProvider
 *  - Context rules. See xreate::ContextRule and general [Context Explanation](/w/concepts/context)
 * 
 * Following analyses are performed currently bypassing ASP reasoner:
 *  - \ref typeinference.h Type Inference
 *  - xreate::interpretation::InterpretationPass Interpretation analysis
 *  - xreate::versions::VersionsPass Versions analysis
 * 
 * Output of Clasp reasoner is recognized and accessed via *queries*. 
 * Query is an interface between reasoner' output and rest of Xreate. 
 * Each query inherits xreate::IQuery interface. Currently there are queries as follows:
 *  - xreate::containers::Query to catch solutions regarding Containers implementation. See [Containers Explanation](/w/concepts/containers)
 *  - xreate::context::ContextQuery to catch solution regarding Context. See [Context Explanation](/w/concepts/context)
 * 
 * \section compilation_sect Compilation
 * xreate::CompilePass iterates over xreate::AST tree and produces executable code fed by data(via xreate::Attachments) gathered by previous passes  as well as data via queries(xreate::IQuery) from Clasp reasoner.
 * Compilation done using xreate::LLVMLayer(wrapper over LLVM byte machine) and based on following aspects:
 *   - Containers support. See \ref compilation/containers.h  
 *   - Late Conext compilation. See xreate::context::LateContextCompiler2
 *   - Interpretation support. See xreate::interpretation::TargetInterpretation
 *   - Loop saturation support. See xreate::compilation::TransformerSaturation
 *   - External Code access. See xreate::ExternLayer(wrapper over Clang library)
 * 
 *\subsection compilation_adaptability Adaptability 
 *
 * xreate::CompilePass's architecture allows adaptability  in different ways 
 * to alter function-level, code scope-level compilation and so on. More details in xreate::CompilePass description.
 */
