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

相关推荐
海绵宝宝贾克斯儿2 分钟前
C++中如何实现一个单例模式?
开发语言·c++·单例模式
史迪仔01123 分钟前
[python] Python单例模式:__new__与线程安全解析
开发语言·python·单例模式
GISer_Jing23 分钟前
[前端高频]数组转树、数组扁平化、深拷贝、JSON.stringify&JSON.parse等手撕
前端·javascript·json
isyangli_blog27 分钟前
(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类
java·开发语言
三块钱079434 分钟前
【原创】基于视觉大模型gemma-3-4b实现短视频自动识别内容并生成解说文案
开发语言·python·音视频
易只轻松熊34 分钟前
C++(20): 文件输入输出库 —— <fstream>
开发语言·c++·算法
古拉拉明亮之神38 分钟前
Spark处理过程-转换算子
javascript·ajax·spark
芯眼38 分钟前
ALIENTEK精英STM32F103开发板 实验0测试程序详解
开发语言·c++·stm32·单片机·嵌入式硬件·社交电子
青出于兰1 小时前
C语言| 指针变量的定义
c语言·开发语言
玉笥寻珍1 小时前
筑牢信息安全防线:涉密计算机与互联网隔离的理论实践与风险防控
开发语言·计算机网络·安全·计算机外设·php·安全架构·安全性测试