Ця тема дуже складна. Ви можете знайти Google для алгоритмів аналізу, і ви отримаєте багато детального матеріалу.
В загальному:
- Чим менше неоднозначностей має бути вирішено, тим швидше процес розбору.
- Чим більше лексем потрібно розглянути до прийняття рішення, тим складнішим він буде.
Наприклад:
Коли аналізатор JS бачить functionключове слово в цьому коді:, function xyz(a, b) {}ключове слово функції є неоднозначним. Спочатку слід обробити наступний маркер xyzі побачити, що це ідентифікатор, перш ніж він зможе вирішити, що це оголошення функції.
Тим НЕ менше, якщо наступна лексема були (ми маємо справу з функцією литерала: function(a, b) {}. Це вимагає, щоб аналізатор поводився зовсім інакше, тим самим більше коду в аналізаторі, тим самим повільніше виконання.
Якби для цих двох цілей були різні ключові слова, неоднозначності не було б:
function_decl xyz(a, b, c) {} і function_lit(a, b, c) {}
Однак писати такою мовою ніхто не захотів. Але WebAssembly не слід писати від руки. Це дозволяє адаптувати мову до машин, а не до людей.