Ten temat jest bardzo złożony. Możesz wyszukiwać w Google algorytmy analizatora składni, a otrzymasz mnóstwo szczegółowych materiałów.
Ogólnie:
- Im mniej niejasności należy rozwiązać, tym szybszy jest proces analizy.
- Im więcej tokenów należy wziąć pod uwagę, zanim będzie można podjąć decyzję, tym bardziej będzie ona złożona.
Na przykład:
gdy parser JS widzi function
słowo kluczowe w tym kodzie function xyz(a, b) {}
:, słowo kluczowe funkcji jest niejednoznaczne. Najpierw musi przetworzyć następny token xyz
i sprawdzić, czy jest to identyfikator, zanim zdecyduje, że jest to deklaracja funkcji.
Jednakże, jeśli następny żeton były (
mamy do czynienia z dosłownym funkcji: function(a, b) {}
. Wymaga to, że parser zachowuje się zupełnie inaczej, dlatego więcej kodu w parserze, a tym samym wolniejsze wykonanie.
Gdyby dla tych dwóch celów były różne słowa kluczowe, nie byłoby dwuznaczności:
function_decl xyz(a, b, c) {}
i function_lit(a, b, c) {}
Jednak nikt nie chciałby pisać w takim języku. Ale WebAssembly nie powinien być napisany ręcznie. Pozwala to na dostosowanie języka do maszyn, a nie ludzi.