Exemple #1
0
    /// <summary>
    /// Método para colocar en la tabla de symbolos las sentencias separadas.
    /// </summary>
    /// <param name="tableSymbols">tabla de símbolos</param>
    /// <param name="tableStrings">tabla de cadenas</param>
    /// <param name="table_var">tabla donde los symbolos son insertados</param>
    /// <param name="i">Índice de la tabla de símbolos</param>
    /// <param name="iold">Índice del operador, si el valor es menor a 0 no hay operador</param>
    /// <param name="indstring">Índice de la tabla de cadenas</param>
    /// <param name="i1">Índice de salida para el índice de la tabla de símbolos</param>
    /// <param name="i2">Índice de salida para el índice de la tabla de cadenas</param>
    /// <returns></returns>
    private bool fullSentence(List <Symbol> tableSymbols, List <string> tableStrings, List <string> table_var, int i, int iO, int indstring, out int i1, out int i2)
    {
        bool bandC = true;
        bool bO    = false;               //Bandera de operador

        bool          def        = false; //bandera para activa llenar cadenas
        int           line       = Convert.ToInt32(tableSymbols[i].Line);
        string        word_ant   = "";
        string        string_ant = "";
        int           iold       = 0;
        List <string> vare       = new List <string>();

        while (bandC && !endLine(tableSymbols, i, out iold))//line == Convert.ToInt32(tableSymbols[i].Line))
        {
            if (getNextWordReservB(tableSymbols, i, out iold) && !def)
            {
                //Si hay operador
                if (iO > 0 && (iold > iO || iold == iO) && !bO) //Agregar operador
                {
                    table_var.Add(tableSymbols[iO].Code);
                    bO         = true;
                    word_ant   = "";
                    string_ant = "";
                }

                switch (tableSymbols[iold].Code)
                {
                case Symbol.CODEOBJECT:
                case Symbol.CODEACTORS:
                    if (word_ant.CompareTo(Symbol.CODEARENAS) != 0 && word_ant.CompareTo(Symbol.CODEACTION) != 0 && word_ant.CompareTo(String.Empty) != 0)
                    {
                        bandC = false;
                    }
                    break;

                case Symbol.CODEROLESA:
                case Symbol.CODEROLESS:
                    if (word_ant.CompareTo(Symbol.CODEARENAS) != 0 && word_ant.CompareTo(Symbol.CODEACTORS) != 0 && word_ant.CompareTo(String.Empty) != 0)
                    {
                        bandC = false;
                    }
                    break;

                case Symbol.CODEACTION:
                    if (word_ant.CompareTo(Symbol.CODEARENAS) != 0 && word_ant.CompareTo(String.Empty) != 0)
                    {
                        bandC = false;
                    }
                    break;

                case Symbol.CODEARENAS:
                    if (word_ant.CompareTo(String.Empty) != 0)
                    {
                        bandC = false;
                    }
                    break;
                }


                if (bandC)
                {
                    //Agreagar palabra reservada
                    //a la tabla

                    i          = iold;
                    string_ant = "";
                    word_ant   = tableSymbols[i].Code;

                    if (iO > 0) //Si hay operador
                    {
                        if (IsNegWordReser(tableSymbols, i))
                        {
                            table_var.Add(Symbol.CODENEGOPE);
                        }
                        table_var.Add(tableSymbols[i].Code);

                        i++;

                        if (endLine(tableSymbols, i, out iold))
                        {
                            fullTable(table_var, word_ant);
                        }
                    }
                    else
                    {
                        Util.Util.addWord(table_var, tableSymbols[i].Code);
                    }
                    def = true;
                }
            }
            else if (getNextStringB(tableSymbols, i, out iold) && def)//hay cadenas
            {
                i          = iold;
                string_ant = tableStrings[indstring];

                if (iO > 0 && (i > iO || i == iO) && !bO) //Agregar operador
                {
                    table_var.Add(tableSymbols[iO].Code);
                    bO = true;
                }

                List <string> st = Util.Util.parseStrings(tableStrings[indstring]);

                if (st.Count > 0)//Si hay más de una cadena
                {
                    foreach (string st1 in st)
                    {
                        if (iO > 0)//Si hay operador
                        {
                            table_var.Add(st1);
                        }
                        else //Sino hay operador
                        {
                            Util.Util.addVar(table_var, word_ant, st1);
                        }
                    }
                }
                else
                if (iO > 0)    //Si hay operador
                {
                    table_var.Add(tableStrings[indstring]);
                }
                else     //Sino hay operador
                if (word_ant.CompareTo(Symbol.CODEROLESS) != 0 &&
                    word_ant.CompareTo(Symbol.CODEACTORS) != 0)
                {
                    Util.Util.addVar(table_var, word_ant, tableStrings[indstring]);
                }
                else
                {
                    switch (word_ant)
                    {
                    case Symbol.CODEACTORS:
                        findVar(table_var, word_ant, string_ant, vare);
                        break;

                    case Symbol.CODEROLESS:
                        foreach (string str in vare)           //Asignar
                        {
                            assingVar(table_var, Symbol.CODEACTORS, str, tableStrings[indstring]);
                        }
                        break;
                    }
                }


                indstring++;
                i++;

                def = false; //Activar palabra resevada
            }
            else
            {
                bandC = false;
            }
        }

        i1 = i;
        i2 = indstring;

        return(bandC);
    }
