我正在为一个项目编写一个编译器前端,我试图理解什么是标记源代码的最佳方法。 我不能两种方式之间进行选择: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