Ce sujet est très complexe. Vous pouvez rechercher des algorithmes d'analyse syntaxique sur Google et vous obtiendrez de nombreuses informations détaillées.
En général:
- Moins il faut résoudre d'ambiguïtés, plus le processus d'analyse est rapide.
- Plus il faut prendre en compte de jetons avant qu'une décision puisse être prise, plus elle devient complexe.
Par exemple:
Lorsqu'un analyseur JS voit le function
mot - clé dans ce code function xyz(a, b) {}
:, le mot-clé de fonction est ambigu. Il doit d'abord traiter le jeton suivant xyz
et voir qu'il s'agit d'un identifiant avant de pouvoir décider qu'il s'agit d'une déclaration de fonction.
Cependant, si le jeton suivant était un (
nous avons affaire à un littéral de fonction: function(a, b) {}
. Cela nécessite que l'analyseur se comporte très différemment, donc plus de code dans l'analyseur, donc une exécution plus lente.
S'il y avait des mots clés différents pour ces deux objectifs, il n'y aurait aucune ambiguïté:
function_decl xyz(a, b, c) {}
et function_lit(a, b, c) {}
Cependant, personne ne voudrait écrire dans une telle langue. Mais WebAssembly n'est pas censé être écrit à la main. Cela permet d'adapter le langage aux machines plutôt qu'aux humains.