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

相关推荐
唐装鼠3 分钟前
Rust Turbofish 语法详解(deepseek)
开发语言·后端·rust
吃喝不愁霸王餐APP开发者6 分钟前
Java应用对接美团开放平台API时的HTTPS双向认证与证书管理实践
java·开发语言·https
宠..7 分钟前
QButtonGroup
java·服务器·开发语言·前端·数据库·c++·qt
superman超哥8 分钟前
仓颉代码内联策略深度解析
c语言·开发语言·c++·python·仓颉
Moment14 分钟前
一文搞懂 Tailwind CSS v4 主题变量映射背后的原理
前端·javascript·面试
我命由我1234516 分钟前
JavaScript WebGL - WebGL 引入(获取绘图上下文、获取最大支持纹理尺寸)
开发语言·前端·javascript·学习·ecmascript·学习方法·webgl
辛-夷18 分钟前
2025年高频面试题整理(vue系列一)
前端·javascript·vue.js·前端框架
凌冰_21 分钟前
Thymeleaf 访问域对象
java·开发语言
想唱rap24 分钟前
哈希(C++)
服务器·开发语言·c++·算法·哈希算法
2501_9307077825 分钟前
使用C#代码向 Word 文档添加文档属性
开发语言·c#·word