É possível analisar um documento usando uma única passagem de uma máquina de estado. Qual é o benefício de ter dois passes, ie. tendo um lexer para converter texto em tokens e tendo um analisador para testar as regras de produção nesses tokens? Por que não ter uma única passagem que aplique regras de produção diretamente ao texto?
15
Respostas:
Você não precisa separá-los. As pessoas as combinam em analisadores sem scanner .
A principal desvantagem dos analisadores sem scanner parece ser que as gramáticas resultantes são bastante complicadas - mais complicadas do que a combinação correspondente de uma expressão regular fazendo lexing e uma gramática sem contexto fazendo análise no fluxo de token. Em particular, gramáticas para análise sem scanner tendem a ambiguidade. É mais fácil remover a ambiguidade das gramáticas que trabalham em um fluxo de token.
Um benefício pragmático do uso de uma fase de lexing inicial dedicada é que você não associa o analisador subsequente a detalhes lexicais. Isso é útil durante o desenvolvimento inicial da linguagem de programação, quando os detalhes lexicais e sintáticos ainda estão mudando com frequência.
fonte