Topik ini sangat kompleks. Anda dapat google untuk algoritma parser dan Anda akan mendapatkan banyak materi detail.
Secara umum:
- Semakin sedikit ambiguitas yang harus diselesaikan, semakin cepat proses penguraian.
- Semakin banyak token harus dipertimbangkan sebelum keputusan dapat dibuat, semakin kompleks ia mendapat.
Misalnya:
Ketika parser JS melihat function
kata kunci dalam kode function xyz(a, b) {}
ini:, kata kunci fungsi ambigous. Pertama-tama harus memproses token berikutnya xyz
dan melihat bahwa itu adalah pengidentifikasi sebelum dapat memutuskan bahwa itu adalah deklarasi fungsi.
Namun, jika token berikutnya adalah (
kita berhadapan dengan literal fungsi: function(a, b) {}
. Itu membutuhkan parser untuk berperilaku sangat berbeda, sehingga lebih banyak kode dalam parser, sehingga eksekusi lebih lambat.
Jika ada kata kunci yang berbeda untuk kedua tujuan ini, tidak akan ada ambiguitas:
function_decl xyz(a, b, c) {}
dan function_lit(a, b, c) {}
Namun, tidak ada yang mau menulis dalam bahasa seperti itu. Tapi WebAssembly tidak seharusnya ditulis dengan tangan. Itu memungkinkan bahasa untuk disesuaikan dengan mesin, bukan manusia.