Este tópico é muito complexo. Você pode pesquisar no Google por algoritmos de analisador e obterá bastante material detalhado.
Em geral:
- Quanto menos ambiguidades tiverem que ser resolvidas, mais rápido será o processo de análise.
- Quanto mais tokens precisam ser considerados antes que uma decisão possa ser tomada, mais complexo fica.
Por exemplo:
Quando um analisador JS vê a function
palavra - chave neste código function xyz(a, b) {}
:, a palavra-chave da função é ambígua. Primeiro, ele precisa processar o próximo token xyz
e verificar se é um identificador antes de poder decidir que é uma declaração de função.
No entanto, se o próximo token fosse um (
estamos lidando com um literal de função: function(a, b) {}
. Isso requer que o analisador se comporte de maneira muito diferente, portanto, mais código no analisador e, portanto, execução mais lenta.
Se houvesse palavras-chave diferentes para esses dois propósitos, não haveria ambiguidade:
function_decl xyz(a, b, c) {}
e function_lit(a, b, c) {}
No entanto, ninguém gostaria de escrever em um idioma assim. Mas o WebAssembly não deve ser escrito à mão. Isso permite que o idioma seja adaptado às máquinas, e não aos humanos.