/// <summary> /// Ejecuta una sentencia de declaración /// </summary> private async Task ExecuteDeclareAsync(SentenceDeclare sentence, CancellationToken cancellationToken) { VariableModel variable = new VariableModel(sentence.Variable.Name, ConvertSymbolType(sentence.Variable.Type)); // Si es un tipo conocido, añade la variable al contexto if (variable.Type == VariableModel.VariableType.Unknown) { AddError($"Unknown variable type: {sentence.Variable.Name} - {sentence.Variable.Type}"); } else { // Ejecuta la expresión if (sentence.Expressions.Count != 0) { variable.Value = (await ExecuteExpressionAsync(sentence.Expressions, cancellationToken)).Value; } else { variable.AssignDefault(); } // Si no hay errores, añade la variable a la colección if (!Stopped) { // Ejecuta la sentencia Context.Actual.VariablesTable.Add(variable); // Debug AddDebug($"Declare {sentence.Variable.Name} = " + variable.GetStringValue()); } } }
/// <summary> /// Ejecuta una sentencia de impresión /// </summary> private VariableModel ExecutePrint(ImplicitFunctionModel function) { VariableModel result = Context.Actual.VariablesTable[function.Arguments[0].Name]; // Imprime el resultado if (result == null) { AddError($"Method Print: Cant find value for argument {function.Arguments[0].Name}"); } else { Interpreter.DbScriptExecutor.ConsoleWriteLine(result.GetStringValue()); } // Devuelve el resultado return(result); }