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

                if (variableContext == null)
                {
                    return;
                }

                var variableName = variableContext.GetText();

                if (!globalContext.IsUserVariable(this.document, variableName))
                {
                    return;
                }

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

                if (variableDefinition == null)
                {
                    variableDefinition = new VariableDefinition
                    {
                        VariableName    = variableName,
                        IsEverUsed      = false,
                        VariableContext = variableContext
                    };
                    this.variableDefinitions.Add(variableDefinition);
                }
                else
                {
                    variableDefinition.VariableContext = variableContext;
                }
            }
            /// <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);
                }
            }
Beispiel #3
0
            /// <summary>
            /// Выход из предложения означивания.
            /// </summary>
            /// <param name="context">Контекст.</param>
            public override void ExitDeclareVariableStatement([NotNull] IsblParser.DeclareVariableStatementContext context)
            {
                // Первый потомок переменная.
                var variableContext = context.GetChild(0) as IsblParser.VariableContext;

                if (variableContext == null)
                {
                    return;
                }

                // Проверяем что это не константа.
                var variableName = variableContext.GetText();

                if (!globalContext.IsUserVariable(this.document, variableName))
                {
                    return;
                }

                // Помечаем предыдущую переменную на этом же уровне как переопределенную.
                var parentStatementBlock = GetParentStatementBlock(context);
                var variableDefinition   = this.variableDefinitions
                                           .LastOrDefault(d =>
                                                          d.VariableName.Equals(variableName, StringComparison.OrdinalIgnoreCase) &&
                                                          d.StatementBlock == parentStatementBlock);

                if (variableDefinition != null)
                {
                    variableDefinition.IsRedefined = true;
                }

                // Добавляем новую переменную в список.
                variableDefinition = new VariableDefinition
                {
                    VariableName     = variableName,
                    VariableContext  = variableContext,
                    StatementBlock   = parentStatementBlock,
                    AssignExpression = string.Empty
                };
                this.variableDefinitions.Add(variableDefinition);
            }