Ejemplo n.º 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;
}
Ejemplo n.º 2
0
/*
================
idDict::RandomPrefix
================
*/
const char *idDict::RandomPrefix( const char *prefix, idRandom &random ) const {
	int count;
	const int MAX_RANDOM_KEYS = 2048;
	const char *list[MAX_RANDOM_KEYS];
	const idKeyValue *kv;
	list[0] = "";
	for( count = 0, kv = MatchPrefix( prefix ); kv && count < MAX_RANDOM_KEYS; kv = MatchPrefix( prefix, kv ) ) {
		list[count++] = kv->GetValue().c_str();
	}
	return list[random.RandomInt( count )];
}
Ejemplo n.º 3
0
// RAVEN BEGIN
// abahr: added default value param
const char *idDict::RandomPrefix( const char *prefix, idRandom &random, const char* defaultValue ) const {
	int count;
	const int MAX_RANDOM_KEYS = 2048;
	const char *list[MAX_RANDOM_KEYS];
	const idKeyValue *kv;

// RAVEN BEGIN
// abahr: added defaultValue param
	list[0] = defaultValue;
// RAVEN END
	for ( count = 0, kv = MatchPrefix( prefix ); kv && count < MAX_RANDOM_KEYS; kv = MatchPrefix( prefix, kv ) ) {
		list[count++] = kv->GetValue().c_str();
	}
	return list[random.RandomInt( count )];
}
Ejemplo n.º 4
0
bool CScanner::isNewline()
{
#define MATCH_NEWLINE MatchPrefix("\r\n") || MatchPrefix("\r") || MatchPrefix("\n")
	while(MatchPrefix("\\"))
		if (!MATCH_NEWLINE)
			return DecPos(), false;
	return MATCH_NEWLINE;
}
Ejemplo n.º 5
0
char CScanner::cget()
{
	if (Pos < 0 || Pos > SourceLength)
		return 0;
	while(MatchPrefix("\\"))
		if (!MATCH_NEWLINE)
		{
			DecPos();
			break;
		}
	return Source[Pos];
}
Ejemplo n.º 6
0
String WsmUtils::getRootResourceUri(const String& resourceUri)
{

    CString cstr(resourceUri.getCString());
    const char* start = cstr;
    const char* end = MatchPrefix(start, WSM_RESOURCEURI_PREFIX_PATTERN);

    if (end)
        return String(start, end - start - 1);

    const int NS = WsmNamespaces::WS_CIM_SCHEMA;
    return String(WsmNamespaces::supportedNamespaces[NS].extendedName);
}
Ejemplo n.º 7
0
bool CScanner::MatchPrefix(const string &Prefix, unsigned int Offset /*= 0*/)
{
	if (Offset >= Prefix.length())
		return true;
	bool Result = false;
	if (Source[Pos] == Prefix[Offset])
	{
		IncPos();
		Result = MatchPrefix(Prefix, Offset + 1);
		if (!Result)
			DecPos();
	}
	return Result;
}
Ejemplo n.º 8
0
PEGASUS_NAMESPACE_BEGIN

const char* MatchPrefix(const char* str, const char* pat)
{
    const char* p;
    const char* q;

    /* Now match expression to str. */

    for (p = pat, q = str; *p && *q; )
    {
        if (*p == '*')
        {
            const char* r;
            p++;

            /* Recursively call to find the shortest match. */

            for (r = q; *r; r++)
            {
                if (MatchPrefix(r, p))
                    break;
            }

            q = r;
        }
        else if (*p == *q)
        {
            p++;
            q++;
        }
        else
        {
            /* No match */
            return 0;
        }
    }

    /* If final character of pattern is '*', then match the whole string. */

    if (p[0] == '*' && p[1] == '\0')
    {
        /* Seek the end of string */

        while (*q)
            q++;

        /* Complete match */
        return q;
    }

    /* If pattern not exhausted, then mismatch */

    if (*p)
    {
        /* No match */
        return 0;
    }

    /* Return pointer to first non-matching character. */
    return q;
}