public Statement GetStatementInterpreter(SimpleNameSyntax simpleNameSyntax, Statement parent)
        {
            switch (simpleNameSyntax)
            {
            case IdentifierNameSyntax ins:
                var statement = new IdentifierNameStatementInterpreter(ins, semanticModel,
                                                                       parameters, parent).GetStatement();
                return(statement);

            default:
                throw new NotImplementedException(simpleNameSyntax.GetType() + " is not supported yet");
            }
        }
        public Statement GetStatement(CSharpSyntaxNode syntax)
        {
            Statement statement = null;

            switch (syntax)
            {
            case LocalDeclarationStatementSyntax localDeclarationStatementSyntax:
                statement = new LocalVariableStatementIntrepreter(this,
                                                                  localDeclarationStatementSyntax).GetStatement();
                return(statement);

            case VariableDeclarationSyntax variableDeclarationSyntax:
                statement = new VariableDeclarationStatementInterpreter(this, semanticModel, scopedLocalVariableDeclarations,
                                                                        variableDeclarationSyntax).GetStatement();
                return(statement);

            case ExpressionStatementSyntax expressionStatementSyntax:
                statement = new ExpressionStatementIntrepreter(this, expressionStatementSyntax).GetStatement();
                return(statement);

            case InvocationExpressionSyntax ies:
                statement = new InvocationStatementIntrepreter(this, semanticModel, ies).GetStatement();
                return(statement);

            case AssignmentExpressionSyntax aes:
                statement = new AssignmentStatementInterpreter(this, aes).GetStatement();
                return(statement);

            case LiteralExpressionSyntax les:
                statement = new LiteralStatementInterpreter(les, semanticModel).GetStatement();
                return(statement);

            case IdentifierNameSyntax ins:
                statement = new IdentifierNameStatementInterpreter(ins, semanticModel,
                                                                   parameters).GetStatement();
                return(statement);

            case EqualsValueClauseSyntax evcs:
                statement = new EqualsClauseStatementInterpreter(evcs, this).GetStatement();
                return(statement);

            case ObjectCreationExpressionSyntax oces:
                statement = new ObjectCreationStatementInterpreter(this, semanticModel, oces).GetStatement();
                return(statement);

            case ArgumentSyntax argumentSyntax:
                statement = new ArgumentStatementInterpreter(this, argumentSyntax).GetStatement();
                return(statement);

            case MemberAccessExpressionSyntax memberAccessExpressionSyntax:
                statement = new MemberAccessStatementInterpreter(this, memberAccessExpressionSyntax).GetStatement();
                return(statement);

            case ThisExpressionSyntax thisExpressionSyntax:
                statement = new ThisStatementInterpreter(thisExpressionSyntax, semanticModel).GetStatement();
                return(statement);

            case BinaryExpressionSyntax binaryExpressionSyntax:
                statement = new BinaryStatementInterpreter(this, semanticModel, binaryExpressionSyntax).GetStatement();
                return(statement);

            case ConditionalExpressionSyntax conditionalExpressionSyntax:
                statement = new ConditionalStatementInterpreter(this, conditionalExpressionSyntax).GetStatement();
                return(statement);

            case IfStatementSyntax ifStatementSyntax:
                statement = new IfStatementInterpreter(this, ifStatementSyntax).GetStatement();
                return(statement);

            case ElseClauseSyntax elseClauseSyntax:
                statement = new ElseClauseStatementInterpreter(this, elseClauseSyntax).GetStatement();
                return(statement);

            case BlockSyntax blockSyntax:
                statement = new BlockStatementInterpreter(this, blockSyntax).GetStatement();
                return(statement);

            case ArrowExpressionClauseSyntax arrowExpression:
                statement = new ArrowStatementInterpreter(this, arrowExpression).GetStatement();
                return(statement);

            case DefaultExpressionSyntax defaultExpressionSyntax:
                statement = new DefaultStatementInterpreter(semanticModel, defaultExpressionSyntax).GetStatement();
                return(statement);

            case TypeOfExpressionSyntax typeOfExpressionSyntax:
                statement = new TypeOfStatementInterpreter(semanticModel, typeOfExpressionSyntax).GetStatement();
                return(statement);

            case IsPatternExpressionSyntax patternExpressionSyntax:
                statement = new IsPatternStatementInterpreter(this, patternExpressionSyntax).GetStatement();
                return(statement);

            case SwitchStatementSyntax switchStatementSyntax:
                statement = new SwitchStatementInterpreter(this, switchStatementSyntax).GetStatement();
                return(statement);

            case BreakStatementSyntax breakStatementSyntax:
                statement = new BreakStatementInterpreter(breakStatementSyntax).GetStatement();
                return(statement);

            case ContinueStatementSyntax continueStatementSyntax:
                statement = new ContinueStatementInterpreter().GetStatement();
                return(statement);

            case AwaitExpressionSyntax awaitExpressionSyntax:
                statement = new AwaitStatementInterpreter(this, awaitExpressionSyntax).GetStatement();
                return(statement);

            case ReturnStatementSyntax returnStatementSyntax:
                statement = new ReturnStatementInterpreter(this, returnStatementSyntax).GetStatement();
                return(statement);

            case PostfixUnaryExpressionSyntax postfixUnaryExpressionSyntax:
                statement = new PostfixUnaryStatementInterpreter(this, postfixUnaryExpressionSyntax).GetStatement();
                return(statement);

            case PrefixUnaryExpressionSyntax prefixUnaryExpressionSyntax:
                statement = new PrefixUnaryStatementInterpreter(this, prefixUnaryExpressionSyntax).GetStatement();
                return(statement);

            case CastExpressionSyntax castExpressionSyntax:
                statement = new CastStatementInterpreter(this, castExpressionSyntax, semanticModel).GetStatement();
                return(statement);

            case ArrayCreationExpressionSyntax arrayCreationExpressionSyntax:
                statement = new ArrayCreationStatementInterpreter(this, arrayCreationExpressionSyntax, semanticModel).GetStatement();
                return(statement);

            case InitializerExpressionSyntax initializerExpressionSyntax:
                statement = new InitializerStatementInterpreter(this, initializerExpressionSyntax, semanticModel).GetStatement();
                return(statement);

            case ElementAccessExpressionSyntax elementAccessExpressionSyntax:
                statement = new ElementAccessStatementInterpreter(this, elementAccessExpressionSyntax, semanticModel).GetStatement();
                return(statement);

            case WhileStatementSyntax whileStatementSyntax:
                statement = new WhileStatementInterpreter(this, whileStatementSyntax).GetStatement();
                return(statement);

            case DoStatementSyntax doStatementSyntax:
                statement = new DoStatementInterpreter(this, doStatementSyntax).GetStatement();
                return(statement);

            case ForStatementSyntax forStatementSyntax:
                statement = new ForStatementInterpreter(this, forStatementSyntax).GetStatement();
                return(statement);

            case ForEachStatementSyntax forEachStatementSyntax:
                statement = new ForEachStatementInterpreter(this, forEachStatementSyntax, semanticModel).GetStatement();
                return(statement);

            case UsingStatementSyntax usingStatementSyntax:
                statement = new UsingStatementInterpreter(this, usingStatementSyntax).GetStatement();
                return(statement);

            default:
                throw new NotImplementedException(syntax.GetType() + " is not supported yet");
            }
        }