public static void Analyze <Label, Local, Parameter, Method, Field, Type, Expression, Variable>(
            IMethodDriver <Label, Local, Parameter, Method, Field, Type, Expression, Variable> driver,
            bool doDebug
            )
            where Variable : IEquatable <Variable>
        {
            TypeBindings <Label, Local, Parameter, Method, Field, Type, Expression, Variable> .Analysis analysis =
                new TypeBindings <Label, Local, Parameter, Method, Field, Type, Expression, Variable> .Analysis(driver.MetaDataDecoder);

            analysis.Debug = doDebug;
            driver.CreateForward(analysis, doDebug)(analysis.InitialValue(driver.KeyNumber));
        }
        /// <summary>
        /// Main interface method of the analyzer. It returns state machine information, given a method driver.
        /// </summary>
        /// <param name="fullMethodName">The name of the method, should always be "MoveNext".</param>
        /// <param name="driver">A method analysis driver.</param>
        /// <returns></returns>
        public StateMachineInformation <Local> AnalyzeMoveNext <Local, Parameter, Method, Field, Property, Type, Attribute, Assembly, Expression, Variable, ILogOptions>(
            string fullMethodName,
            IMethodDriver <APC, Local, Parameter, Method, Field, Property, Type, Attribute, Assembly, Expression, Variable, ILogOptions> driver
            )
            where Variable : IEquatable <Variable>
            where Expression : IEquatable <Expression>
            where Type : IEquatable <Type>
            where ILogOptions : IFrameworkLogOptions
        {
            TypeBindings <Local, Parameter, Method, Field, Property, Type, Attribute, Assembly, Expression, Variable, ILogOptions> .Analysis analysis =
                new TypeBindings <Local, Parameter, Method, Field, Property, Type, Attribute, Assembly, Expression, Variable, ILogOptions> .Analysis(driver, this);

            driver.CreateForward(analysis)(analysis.InitialValue());
            return(analysis.MoveNextPreAnalysisResult);
        }