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