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

相关推荐
DEMO派2 分钟前
Web 视频录制方案解析,轻松实现录屏!
前端·javascript·音视频
PuppyCoding4 分钟前
EasyExcel 导出排除基类字段,不给基类加@ExcelIgnore 的方式。
java·开发语言
源代码•宸6 分钟前
Golang原理剖析(interface)
服务器·开发语言·后端·golang·interface·type·itab
冬奇Lab8 分钟前
【Kotlin系列09】委托机制与属性委托实战:组合优于继承的最佳实践
android·开发语言·kotlin
Vallelonga9 分钟前
浅谈 Rust bindgen 工具
开发语言·rust
ElfBoard10 分钟前
ElfBoard技术贴|如何在ELF-RK3506开发板上构建AI编程环境
c语言·开发语言·单片机·嵌入式硬件·智能路由器·ai编程·嵌入式开发
洲星河ZXH11 分钟前
Java,泛型
java·开发语言·windows
木木木一11 分钟前
Rust学习记录--C13 Part1 闭包和迭代器
开发语言·学习·rust
木木木一12 分钟前
Rust学习记录--C13 Part2 闭包和迭代器
开发语言·学习·rust
wuhen_n12 分钟前
TypeScript工作流深度解析:从.ts到.js发生了什么?
前端·javascript·typescript