web-dev-qa-db-ja.com

JavaScript ASTとは何ですか?

Abstract Syntax Tree .. GithubでSpiderMonkey ASTにコンパイルすることをいつも聞いていました。
それで、それはJS構文ツリーの実際の標準ですか? V8がありますが、V8は同じ種類のASTを使用していますか?

どうすればそれで遊ぶことができますか?

51
jiyinyiyong

SpiderMonkeyは parser api を提供します。これはおそらく、構文オブジェクトを手に入れる最も簡単な方法です。

また、開いているjs-jsEsprima のようなパーサー(これはECMAScriptですが、まさに路地のすぐ上にあります)

27
slezica

1. AST Explorer をご覧ください。 10を超えるパーサーによって生成されたASTを探索するオンラインツール。 AST言語の木を学ぶには良いツールです。
Github.comのAST Explorerソース

enter image description here


2.また、jsコードを JavaScript AST Visualizer に貼り付け、[show ast]ボタンをクリックすると、AST =視覚的に。

デモjsコード:

function foo(d) {
  d += 3;
    return d+999
}
function bar(d) {
    return d*100
}

js ast demo

46
cuixiping

Marijnh教授からacronパーサーを試してみたい場合 https://github.com/marijnh このリンクを試してください: https://astexplorer.net/

これは小さく、高速なJavaScriptパーサーであり、完全にJavaScriptで記述されています。

上記の JavaScript AST Visualizer はEsprimaエンジンを使用し、JavaScrptでも記述されています。

JavaScriptは、解析で優位になりますAST JavaScriptエンジンは今日最適化されているためです。 https://en.wikipedia.org/wiki/JavaScript_engine

SpiderMonkey AST JS構文ツリーの標準?V8は同じ種類のASTを使用していますか?

これらのWebブラウザーエンジンには、両方ともAST C++で記述された内部処理があります。これが、JavaScrptコードがevalを除くほとんどの場合高速に実行される理由です。

2
prosti

私はJavascript ASTの仕様を1つだけ知っています: https://github.com/estree/estree

これは、MozillaからのDave Hermanの発行に由来し、それ以来コミュニティの標準として進化しました。したがって、SpiderMonkeyとある程度一致するはずですが、V8とJSCについてはわかりません。

誰かが問題に関する詳細情報を提供できれば幸いです。

0
Rvach.Flyver