/// <summary>
        ///		Transforma una asignación
        /// </summary>
        private void TransformLet(SentenceLet sentence)
        {
            string result = sentence.VariableName + " = ";

            // Añade las expresiones
            result += TransformExpressions(sentence.Expressions);
            // Añade la sentencia al script
            AddSentence(result);
        }
예제 #2
0
        /// <summary>
        ///		Carga una sentencia de asignación
        /// </summary>
        private SentenceBase LoadSentenceLet(MLNode rootML)
        {
            SentenceLet sentence = new SentenceLet();

            // Asigna las propiedades
            sentence.Type       = rootML.Attributes[TagType].Value.GetEnum(VariableModel.VariableType.Unknown);
            sentence.Variable   = rootML.Attributes[TagName].Value;
            sentence.Expression = rootML.Value;
            // Devuelve la sentencia
            return(sentence);
        }
예제 #3
0
        /// <summary>
        ///		Ejecuta una sentencia de asignación
        /// </summary>
        private async Task ExecuteLetAsync(SentenceLet sentence, CancellationToken cancellationToken)
        {
            if (string.IsNullOrWhiteSpace(sentence.VariableName))
            {
                AddError("Cant find the variable name");
            }
            else
            {
                VariableModel variable = Context.Actual.VariablesTable.Get(sentence.VariableName);

                // Si no se ha definido la variable, añade un errorDeclara la variable si no existía
                if (variable == null)
                {
                    AddError($"Undefined variable {sentence.VariableName}");
                }
                else
                {
                    variable.Value = (await ExecuteExpressionAsync(sentence.Expressions, cancellationToken)).Value;
                }
            }
        }
예제 #4
0
        /// <summary>
        ///		Ejecuta una sentencia de asignación
        /// </summary>
        private void ExecuteLet(SentenceLet sentence)
        {
            if (string.IsNullOrWhiteSpace(sentence.Variable))
            {
                AddError("Cant find the variable name");
            }
            else
            {
                VariableModel variable = Context.Actual.VariablesTable.Get(sentence.Variable);

                // Depuración
                AddDebug($"Let {sentence.Variable} = {sentence.Expression}");
                // Declara la variable si no existía
                if (variable == null && sentence.Type != VariableModel.VariableType.Unknown)
                {
                    // Añade una variable con el valor predeterminado
                    Context.Actual.VariablesTable.Add(sentence.Variable, sentence.Type);
                    // Obtiene la variable
                    variable = Context.Actual.VariablesTable.Get(sentence.Variable);
                }
                // Ejecuta la sentencia
                if (variable == null)
                {
                    AddError($"Variable {sentence.Variable} not declared");
                }
                else
                {
                    VariableModel result = new Compiler.Interpreter().EvaluateExpression(Context, sentence.Expression, out string error);

                    if (!string.IsNullOrWhiteSpace(error))
                    {
                        AddError($"Error when evaluate expression {sentence.Expression}. {error}");
                    }
                    else
                    {
                        variable.Value = result.Value;
                    }
                }
            }
        }