Що робить деякі речі простішими для розбору, ніж інші?


8

Я щойно читав сторінку Вікіпедії для WebAssembly, і на ній написано: " WebAssembly - це ... розроблений так, щоб швидше розбирати, ніж JavaScript ", що наштовхнуло мене на думку, що робить певний мову чи формат даних швидшим для розбору, ніж інші та які алгоритми розбору використаний?

Відповіді:


18

Ця тема дуже складна. Ви можете знайти Google для алгоритмів аналізу, і ви отримаєте багато детального матеріалу.

В загальному:

  • Чим менше неоднозначностей має бути вирішено, тим швидше процес розбору.
  • Чим більше лексем потрібно розглянути до прийняття рішення, тим складнішим він буде.

Наприклад:
Коли аналізатор JS бачить functionключове слово в цьому коді:, function xyz(a, b) {}ключове слово функції є неоднозначним. Спочатку слід обробити наступний маркер xyzі побачити, що це ідентифікатор, перш ніж він зможе вирішити, що це оголошення функції.

Тим НЕ менше, якщо наступна лексема були (ми маємо справу з функцією литерала: function(a, b) {}. Це вимагає, щоб аналізатор поводився зовсім інакше, тим самим більше коду в аналізаторі, тим самим повільніше виконання.

Якби для цих двох цілей були різні ключові слова, неоднозначності не було б:

function_decl xyz(a, b, c) {} і function_lit(a, b, c) {}

Однак писати такою мовою ніхто не захотів. Але WebAssembly не слід писати від руки. Це дозволяє адаптувати мову до машин, а не до людей.


1
Чи означає це, що Лісп дуже легко розбирається?
Мойсей

9
@Moses: Так, написання наївного аналізатора пісні тривіально, оскільки синтаксис є гомоніконічним зі структурою абстрактного синтаксичного дерева і майже не існує двозначностей.
Phoshi

4
Ще один хороший приклад - байт-код, часто його можна проаналізувати за допомогою оператора переключення циклу, і все.
whatsisname

@whatsisname Дійсно, те саме стосується регулярних зборів та веб-асамблей
1717
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.