Onde devo traçar a linha entre lexer e parser?

Estou escrevendo um lexer para o protocolo IMAP para fins educacionais e estou perplexo quanto ao local onde devo traçar a linha entre lexer e analisador. Veja este exemplo de uma resposta do servidor IMAP:

* FLAGS (\Answered \Deleted)

Esta resposta é definida na sintaxe formal assim:

mailbox-data   = "FLAGS" SP flag-list
flag-list      = "(" [flag *(SP flag)] ")"
flag           = "\Answered" / "\Deleted"

Como eles são especificados como literais de strings (também conhecidos como tokens "terminais"), seria mais correto para o lexer emitir umunique token para cada um, como:

(TknAnsweredFlag)
(TknSpace)
(TknDeletedFlag)

Ou seria tão correto emitir algo assim:

(TknBackSlash)
(TknString "Answered")
(TknSpace)
(TknBackSlash)
(TknString "Deleted")

Minha confusão é que o método anterior poderia complicar demais o lexer - se\Answered tinha dois significados em dois contextos diferentes, o lexer não emitia o token certo. Como um exemplo artificial (essa situação não ocorrerá porque os endereços de email estão entre aspas), como o lexer lidaria com um endereço de email como \ [email protected]? Ou a sintaxe formal foi projetada para nunca permitir que essa ambiguidade surja?

questionAnswers(3)

yourAnswerToTheQuestion