/// <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); } }
/// <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); }