private void FetchMoreTokens()
{
// While we need more tokens to fetch, do it.
while (true)
{
// Check if we really need to fetch more tokens.
bool needsMoreTokens = false;
if (tokens.Count == 0)
{
// Queue is empty.
needsMoreTokens = true;
}
else
{
// Check if any potential simple key may occupy the head position.
StaleSimpleKeys();
foreach (var simpleKey in simpleKeys)
{
if (simpleKey.IsPossible && simpleKey.TokenNumber == tokensParsed)
{
needsMoreTokens = true;
break;
}
}
}
// We are finished.
if (!needsMoreTokens)
{
break;
}
// Fetch the next token.
FetchNextToken();
}
tokenAvailable = true;
}