Beispiel #1
0
        /// <summary>
        ///		Crea la instrucción de llamada a un Mixin
        /// </summary>
        private InstructionBase CreateInstructionMininCall()
        {
            InstructionMixinCall instruction = new InstructionMixinCall(GetToken());
            TokenSmallCss        token       = GetToken();

            // Obtiene los datos
            if (token.Row == instruction.Token.Row && token.TypeCss == TokenSmallCss.TokenCssType.Literal)
            {
                // Asigna el nombre de la función
                instruction.Name = token.Value;
                // Obtiene los argumentos
                if (ActualToken != null && ActualToken.Row == instruction.Token.Row)
                {
                    bool end = false;

                    while (!end && !IsEof)
                    {
                        // Comprueba si es un parámetro o un comentario
                        if (ActualToken.Row == instruction.Token.Row)
                        {
                            if (ActualToken.TypeCss == TokenSmallCss.TokenCssType.Literal ||
                                ActualToken.TypeCss == TokenSmallCss.TokenCssType.Variable)
                            {
                                instruction.Parameters.Add(GetToken());
                            }
                            else if (ActualToken.TypeCss == TokenSmallCss.TokenCssType.Comment)
                            {
                                instruction.Sentences.Add(CreateInstructionComment());
                            }
                            else
                            {
                                instruction.Error = ParseError($"No se reconoce el token entre los parámetros de llamada a la función '{instruction.Name}'");
                            }
                        }
                        else
                        {
                            end = true;
                        }
                    }
                }
            }
            else
            {
                instruction.Error = ParseError("No se encuentra el nombre del mixin al que se está llamando");
            }
            // Devuelve la instrucción
            return(instruction);
        }
Beispiel #2
0
        /// <summary>
        ///		Ejecuta una llamada a una función
        /// </summary>
        private string CallFunction(InstructionMixinCall function, string tagParent, List <string> lines)
        {
            string result = "";

            // Obtiene la cadena de la función
            if (function != null)
            {
                Program programFunction = Program.Functions.Search(function.Name);

                if (programFunction != null)
                {
                    List <string> lineChilds = new List <string>();

                    // Borra la tabla de símbolos
                    programFunction.SymbolsTable.Variables.Clear();
                    // Añade las variables
                    for (int index = 0; index < programFunction.Arguments.Count; index++)
                    {
                        if (function.Parameters.Count > index)
                        {
                            string value = function.Parameters[index].Value;

                            // Si es una variable recoge el valor
                            if (value.StartsWithIgnoreNull("$"))
                            {
                                value = GetVariableValue(programFunction, value);
                            }
                            // Añade la variable
                            programFunction.SymbolsTable.Variables.Add(programFunction.Arguments[index], value);
                        }
                    }
                    // Obtiene el contenido de las líneas hija
                    result = GetContentChildSentences(programFunction, programFunction.Sentences, tagParent, lineChilds);
                    // Añade las líneas hija
                    lines.AddRange(lineChilds);
                }
            }
            // Devuelve el resultado
            return(result);
        }