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

相关推荐
T.Ree.14 小时前
汇编_读写内存
开发语言·汇编·c#
鎏金铁匠14 小时前
跟着ECMAScript 规范,手写数组方法之map
javascript
kaikaile199514 小时前
基于MATLAB的直接序列扩频(DSSS)通信系统仿真实现
开发语言·matlab
czhc114007566314 小时前
C#1114 枚举
开发语言·c#
z_鑫14 小时前
Java线程池原理深度解析
java·开发语言·后端
小呀小萝卜儿15 小时前
2025-11-14 学习记录--Python-特征归一化方法(Min-Max或StandardScaler)
开发语言·python·学习
雪域迷影15 小时前
C++ 11 中的move赋值运算符
开发语言·c++·move
jf加菲猫15 小时前
第2章 Hello World
开发语言·c++·qt·ui
不爱吃糖的程序媛15 小时前
Electron 智能文件分析器开发实战适配鸿蒙
前端·javascript·electron
flashlight_hi15 小时前
LeetCode 分类刷题:3217. 从链表中移除在数组中存在的节点
javascript·数据结构·leetcode·链表