【发布时间】:2011-01-19 13:03:13
【问题描述】:
我正在为一个项目编写一个编译器前端,并试图了解对源代码进行标记的最佳方法是什么。 我无法在两种方式之间进行选择:
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) 解析阶段开始,在需要时创建和使用令牌(代码似乎不太清楚)
什么是最好的方法??为什么??效率? 在此先感谢您的回答
【问题讨论】:
标签: c++ parsing compiler-construction tokenize