ホームページ > 記事 > ウェブフロントエンド > シンプルで明確な JS 抽象構文ツリー
この記事では、主にシンプルで明確な JS 抽象構文ツリーについて説明します。まず、抽象構文ツリーとは何かを紹介します。
Babel は現在ほぼすべてのプロジェクトに必須ですが、その動作原理では生成プロセスで js の解析を避けることができず、プロジェクト acron は初期にフォークされました。これを理解する前に見てみましょう。このエンジンが何を解析するかを見てください。 BabelだけでなくwebpackもJavaScriptパーサーを使ってコードを抽象構文ツリーに変換します。このツリーを操作することで、代入文、宣言文、演算文を正確に見つけることができます
簡単な例を見てみましょう:
var a = 1; var b = a + 1;
私たちはこの Web サイトを使用しています。これは非常に使いやすい Esprima エンジン Web サイトです。フローチャートは次のように描かれています:
そして、彼はjson オブジェクトの形式は次のとおりです:
{ "type": "Program", "body": [ { "type": "VariableDeclaration", "declarations": [ { "type": "VariableDeclarator", "id": { "type": "Identifier", "name": "a" }, "init": { "type": "Literal", "value": 1, "raw": "1" } } ], "kind": "var" }, { "type": "VariableDeclaration", "declarations": [ { "type": "VariableDeclarator", "id": { "type": "Identifier", "name": "b" }, "init": { "type": "BinaryExpression", "operator": "+", "left": { "type": "Identifier", "name": "a" }, "right": { "type": "Literal", "value": 1, "raw": "1" } } } ], "kind": "var" } ], "sourceType": "script" }
chrome には v8、firefix には Spidermonkey があり、よく使用されるエンジンもいくつかあります:
esprima
acron
Traceur
UglifyJS2
shift
以下は、いくつかのエンジンの速度比較と、異なるフレームワークを使用したエンジンの読み込み速度です:
私個人的には、カプセル化が完璧であればあるほど、解析時間は長くなるのではないかと考えています。このエンジンの中では、babel エンジンの前身もこのプロジェクトのフォークです。 ASTの3つの軸
2. テスト プロジェクトの下に esprima、estraverse、および escodegen の npm モジュールをインストールします
npm i esprima estraverse escodegen --save3. ディレクトリの下に新しい test.js ファイルを作成し、次のコードを読み込みます:
const esprima = require('esprima'); let code = 'const a = 1'; const ast = esprima.parseScript(code); console.log(ast);出力結果が表示されます:
Script { type: 'Program', body: [ VariableDeclaration { type: 'VariableDeclaration', declarations: [Array], kind: 'const' } ], sourceType: 'script' }4. 次に、テスト ファイルに次のコードを読み込みます:
const estraverse = require('estraverse'); estraverse.traverse(ast, { enter: function (node) { node.kind = "var"; } }); console.log(ast);出力結果:
Script { type: 'Program', body: [ VariableDeclaration { type: 'VariableDeclaration', declarations: [Array], kind: 'var' } ], sourceType: 'script' }5. 最後に、テスト ファイルに次のコードを追加します。出力結果:
const escodegen = require("escodegen"); const transformCode = escodegen.generate(ast) console.log(transformCode);これらの3つの軸を通して:
const a = 1
转化成了var a = 1
AST Explorer
esprima可視化
AST のオンライン視覚化
概要
コーディング効率を向上させるためのjs文法でよく使われる10のメソッドをまとめます
JavaScriptプログラミングの要点_JS文法辞典_基礎知識
以上がシンプルで明確な JS 抽象構文ツリーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。