AST 추상 구문 트 리 학습
4572 단어 자바 script
AST 와 전단 공정 화 실전
AST 추상 문법 트 리 - 가장 기본 적 인 자바 script 중점 지식, 99% 는 전혀 모 릅 니 다.
13 개의 예시 빠 른 입문 JS 추상 문법 트 리
AST Explorer
https://astexplorer.net/
콘 셉 트
JavaScript 해석:
코드:
var AST = "is Tree";
품사 분석 = > 기호 흐름
Keyword: var
Identifier: AST
Punctuator: =
String: "is Tree"
Punctuator: ;
문법 분석 = > AST
AST 도구: Recast
해석 기 (recast. parse): code = > AST
Code Case 1
const recast = require("recast");
const code =
`
function add(a, b) {
return a +
//
b
}
`
const ast = recast.parse(code);
const add = ast.program.body[0]
console.log(add)
Output Of Case 1
{
"type": "FunctionDeclaration",
"id": {
"type": "Identifier",
"name": "add"
},
"params": [
{
"type": "Identifier",
"name": "a"
},
{
"type": "Identifier",
"name": "b"
}
],
"body": {
"type": "BlockStatement",
"body": [
{
"type": "ReturnStatement",
"argument": {
"type": "BinaryExpression",
"operator": "+",
"left": {
"type": "Identifier",
"name": "a"
},
"right": {
"type": "Identifier",
"name": "b",
"comments": [
{
"type": "Line",
"value": " ",
"loc": {},
"leading": true,
"trailing": false
}
]
}
}
}
]
},
"generator": false,
"expression": false,
"async": false
}
금 형 제작 (recast. types. builders): AST = > 코드
Code Case 2
Code Case 1 코드 후 다음 코드 를 추가 하여 ast 를 재 조립 합 니 다.
// , , “ ”
const {
variableDeclaration,
variableDeclarator,
identifier: id,
arrowFunctionExpression,
binaryExpression,
blockStatement,
returnStatement
} = recast.types.builders
// , ast 。
// add
ast.program.body[0] = variableDeclaration("const", [
variableDeclarator(add.id, arrowFunctionExpression(
add.params,
binaryExpression('+', ...add.params)
))
]);
// squareSum
ast.program.body.push(variableDeclaration('var', [
variableDeclarator(id('squareSum'), arrowFunctionExpression(
[id('a'), id('b')],
blockStatement([
variableDeclaration('let', [
variableDeclarator(id('c'), binaryExpression('*', id('a'), id('a'))),
variableDeclarator(id('d'), binaryExpression('*', id('b'), id('b')))]),
returnStatement(binaryExpression('+', id('c'), id('d')))
])
))
]))
// AST
const output = recast.print(ast).code;
console.log(output)
Output Of Case 2
const add = (a, b) => a + b;
var squareSum = (a, b) => {
let c = a * a, d = b * b;
return c + d;
};
트 리 노드 옮 겨 다 니 기 (recast. types. visit)
recast.visit(ast, {
visitExpressionStatement: function(path) {
const { node} = path;
},
visitBlockStatement(path) {
// do something here
}
});
응용 장면
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.