private static CodeStatement GenerateMainLoop <TDfa, TDfaState>(TDfa dfa,
                                                                        CodeVariableReferenceExpression lexerStateVariable)
            where TDfa : AbstractDfa <TDfaState, char>
            where TDfaState : AbstractDfaState <TDfaState, char>
        {
            var switchGenerator = new SwitchGenerator <TDfa, TDfaState>(dfa, lexerStateVariable);

            return(switchGenerator.MakeStatement());
        }