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

相关推荐
方也_arkling10 分钟前
【Java-Day13】内部类
java·开发语言
INGNIGHT12 分钟前
984.不含 AAA 或 BBB 的字符串(贪心)
开发语言·算法·leetcode
Ws_14 分钟前
C# 桌面端开发工程师面试题 + 参考答案
开发语言·面试·c#
梦幻通灵15 分钟前
Java传递负数金额被默认转化为0处理方案
java·开发语言
七夜zippoe20 分钟前
OpenClaw Canvas 执行:JavaScript 注入实战
开发语言·javascript·udp·canvas·openclaw
雨落在了我的手上25 分钟前
初识java(十五):字符串-String类
java·开发语言
zzx2006__25 分钟前
JavaScript最终考核
开发语言·前端·javascript
努力努力再努力wz26 分钟前
【Qt入门系列】:QLabel控件详解:从文本显示到图片展示,再到内容布局与伙伴机制
android·开发语言·数据结构·数据库·c++·qt·mysql
甄心爱学习41 分钟前
【项目实训(个人10)】
开发语言·前端·javascript
触底反弹41 分钟前
dom操作这篇文章就够了
javascript·面试