да, у меня вопрос зачем поток токенов если можно сразу текст парсить в IR
Так есть методы lexerless parsing, если что.
И поток токенов почти никогда в явном виде всё равно не строится (разве что при отладке lexer).
По идее, с токенами удобнее работать, потому что:
1. Parsing разделяется на эти модули (lexer и parser), в которых традиционно применяются разные методы описания и обработки (чаще всего regexp-ы в lexer и CFG в parser, по идее).
2. Разработка грамматики, где не нужно учитывать комментарии, переводы строк и т.п., с чем может "разобраться" lexer, может быть проще.
3. Иногда в lexer, наоборот, можно специально распознавать "сложные" конструкции, чтобы упростить работу parser.
4. При таком разделении можно использовать существующие генераторы lexers и parser, чтобы ускорить их разработку.