/// <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); }
public DefinerLEDEER DefinitionLEDEER() { defLEDEER = new DefinerLEDEER(); return(defLEDEER); }
/// <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í }