void Semantics::setMatchMode(){ Tokenizer tknzr = Tokenizer(this->ElementId,"-"); this->ElementId = tknzr.nextToken(); string str= tknzr.currToken(); if(str.empty() || ((!isdigit(str[0])) && (str[0] != '-') && (str[0] != '+'))) this->MatchMode=false ; char * p ; strtol(str.c_str(), &p, 10) ; this->MatchMode = (*p == 0) ; while(tknzr.hasMoreTokens()){ this->SemanticsId = tknzr.nextToken(); break; } }
void Semantics::setGmshCommand(const string& Command){ int nofTokens = 0; string Gcommand = "", essiTag=""; Tokenizer inpString = Tokenizer(Command," {,;}()"); nofTokens = inpString.countTokens()-1; this->NofGmshVariables = nofTokens-1; Gcommand = Gcommand + inpString.nextToken() + "{ "; essiTag = essiTag + inpString.currToken() + "{"; for( int i=0 ;i<nofTokens-1; i++){ string variable= this->delSpaces(inpString.nextToken()); vector<string>::iterator it; it = find(this->VarList.begin(),this->VarList.end(),variable); if (it != this->VarList.end()) *it = "variable"; Gcommand = Gcommand +variable+" ,"; essiTag = essiTag + " ,"; } string variable= this->delSpaces(inpString.nextToken()); if(variable.compare("")){ this->NofGmshVariables++; } vector<string>::iterator it; it = find(this->VarList.begin(),this->VarList.end(),variable); if (it != this->VarList.end()) *it = "variable"; Gcommand = Gcommand +variable + " }"; essiTag = essiTag + " }"+to_string(this->NofGmshVariables); // cout << Gcommand << endl; // cout << essiTag << endl; this->GmshCommand= Gcommand; this->setEssiTag(essiTag); }
void Mapping::mapFile() { fstream mapFile(this->FileName, fstream::in); string line; while(getline(mapFile,line)) { Tokenizer str = Tokenizer(line,"# \t\v\n\r\f"); if(!delSpaces(str.nextToken()).compare("ELEMENT_ID")) break; } while(getline(mapFile,line)) { string strLine = delSpaces(line); Tokenizer str = Tokenizer(line,"# \t\v\n\r\f\""); if(!str.nextToken().compare("ENDELEMENT_ID")) break; if(!str.currToken().substr(0,2).compare("//")) continue; if(delSpaces(str.currToken()).length()==0) continue; string elementDes=""; string elementId = ""; elementId = elementId + str.currToken(); elementDes= elementDes + str.nextToken(); str.setDelimiter("\""); elementDes= elementDes + str.nextToken(); this->ElementMap.insert(pair<string,string>(elementId,elementDes)); } while(getline(mapFile,line)) { Tokenizer str = Tokenizer(line,"# \t\v\n\r\f"); if(!delSpaces(str.nextToken()).compare("ESSI_TAGS")) break; } while(getline(mapFile,line)) { Tokenizer str = Tokenizer(line,"# \t\v\n\r\f"); if(!delSpaces(str.nextToken()).compare("ENDESSI_TAGS")) break; if(!delSpaces(str.currToken()).substr(0,2).compare("//")) continue; if(delSpaces(str.currToken()).length()==0) continue; this->EssiTagList.insert(str.currToken()); } while(getline(mapFile,line)) { string Id, GmshCommandList, EssiCommand=""; Tokenizer str = Tokenizer(line,"! \t\v\n\r\f"); if(!delSpaces(str.nextToken()).substr(0,2).compare("//")) continue; if(delSpaces(str.currToken()).length()==0) continue; Id = str.currToken(); str.setDelimiter("<>"); if(delSpaces(str.nextToken()).length()==0) GmshCommandList = delSpaces(str.nextToken()); else GmshCommandList = delSpaces(str.currToken()); str.setDelimiter(" \t\v\n\r\f"); EssiCommand= EssiCommand + delSpaces(str.nextToken())+" "; str.setDelimiter("<>"); EssiCommand= EssiCommand + str.nextToken(); this->makeFunction(Id, GmshCommandList,EssiCommand); } mapFile.close(); }
void Semantics::setEssiCommand(const string& Command){ int nofTokens = 0; Tokenizer inpString = Tokenizer(Command," ") ; string Ecommand = ""; string Fcommand = ""; // Filtered Command with spaces while( inpString.hasMoreTokens()){ Fcommand = Fcommand + inpString.nextToken()+" "; } inpString.set(Fcommand,"{}"); nofTokens = inpString.countTokens()-1; string prevTag = "variable"; while(inpString.hasMoreTokens() && nofTokens-->0){ string variable; Tokenizer Var = Tokenizer(inpString.nextToken(),"#()= ,"); if(!(inpString.currToken()).compare(";")) break; // Termination Condition with ";" if((inpString.currToken()).back()=='\\'){ // Escape sequence "\\" Ecommand = Ecommand + inpString.currToken().substr(0,inpString.currToken().length()-1) +Fcommand.substr(inpString.currIndex()-1,1); continue; } Ecommand = Ecommand + inpString.currToken() + "$"; Var.setMode(1); Var.setcurrPos(inpString.currToken().length()-1); string currTag = (Var.nextToken()); if (currTag.length()<=1) variable = prevTag; else{ variable = currTag; prevTag= currTag; } set<string>::iterator it = this->EssiTagList.find(variable); if (it != this->EssiTagList.end()) { map<string,int>::iterator it = this->TagList.find(variable); if (it != this->TagList.end()){ it->second=it->second+1; variable = variable + "#" +to_string(it->second); } else{ this->TagList.insert(pair<string,int>(variable,1)); variable = variable + "#1"; } this->NofTagVariables++; } this->VarList.push_back(variable); this->EssiVarList.push_back(variable); // inpString.setDelimiter("{}#()="); } Ecommand = Ecommand+inpString.nextToken(); this->EssiCommand = Ecommand; this->NofEssiVariables = this->VarList.size(); }