web-dev-qa-db-ja.com

他のものより解析しやすいものがあるのは何ですか?

WebAssembly のWikipediaページを読んでいたところ、「WebAssemblyは…JavaScriptよりも高速に解析できるように設計されています 」、私は考えさせられました、特定の言語またはデータ形式が他のものよりも速く解析するのはなぜですか、そしてどの解析アルゴリズムが使用されていますか?

8
Moses

このトピックは非常に複雑です。パーサーアルゴリズムをググると、詳細な資料がたくさん得られます。

一般に:

  • 解決する必要のある曖昧さが少ないほど、解析プロセスが高速になります。
  • 決定を下す前に考慮しなければならないトークンが多いほど、トークンは複雑になります。

例えば:
JSパーサーがこのコードでfunctionキーワードを見つけた場合、function xyz(a, b) {}の場合、関数キーワードがあいまいです。それは最初に次のトークンxyzを処理して、それが関数宣言であると判断する前に識別子であることを確認する必要があります。

ただし、次のトークンが_(_の場合は、関数リテラルfunction(a, b) {}を処理しています。そのため、パーサーの動作が大きく異なるため、パーサー内のコードが多くなり、実行が遅くなります。

これら2つの目的に異なるキーワードがあった場合でも、あいまいさはありません。

function_decl xyz(a, b, c) {}およびfunction_lit(a, b, c) {}

しかし、誰もそのような言語で書きたくないでしょう。ただし、WebAssemblyは手動で作成することを想定していません。これにより、言語を人間ではなく機械に合わせて調整できます。

18
marstato