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 分钟前
快手一面:为什么要求用Static来修饰ThreadLocal变量?
javascript
大厂数码评测员3 分钟前
2026 年家庭菜谱记录工具怎么选:从功能边界和小程序代码实现看免费与付费差异
java·开发语言·apache
XS0301066 分钟前
Java基础 set集合
java·开发语言
驭渊的小故事6 分钟前
继承和多态
java·开发语言
天天打码7 分钟前
从 Rolldown 到 Oxc:前端工具链正在全面 Rust 化
开发语言·前端·rust
行业研究员11 分钟前
HTML头部元信息避坑指南大纲
javascript
Beginner x_u13 分钟前
前端八股整理总索引|JS/TS、HTML/CSS、Vue、浏览器、工程化与手写题
前端·javascript·html
希望永不加班20 分钟前
Java数据类型陷阱:int和Integer的7个关键区别
java·开发语言
Cobyte20 分钟前
10.响应式系统演进:通过位运算优化动态依赖收集(Vue3.2)
前端·javascript·vue.js
The Chosen One98524 分钟前
【Linux】深入理解Linux进程(二):进程的状态
linux·运维·服务器·开发语言·git