Na análise, entendemos com mais frequência a análise de linguagens livres de contexto. Uma linguagem livre de contexto é mais poderosa que a linguagem comum; portanto, o analisador pode (na maioria das vezes) executar o trabalho do analisador lexical imediatamente.
Mas isso é a) bastante antinatural b) muitas vezes ineficiente.
Para a), se eu pensar em como, por exemplo, uma if
expressão, acho que, se expr THEN expr ELSE expr e não 'i' 'f', talvez alguns espaços, qualquer caractere com o qual uma expressão possa começar etc. idéia.
Para b) existem ferramentas poderosas que fazem um excelente trabalho ao reconhecer entidades lexicais, como identificadores, literais, colchetes de todos os tipos, etc. Eles farão seu trabalho praticamente em pouco tempo e fornecerão uma ótima interface: uma lista de tokens. Não se preocupe em ignorar mais espaços no analisador, seu analisador será muito mais abstrato quando lidar com tokens e não com caracteres.
Afinal, se você acha que um analisador deve estar ocupado com coisas de baixo nível, por que então processar caracteres? Pode-se escrever também no nível de bits! Veja bem, esse analisador que funciona no nível de bits seria quase incompreensível. É o mesmo com personagens e tokens.
Apenas meus 2 centavos.