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

相关推荐
麦兜*10 分钟前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
你的人类朋友1 小时前
【Node&Vue】JS是编译型语言还是解释型语言?
javascript·node.js·编程语言
萧鼎1 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
烛阴1 小时前
TypeScript高手密技:解密类型断言、非空断言与 `const` 断言
前端·javascript·typescript
艾伦~耶格尔2 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
样子20182 小时前
Uniapp 之renderjs解决swiper+多个video卡顿问题
前端·javascript·css·uni-app·html
yujkss2 小时前
Python脚本每天爬取微博热搜-终版
开发语言·python
yzx9910132 小时前
小程序开发APP
开发语言·人工智能·python·yolo
黑客飓风2 小时前
JavaScript 性能优化实战大纲
前端·javascript·性能优化
啊阿狸不会拉杆3 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法