我正在爲一個項目編寫一個編譯器前端,我試圖理解什麼是標記源代碼的最佳方法。 我不能兩種方式之間進行選擇:Tokenizer效率問題
1)分詞器讀取的所有令牌:
bool Parser::ReadAllTokens()
{
Token token;
while(m_Lexer->ReadToken(&token))
{
m_Tokens->push_back(token);
token.Reset(); // reset the token values..
}
return !m_Tokens->empty();
}
,然後解析階段開始時,M_ Tokens
名單上運行。通過這種方式,方法getNextToken(),peekNextToken()和ungetToken()都比較容易通過迭代器實現,並且分析代碼寫得很好,並明確(不getNextToken(破),即:
getNextToken();
useToken();
getNextToken();
peekNextToken();
if(peeked is something)
ungetToken();
..
..
)
2)解析階段開始,並在需要的時候,在創建和使用令牌(代碼似乎不是那麼清楚)
什麼是最好的方法?爲什麼??和效率? 在此先感謝您的答案
因爲它適用於考試:P – Salv0 2011-01-19 13:30:27