js解析成语法树以及还原

js 复制代码
const {parse} = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const generator = require("@babel/generator").default;

// 1.定义要处理的代码
const jscode = `function square(n) {
  return n * n;
}`;

// 2.使用@babel/parser模块解析代码
const ast = parse(jscode);

// 3.使用@babel/traverse模块遍历代码,如果遇到名为"n"的标识符,则将其名称更改为"x"
traverse(ast, {
  enter(path) {
    if (path.isIdentifier({ name: "n" })) {
      path.node.name = "x";
    }
  },
});

// 4.使用@babel/generator模块生成代码
let { code } = generator(ast);

// 打印生成的代码
console.log(code);

ast应用在语法高亮,格式化的思路:

  1. 读取语言文件
  2. 使用语言解析器解析成语法树
  3. 对语法树遍历处理(加高亮,格式化)
  4. 对语法树进行还原
  5. 将源码写回语言文件

也可以应用在语言混淆以及加密上。

ast混淆概念参考

相关推荐
福楠2 分钟前
C++ STL | set、multiset
c语言·开发语言·数据结构·c++·算法
一晌小贪欢2 分钟前
Python 健壮性进阶:精通 TCP/IP 网络编程与 requirements.txt 的最佳实践
开发语言·网络·python·网络协议·tcp/ip·python基础·python小白
enfpZZ小狗3 分钟前
基于C++的反射机制探索
开发语言·c++·算法
曹牧3 分钟前
C#:WebReference
开发语言·c#
爱上妖精的尾巴4 分钟前
7-11 WPS JS宏 对象的属性值为函数的写法与用法
前端·javascript·wps·js宏·jsa
黎雁·泠崖7 分钟前
Java static入门:概述+静态变量特点与基础实战
java·开发语言
玉梅小洋7 分钟前
C盘爆满 修改VS Code缓存与插件目录指定方法
开发语言·windows·visualstudio
C#程序员一枚8 分钟前
C#AsNoTracking()详解
开发语言·c#
爱上妖精的尾巴8 分钟前
7-12 WPS JS宏 this、return用构造函数自定义类-1:对象内部函数,外部调用的写法
前端·javascript·wps·js宏·jsa
一条大祥脚12 分钟前
26.1.21 根号分治 相向双指针
java·开发语言·redis