Exemple #2
0
 public DefinerLEDEER DefinitionLEDEER()
 {
     defLEDEER = new DefinerLEDEER();
     return(defLEDEER);
 }
Exemple #3
0
    /// <summary>
    /// Ejecutar una funcionalidad
    /// </summary>
    /// <param name="namearena"></param>
    /// <param name="nameaction"></param>
    /// <param name="nameuser"></param>
    /// <returns></returns>
    public bool executeScenario(string namearena, string nameaction, string nameuser)
    {
        bool exec = false;

        if (namearena.CompareTo(String.Empty) != 0 && nameaction.CompareTo(String.Empty) != 0 && nameuser.CompareTo(String.Empty) != 0)
        {
            def = new DefinerLEDEER();


            string  namescenario  = def.getScenarioOfAction(namearena, nameaction);
            DataSet sentences     = def.getSentencesOfScenario(namearena, namescenario);
            string  sentencesIPre = "";
            string  sentencesIPos = "";
            string  sentencesFPre = "";
            string  sentencesFPos = "";
            try
            {
                foreach (DataRow dr in sentences.Tables[0].Rows)
                {
                    if (dr["AtrProcess"].ToString().CompareTo("Initialize") == 0 && dr["AtrType"].ToString().CompareTo("Precondition") == 0)
                    {
                        sentencesIPre = dr["AtrSentence"].ToString();
                    }
                    else if (dr["AtrProcess"].ToString().CompareTo("Initialize") == 0 && dr["AtrType"].ToString().CompareTo("Poscondition") == 0)
                    {
                        sentencesIPos = dr["AtrSentence"].ToString();
                    }
                    else if (dr["AtrProcess"].ToString().CompareTo("Finalize") == 0 && dr["AtrType"].ToString().CompareTo("Precondition") == 0)
                    {
                        sentencesFPre = dr["AtrSentence"].ToString();
                    }
                    else if (dr["AtrProcess"].ToString().CompareTo("Finalize") == 0 && dr["AtrType"].ToString().CompareTo("Poscondition") == 0)
                    {
                        sentencesFPos = dr["AtrSentence"].ToString();
                    }
                }

                //Revisar sintaxis
                al = new AnalyzerLEDEER(sentencesIPre);

                //Tablas de símbolos
                List <Symbol> tableIPre;
                List <string> stringsIPre;
                List <Symbol> tableIPos;
                List <string> stringsIPos;
                List <Symbol> tableFPre;
                List <string> stringsFPre;
                List <Symbol> tableFPos;
                List <string> stringsFPos;

                if (al.CheckSyntaxB())
                {
                    tableIPre   = al.getSymbolsTable();
                    stringsIPre = al.getStrings();
                    if (al.CheckSyntaxB(sentencesIPos))
                    {
                        tableIPos   = al.getSymbolsTable();
                        stringsIPos = al.getStrings();
                        if (al.CheckSyntaxB(sentencesFPre))
                        {
                            //Tabla y cadenas 1
                            tableFPre   = al.getSymbolsTable();
                            stringsFPre = al.getStrings();

                            if (al.CheckSyntaxB(sentencesFPos))
                            {
                                string        PATH      = "C:\\inetpub\\wwwroot\\LEDEER\\" + LEDEER.path_XML;
                                string        path      = PATH + new LogicaNegocio().Ledeer().ExportXML(namearena, PATH);
                                List <string> table_def = new List <string>();

///                                table_def.Insert();
                                XmlReader xml = new XmlTextReader(path);
                                Util.Util.XMLReadFile(xml, table_def);


                                tableFPos   = al.getSymbolsTable();
                                stringsFPos = al.getStrings();

                                if (Util.Util.ValueOnCode(table_def, Symbol.CODEACTORS, nameuser) != -1 &&
                                    Util.Util.ValueOnCode(table_def, Symbol.CODEACTION, nameaction) != -1
                                    )
                                {
                                    //Ejecutar
                                    //Init, Pre
                                    exec = executeSentences(stringsIPre, tableIPre, table_def, namearena, nameaction, nameuser);
                                    //Init, Pos
                                    if (exec && tableIPos.Count > 0)
                                    {
                                        exec = executeSentences(stringsIPos, tableIPos, table_def, namearena, nameaction, nameuser);
                                    }
                                    //Fin, Pre
                                    if (exec)
                                    {
                                        exec = executeSentences(stringsFPre, tableFPre, table_def, namearena, nameaction, nameuser);
                                    }
                                    if (exec)
                                    {
                                        //Fin, Pos
                                        exec = executeSentences(stringsFPos, tableFPos, table_def, namearena, nameaction, nameuser);
                                    }
                                }
                                else
                                {
                                    exec = false;
                                }
                                return(exec);
                            }
                        }
                    }
                }
            }
            catch
            {
                ;
            }
        }
        return(false); //No se puede ejecutar si se llega hasta aquí
    }