/// <summary>
            /// Вход в предложение объявления переменной.
            /// </summary>
            /// <param name="context">Контекст.</param>
            public override void EnterDeclareVariableStatement([NotNull] IsblParser.DeclareVariableStatementContext context)
            {
                // Первый потомок переменная.
                var variable = context.GetChild(0) as IsblParser.VariableContext;

                if (variable == null)
                {
                    return;
                }

                var variableName       = variable.GetText();
                var variableDefinition = this.variableDefinitions
                                         .FirstOrDefault(d => d.VariableName.Equals(variableName, StringComparison.OrdinalIgnoreCase));

                if (variableDefinition == null)
                {
                    variableDefinition = new VariableDefiniton
                    {
                        VariableName    = variableName,
                        IsReinitialized = false,
                        StatementBlock  = GetParentStatementBlock(context)
                    };
                    this.variableDefinitions.Add(variableDefinition);
                }
                else if (variableDefinition.StatementBlock == null)
                {
                    variableDefinition.IsReinitialized = true;
                    variableDefinition.StatementBlock  = GetParentStatementBlock(context);
                }
            }
            /// <summary>
            /// Вход в предложение означивания.
            /// </summary>
            /// <param name="context">Контекст.</param>
            public override void EnterAssignStatement([NotNull] IsblParser.AssignStatementContext context)
            {
                // Первый потомок переменная.
                var variable = context.GetChild(0) as IsblParser.VariableContext;

                if (variable == null)
                {
                    return;
                }

                // Второй потомок знак равенства или двоеточие.
                var eq = context.GetChild(1) as TerminalNodeImpl;

                if (eq == null ||
                    (eq.Symbol.Type != IsblParser.EQ &&
                     eq.Symbol.Type != IsblParser.COLON))
                {
                    return;
                }

                var variableName       = variable.GetText();
                var variableDefinition = this.variableDefinitions
                                         .FirstOrDefault(d => d.VariableName.Equals(variableName, StringComparison.OrdinalIgnoreCase));

                if (variableDefinition == null)
                {
                    variableDefinition = new VariableDefiniton
                    {
                        VariableName    = variableName,
                        IsReinitialized = false,
                        StatementBlock  = GetParentStatementBlock(context)
                    };
                    this.variableDefinitions.Add(variableDefinition);
                }
                else if (variableDefinition.StatementBlock == null)
                {
                    variableDefinition.IsReinitialized = true;
                    variableDefinition.StatementBlock  = GetParentStatementBlock(context);
                }
            }
            /// <summary>
            /// Вход в foreach.
            /// </summary>
            /// <param name="context">Контекст.</param>
            public override void EnterForeachStatement([NotNull] IsblParser.ForeachStatementContext context)
            {
                var variable = context.GetChild(1) as IsblParser.VariableContext;

                var variableName       = variable.GetText();
                var variableDefinition = this.variableDefinitions
                                         .FirstOrDefault(d => d.VariableName.Equals(variableName, StringComparison.OrdinalIgnoreCase));

                if (variableDefinition == null)
                {
                    variableDefinition = new VariableDefiniton
                    {
                        VariableName    = variableName,
                        IsReinitialized = false,
                        StatementBlock  = context.GetChild(4) as IsblParser.StatementBlockContext
                    };
                    this.variableDefinitions.Add(variableDefinition);
                }
                else if (variableDefinition.StatementBlock == null)
                {
                    variableDefinition.IsReinitialized = true;
                    variableDefinition.StatementBlock  = context.GetChild(4) as IsblParser.StatementBlockContext;
                }
            }