AST学习-拆分一个Literal类型的节点 拆分一个Literal类型的节点 拆分NumericLiteral节点类型示例代码 1var a = 12345678; 了解异或操作1234567# 生成随机八位负数const first = 0 - Math.floor(Math.random() * 10000000 + 10000000)# 与a做异或操作const second = a ^ first;# 将first 与 second 进行异或操作const res = first ^ second>>>12345678 可以发现输出结果为 12345678, res = first ^ second = first ^ first ^ a = 0 ^ a = a 了解了这个概念就可以在 AST 中实现了 在 AST 中实现 通过 AST-TREE查看可知异或表达式属于 BinaryExpression 节点,所以我们需要构造这个节点 12const t = require("@babel/types")t.BinaryExpression('^', t.NumericLiteral(first), t.NumericLiteral(second)) 然后使用该节点替换原来的 NumericLiteral 节点就好了,代码如下 1234567891011const vistor = { NumericLiteral(path){ const node = path.node; const value = node.value; const first = 0 - Math.floor(Math.random() * 10000000 + 10000000); const second = value ^ first; path.replaceWith(t.BinaryExpression('^', t.NumericLiteral(first), t.NumericLiteral(second))); path.stop(); }} 查看结果 技术 AST AST 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处! AST学习-合并Literal类型的计算表达式 上一篇 AST学习-插入节点 下一篇