Questo argomento è molto complesso. Puoi google per gli algoritmi del parser e avrai un sacco di materiale dettagliato.
In generale:
- Meno ambiguità devono essere risolte, più veloce è l'analisi
processo.
- Più token devono essere considerati prima di una decisione
può essere fatto, più diventa complesso.
Ad esempio:
Quando un parser JS vede la parola chiave function
in questo codice: function xyz(a, b) {}
, la parola chiave della funzione è ambigua. Prima deve elaborare il prossimo token xyz
e vedere che si tratta di un identificatore prima che possa decidere che si tratta di una dichiarazione di funzione.
Tuttavia, se il token successivo fosse un (
abbiamo a che fare con una funzione letterale: function(a, b) {}
. Ciò richiede che il parser si comporti in modo molto diverso, quindi più codice nel parser, quindi esecuzione più lenta.
Se ci fossero diverse parole chiave per questi due scopi, non ci sarebbe alcuna ambiguità:
function_decl xyz(a, b, c) {}
e function_lit(a, b, c) {}
Tuttavia, nessuno vorrebbe scrivere in un tale linguaggio. Ma WebAssembly non dovrebbe essere scritto a mano. Ciò consente di adattare il linguaggio alle macchine piuttosto che agli umani.