Dieses Thema ist sehr komplex. Sie können nach Parser-Algorithmen googeln und erhalten reichlich detailliertes Material.
Im Algemeinen:
- Je weniger Mehrdeutigkeiten gelöst werden müssen, desto schneller ist der Analyseprozess.
- Je mehr Token berücksichtigt werden müssen, bevor eine Entscheidung getroffen werden kann, desto komplexer wird sie.
Beispiel:
Wenn ein JS-Parser das function
Schlüsselwort in diesem Code sieht : function xyz(a, b) {}
ist das Funktionsschlüsselwort nicht eindeutig. Es muss zuerst das nächste Token verarbeiten xyz
und feststellen, dass es sich um eine Kennung handelt, bevor es entscheiden kann, dass es sich um eine Funktionsdeklaration handelt.
Wenn das nächste Token jedoch ein wäre (
, handelt es sich um ein Funktionsliteral : function(a, b) {}
. Das erfordert, dass sich der Parser sehr unterschiedlich verhält, also mehr Code im Parser, was die Ausführung verlangsamt.
Wenn es für diese beiden Zwecke unterschiedliche Schlüsselwörter gäbe, gäbe es keine Mehrdeutigkeit:
function_decl xyz(a, b, c) {}
und function_lit(a, b, c) {}
Allerdings würde niemand in einer solchen Sprache schreiben wollen. WebAssembly sollte jedoch nicht von Hand geschrieben werden. Dadurch kann die Sprache eher auf Maschinen als auf Menschen zugeschnitten werden.