AST基础知识:哪些是节点的必要属性
一. 提出问题
在进行节点的替换时,往往需要构建新的节点替换旧的节点,比如考虑下面的代码:
var a = 3;
可以替换成:
var a = 1 + 2;
这里,将 一个NumericLiteral (3) 节点替换成了一个BinaryExpression (1+2)节点 .
BinaryExpression 节点有 operator, left, right 这样三个属性,在构造时怎么知道哪些是必须的,哪些是可以省略的?还有,在调用t.binaryExpression这个方法时,怎么知道参数( operator, left, right )的调用顺序?
二. 解决问题
在构造节点的时候,可以将下面的网站打开:
https://babeljs.io/docs/en/babel-types
比如构造 BinaryExpression 节点,直接搜索(CTRL + F) BinaryExpression,定位到这里:
上面的 t.binaryExpression(operator, left, right) 表示出了参数的顺序,下面的 子节点后面跟 required,则表示构成节点的必备属性。
又如 VariableDeclarator 节点,搜索结果:
从上图就可以看出,init节点后面跟了个 (default:null),表示默认节点为null,即可以不用构造该子节点也可以完成父节点的构造。
怎么样,是不是非常的简单,学就对了。
备注:所有内容首发于公众号,之后会更新AST反混淆实战、Javascript基础知识、APP逆向、C++、数据结构与算法等等一系列教程,也会更新一些自己的学习心得等,欢迎大家关注。
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/115344976
- 点赞
- 收藏
- 关注作者
评论(0)