Este tema es muy complejo. Puedes buscar en Google algoritmos de analizador y obtendrás mucho material detallado.
En general:
- Cuantas menos ambigüedades se deben resolver, más rápido será el proceso de análisis.
- Cuantos más tokens se tengan que considerar antes de tomar una decisión, más complejo se vuelve.
Por ejemplo:
cuando un analizador JS ve la function
palabra clave en este código:, function xyz(a, b) {}
la palabra clave de función es ambigua. Primero tiene que procesar el siguiente token xyz
y ver que es un identificador antes de poder decidir que es una declaración de función.
Sin embargo, si el siguiente token fuera una (
que se trata de un literal función: function(a, b) {}
. Eso requiere que el analizador se comporte de manera muy diferente, por lo tanto, más código en el analizador, por lo tanto, una ejecución más lenta.
Si hubiera diferentes palabras clave para estos dos propósitos, no habría ambigüedad:
function_decl xyz(a, b, c) {}
y function_lit(a, b, c) {}
Sin embargo, nadie querría escribir en ese idioma. Pero no se supone que WebAssembly esté escrito a mano. Eso permite que el lenguaje se adapte a las máquinas, en lugar de a los humanos.