当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/369487.html

相关文章:

  • 基于python可伸缩JSON格式列表实现
  • h5相机功能
  • IDEA | 安装通义灵码插件,开启智能编码旅程
  • 技术人员如何克服在使用行列视(RCV)过程中遇到的挑战?
  • 手把手教你安装 Vivado2019.2(附安装包)
  • Sql-labs的第一关
  • 10_1 Linunx Web服务管理
  • 苹果WWDC 2024:十三大亮点公布,一切都有关AI|TodayAI
  • Nginx访问日志
  • Java使用Hutool工具类轻松生成验证码
  • leetcode 40. 组合总和 II
  • AMEYA360代理品牌:ROHM开发出世界超小CMOS运算放大器,适用于智能手机和小型物联网设备等应用
  • 第1章Hello world 4/5:对比Rust/Java/C++创建和运行Hello world全过程:运行第一个程序
  • golang优雅代码【lock实现】
  • Dijkstra算法(迪杰斯特拉算法)
  • 用函数指针求a和b中的大者
  • 鸿蒙轻内核M核源码分析系列六 任务及任务调度(2)任务模块
  • 解决找不到MSVCR120.dll,无法执行代码
  • Linux iptables详解
  • Mac电脑arm64芯片Cocoapods 的 ffi 兼容问题
  • 如何提高逻辑性?(小妙招)
  • 2024050501-重学 Java 设计模式《实战命令模式》
  • 0104__Linux 中 nm 命令简介
  • Linux网络服务
  • Vue18-列表渲染
  • 【三维重建】增量SFM系统
  • PyTorch 维度变换-Tensor基本操作
  • spring 事务失效的几种场景
  • 45岁程序员独白:中年打工人出路在哪里?
  • 深度探讨:为何训练精度不高却在测试中表现优异?