Digamos que eu tenho um grande bloco de código que já lexei e analisei.
Suponha que apenas um caractere mude; Gostaria de atualizar minha análise, mas como a modificação é muito pequena em comparação com a coisa toda, gostaria de saber se é possível não analisar a coisa toda novamente, mas se existem algoritmos para determinar o intervalo a ser analisado novamente e para lidar adequadamente com os limites de token em movimento.
Desde já, obrigado!
Respostas:
Conforme solicitação do @Agos, transformei o comentário em uma resposta.
Primeiro, devo admitir que não tenho muito conhecimento nesse campo. No entanto, sugiro que você leia os documentos Construindo analisadores amigáveis e Análise incremental eficiente e flexível para ter uma visão de quais algoritmos foram usados para análise incremental antes de 2000.
Para tratamentos atualizados, você pode dar uma olhada nestes documentos:
Mais informações: Existem (pelo menos) duas abordagens para análise / compilação:
fonte
se o seu analisador incremental salva o estado em cada extremidade da linha, você analisa novamente apenas do último estado válido do analisador (na melhor das hipóteses, por exemplo, após uma análise completa, este é apenas o começo da linha em que a modificação começa) e para de analisar no final da linha em que a modificação termina (o analisador interno pode olhar além da modificação para reconhecer corretamente a estrutura)
fonte