bool CScanner::NextToken() { SkipWhiteSpace(); if (ErrorString != "") return false; // if (Pos >= SourceLength) // return false; _off_t OldPos = Pos; char c = cget(); if (isdigit(c) || // Thinks a little, while reading this condition, it might be a bit unreadable. ( ( c == '.' && ( (IncPos(), isdigit(cget())) || (DecPos(), false) ) ) && (DecPos(), true) ) ) return ParseNumber() && OldPos != Pos; else if (isalpha(c) || c == '_') return ParseIdentifier() && OldPos != Pos; else if (MatchPrefix("'")) return ParseCharacterLiteral() && OldPos != Pos; else if (MatchPrefix("\"")) return ParseStringLiteral() && OldPos != Pos; else if (SymbolicTokenMapping.find(string() += c)) return ParseSymbol() && OldPos != Pos; else if (c == 0) return true; else ErrorString = "Unrecognized character at line: ";// + itoa(CurrentLine) + ", Column: " + itoa(CurrentColumn); return false; }
void RBSParseXML::ParseSymbolsToArray(xml::XMLElement*elem,std::vector<RBSSymbol>&arr) { core::stringc elemName; xml::xmlSubElementsMapIT eit=elem->getElementsBegin(); xml::xmlSubElementsMapIT eEnd=elem->getElementsEnd(); for(;eit!=eEnd;++eit) { if((*eit)->GetType()!=xml::ENT_Element)continue; xml::XMLElement* e=dynamic_cast<xml::XMLElement*>(*eit); core::string_to_char(e->getName(),elemName); elemName.make_lower(); if(elemName=="symbol"){ RBSSymbol s(mT(""),true,ESV_Unset); if(ParseSymbol(e,s)) arr.push_back(s); } } }
void RBSParseXML::ParseSymbols(xml::XMLElement*elem,RuleBasedSystem*rbs) { core::stringc elemName; xml::xmlSubElementsMapIT eit=elem->getElementsBegin(); xml::xmlSubElementsMapIT eEnd=elem->getElementsEnd(); for(;eit!=eEnd;++eit) { if((*eit)->GetType()!=xml::ENT_Element)continue; xml::XMLElement* e=dynamic_cast<xml::XMLElement*>(*eit); core::string_to_char(e->getName(),elemName); elemName.make_lower(); if(elemName=="symbol"){ RBSSymbol s(mT(""),false,ESV_Unset); if(ParseSymbol(e,s)) rbs->AddSymbol(s); } } }