AST基础知识:哪些是节点的必要属性

举报
悦来客栈的老板 发表于 2021/04/01 03:23:15 2021/04/01
【摘要】 一. 提出问题 在进行节点的替换时,往往需要构建新的节点替换旧的节点,比如考虑下面的代码: var a = 3; 可以替换成: var a = 1 + 2; 这里,将 一个NumericLiteral  (3) 节点替换成了一个BinaryExpression (1+2)节点 . BinaryExpression 节点有 operat...

一. 提出问题

在进行节点的替换时,往往需要构建新的节点替换旧的节点,比如考虑下面的代码:

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。