Apa yang membuat beberapa hal lebih mudah diurai daripada yang lain?

8

Saya baru saja membaca halaman Wikipedia untuk WebAssembly dan berbunyi: " WebAssembly dirancang untuk lebih cepat diurai daripada JavaScript ", yang membuat saya berpikir, apa yang membuat bahasa atau format data tertentu lebih cepat diurai daripada yang lain dan apa algoritma penguraiannya bekas?

Musa
sumber

Jawaban:

18

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 functionkata kunci dalam kode function xyz(a, b) {}ini:, kata kunci fungsi ambigous. Pertama-tama harus memproses token berikutnya xyzdan 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.

marstato
sumber
1
Apakah ini berarti bahwa Lisp sangat mudah diurai?
Musa
9
@Moses: Ya, menulis parser lisp yang naif adalah sepele, karena sintaksisnya homoikonik dengan struktur pohon sintaksis abstrak dan hampir tidak ada ambiguitas.
Phoshi
4
Contoh lain yang baik adalah bytecode, sering dapat diurai dengan pernyataan switch perulangan dan hanya itu.
whatsisname
@whatsisname Memang, hal yang sama berlaku untuk Majelis dan Majelis Web biasa
marstato