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 小时前
Python中的with语句与try语句:资源管理的两种哲学
linux·服务器·开发语言·python·程序人生·算法
Swift社区2 小时前
Java 实战 -Error和Exception有什么区别?
java·开发语言
Yvonne爱编码2 小时前
深入剖析 Java 中的深拷贝与浅拷贝:原理、实现与最佳实践
java·开发语言
意法半导体STM322 小时前
【官方原创】如何基于DevelopPackage开启安全启动(MP15x) LAT6036
javascript·stm32·单片机·嵌入式硬件·mcu·安全·stm32开发
索荣荣2 小时前
Java关键字终极指南:从入门到精通
java·开发语言
悟能不能悟2 小时前
SimpleDateFormat 为什么线程不安全
开发语言·安全
沉默-_-2 小时前
掌握Maven:高效Java项目构建与管理
java·开发语言·后端·maven
一晌小贪欢2 小时前
Python 魔术方法实战:深度解析 Queue 模块的模块化设计与实现
开发语言·分布式·爬虫·python·python爬虫·爬虫分布式
wangbing11252 小时前
从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量
java·开发语言
奔跑的web.2 小时前
TypeScript namespace 详解:语法用法与使用建议
开发语言·前端·javascript·vue.js·typescript