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混淆概念参考

相关推荐
SuperEugene几秒前
前端基础实战:JS/TS与Vue体系化扫盲(47 篇完整目录 + 避坑)
javascript·vue.js·前端框架·npm·ecmascript·状态模式
xixixiLucky1 分钟前
TreeSet |TreeMap|jar包|web包易混淆解答
java·开发语言
●VON3 分钟前
2G 内存云服务器部署 Spring Boot + MySQL 实战:从踩坑到上线
服务器·开发语言·spring boot·mysql·ui·von
飞Link3 分钟前
洞察数据的“分寸感”:深度解析对比学习(Contrastive Learning)
开发语言·python·学习·数据挖掘
飞函安全3 分钟前
Vite 8.0:Rust.bundle,性能提升10-30倍
开发语言·人工智能·rust
liulilittle3 分钟前
Debian/Ubuntu 18.04 上安装 GLIBC 2.28 (2026)
linux·运维·服务器·开发语言·c++·ubuntu·debian
兆子龙4 分钟前
深入探究 React 史上最大安全漏洞
前端·javascript
Volunteer Technology5 分钟前
核心框架源码常见问题(下)
java·开发语言·spring
兆子龙5 分钟前
React useTransition:让 UI 更新更丝滑的并发特性
java·javascript
晔子yy9 分钟前
【JAVA探索之路】简单聊聊Kafka
java·开发语言