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