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

相关推荐
Web打印2 分钟前
Phpask(php集成环境)之16 怎样彻底停用一个网站
开发语言·php
打瞌睡的朱尤4 分钟前
Vue day9 购物车,项目,vant组件库,vw,路由
前端·javascript·vue.js
临水逸11 分钟前
飞牛fnos 2025 漏洞Java跨域URL浏览器
java·开发语言·安全·web安全
H Corey13 分钟前
数据结构与算法:高效编程的核心
java·开发语言·数据结构·算法
訫悦36 分钟前
C++自带的set get语法(MSVC)
开发语言·c++
SmartBrain37 分钟前
Python 特性(第一部分):知识点讲解(含示例)
开发语言·人工智能·python·算法
01二进制代码漫游日记1 小时前
自定义类型:联合和枚举(一)
c语言·开发语言·学习·算法
SmartBrain1 小时前
FastAPI进阶(第一部分):路由和依赖特性(含考题)
开发语言·python
星火开发设计2 小时前
模板参数:类型参数与非类型参数的区别
java·开发语言·前端·数据库·c++·算法
忘梓.2 小时前
二叉搜索树·极速分拣篇」:用C++怒肝《双截棍》分拣算法,暴打节点删除Boss战!
开发语言·c++·算法