示例#1
0
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);
		}
	}
}