Я пишу фронтенд компилятора для проекта и пытаюсь понять, каков наилучший метод токенизации исходного кода.Я не могу выбирать между двумя способами:
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) начинается фаза синтаксического анализа, и когда необходимо, токен создается и используется (код кажется не очень понятным)
Какой метод лучше и почему? Иэффективность ??заранее спасибо за ответы