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


8

WebAssemblyのWikipediaページを読んでいたところ、「WebAssemblyは…JavaScriptよりも高速に解析できるように設計されています」と書かれているため、特定の言語やデータ形式を他の言語やデータ形式よりも高速に解析できる理由と、解析アルゴリズムについて教えてください中古?

回答:


18

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

一般に:

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

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

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

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

function_decl xyz(a, b, c) {} そして function_lit(a, b, c) {}

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


1
これは、Lispが非常に簡単に解析されることを意味しますか?
モーゼス

9
@Moses:はい、単純なlispパーサーを作成するのは簡単です。構文は抽象構文ツリーの構造とホモコニックであり、あいまいさはほとんど存在しないためです。
Phoshi

4
もう1つの良い例はバイトコードであり、多くの場合、ループswitchステートメントで解析できます。
whatsisname 2017年

@whatsisname確かに、同じことが通常のアセンブリとWebアセンブリにも当てはまります
marstato
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.